Idioma / Language: English | Portugues (BR)
A personal finance management application with AI-powered transaction categorization, bank account syncing, and multi-language support. Built for self-hosting with Docker, MyMascada gives you full control over your financial data.
Try the demo -- No install needed. Explore MyMascada with sample data at demo.mymascada.com (login:
[email protected]/DemoPass123!).
| Dashboard | Transactions | Settings |
|---|---|---|
![]() |
![]() |
![]() |
- Transaction Management -- Import transactions via CSV, OFX, or manual entry
- AI-Powered Categorization (optional -- requires OpenAI API key) -- Automatic transaction categorization using GPT-4o-mini
- Rule-Based Categorization -- Define custom rules to automatically categorize transactions
- Bank Account Syncing (optional -- New Zealand only) -- Live account syncing via Akahu
- Google OAuth Sign-In (optional) -- Email and password authentication is always available
- Email Notifications (optional) -- Password reset, email verification, and account alerts
- Multi-Language Support -- English and Brazilian Portuguese
- PWA Support -- Installable on mobile devices for a native-like experience
- Budget Tracking -- Set budgets and analyze spending patterns
- Account Reconciliation -- Compare and reconcile account balances
- Data Export -- Export your data in CSV or JSON format
- Docker Self-Hosting -- Guided setup with a single script
MyMascada is designed with privacy as a core principle:
- No telemetry -- The app sends zero analytics, tracking, or usage data anywhere
- No cloud dependency -- Everything runs on your hardware. No external services are required (AI and bank sync are opt-in)
- Fully offline-capable -- Once running, the app works without an internet connection
- Your database, your rules -- All financial data stays in your PostgreSQL instance. Export it anytime in CSV or JSON
git clone https://github.com/digaomatias/mymascada.git
cd mymascada
./setup.shThe setup script walks you through configuration, including database credentials, optional API keys, and email settings. For detailed instructions, environment variable reference, and production deployment guidance, see SELF-HOSTING.md.
MyMascada follows Clean Architecture principles with clearly separated layers:
Domain --> Application --> Infrastructure --> WebAPI
- Domain -- Entities, value objects, and domain events with no external dependencies
- Application -- Business logic, use cases, CQRS with MediatR, and DTOs
- Infrastructure -- Data access (EF Core), external integrations (OpenAI, email, Akahu)
- WebAPI -- REST API endpoints, authentication, middleware, and dependency injection
The frontend is a standalone Next.js application that communicates with the backend via REST APIs.
| Component | Technology |
|---|---|
| Backend | ASP.NET Core 10, C# |
| Frontend | Next.js 15, React 19, TypeScript |
| Styling | Tailwind CSS |
| Database | PostgreSQL 16 |
| ORM | Entity Framework Core 10 |
| Caching | Redis 7 |
| Authentication | JWT, Google OAuth |
| AI | OpenAI API (gpt-4o-mini) |
| Internationalization | next-intl (frontend), IStringLocalizer (backend) |
| Background Jobs | Hangfire |
| Testing | xUnit, Playwright |
- .NET 10 SDK
- Node.js 20+
- PostgreSQL 16+
- Redis 7+ (optional for development)
cd src/WebAPI/MyMascada.WebAPI
dotnet restore
dotnet runThe API starts at https://localhost:5126 by default.
cd frontend
npm install
npm run devThe frontend starts at http://localhost:3000 by default.
# Backend unit tests
dotnet test
# Frontend E2E tests
cd frontend
npx playwright test- Self-Hosting Guide -- Deployment, configuration, and production setup
- Contributing -- How to contribute to the project
- Security Policy -- How to report vulnerabilities
- Privacy -- Data handling and privacy information
- Changelog -- Release history and changes
- Code of Conduct -- Community guidelines
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).
Contributions are welcome! If you find a bug or have a feature request, please open an issue. Pull requests are appreciated -- see CONTRIBUTING.md for guidelines.


