v1.1 — Production Hardening, White-Label & Dioxus Frontend #7
Labels
No labels
meeting-notes
meeting-sensitive
meeting-transcript
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
coopcloud_code/home#7
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Marketplace v1.1 — Production Hardening, White-Label & Dioxus Frontend
Follows v1.0 (issue #1, complete). This issue covers multi-repo split, branding config, provider abstraction, Dioxus WASM frontend, deploy pipeline, production infrastructure, and marketing site.
Reference implementation:
znzfreezone_code/(5 repos: backend, frontend, admin, deploy, home).Phase A: Multi-Repo Split & Branding Config
A1: Split admin into separate repo
Move
admin/tomycelium_code/projectmycelium_marketplace_admin.znzfreezone_code/znzfreezone_adminA2: Split deploy into separate repo
Move
deploy/tomycelium_code/projectmycelium_marketplace_deploy.tfgrid/Makefile)k3s/Makefile)instances/directory for per-deployment configsbranding.tomltemplate systemmake release TAG=x.y.zpipeline (dist → pack → push)znzfreezone_code/znzfreezone_deployA3: Create branding.toml config system
Single source of truth for white-label customization:
BRANDING_CONFIGenv varinstances/_template/branding.tomlfor new deploymentsinstances/mycelium/branding.tomlfor productionAcceptance criteria (Phase A)
cargo check)make release TAG=x.y.zpipelinebranding.tomlloaded by backend, injected into responsesbranding.tomlPhase B: Provider Abstraction & Deploy Pipeline
B1: Payment provider trait
DemoPaymentProvider— always succeeds (dev/testing)PAYMENT_PROVIDERenv varznzfreezone_backend/src/providers/payment.rsB2: Email provider trait
DemoEmailProvider— logs to consoleResendProvider— real email via Resend APIznzfreezone_backend/src/providers/email.rsB3: Containerfiles for all services
Containerfile.backend— multi-stage Rust build → AlpineContainerfile.frontend— Dioxus WASM build → nginxContainerfile.admin— Rust build → Alpineforge.ourworld.tf/mycelium_code/B4: CI/CD pipeline update
.forgejo/workflows/build.ymldevelopment:development,:latest,:vX.Y.Z)Acceptance criteria (Phase B)
PAYMENT_PROVIDER=demoworks (no external deps)EMAIL_PROVIDER=resendsends real emailsPhase C: Dioxus WASM Frontend
New repo:
mycelium_code/projectmycelium_marketplace_frontendWhy Dioxus over Tera SSR
ProductCardused everywhere, not duplicated across 65 templateshero_os_ui_wasmalready uses Dioxus +dioxus-bootstrap-csstypes_wasm_generated.rs(1,651 lines) andosis_client_generated.rs(2,869 lines) existStack
dioxus-bootstrap-css(50+ Bootstrap 5.3 components, zero JS)dioxus-router(client-side SPA routing)gloo-net(fetch API for JSON-RPC calls)marketplace.oschemaviatypes_wasm_generated.rsArchitecture: Hybrid SSR + SPA
SSR for crawlers + social previews. SPA for everything interactive.
Component structure (~250 components)
What gets removed from backend
Once Dioxus SPA is complete:
ContextBuilderpattern → replaced by Dioxus signalsResponseBuilder→ replaced by JSON-RPC responsesAcceptance criteria (Phase C)
Phase D: Production Infrastructure
D1: Encrypted admin auth
admin-users.toml.enc)serve,add-user,list-users,remove-userznzfreezone_admin/src/admin_users.rsD2: MCP endpoint
marketplace.oschemaPOST /mcpendpoint on RPC serverznzfreezone_backend/src/mcp.rsD3: Prometheus metrics
GET /metricsendpointD4: Structured logging
RUST_LOG_FORMAT=jsonfor productionD5: Backup system
D6: Health monitoring
Acceptance criteria (Phase D)
/metricsreturns Prometheus formatPhase E: HA Deployment & Marketing
E1: K3s production deployment
Full HA deployment scripts in deploy repo:
setup-server.sh— K3s server + Kadalusetup-agent.sh— K3s agent nodessetup-storage.sh— GlusterFS Replica3setup-dns.sh— Cloudflare DNS automationznzfreezone_deploy/k3s/E2: TFGrid single-VM deployment
make all ENV=devfor full deployznzfreezone_deploy/tfgrid/E3: Marketing website
New repo:
projectmycelium/www_projectmycelium(or undermycelium_code)branding.tomlfor customizationznzfreezone/www_znzfreezoneAcceptance criteria (Phase E)
make all ENV=prodmake all ENV=devFinal Repo Structure
Mirrors the freezone:
Phase Dependencies
A is prerequisite for everything. B and C can run in parallel. D and E follow.
Key Design Principles
marketplace.oschemadrives types, CRUD, RPC, Rhai, WASM SDK, OpenRPCbranding.tomldrives all customization, no code changesmake release TAG=x.y.zfor any instanceImportant: dioxus-bootstrap-css upstream-first policy
During Phase C (Dioxus frontend migration), if we encounter any issue with
dioxus-bootstrap-css— missing component, broken behavior, incomplete Bootstrap 5.3 coverage, accessibility gap, or API ergonomics problem — we fix the crate itself at https://github.com/mik-tf/dioxus-bootstrap-css.Do NOT:
DO:
The marketplace migration is the stress test for dioxus-bootstrap-css. Every gap we find and fix makes the crate better for the entire ecosystem. This is the same principle as fixing hero_rpc_generator when the schema parser had issues with optional field syntax — we fixed the tool, not the schema.
v1.1 Complete
Commit:
0e802cbRepo structure now matches freezone pattern
Next: repo split (admin, deploy, frontend, www as separate repos)