Platform overview
Ownership, surfaces and core flows
Mivama is a control-plane-driven managed WordPress platform. Browser-facing applications do not configure Linux directly: customer intent becomes validated Frappe data, then narrow privileged workers apply it.
Core rule: Frappe/Mivama Core owns business truth. Stripe owns payment truth. Each WordPress tenant owns live site content. Workers reconcile those systems through explicit jobs and versioned records.
Product surfaces
| Surface | Responsibility | Runtime |
|---|---|---|
| Mivama Portal | Customer UI, authentication, checkout, onboarding, support and service controls | Next.js on 127.0.0.1:3110 |
| Frappe + Mivama Core | Customers, legal acceptance, billing mirrors, services, desired state, jobs and audit | Frappe bench on 127.0.0.1:8011 |
| Stripe | Checkout, payment methods, recurring subscriptions, invoices and payment events | External |
| Hosting runner | Claims provisioning jobs and runs allowed Ansible playbooks | Root systemd service |
| WordPress tenants | Isolated production workloads and customer data | Per-tenant Compose projects |
| Migration runtime | Receives connector uploads and imports a source site | Gateway plus privileged worker |
| WordPress AI Studio | Development copy, Codex workflow, validation and controlled deployment | Next.js UI plus root worker |
Golden customer path
Sources of truth
- Identity and permissions: Frappe User, roles, Customer/Contact links and Portal authorization helpers.
- Contract: versioned legal documents and acceptance records in Mivama Core.
- Commercial state: Stripe subscription and invoice IDs mirrored into Mivama DocTypes and ERPNext invoices.
- Hosting intent: Mivama Hosting Service plus immutable desired-state generations.
- Actual infrastructure: tenant manifest and runner-reported job result.
- Migration: one Mivama Hosting Migration per transfer attempt, with explicit phases.
- Studio: Studio database owns workspaces/jobs; Frappe owns customer eligibility and hosting target.
Safety model
Public web applications never receive Docker socket or unrestricted host credentials. Root work is concentrated in dedicated workers whose action maps are fixed in code. Desired-state hashes, service generations, per-service locks, backups, health checks and audit events make mutations traceable and repeatable.
Repository starting points
- Portal: /home/frappe/mivama-portal
- Frappe app: /home/frappe/frappe/frappe-bench/apps/mivama_core
- AI Studio: /home/frappe/websitebuilder.wiaryle.com
- Runtime runner: /opt/mivama/runner
- Tenant root: /srv/mivama/tenants