diff --git a/SCOPE.md b/SCOPE.md index 5abbe44..5ee0fdb 100644 --- a/SCOPE.md +++ b/SCOPE.md @@ -73,7 +73,8 @@ coulomb.social connects people around shared projects and complementary capabili - Content ADR: `docs/adr/ADR-0002-space-content-forgejo-markdown.md` - Operator: `docs/deploy.md` runbook; residuals `docs/intakes/csoc-residuals.md` - Finished resource evidence: **`CSOC-WP-0005`** → `docs/resource-evidence/` -- Open: bulk Bubble migration (`CSOC-WP-0001`); public registration residuals (`CSOC-IN-0001`/`0002`, NK-WP-0025) +- Bubble exit: **`CSOC-WP-0001`** — surface inventory done; export/mapping needs Bubble editor; feature cut is human gate +- Open residuals: public registration (`CSOC-IN-0001`/`0002`, NK-WP-0025) --- diff --git a/WORK-RECORDS.md b/WORK-RECORDS.md index e009872..34a9a74 100644 --- a/WORK-RECORDS.md +++ b/WORK-RECORDS.md @@ -13,10 +13,10 @@ | workplan | CSOC-WP-0003 | finished | — | workplans/CSOC-WP-0003-self-registration-and-assurance.md | | workplan | CSOC-WP-0004 | finished | — | workplans/CSOC-WP-0004-app-shell-and-space-content.md | | workplan | CSOC-WP-0005 | finished | — | workplans/CSOC-WP-0005-resource-demand-and-cost-evidence.md | -| task | CSOC-WP-0001-T01 | todo | — | workplans/CSOC-WP-0001-bubble-io-exit-assessment.md | -| task | CSOC-WP-0001-T02 | todo | — | workplans/CSOC-WP-0001-bubble-io-exit-assessment.md | +| task | CSOC-WP-0001-T01 | done | — | workplans/CSOC-WP-0001-bubble-io-exit-assessment.md | +| task | CSOC-WP-0001-T02 | progress | — | workplans/CSOC-WP-0001-bubble-io-exit-assessment.md | | task | CSOC-WP-0001-T03 | wait | — | workplans/CSOC-WP-0001-bubble-io-exit-assessment.md | -| task | CSOC-WP-0001-T04 | todo | — | workplans/CSOC-WP-0001-bubble-io-exit-assessment.md | +| task | CSOC-WP-0001-T04 | wait | — | workplans/CSOC-WP-0001-bubble-io-exit-assessment.md | | task | CSOC-WP-0002-T01 | done | — | workplans/CSOC-WP-0002-netkingdom-user-management-reestablish.md | | task | CSOC-WP-0002-T02 | done | — | workplans/CSOC-WP-0002-netkingdom-user-management-reestablish.md | | task | CSOC-WP-0002-T03 | done | — | workplans/CSOC-WP-0002-netkingdom-user-management-reestablish.md | diff --git a/docs/bubble-inventory/2026-08-12-surface-inventory.md b/docs/bubble-inventory/2026-08-12-surface-inventory.md new file mode 100644 index 0000000..e846bb0 --- /dev/null +++ b/docs/bubble-inventory/2026-08-12-surface-inventory.md @@ -0,0 +1,182 @@ +# Bubble surface inventory — 2026-08-12 + +| Field | Value | +|-------|--------| +| Workplan | CSOC-WP-0001-T01 | +| Live product host | `https://coulomb.social` (Bubble) | +| Rebuild host | `https://app.coulomb.social` (Railiance) | +| Sources | Public HTTP, Bubble `/api/1.1/meta`, design extract 2026-08-09, INTENT/SEO copy | +| Not available this pass | Bubble editor access, Data API types (empty public meta), production DB export | + +## 1. Platform identity + +| Item | Value | Provenance | +|------|--------|------------| +| Bubble appname | `coulomb` | `GET /api/1.1/meta` → `app_data.appname` | +| Domain | `coulomb.social` | meta + DNS | +| App version (live) | `live` | meta `app_data.app_version` | +| CDN / file host | `13a55be71f3a6a4c9ea356833df823c4.cdn.bubble.io` | HTML + SEO image URLs | +| Development path | `/version-test/` (robots Disallow) | `robots.txt`, HTTP 200 | +| Public Data API types | **empty** (`types: {}`, no get/post) | meta 2026-08-12 — API not exposed for inventory | + +```json +{ + "appname": "coulomb", + "app_version": "live", + "domain": "coulomb.social", + "types": {}, + "get": [], + "post": [] +} +``` + +**Implication:** lossless data inventory requires Bubble **editor export** or an +authenticated admin path — not the public Data API. + +## 2. Product intent (marketing surface) + +From Open Graph / SEO extract (`docs/design-extract/coulomb-social-seo.json`): + +> A tool to brainstorm, discuss, refine implement and promote ideas. +> A social network for building stuff and influencing how stuff is built. +> A marketplace for challenges, methods and solutions. +> A platform to monetize curiosity. + +Brand title variants seen: **Research \| Coulomb**, **Index \| Coulomb**, +**An Ideas Come To Life Community!**, **Coulomb Social**. + +## 3. Public / semi-public pages (HTTP probe 2026-08-12) + +| Path | HTTP | Title / notes | +|------|------|----------------| +| `/` | 200 | Index \| Coulomb — main entry (Bubble SPA shell ~17 KB HTML) | +| `/vw_pages` | 200 | Research \| Coulomb — primary authenticated content surface (design extract probe) | +| `/version-test` | 200 | Index \| Coulomb — Bubble development version | +| `/reset_pw` | 200 | Reset password \| Coulomb — Bubble built-in auth recovery | +| `/login`, `/signup`, `/spaces`, … | 404 | No conventional REST-style routes; Bubble uses app pages / params | +| `/api/1.1/meta` | 200 | App identity only; no types | +| `/robots.txt` | 200 | Disallows `/version-test/` | + +Bubble routes content via internal page names and `pg_chunk/` URLs rather +than clean public paths. Design extract crawled **7 routes** (index + 6 +`pg_chunk/*` pages) under an authenticated Playwright session +(`docs/design-extract/PROVENANCE.md`). + +### Design-extract routes (authenticated crawl) + +| Route | Role (inferred) | +|-------|-----------------| +| `/` | Landing / index shell | +| `/pg_chunk/1767965374100x901547861536145400` | In-app content chunk (Research family) | +| `/pg_chunk/1784305925912x322414739506593800` | content chunk | +| `/pg_chunk/1784904857383x503270614975381500` | content chunk | +| `/pg_chunk/1785501127011x363256181345746940` | content chunk | +| `/pg_chunk/1785501151364x921456713843343400` | content chunk | +| `/pg_chunk/1786106348475x662489469743530000` | content chunk (+ spacing token delta) | + +Session probe documented as **`/vw_pages`** titled **Research \| Coulomb**. + +**Gap:** human-readable Bubble **page names** (editor “Pages” list) and full +navigation graph are not in the extract artefacts — only token diffs per +chunk URL. Next inventory pass should export page list from Bubble editor. + +## 4. UI surfaces and components (from design extract) + +| Signal | Observation | Rebuild mapping | +|--------|-------------|-----------------| +| Primary surface | Research / pages workspace | Space detail + markdown pages (ADR-0002) | +| CTA verbs | content, favorite, format, filter, add, note | Feature candidates for cut (T03) | +| Material icons | content_copy, favorite_border, filter_list, add_circle_outline, note_alt, … | App chrome icons | +| Forms | 10 textareas, 6 inputs in crawl sample | Authoring / filters | +| Stack signal | Bubble (+ webflow heuristic noise) | Rebuild is Django, not Bubble | +| Client libs in page | `marked`, `highlight.js`, `clipboard.min.js` | Markdown-oriented UX already present in Bubble | + +Visual system is fully captured under `docs/design-extract/` (tokens, DESIGN.md, +preview). **Do not re-extract for inventory** unless pages change materially. + +## 5. Content model hypothesis (spaces / pages → rebuild) + +Prefer **spaces / pages / markdown-shaped content** for migration (workplan +guidance + ADR-0002). + +| Bubble concept (hypothesized) | Evidence | Rebuild target | +|-------------------------------|----------|----------------| +| Research / `vw_pages` workspace | Title, extract probe | `Space` + `pages/*.md` in Forgejo | +| Page / chunk (`pg_chunk` ids) | 6 chunk URLs in extract | One markdown file per page slug under `content_root` | +| Rich text / markdown rendering | `marked` + highlight.js on live HTML | CommonMark + sanitized HTML in app | +| Favorites / likes | CTA verb counts | Later social feature; not required for content MVP | +| Filters / lists | filter CTA | Space list filters later | +| Binary assets | Bubble CDN file URLs | `assets/` in Forgejo repo or object store later | +| Users / members | Bubble account system + reset_pw | NetKingdom OIDC Members (done path) | +| Tenancy | Single Coulomb community today | `tenant:coulomb` instance | + +**Confidence:** medium for “Research pages ≈ space content”; **low** for full +data-type graph until editor export. + +## 6. Workflows (partial) + +| Workflow area | Status | Notes | +|---------------|--------|--------| +| Member signup / login | Live on Bubble | Rebuild uses NetKingdom; Case B residual CSOC-IN-0001 | +| Password reset | `/reset_pw` | Platform-owned on rebuild | +| Page view / research | `/vw_pages` | Core product path | +| Content create/edit | Inferred from textareas + content CTAs | Rebuild: edit in Forgejo (T05 path) | +| Marketplace matching | Marketing claim only | **Feature-cut candidate** (T03) | +| Monetization | Marketing claim only | Out of v1 unless T03 expands | + +Backend workflows (API workflows, backend triggers) are **not** inventoriable +without Bubble editor or API workflow listing. + +## 7. Integrations and external services + +| Service | Role | Rebuild ownership | +|---------|------|-------------------| +| Bubble.io hosting | App runtime, DB, CDN | Exit target | +| `cdn.bubble.io` | Images / static files | Migrate assets off CDN at cutover | +| Cloudflare (on Bubble CDN path) | Image resize (`cdn-cgi/image`) | Not required on rebuild | +| highlight.js (cdnjs) | Code block styling | Optional in app CSS | +| marked (jsDelivr) | Client markdown | Server-side markdown in Django instead | +| clipboard.js (Bubble CDN file) | Copy UX | Optional | +| (unknown) email provider | Bubble account mail | NetKingdom mail path for registration | +| (unknown) payment | Monetization claim | Not observed publicly | + +## 8. Data types (blocked) + +Public meta returned **no** `types`. Expected classes (to confirm on export): + +- User / User profile +- Space / Project / Group (name TBD) +- Page / Chunk / Document +- Favorite / Follow / Membership +- Challenge / Method / Solution (marketplace — optional) +- Message / Comment (if present) +- File / Image references + +**T02** owns dump + mapping once export is available. + +## 9. Inventory completeness + +| Area | Completeness | Next action | +|------|--------------|-------------| +| Public hosts & meta | high | refresh if domain changes | +| Visual design system | high | already in `docs/design-extract/` | +| Named Bubble pages list | low | editor screenshot/export | +| Workflows | low | editor Backend workflows list | +| Data types & fields | none public | Bubble CSV/JSON export or API key | +| Content corpus size | unknown | export pages → markdown rehearsal | +| Member count / PII volume | unknown | export under privacy rules | + +## 10. Priority order for migration (recommended) + +1. **Spaces + page bodies** → Forgejo markdown (ADR-0002) — highest product value +2. **Members** → already re-platformed via NetKingdom JIT (no Bubble password import) +3. **Memberships / favorites** → after schema exists +4. **Marketplace / monetization** → human feature cut (T03) +5. **Historical workflow automation** → rewrite in code only if still needed + +## Related + +- Parallel hosts: `docs/deploy.md` +- Content model: `docs/adr/ADR-0002-space-content-forgejo-markdown.md` +- Auth extract: `docs/design-extract-auth.md` +- Workplan: `workplans/CSOC-WP-0001-bubble-io-exit-assessment.md` diff --git a/docs/bubble-inventory/README.md b/docs/bubble-inventory/README.md new file mode 100644 index 0000000..60581f7 --- /dev/null +++ b/docs/bubble-inventory/README.md @@ -0,0 +1,11 @@ +# Bubble.io inventory (coulomb.social) + +Home for **CSOC-WP-0001** inventory findings. Apex product remains on Bubble +until explicit cutover; rebuild runs in parallel on `app.coulomb.social`. + +| Doc | Purpose | +|-----|---------| +| `2026-08-12-surface-inventory.md` | Pages, integrations, content surfaces, gaps (T01) | +| *(later)* editor/type dump | Full data types & workflows after Bubble admin export (feeds T02) | + +Design tokens already extracted (visual only): `docs/design-extract/`. diff --git a/docs/migration/README.md b/docs/migration/README.md new file mode 100644 index 0000000..63190dd --- /dev/null +++ b/docs/migration/README.md @@ -0,0 +1,11 @@ +# Migration docs + +CSOC-WP-0001-T02/T04 home for Bubble → rebuild mapping and rehearsal notes. + +| Doc | Status | +|-----|--------| +| `schema-mapping-sketch-2026-08-12.md` | Provisional mapping from inventory + ADR-0002 (no dump yet) | +| *(later)* export manifest | Bubble dump paths, checksums, PII handling | +| *(later)* rehearsal log | Import of one space to app host | + +Export credentials and raw dumps **never** go in git. diff --git a/docs/migration/schema-mapping-sketch-2026-08-12.md b/docs/migration/schema-mapping-sketch-2026-08-12.md new file mode 100644 index 0000000..a9bea77 --- /dev/null +++ b/docs/migration/schema-mapping-sketch-2026-08-12.md @@ -0,0 +1,89 @@ +# 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/.md` | `?page=` | +| Embedded images | `assets/` + 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. + +## Related + +- Inventory: `docs/bubble-inventory/2026-08-12-surface-inventory.md` +- ADR-0002: `docs/adr/ADR-0002-space-content-forgejo-markdown.md` +- Spaces models: `coulomb_social/apps/spaces/models.py` diff --git a/workplans/CSOC-WP-0001-bubble-io-exit-assessment.md b/workplans/CSOC-WP-0001-bubble-io-exit-assessment.md index 01e0205..0852d26 100644 --- a/workplans/CSOC-WP-0001-bubble-io-exit-assessment.md +++ b/workplans/CSOC-WP-0001-bubble-io-exit-assessment.md @@ -8,7 +8,7 @@ status: active owner: bernd topic_slug: coulomb-social created: "2026-08-09" -updated: "2026-08-10" +updated: "2026-08-12" origin: residual origin_ref: the-custodian/docs/coulomb-social-rebuild-seed.md state_hub_workstream_id: "ecefaeef-908a-4072-ae34-6406862d4cad" @@ -31,15 +31,14 @@ spaces/data from Bubble. Do **not** repoint apex DNS until product + content persistence + self-registration are ready and a migration rehearsal has passed. Identity shell is done (`CSOC-WP-0002`). Product/content foundation is -`CSOC-WP-0004`. This workplan stays the home for **inventory, mapping, feature -cut, and migration rehearsal** — executed when the target schema/content model -exists, not as the immediate next build step. +**finished** (`CSOC-WP-0004`). This workplan is the home for **inventory, +mapping, feature cut, and migration rehearsal**. ## Inventory bubble.io app ```task id: CSOC-WP-0001-T01 -status: todo +status: done priority: medium state_hub_task_id: "240a97c5-1f57-4da6-a75b-d7b3416afdd1" ``` @@ -50,11 +49,17 @@ or deliberately dropped. Record findings under `docs/bubble-inventory/` (create as needed). Prefer **spaces / pages / markdown-shaped content** first so `CSOC-WP-0004` Forgejo persistence can map cleanly. +2026-08-12: Surface inventory committed — +`docs/bubble-inventory/2026-08-12-surface-inventory.md`. Public meta, hosts, +Research/`vw_pages`/pg_chunk routes, integrations, content hypothesis, gaps. +**Data types empty** on public API — full type/workflow graph waits on Bubble +editor export (T02). + ## Data export and schema mapping ```task id: CSOC-WP-0001-T02 -status: todo +status: progress priority: medium state_hub_task_id: "0bc6eea3-030d-4987-b203-15ccd4f94fcb" ``` @@ -68,6 +73,10 @@ Produce a full data dump from bubble.io and map it to: Document mapping and export under `docs/migration/`. Depends on CSOC-WP-0004 content layout decisions for lossless mapping of pages/artefacts. +2026-08-12: Provisional mapping sketch without dump — +`docs/migration/schema-mapping-sketch-2026-08-12.md`. **Blocked on** Bubble +editor/export access for actual type fields and content corpus. + ## Feature cut decision (human gate) ```task @@ -85,15 +94,15 @@ rebuild work on `app.coulomb.social`. ```task id: CSOC-WP-0001-T04 -status: todo +status: wait priority: low state_hub_task_id: "2e5be321-3d76-4d7a-86b1-cbe4eb554bd7" ``` Import one or more Bubble spaces into the v1 model on a non-production path -(app host or staging). Record lossiness and residuals. **Blocked until** -CSOC-WP-0004 persistence exists and T02 mapping is written. Explicitly **not** -a prerequisite for building product UX on the empty/new content store. +(app host or staging). Record lossiness and residuals. **Blocked until** T02 +has a real export (CSOC-WP-0004 persistence is ready). Explicitly **not** a +prerequisite for building product UX on the empty/new content store. ## Acceptance @@ -105,5 +114,7 @@ a prerequisite for building product UX on the empty/new content store. ## Notes - Parallel hosts: `docs/deploy.md` -- Next product build: `workplans/CSOC-WP-0004-app-shell-and-space-content.md` +- Product foundation: `CSOC-WP-0004` finished; spaces runbook `docs/deploy.md` +- Inventory: `docs/bubble-inventory/` +- Mapping sketch: `docs/migration/` - Service contract: `the-custodian/canon/standards/business-app-service-contract_v0.1.md`