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
39 lines
1.5 KiB
Plaintext
39 lines
1.5 KiB
Plaintext
# Admin pubkeys (comma-separated hex pubkeys)
|
|
ADMIN_PUBKEYS=npub1examplepubkey1,npub1examplepubkey2
|
|
|
|
# Nostr relays (comma-separated)
|
|
RELAYS=wss://relay.damus.io,wss://nos.lol,wss://relay.nostr.band
|
|
|
|
# Database (path is relative to backend/prisma/ when using file: URLs — see Prisma docs)
|
|
# Apply schema: from repo root run `npm run db:push`, or from backend run `npm run db:push`.
|
|
# Do not run bare `npx prisma db push` from the repo root (no schema there; wrong Prisma version).
|
|
DATABASE_URL="file:./dev.db"
|
|
|
|
# JWT
|
|
JWT_SECRET=change-me-to-a-random-secret-in-production
|
|
|
|
# Backend
|
|
BACKEND_PORT=4000
|
|
FRONTEND_URL=http://localhost:3000
|
|
|
|
# Media storage (path relative to repo root, or use an absolute path in production)
|
|
MEDIA_STORAGE_PATH=storage/media
|
|
|
|
# Frontend (public)
|
|
NEXT_PUBLIC_API_URL=http://localhost:4000/api
|
|
NEXT_PUBLIC_SITE_URL=https://belgianbitcoinembassy.org
|
|
NEXT_PUBLIC_SITE_TITLE=Belgian Bitcoin Embassy
|
|
NEXT_PUBLIC_SITE_TAGLINE=Belgium's Monthly Bitcoin Meetup
|
|
|
|
# Message board (Lightning / LNbits) — backend
|
|
MESSAGE_PRICE_SATS=1000
|
|
LNBITS_API_KEY=
|
|
LNBITS_WEBHOOK_SECRET=
|
|
LNBITS_URL=https://legend.lnbits.com
|
|
# Public URL that LNbits can POST webhooks to (usually your site origin so /api/messages/webhook hits the API)
|
|
WEBHOOK_BASE_URL=http://localhost:3000
|
|
# Optional: lnaddress or LNURL-pay string for “Zap BBE” when the message has no pubkey
|
|
BOARD_ZAP_LN_ADDRESS=
|
|
# Optional: hex pubkey for njump fallback when BOARD_ZAP_LN_ADDRESS is unset
|
|
BOARD_ZAP_PUBKEY=
|