The Problem
Freelancers and solo entrepreneurs currently juggle fragmented tools for time tracking, invoicing, bank reconciliation, and financial analysis. This scattering creates manual overhead, context switching, and gaps in financial visibility that consume billable hours.
What This Does
Midday is a monorepo-built AI-powered business assistant (200 files, primarily TypeScript) that consolidates operations for freelancers. The core is in apps/api/ with a tRPC server (apps/api/src/index.ts) exposing routers for banking integrations (Fortnox, Xero, QuickBooks, Gmail, Outlook, Slack), file management, invoices, transactions, and a suite of 25+ AI agents (apps/api/src/ai/agents/) and tools (apps/api/src/ai/tools/). Artifacts like cash-flow forecasts, profit calculations, and tax summaries are generated from connected financial data. The agent system accesses bank accounts via apps/api/src/ai/tools/get-bank-accounts.ts and exports analysis as artifacts. OAuth flow is handled across multiple router directories (apps/api/src/rest/routers/apps/*/). A Dockerfile exists at apps/api/Dockerfile for containerized deployment.
How To Use It
Setup: This is a Node.js/Bun project. apps/api/package.json lists dependencies but no lockfile is present, meaning npm install or pnpm install may produce non-reproducible builds. Install dependencies with pnpm install (or npm install) in the apps/api/ directory.
Configuration: Environment variables are expected in apps/api/.env-template. The repo uses Supabase for database/storage/auth, so SUPABASEURL and SUPABASEANON_KEY must be set. OAuth credentials for bank connections (Plaid, GoCardLess, Teller) and API keys for Gemini/OpenAI are required but not committed.
Running it: Start the API server with pnpm dev or npm run dev from apps/api/. The entry point is apps/api/src/index.ts. For production, build via Docker: docker build -t midday/api -f apps/api/Dockerfile . then run the container. CI/CD pipelines are configured in .github/workflows/ (18 workflows for staging/production/deployment across API, dashboard, worker, and email services).
Real-World Use
A freelancer connects bank accounts via OAuth (supported integrations include Plaid, GoCardLess, Teller). The AI agents automatically categorize transactions, generate cash-flow forecasts (apps/api/src/ai/artifacts/forecast.ts), compute burn rate (apps/api/src/ai/tools/get-burn-rate.ts), and produce tax summaries (apps/api/src/ai/tools/get-tax-summary.ts). Invoices can be created and tracked; the "Magic Inbox" feature automatically matches incoming receipts to transactions. Financial data can be exported as CSV for accounting. The assistant provides conversational insights on spending patterns and document retrieval.
Code Health & Issues
Risk - Dependencies declared without a lockfile in apps/api/package.json: non-reproducible builds, potential version drift between environments. Risk - AGPL-3.0 license (LICENSE): requires copyleft compliance; commercial deployments need a separate license from engineer@midday.ai. Info - 18 GitHub Actions workflows configured for CI/CD across environments, but only 2 test files exist; test coverage is minimal. Info - No lockfile means pnpm lock.yaml or package-lock.json is absent; dependency audits (e.g., npm audit) cannot guarantee exact resolved versions. Info - Secrets and config files referenced (.env-template) are not present in the repo snapshot; ensure these are secured externally.
The Bottom Line
Midday offers a compelling, AI-rich consolidation of freelancer operations—time tracking, invoicing, bank reconciliation, and financial analytics—within a single TypeScript monorepo. The agentic architecture and extensive integration library are the strongest technical assets. However, the missing lockfile and AGPL copyleft terms are practical barriers: teams needing reproducible builds or commercial-friendly licensing should verify compatibility before adoption. It is well-suited for solo freelancers or small teams already invested in the Supabase/Vercel/Fly.io ecosystem who need an AI-assisted financial operations layer.