Mark CSOC-WP-0002 identity done on app.coulomb.social. Defer bulk Bubble migration until product foundation exists. Open CSOC-WP-0004 for post-login entry and space content as markdown bound to Forgejo.
5.8 KiB
| id | type | title | domain | repo | status | owner | topic_slug | created | updated | depends_on | related | origin | origin_ref | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| CSOC-WP-0004 | workplan | App shell entry and Forgejo-backed space content | communication | coulomb-social | active | bernd | coulomb-social | 2026-08-10 | 2026-08-10 |
|
|
operator | session-2026-08-10-parallel-host-product-path |
CSOC-WP-0004 — App shell entry and Forgejo-backed space content
Context
Identity is live on https://app.coulomb.social. After Sign in, members
land on an identity confirmation shell (“Signed in” + principal dump) with
no product surface. Bubble on apex remains the full product until we choose
cutover.
Goal for this phase: build the new implementation toward product usefulness before bulk Bubble data migration. Immediate product foundation:
- Leave the login confirmation shell into a real app home.
- Establish space persistence whose content is markdown, stored and versioned in close connection with Forgejo repositories.
Migration of all Bubble spaces is explicitly later (CSOC-WP-0001).
Out of scope (this plan)
- Apex DNS cutover / Bubble retirement
- Full Bubble inventory or bulk import
- Public self-registration (CSOC-WP-0003 / NetKingdom)
- Full UI parity (Research, marketplace matching, …) beyond space content MVP
T01 — Post-login product entry (leave confirmation shell)
id: CSOC-WP-0004-T01
status: todo
priority: high
Replace the dead-end “Signed in / Principal” page as the primary post-login destination with an app home that a member can use:
- Clear primary navigation: Spaces (and placeholders for later surfaces).
- Principal summary available but secondary (account menu or
/account/). - Empty state when the member has no spaces yet (“Create space” or “No spaces”).
LOGIN_REDIRECT_URLand templates updated; design-extract tokens only as needed.
Done when: after OIDC login on app.coulomb.social, tegwick lands on app home (not a debug-only principal card) and can navigate without guessing URLs.
T02 — Space domain model (metadata, tenant-keyed)
id: CSOC-WP-0004-T02
status: todo
priority: high
Introduce Space (name pending Bubble vocabulary alignment) as application
metadata in the app DB:
tenant_id, stable slug, display title, owner/membership linkage to Member- no long-form page bodies in Postgres as the system of record
- optional pointer fields for content binding (repo, default branch, root path)
Migrations + admin + minimal list/detail routes behind auth.
Done when: authenticated user can list zero-or-more spaces from DB; tests cover tenant isolation basics.
T03 — Content model ADR: markdown + Forgejo
id: CSOC-WP-0004-T03
status: todo
priority: high
Write docs/adr/ADR-0002-space-content-forgejo-markdown.md deciding:
- Markdown (and assets) as the canonical content form for space pages
- Forgejo repo layout (one repo per space vs monorepo paths; branch policy)
- How the app reads content (clone/cache, raw API, webhook invalidation)
- How the app writes (direct git push as service account vs user OAuth to Forgejo)
- Relationship to Bubble page/chunk model for later CSOC-WP-0001 mapping
- Secrets: Forgejo tokens via OpenBao / env secret names only
Done when: ADR accepted (or explicitly provisional with open questions listed) and linked from INTENT/SCOPE.
T04 — Read path: render space markdown from bound repo
id: CSOC-WP-0004-T04
status: todo
priority: high
Implement a vertical slice:
- Operator or seed binds one space to a Forgejo repo path
- App fetches/renders a markdown page (e.g.
README.mdorpages/index.md) - Authz: member of tenant/space only (flex-auth or coarse membership check)
- Fail closed on missing binding or fetch errors
Done when: tegwick can open a space on app.coulomb.social and see rendered markdown sourced from Forgejo (not Bubble).
T05 — Write / sync path (minimal)
id: CSOC-WP-0004-T05
status: todo
priority: medium
Minimal authoring or sync so content is not read-only forever:
- either in-app edit → commit to Forgejo, or
- documented “edit in Forgejo / pull request” workflow + refresh webhook
Prefer the smaller path that keeps git as source of truth.
Done when: a content change in Forgejo appears in the app without redeploy, and (if in-app write exists) a save produces a commit without secrets in git.
T06 — Seed and runbook for app.coulomb.social
id: CSOC-WP-0004-T06
status: todo
priority: medium
Document operator steps: create Forgejo org/repo, bind space, credentials env
names, smoke checklist on app.coulomb.social. Update docs/deploy.md and
docs/identity/smoke.md pointers as needed.
Sequencing
T01 app home entry
└─► T02 Space metadata
└─► T03 content ADR
└─► T04 read path (MVP value)
├─► T05 write/sync
└─► T06 runbook
T01 can ship alone to fix the “stuck on login confirmation” UX immediately. T03 should land before large T04 investment if write-model choices are unclear; a provisional ADR is enough to start T04 against a single seed repo.
Acceptance (workplan)
- Post-login journey is product-shaped (app home + spaces), not identity-debug-only.
- Spaces exist as tenant-keyed app records.
- Space page content is markdown backed by Forgejo with a working read path.
- Bubble migration is still not required for demos on app.coulomb.social.
- CSOC-WP-0001 can map Bubble pages onto the ADR layout when migration starts.
Related
- Live host:
docs/deploy.md(app.coulomb.social parallel to Bubble) - Identity: CSOC-WP-0002 (done), CSOC-WP-0003 (registration later)
- Migration later: CSOC-WP-0001
- Design tokens:
docs/design-extract/