# Belgian Bitcoin Embassy Website ## 1. Overview The Belgian Bitcoin Embassy (BBE) website is a community-driven, Nostr-powered platform centered around a monthly Bitcoin meetup in Belgium. It is not a corporate site or institutional platform. It is a lightweight, curated Nostr client that: - showcases the next meetup - connects users to the community - displays curated Bitcoin content - allows users to interact via Nostr (likes, comments) The platform combines a simple public website with a role-based admin/moderation system. --- ## 2. Core Goals The website must: - clearly present the next monthly meetup - grow the Belgian Bitcoin community - aggregate and curate Nostr content - allow social interaction via Nostr - remain simple, fast, and easy to maintain --- ## 3. Tech Direction Frontend: - Next.js (App Router recommended) - Component-based architecture - Tailwind CSS (based on design system) Backend: - Lightweight API (Node.js / Go) - Nostr integration layer - Caching layer for events and posts Auth: - Nostr extension login (NIP-07 or signer) --- ## 4. Public Website Structure ### Routes - `/` → Onepage homepage - `/blog` → Blog overview - `/blog/[slug]` → Blog post page - `/admin` → Dashboard (role-based) --- ## 5. Homepage (Onepage) ### 5.1 Hero - Headline: Biggest Bitcoin community in Belgium - Subtext: Monthly meetup + community - CTA: - Join Meetup - Join Telegram - Follow on Nostr --- ### 5.2 Next Meetup Critical section. Fields: - title - date - time - city - venue - description - link Actions: - Attend / RSVP --- ### 5.3 About Short explanation: - what BBE is - community-driven - beginner friendly --- ### 5.4 Why Join - meet local Bitcoiners - learn Bitcoin - discover events - connect with community --- ### 5.5 Community Links Platforms: - Telegram - Nostr - X - YouTube - Discord - LinkedIn Each includes: - icon - short description - link --- ### 5.6 Blog Preview - featured posts - latest posts - categories --- ### 5.7 FAQ - beginner friendly? - do I need bitcoin? - cost? - location? --- ### 5.8 Final CTA - join meetup - follow community --- ## 6. Blog System (Nostr-Based) ### Source - Nostr longform events - imported manually by admins ### Flow 1. Admin inputs event id or naddr 2. Backend fetches from relays 3. Event is parsed and cached 4. Admin edits metadata 5. Post is published --- ### Blog Page `/blog` - list of posts - category filters - featured post --- ### Blog Post `/blog/[slug]` - title - content - categories - author - Nostr interactions: - likes - comments --- ## 7. Nostr Interaction Layer Users can: - login with Nostr - like posts (reactions) - comment (replies) - interact with events Backend: - fetch events from relays - cache data - apply local moderation Important: - no deletion on Nostr - moderation is local only --- ## 8. Roles & Auth ### Auth - Nostr login (extension) - signature verification - session/JWT ### Roles Defined by pubkeys. Admins: - set in `.env` Moderators: - assigned by admins --- ## 9. Admin Dashboard Route: `/admin` Admins have full control. ### Tabs #### 9.1 Overview - meetup summary - latest posts - quick actions #### 9.2 Events - create/edit meetups - mark upcoming/past - manage event content - moderate comments #### 9.3 Blog - import Nostr posts - edit metadata - assign categories - publish/unpublish - feature posts #### 9.4 Moderation - view comments - filter by post/event - hide content - block pubkeys (local) #### 9.5 Users - list users (pubkeys) - promote to moderator - remove moderator - block users #### 9.6 Categories - create/edit/delete - reorder #### 9.7 Relays - add/remove relays - set priority - test connectivity #### 9.8 Settings - site title - tagline - social links - feature toggles #### 9.9 Nostr Tools - manual fetch - cache refresh - debug events --- ## 10. Moderator Dashboard Moderators have content-only control. ### Tabs #### 10.1 Moderation - comment stream - hide spam - filter content #### 10.2 Events - view meetups - moderate comments - minor edits #### 10.3 Blog - edit metadata - assign categories - publish/unpublish #### 10.4 Reports (optional) - flagged content - moderation actions --- ## 11. Data Models ### Meetup - title - description - date - location - link - status ### Blog Post - nostr_event_id - title - slug - content - excerpt - categories - featured - visible ### Category - name - slug ### User - pubkey - role --- ## 12. Component Structure Public: - HeroSection - NextMeetupCard - AboutSection - CommunityLinks - BlogPreview - FAQSection Admin: - AdminSidebar - MeetupEditor - PostManager - CategoryManager - SettingsPanel --- ## 13. Design Principles - dark theme - Bitcoin orange accent - large whitespace - no borders (use spacing) - layered surfaces - minimal animation --- ## 14. MVP Scope Build first: - homepage - blog - blog post page - Nostr login - admin dashboard - moderator dashboard - meetup system - Nostr blog import --- ## 15. Key Principle This is not a CMS. This is a curated Nostr client for a Bitcoin meetup community. Keep it simple, fast, and focused on: - meetup - community - content --- # pages.md ## 1. Routing Overview Public routes: - `/` → Homepage (onepage) - `/blog` → Blog listing - `/blog/[slug]` → Blog detail Auth / Dashboard routes: - `/admin` → Dashboard entry (role-based) - `/admin/overview` - `/admin/events` - `/admin/blog` - `/admin/moderation` - `/admin/users` (admin only) - `/admin/categories` - `/admin/relays` (admin only) - `/admin/settings` (admin only) - `/admin/nostr` (admin only tools) System routes (optional): - `/api/*` → Backend endpoints - `/health` → Health check All `/admin/*` routes require Nostr authentication. --- ## 2. Layouts ### 2.1 Public Layout Used by `/` and `/blog*` Structure: - Top Navigation - Page Content - Footer Top Navigation: - Logo (BBE) - Links (scroll or anchor): - Meetup - About - Community - Blog - CTA button: Join Meetup Footer: - Logo - Links: Privacy, Terms, Contact - Social links --- ### 2.2 Admin Layout Used by `/admin/*` Structure: - Sidebar (left) - Content area (right) - Top bar (optional) Sidebar: - Overview - Events - Blog - Moderation - Categories - (Admins only) - Users - Relays - Settings - Nostr Tools Role-based rendering: - Moderator sees limited menu - Admin sees full menu --- ## 3. Homepage `/` Single page composed of sections. ### Sections (top to bottom) #### 3.1 HeroSection Content: - headline - subtext - CTA buttons: - Join Meetup - Join Telegram - Follow on Nostr #### 3.2 NextMeetupSection Data source: Meetup API Content: - date - time - city - venue - description - CTA: Attend Meetup #### 3.3 AboutSection Static/admin-editable content. #### 3.4 WhyJoinSection Static list of benefits. #### 3.5 CommunityLinksSection Dynamic from settings: - Telegram - Nostr - X - YouTube - Discord - LinkedIn #### 3.6 BlogPreviewSection Data source: Blog API Content: - featured post - latest posts #### 3.7 FAQSection Static/admin-editable. #### 3.8 FinalCTASection - Join Meetup - Follow Community --- ## 4. Blog Listing `/blog` ### Layout - Header (title + description) - Category filter - Post grid/list ### Features - filter by category - highlight featured post - pagination or infinite scroll ### Data From cached Nostr posts. --- ## 5. Blog Detail `/blog/[slug]` ### Layout - Title - Metadata (date, author) - Content - Categories - Interaction section - Related posts ### Interaction If user logged in (Nostr): - Like button - Comment input Display: - likes count - comments (Nostr replies) --- ## 6. Admin Entry `/admin` ### Behavior - if not logged in → show Nostr login screen - if logged in → redirect to `/admin/overview` ### Login Screen - button: Login with Nostr extension - explanation text --- ## 7. Admin Pages ### 7.1 `/admin/overview` Dashboard summary: - next meetup - recent posts - recent activity - quick actions --- ### 7.2 `/admin/events` Meetup management. Views: - list of meetups - create/edit form Fields: - title - description - date/time - location - link Actions: - create - edit - delete - mark featured Moderation: - view comments - hide comments --- ### 7.3 `/admin/blog` Blog management. Views: - list of posts - import tool Import flow: - paste event id or naddr - fetch preview - confirm import Post editing: - title - excerpt - slug - categories - featured toggle - visibility toggle --- ### 7.4 `/admin/moderation` Moderation center. Views: - comment stream - filters: - by post - by event - by user Actions: - hide comment - mark spam - block pubkey (local) --- ### 7.5 `/admin/users` (admin only) User management. Views: - list of pubkeys Actions: - promote to moderator - remove moderator - block user --- ### 7.6 `/admin/categories` Category management. Actions: - create - edit - delete - reorder --- ### 7.7 `/admin/relays` (admin only) Relay configuration. Actions: - add relay - remove relay - set priority - test connection --- ### 7.8 `/admin/settings` (admin only) Global settings. Fields: - site title - tagline - social links - feature toggles --- ### 7.9 `/admin/nostr` (admin only) Advanced tools. Features: - manual event fetch - cache refresh - debug viewer --- ## 8. Access Control - `/admin/*` requires Nostr auth - roles checked server-side - UI adapts based on role --- ## 9. Error Pages - `/404` - `/500` Simple, minimal, same design style. --- ## 10. Key Principles - keep routes minimal - keep pages focused - no unnecessary nesting - everything role-based The structure must stay simple and predictable for developers.