01 · App & interface
One web app, rendered in your browser
The interface you use every day (every chart, table, and dashboard) is a single codebase compiled to run on the client.
Flutter (web): The entire app UI lives in one Flutter Web codebase, so the experience is consistent on every screen.
Dart: The language Flutter is written in; it powers all of the app's client-side logic.
02 · Backend & APIs
A Python API behind every request
Everything behind the app (the service that fetches, syncs, and serves your data) runs on a Python backend.
FastAPI: The web framework behind our REST API; it handles every request the app makes.
Python: The language our backend, account sync, and background jobs are written in.
Pydantic: Validates and shapes the data moving in and out of the API, so responses are always well-formed.
03 · Data & caching
A relational database, kept fast
Your accounts, holdings, and transactions live in a relational database; an in-memory store keeps the app responsive.
PostgreSQL: Our primary database. Every account, holding, and transaction is stored here.
Redis: In-memory caching and background-job queuing, so syncs and pages stay quick.
04 · Cloud & hosting
Google Cloud, hosted in Canada
Mozaic runs on Google Cloud in the Montréal region (northamerica-northeast1). Your data does not leave Canada.
Google Cloud Run: Runs the app and API as containers that scale with demand.
Cloud SQL: The managed, encrypted home for our PostgreSQL database.
Cloud Scheduler: Triggers the recurring jobs that sync accounts and send summaries on time.
Docker: Packages the app into reproducible containers, identical from a laptop to production.
05 · Account connections
Read-only links, brokered by specialists
Mozaic never sees your banking passwords. Connections are read-only and handled by SOC 2-audited providers, the same rails most consumer-finance apps use.
Plaid: Read-only connections to Canadian and US banks.
SnapTrade: Read-only connections to brokerages such as Wealthsimple, Questrade, and Interactive Brokers.
06 · Payments
Billing we never touch the card for
Subscriptions are billed in Canadian dollars, and your card details never reach our servers.
Stripe: Handles checkout, subscriptions, and billing; card details go straight to Stripe, never to us.
07 · Sign-in & accounts
Authentication managed by Google
We don't roll our own auth. Sign-in, sessions, and recovery run on Google's infrastructure.
Google Cloud Identity Platform: Sign-in, sessions, and optional two-factor authentication, backed by Google.
reCAPTCHA Enterprise: Protects sign-up and sign-in from automated abuse.
08 · Email
Transactional email, nothing more
We send the email you need: verification, security, and the summaries you opt into. No newsletters you didn't ask for.
Resend: Delivers authentication and account email: verification, sign-in links, and MFA.
SendGrid: Delivers product email such as your daily and weekly summaries.
09 · Reliability & monitoring
We want to know before you do
When something breaks, alerts reach us fast, so the fix is usually already in flight.
Sentry: Error monitoring and alerting across the app and backend.