A self-hosted virtual allowance app for teaching kids about money management.
Physical money is becoming rare, but kids still need to learn about saving and spending. Juno Bank creates a virtual piggy bank where parents act as the bank — the money is real (redeemable with parents), but without any financial system integration.
- Picture password login — tap 4 images in sequence instead of typing a password
- Balance dashboard — see current balance and transaction history
- Request deposits — "I got €10 from grandma"
- Request withdrawals — "I want €5 for a toy"
- Approve or deny money requests with optional notes
- Manual transactions — add or subtract money directly
- Standing orders — recurring allowance on flexible schedules (hourly, daily, weekly, monthly, yearly)
- Multi-child support — manage multiple children from one dashboard
- Weekly summary email — configurable per-parent notification with full transaction details
- User management — admin panel for managing parents and children
- Password recovery — email reset, admin reset, or CLI emergency reset
- Browser timezone support — all times displayed in the user's local timezone
- First-run setup wizard — guided 4-step setup (no default passwords)
- SMTP configuration — configure email during setup or from admin settings
- Login rate limiting — 5 failed attempts triggers a 5-minute lockout
- Security hardened — HttpOnly cookies, CSRF protection, timing-safe comparisons, security headers
| Layer | Technology |
|---|---|
| Framework | Blazor Server (.NET 8) |
| UI | MudBlazor + custom neumorphic styling |
| Database | SQLite + Entity Framework Core |
| MailKit (SMTP) | |
| Deployment | Docker / Podman |
cd src/JunoBank.Web
dotnet runOn first run, the Setup Wizard will guide you through creating accounts.
Set the JUNO_SEED_DEMO environment variable to seed test accounts:
JUNO_SEED_DEMO=true dotnet run| Account | Credentials |
|---|---|
| Parent (admin) | dad@junobank.local / parent123 |
| Parent 2 | mom@junobank.local / parent123 |
| Child (Junior) | Tap: cat → dog → star → moon |
| Child (Sophie) | Tap: star → moon → cat → dog |
cd docker
docker-compose up -d --buildThe app runs on http://localhost:5050. See docs/DEPLOYMENT.md for production setup with Nginx reverse proxy and SSL.
# Unit tests (xUnit)
dotnet test tests/JunoBank.Tests
# E2E tests (Playwright)
cd tests/e2e
npm test154 unit tests and 73 E2E tests covering authentication, transactions, requests, standing orders, notifications, and the setup wizard.
src/JunoBank.Web/
├── Components/
│ ├── Pages/ # Route-mapped pages (Auth, Child, Parent, Setup)
│ └── Shared/ # Reusable dialog and form components
├── Services/ # Business logic (interfaces + implementations)
├── Data/
│ ├── Entities/ # EF Core entities
│ └── Migrations/ # Database migrations
├── BackgroundServices/ # Allowance scheduler, notification processor
└── Auth/ # Custom auth state provider
tests/
├── JunoBank.Tests/ # xUnit service-level tests
└── e2e/ # Playwright browser tests
Developer documentation lives in the docs/ directory:
- Architecture — tech decisions, entities, structure
- Components — reusable UI components
- API Reference — services and entities
- Routes — URL to page mapping
- Conventions — coding standards
- Testing — test patterns
- Deployment — Docker production setup
- Decisions — architectural decision log
Project history and changelog are in the GitHub Wiki.
Private project — not open source.