Persist capability/feature vocabulary, v0 model, and founder stage-1 must set (onboarding, spaces/pages with Title/Abstract/Visual, page copy and transfer). Mark CSOC-WP-0001-T03 done; add CSOC-WP-0006 for implementation.
96 lines
3.8 KiB
Markdown
96 lines
3.8 KiB
Markdown
# Schema mapping sketch — Bubble → coulomb-social (provisional)
|
||
|
||
| Field | Value |
|
||
|-------|--------|
|
||
| Workplan | CSOC-WP-0001-T02 (partial — no dump yet) |
|
||
| Date | 2026-08-12 |
|
||
| Depends on | CSOC-WP-0004 content model (done), inventory T01 |
|
||
|
||
This is a **mapping sketch** so T02 has a target once Bubble export exists.
|
||
It is not an executed import.
|
||
|
||
## Layers
|
||
|
||
| Layer | System of record (rebuild) | Bubble source (hypothesized) |
|
||
|-------|----------------------------|------------------------------|
|
||
| Identity | NetKingdom OIDC → `Member(issuer, subject)` | Bubble User — **do not migrate passwords** |
|
||
| Space metadata | Postgres `spaces_space` | Space / project type |
|
||
| Membership | `spaces_spacemembership` | Collaborator / role |
|
||
| Page bodies | Forgejo `pages/*.md` | Page / chunk rich text |
|
||
| Assets | Forgejo `assets/` or later object store | Bubble CDN files |
|
||
| Social graph | later tables | favorites, follows |
|
||
| Marketplace | later or cut | challenges, methods, solutions |
|
||
|
||
## Identity mapping
|
||
|
||
| Bubble | Rebuild | Rule |
|
||
|--------|---------|------|
|
||
| User email | Member.email (profile) | Mutable; **not** account key |
|
||
| User _id | optional `bubble_user_id` on Member later | For reconciliation only |
|
||
| Password hash | **drop** | NetKingdom owns credentials |
|
||
| Login | OIDC | Case A proven; Case B residual |
|
||
|
||
Linking: prefer verified email **match as suggestion** only after NK registration;
|
||
never silent takeover (ADR-0001 / NK-WP-0025).
|
||
|
||
## Space metadata mapping
|
||
|
||
| Bubble field (TBD names) | `Space` column |
|
||
|--------------------------|----------------|
|
||
| name / title | `title` |
|
||
| slug or derived | `slug` |
|
||
| description | `description` |
|
||
| owner user | `created_by` → Member |
|
||
| (none) | `tenant_id` = `tenant:coulomb` |
|
||
| (none) | `forgejo_owner` / `forgejo_repo` set at import |
|
||
| (none) | `content_root` default `pages` |
|
||
|
||
## Content mapping (pages → markdown)
|
||
|
||
| Bubble | Forgejo path | App read |
|
||
|--------|--------------|----------|
|
||
| Home / index page of space | `pages/index.md` | default space detail |
|
||
| Named page / chunk | `pages/<slug>.md` | `?page=<slug>` |
|
||
| Embedded images | `assets/<file>` + relative links | rendered HTML |
|
||
| Bubble-only layout widgets | lose or rebuild as markdown structure | residual list at rehearsal |
|
||
|
||
Conversion notes:
|
||
|
||
- Prefer **markdown** export if Bubble plugin/API allows; else HTML → markdown
|
||
with lossy table/embed handling.
|
||
- Preserve original Bubble page id in markdown frontmatter:
|
||
`bubble_page_id: …` for re-import idempotency.
|
||
- Do not store full page HTML in Postgres.
|
||
|
||
## Export requirements (for real T02)
|
||
|
||
Operator needs (not in this repo):
|
||
|
||
1. Bubble editor access (or Data API with Privacy rules allowing export).
|
||
2. Full type list with fields (Users, Spaces, Pages, …).
|
||
3. CSV/JSON dumps or app connector export — **PII-minimized** copies for rehearsal.
|
||
4. File inventory from CDN / Bubble file manager.
|
||
|
||
Store dumps outside git (operator disk / encrypted volume). Record **paths and
|
||
checksums only** here when available.
|
||
|
||
## Rehearsal plan (T04 — not started)
|
||
|
||
1. Pick **one** space with 2–5 pages.
|
||
2. Convert to `pages/*.md` + assets.
|
||
3. Create Forgejo repo under `coulomb-spaces` (or coulomb org).
|
||
4. `Space` row bind + membership for tegwick.
|
||
5. Open on `app.coulomb.social` — record lossiness.
|
||
|
||
## Stage-1 scope filter
|
||
|
||
Only map/migrate what **stage-1 capabilities** need first
|
||
(`docs/capability/stage-1-cutover.md`): members, spaces, pages (title/abstract/visual
|
||
+ body), not marketplace/social unless later promoted.
|
||
|
||
## Related
|
||
|
||
- Inventory: `docs/bubble-inventory/2026-08-12-surface-inventory.md`
|
||
- Capability cut: `docs/decisions/2026-08-12-feature-cut-stage-1.md`
|
||
- ADR-0002: `docs/adr/ADR-0002-space-content-forgejo-markdown.md`
|
||
- Spaces models: `coulomb_social/apps/spaces/models.py`
|