Isolate next dev from production .next, add build-guard/atomic deploy/health
watchdog, error boundaries, and fix JWT startup, meetup leaks, media path
traversal, SVG/memory uploads, and JSON-LD escaping.
Co-authored-by: Cursor <cursoragent@cursor.com>
Show longform image tags on posts, use shortened npubs for author names,
and paginate the homepage meetups section with responsive load more.
Co-authored-by: Cursor <cursoragent@cursor.com>
Support naddr/nevent/note slugs for unindexed posts, cache naddr lookups,
render Nostr embeds in markdown, and add a consistency check for events mirrors.
Co-authored-by: Cursor <cursoragent@cursor.com>
Centralize site metadata and social URLs for JSON-LD, expose llmstxt.org
content and per-page .md routes for LLM crawlers, and refactor blog/FAQ/events
pages with shared components.
Co-authored-by: Cursor <cursoragent@cursor.com>
Approved user submissions now import into the blog automatically, with a
backfill script for existing approvals and a WebSocket polyfill so backend
Nostr relay queries work on Node 20.
Co-authored-by: Cursor <cursoragent@cursor.com>
Introduce ApiKey model, CRUD endpoints, and admin UI so agents can
authenticate with permission-scoped keys. Normalize pubkeys to hex on login,
dedupe legacy npub/hex user rows, and ignore .cursor in git.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add UserRelay API and dashboard relays tab with NIP-65 import, store post
naddr for Nostr articles, and ship Prisma migrations for board tables,
user relays, and post metadata.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add public /board flow: create invoice, webhook + confirm reconciliation, list
active messages, likes (Nostr), zap fallbacks. Admin table for hide/delete.
Include LNbits webhook body normalization (double-encoded JSON), POST
/api/messages/confirm/:hash, and root npm db:push script. Prisma models for
pending invoices and board messages.
Made-with: Cursor
- next.config: development-only rewrite /api/:path* to 127.0.0.1:4000; move
sharp to experimental.serverComponentsExternalPackages for Next 14
- media/[id]/route: resolve storage at request time, fallbacks for
backend/storage/media vs storage/media, async params, force-dynamic
Made-with: Cursor
Use same-origin /api in the browser so builds are not stuck with baked-in
localhost. Server-side fetches use INTERNAL_API_URL, NEXT_PUBLIC_API_URL, or
loopback. Centralize logic in lib/api-base.ts.
Made-with: Cursor