What Is Midday?
Understand Midday, an AI-powered business assistant for freelancers and solopreneurs
What Is Midday?
TL;DR for Product Managers
Midday is an open-source financial operations tool for freelancers and small businesses. It connects to your bank, auto-categorizes transactions, matches receipts with AI, generates invoices, tracks time, and gives AI-powered financial insights — essentially replacing your spreadsheet, receipt folder, and bookkeeper with one app.
Midday is an AI-powered financial operations product for freelancers and small businesses that combines bank sync, invoicing, time tracking, receipt capture, and accounting workflows in one system. This explainer shows what Midday does, how the product is structured, and how its engineering choices support a finance-heavy user experience.
Midday at a Glance
Midday is an AI-powered business assistant that centralizes the financial operations of freelancers, contractors, consultants, and solo entrepreneurs. It's a monorepo containing 5 applications and 27 shared packages that together deliver bank connectivity (20,000+ institutions), invoicing, time tracking, receipt management, accounting sync, and an AI financial assistant.
The Product at a Glance
| Dimension | Details |
|---|---|
| What it does | Financial ops — bank sync, invoicing, time tracking, receipt matching, AI insights |
| Who uses it | Freelancers, contractors, consultants, solopreneurs |
| How it's different | Open-source, AI-native, connects banks + accounting in one place |
| Core tech | Next.js 16 + Hono + Supabase (PostgreSQL) + Drizzle ORM |
| Repo structure | Bun monorepo with Turborepo (5 apps + 27 packages) |
| License | AGPL-3.0 (commercial license available) |
| Deployment | Railway (dashboard/API/worker), Vercel (website), Cloudflare |
Core Concepts
Midday organizes around a Team (the billing/tenancy unit) containing members, bank accounts, and all financial data:
Team (your business entity)
├── Bank Accounts (connected via Plaid / GoCardless / Teller)
│ └── Transactions (auto-imported, categorized, enriched)
│ ├── Tags (custom labels)
│ ├── Attachments (receipts, files)
│ └── Categories (auto-classified by AI)
├── Invoices (create, send, track payments via Stripe)
│ ├── Products (line items)
│ ├── Recurring (scheduled re-send)
│ └── Comments (team collaboration)
├── Customers (client directory, portal access)
├── Tracker Projects (time tracking)
│ └── Tracker Entries (time logs per project)
├── Inbox (email receipts from Gmail / Outlook)
├── Documents (Vault) (contracts, agreements)
├── Insights (AI-generated financial analysis)
└── Reports (expense reports, custom exports)Key Insight
Transactions are the central entity. Bank connections auto-import them; the AI categorizes them; receipts from the inbox get matched to them; invoices track payments against them; and the financial assistant queries across them. Understanding the transaction model is the key to understanding Midday.
The Tech Stack — Why Each Piece Exists
| Layer | Technology | Why It's Used |
|---|---|---|
| Dashboard | Next.js 16.1.6 (React 19) | Full-stack framework with server actions and SSR |
| API | Hono 4.11.4 + tRPC 11.10.0 | Lightweight, edge-ready API with type-safe RPC |
| Runtime | Bun 1.3.10 | Fast JavaScript runtime, native TypeScript, built-in test runner |
| Database | Supabase (PostgreSQL) + Drizzle ORM 0.45.0 | Managed Postgres with auth, storage, and real-time; Drizzle for type-safe queries |
| Auth | Supabase Auth (JWT + JWKS) | Built-in email/password, OAuth, MFA |
| State | Zustand 5.0.11 + TanStack Query 5.90.21 | Minimal global state + server-state caching |
| UI | Radix UI + Tailwind CSS + shadcn-style | Accessible primitives + utility-first styling |
| Banking | Plaid + GoCardless + Teller + EnableBanking | Multi-provider bank connectivity (20,000+ institutions) |
| Payments | Stripe Connect | Invoice payments processed through connected accounts |
| Subscriptions | Polar | Billing for Midday's own subscription plans |
| AI | Vercel AI SDK 5.0 (OpenAI, Anthropic, Google) | Financial assistant, transaction categorization, document processing |
| Background Jobs | Trigger.dev 4.1.2 + BullMQ | Scheduled tasks (bank sync, invoice reminders) + job queues |
| Resend + React Email | Transactional emails (invoices, notifications, onboarding) | |
| File Storage | Supabase Storage + Cloudflare R2 | Document vault, receipt uploads, institution logos |
| Search | Typesense | Full-text search across transactions and documents |
| Analytics | OpenPanel | Product analytics and event tracking |
| Monitoring | Sentry | Error tracking across dashboard, API, and worker |
| Desktop | Tauri 2 | Native desktop app with deep links and file system access |
| Accounting | Xero + QuickBooks + Fortnox integrations | Two-way sync with accounting software |
| Monorepo | Turborepo 2.8.12 + Bun workspaces | Build orchestration with caching |
For PMs: Why So Many Banking Providers?
Banking APIs are region-locked. Plaid covers the US and Canada, GoCardless covers Europe and the UK, Teller is a US alternative, and EnableBanking covers additional European banks. By integrating all four, Midday can serve freelancers worldwide — connecting to 20,000+ financial institutions. Each provider has its own authentication flow, data format, and rate limits, which is why @midday/banking abstracts them behind a unified interface.
Key Statistics
| Metric | Value |
|---|---|
| Applications | 5 (dashboard, API, worker, website, desktop) |
| Shared packages | 27 |
| Database tables | 45+ |
| Database migrations | 36 |
| Banking providers | 4 (Plaid, GoCardless, Teller, EnableBanking) |
| Accounting integrations | 3 (Xero, QuickBooks, Fortnox) |
| AI tools (assistant) | 8+ (expenses, cash flow, burn rate, forecast, etc.) |
| Email templates | 18 (React Email) |
| Test files | 51 |
| Dockerfiles | 3 (dashboard, API, worker) |
Core Features
Financial Operations
- Bank Connections — Connect to 20,000+ banks; transactions auto-imported and enriched
- Transaction Management — Auto-categorized by AI, tagging, attachments, bulk actions
- Invoicing — Create/send invoices, Stripe payments, recurring schedules, customer portal
- Time Tracking — Project-based timer and manual entries, billable hours
- Magic Inbox — Gmail/Outlook sync; AI matches receipts to transactions
- Vault — Secure document storage (contracts, agreements)
- Reports — Expense reports, CSV export for accountants
- Accounting Sync — Two-way sync with Xero, QuickBooks, Fortnox
AI-Powered
- Financial Assistant — Chat with your finances: ask about spending, burn rate, runway, forecasts
- Transaction Categorization — AI classifies transactions using embeddings
- Receipt Matching — AI matches inbox documents to transactions
- Document Processing — Extract data from PDFs and images
- MCP Integration — Use Midday as a tool in Claude, Cursor, and ChatGPT
Platform
- Customer Management — Client directory with enrichment (Exa) and portal access
- App Store — Integrations: Slack, WhatsApp, Xero, QuickBooks, Fortnox
- Desktop App — Tauri-based native app (macOS)
- Notifications — Email notifications with granular settings
- OAuth/API — OAuth applications, API keys for programmatic access
What Makes Midday Different
- AI-native financial assistant — Not a bolt-on; AI is core to categorization, matching, and insights
- Multi-provider banking — 20,000+ institutions across US, EU, UK, Canada
- Open-source — Full source code, self-hostable (AGPL-3.0)
- All-in-one — Bank sync + invoicing + time tracking + accounting in a single tool
- Modern stack — Next.js 16, React 19, Bun, tRPC, Drizzle — bleeding-edge TypeScript
What's Next
Midday Architecture Overview
System design, database schema, API patterns, and AI integration.
Midday Workflows and Data Flows
Key user journeys: bank sync, invoicing, receipt matching, AI assistant.
Midday User Stories and Growth Insights
Jobs-to-be-done, activation moments, retention loops, and monetization angles.
How Midday Is Built
Repository structure, build system, dependencies, and deployment.