399 lines
5.1 KiB
Markdown
399 lines
5.1 KiB
Markdown
# 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
|
|
|