BRIDGE_Modul-S_prod / IMPLEMENTATION_PLAN.md
BRIDGE Platform Agent
refactor(naming): modul β†’ modules across metadata, wordmarks, headers, docs
195092e
|
Raw History Blame Contribute Delete
5.96 kB
# IMPLEMENTATION_PLAN.md β€” BRIDGE Platform (Modules E & S)
> PHASE 2 deliverable. Executed autonomously per the brief's guardrails ("do not pause for confirmation between phases").
## 0. Strategy
Converge both sibling apps into ONE platform build (they share ~95 % of code and deploy to the same HF Space `sitcod3/BRIDGE_Modul-S_prod`):
- **Base = E repo (GREENTHEME-test)** β€” superset: ThemeContext engine, tests, Skeleton, Pricing, Stripe.
- Module S's real pages are **ported** into the platform under `src/modules/s/**` (design preserved 100 %: true-indigo palette, slate→black gradient, original UX).
- Module E's pages stay in `src/pages/**` and mount at `/modules/e/**`.
- Platform shell (Sidebar with MODULES section, per-module nav + palette, TopBar) adapts per module via the registry.
- The identical platform build is replicated into the S repo so either pipeline produces the same Space.
## 1. File-by-file change list
### NEW
| File | Purpose |
|---|---|
| `src/modules/registry.tsx` | `ModuleId`, `MODULES` registry: id, label, wordmark, accent config, tagline, nav items, icon |
| `src/modules/LaunchContext.tsx` | Launch sequencer: `startLaunch(moduleId)` bumps `seq` (re-seed), controlled **exit choreography**, `useLaunch()` |
| `src/modules/ModuleLaunchAnimation.tsx` | Random-reassembly engine (Β§3) |
| `src/modules/ModuleShell.tsx` | Route shell `/modules/:id`: `data-module` attr + theme override, platform chrome, launch guard β†’ animation β†’ `<Outlet/>` |
| `src/modules/ModuleHub.tsx` | `/` platform launcher: two real-primitive module cards + Launch buttons |
| `src/modules/PlatformSidebar.tsx` | MODULES section (2 direct-launch buttons) + active module nav |
| `src/modules/PlatformTopBar.tsx` | TopBar shell per module (module-aware API-key badge) |
| `src/modules/s/components/{StatCard,AnimatedLogo,GlassCard}.tsx` | S variants (original implementations) |
| `src/modules/s/pages/*.tsx` | 11 ported S pages (imports re-pointed; StatCard β†’ S variant) |
### MODIFIED
| File | Change |
|---|---|
| `src/App.tsx` | New route table (Β§2), `LaunchProvider`, legacy redirects |
| `src/context/ThemeContext.tsx` | Add `PROD_THEME` (Module S palette); default stays mint |
| `src/index.css` | `[data-module="s"]` palette var overrides + `.bg-module-s` gradient + reduced-motion safeguard |
| `src/components/Logo.tsx` | Wordmark `ModulE`β†’`ModuleE`, label prop |
| `src/pages/Dashboard.tsx`, `src/pages/CampaignDetail.tsx` | 3 absolute links β†’ `/modules/e/…` |
| `metadata.json` | name `BRIDGE Modules` + description migrated |
| `server.ts` | add `GET /api/health` |
| `README.md` | platform note |
### Tests (new)
- `src/modules/ModuleLaunchAnimation.test.tsx` β€” primitives render; reduced-motion instant reveal; re-seed between launches.
- `src/modules/routing.test.tsx` β€” `/modules/e` + `/modules/s` index pages render in-shell; hub cards; direct menu routes; legacy `/campaigns` β†’ `/modules/e/campaigns`.
- `src/modules/naming.test.ts` β€” zero `Modul` stragglers in registry; `/modules/e` + `/modules/s` routes.
## 2. Route table
```
/ ModuleHub
/modules/e E Dashboard (index)
/modules/e/{campaigns,campaigns/:id,leads,email-accounts,warmup,inbox,webhooks,analytics,clients,pricing,settings}
/modules/s S Dashboard (index)
/modules/s/{campaigns,campaigns/:id,leads,email-accounts,warmup,inbox,webhooks,analytics,clients,settings}
Legacy: /campaigns, /leads, … β†’ replace β†’ /modules/e/<same> * β†’ /
```
## 3. Launch-animation architecture (PHASE 4)
`<ModuleLaunchAnimation module mode="enter"|"exit" onComplete />`
1. **Real primitives only:** 4Γ— `StatCard`, chart frame (GlassCard + live Recharts AreaChart), list frame (5 lead rows + StatusBadge), StatusBadge strip, KPI chips, Skeleton shimmer bar β€” 12 pieces in a dashboard-like grid.
2. **Random re-assembly:** `mulberry32(seed)`, `seed = Date.now() ^ hash(moduleId) ^ launchSeq` β€” re-seeded every launch. Per piece: off-canvas angle 0–360Β°, distance 240–720 px, rotation Β±8–45Β°, scale 0.55–1.35, stagger `i*55 ms + rand(40–90) ms`, duration 2.4–3.2 s, easing `cubic-bezier(0.22, 1, 0.36, 1)`.
3. **60 fps:** transform + opacity only (motion/react WAAPI/rAF β€” no setTimeout chains); `will-change` during animation only; chart renders after first frame (double-rAF); pages React.lazy-preloaded on hub mount + menu hover.
4. **Reduced motion:** instant reveal, zero duration.
5. **Exit choreography:** `startLaunch` from inside a module β†’ `exiting` β†’ shell swaps to primitive grid with reverse-assembly (scatter outward, 0.85 s) β†’ navigate β†’ target enter animation. Direct URL/back bypass controlled exit.
6. **Per-module theming:** same engine; E = mint accents, S = indigo accents on slate gradient.
## 4. Menu integration (PHASE 5)
`PlatformSidebar` gains `BRIDGE MODULES` section: **Module E** (mint dot) β†’ `/modules/e`, **Module S** (indigo dot) β†’ `/modules/s`; active state per namespace; click = `startLaunch` + navigate (re-seeded animation); cross-launch visible in both modules; hub cards mirror the action.
## 5. Risk register & rollback
| Risk | Mitigation | Rollback |
|---|---|---|
| Tailwind v4 remap collides with S indigo | `[data-module="s"]` scoped var overrides | remove scope block |
| E absolute links break | 3 links rewritten + legacy redirects | revert pages |
| Route move breaks tests | component tests render directly; new routing tests | revert App.tsx |
| Space stale build | identical platform in both repos; 200 + bundle markers verified | HF UI rollback |
| Naming misses | naming.test + grep gate | β€” |
## 6. Execution order
1. ThemeContext + index.css scopes β†’ 2. registry/LaunchContext/animation/shell/hub/chrome β†’ 3. port S pages β†’ 4. App.tsx routes + links β†’ 5. server/metadata/Logo β†’ 6. tests + tsc + build + QA (PHASE 6) β†’ 7. replicate to S repo, push both, verify live (PHASE 7).