Introduction to Midday
Understand Midday, an AI-powered business assistant for freelancers and solopreneurs
Introduction to 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.
What is Midday?
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
Architecture Overview
System design, database schema, API patterns, and AI integration.
Workflows & Data Flows
Key user journeys: bank sync, invoicing, receipt matching, AI assistant.
How Midday Is Built
Repository structure, build system, dependencies, and deployment.