|
|
||
|---|---|---|
| .. | ||
| .env.example | ||
| DEPLOY.md | ||
| docker-compose.yml | ||
| README.md | ||
| reset.sh | ||
MyMidas — Public Demo
This directory contains everything needed to run a public demo instance of MyMidas on a separate server. The demo is pre-loaded with realistic synthetic UK financial data and resets automatically every hour back to a clean state.
What the demo includes
| Area | Data |
|---|---|
| Accounts | Monzo Current, Marcus Savings, Amex Gold credit card, Freetrade ISA |
| Transactions | ~180 transactions across 6 months (Oct 2025 – Mar 2026) — salary, rent, groceries, subscriptions, eating out, utilities, holidays, shopping |
| Subscriptions | Netflix, Spotify, Amazon Prime, iCloud, GitHub, PureGym — all auto-detected as recurring |
| Investments | VWRP ETF (50 shares), Apple stock (10 shares), Bitcoin (0.05 BTC) with buy history and dividends |
| Budgets | Groceries, Eating Out, Transport, Entertainment, Utilities, Subscriptions, Shopping |
| Tax | 2025/26 profile (code 1257L), 6 payslips (Apr–Sep 2025), manual CGT disposal showing £4,300 gain |
| Reports | All 7 report types populated — Net Worth, Income/Expense, Cash Flow, Category Breakdown, Budget vs Actual, Investment Performance, Spending Trends |
Demo credentials:
Email: demo@mymidas.app
Password: demo123
How it works
- On first startup, the backend detects
DEMO_MODE=truewith an empty database, seeds all demo data, and saves a compressed database snapshot - A
resettercontainer (Alpine with cron) restores from that snapshot at the top of every hour and purges any uploaded files - Password changes and backup download/restore are disabled in demo mode — a banner on every page and the login screen explains this
Demo vs production differences
| Feature | Production | Demo |
|---|---|---|
| Password change | Enabled | Disabled |
| Backups | Nightly + manual | Disabled |
| File uploads | Persistent | Wiped hourly |
| AI receipt scanning | User-configured | Field available, no key pre-set |
| Registration | Controlled by ALLOW_REGISTRATION |
Disabled |
| Data | Your real data | Synthetic, resets hourly |
Deployment
See DEPLOY.md for the full step-by-step guide (Portainer Stacks).
Quick summary:
- Clone the repo on the demo server
- Generate JWT keys (
secrets/jwt_private.pem+jwt_public.pem) cp demo/.env.example demo/.envand fill inENCRYPTION_KEY,DB_PASSWORD,REDIS_PASSWORD- Deploy
demo/docker-compose.ymlas a Portainer stack with those env vars - Wait ~60 s for first-time seeding — then point your reverse proxy at port
4001
No further manual steps. The hourly reset runs automatically inside the stack.
Ports
| Service | Port |
|---|---|
| Frontend (reverse proxy target) | 4001 |
| Backend API (internal) | 8091 |
| PostgreSQL | internal only |
| Redis | internal only |
Updating
Pull the latest code and redeploy the stack in Portainer. Migrations run automatically on restart; the seed check is skipped if the demo user already exists (snapshot is preserved on the demo_snapshot Docker volume).
To force a full re-seed after adding new demo data: delete the demo_snapshot volume in Portainer, then redeploy.