WIP! A BB-style forum, on the ATmosphere! We're still working... we'll be back soon when we have something to show off!
node typescript hono htmx atproto
4
fork

Configure Feed

Select the types of activity you want to include in your feed.

docs: update project plan to reflect actual implementation status

Marked Phase 0 and Phase 1 items as complete based on codebase audit:

Phase 0 (Foundation):
- Forum Service Account setup (ATB-5)
- PDS spike script validation (ATB-6)

Phase 1 (AppView Core):
- Database schema with 7 tables (ATB-7)
- Firehose subscription with Jetstream (ATB-9)
- Record indexer for all types (ATB-10)
- Read/Write API scaffolding (ATB-11, ATB-12 - in progress)

Linear issues ATB-10 and ATB-11 updated to match reality.

Malpercio a0d9e86e b3ee9b87

+13 -13
+13 -13
docs/atproto-forum-plan.md
··· 140 140 - [x] Review prior Rust AppView — **Result:** Axum/SQLx scaffold with jetstream-oxide firehose, minimal DB schema. Reference for route structure and Docker setup; MVP will be Node/TS rewrite. 141 141 - [x] Define new lexicons in YAML: `forum.category`, `forum.role`, `membership`, `reaction`, `modAction` — **Result:** All 5 defined in `packages/lexicon/lexicons/`, with YAML→JSON→TypeScript build pipeline via `@atproto/lex-cli`. 142 142 - [x] Set up project scaffolding: monorepo with `packages/lexicon`, `apps/appview`, `apps/web` — **Result:** Turborepo + pnpm workspaces, devenv for Nix toolchain. AppView (Hono JSON API, port 3000), Web (Hono JSX + HTMX, port 3001), plus `packages/spike` for PDS testing. Apps live in `apps/`, shared libraries in `packages/`. 143 - - [ ] Create Forum Service Account (generate DID, set up PDS or use existing hosting) 144 - - [ ] Spike: write a test record to a PDS, read it back via AT Proto API — **Note:** Script written in `packages/spike`, ready to run once PDS credentials are configured in `.env`. 143 + - [x] Create Forum Service Account (generate DID, set up PDS or use existing hosting) — **Complete:** Forum DID configured in `.env`, PDS credentials set (ATB-5) 144 + - [x] Spike: write a test record to a PDS, read it back via AT Proto API — **Complete:** Full implementation in `packages/spike/src/index.ts` validates write/read/list/delete for all MVP record types (ATB-6) 145 145 146 146 #### Phase 1: AppView Core (Week 3–4) 147 - - [ ] Implement firehose subscription — connect to relay, filter for `space.atbb.*` records 148 - - [ ] Build indexer: parse incoming records, write to Postgres 149 - - [ ] Database schema: `forums`, `categories`, `users`, `memberships`, `posts` (unified — thread starters have no parent_uri), `mod_actions` 150 - - [ ] API endpoints (read path): 151 - - `GET /api/forum` — forum metadata 152 - - `GET /api/categories` — list categories 153 - - `GET /api/categories/:id/topics` — paginated list of posts with no `reply` ref (thread starters) 154 - - `GET /api/topics/:id` — thread starter + reply posts (posts whose root matches this post) 155 - - [ ] API endpoints (write path — proxy to user's PDS): 156 - - `POST /api/topics` — create `space.atbb.post` record with `forumRef` but no `reply` ref 157 - - `POST /api/posts` — create `space.atbb.post` record with both `forumRef` and `reply` ref 147 + - [x] Implement firehose subscription — connect to relay, filter for `space.atbb.*` records — **Complete:** Production-ready implementation in `apps/appview/src/lib/firehose.ts` with Jetstream WebSocket client, cursor persistence, circuit breaker, and exponential backoff reconnection logic (ATB-9) 148 + - [x] Build indexer: parse incoming records, write to Postgres — **Complete:** Full implementation in `apps/appview/src/lib/indexer.ts` handles all record types (posts, forums, categories, memberships, modActions) with transaction support. Reactions handlers stubbed pending schema table addition (ATB-10) 149 + - [x] Database schema: `forums`, `categories`, `users`, `memberships`, `posts` (unified — thread starters have no parent_uri), `mod_actions` — **Complete:** 7 tables defined in `packages/db/src/schema.ts` using Drizzle ORM (includes `firehose_cursor` for subscription state). Migrations in `packages/db/drizzle/` (ATB-7) 150 + - [ ] API endpoints (read path) — **In Progress:** Route structure exists in `apps/appview/src/routes/`, currently returns placeholder data. Need to connect to database queries (ATB-11): 151 + - `GET /api/forum` — forum metadata (scaffolded, returns hardcoded data) 152 + - `GET /api/categories` — list categories (scaffolded, returns empty array) 153 + - `GET /api/categories/:id/topics` — paginated list of posts with no `reply` ref (thread starters) (scaffolded) 154 + - `GET /api/topics/:id` — thread starter + reply posts (posts whose root matches this post) (scaffolded) 155 + - [ ] API endpoints (write path — proxy to user's PDS) — **Scaffolded:** Routes exist but return 501 Not Implemented (ATB-12): 156 + - `POST /api/topics` — create `space.atbb.post` record with `forumRef` but no `reply` ref (needs implementation) 157 + - `POST /api/posts` — create `space.atbb.post` record with both `forumRef` and `reply` ref (needs implementation) 158 158 159 159 #### Phase 2: Auth & Membership (Week 5–6) 160 160 - [ ] Implement AT Proto OAuth flow (user login via their PDS)