Overview
Midday is built as a modern monorepo using cutting-edge technologies designed for scalability, performance, and developer experience. The architecture follows a modular approach with multiple apps and shared packages.Technology Stack
Core Technologies
- Bun - Fast JavaScript runtime and package manager
- Turbo - High-performance build system and monorepo tool
- TypeScript - Type-safe JavaScript development
- React 19 - UI library with latest features
- Next.js 16 - Full-stack React framework
- Supabase - Backend-as-a-service (database, auth, storage, realtime)
Key Libraries
- Drizzle ORM - Type-safe database queries
- tRPC - End-to-end typesafe APIs
- Hono - Lightweight web framework for APIs
- Zod - Schema validation
- TailwindCSS - Utility-first CSS framework
- Shadcn/ui - Accessible component library
- AI SDK - AI integration (OpenAI, Google Gemini)
Applications
Midday consists of 5 main applications:- Dashboard
- API
- Website
- Desktop
- Worker
Main Application (
apps/dashboard)The primary user-facing application built with Next.js 16.Key Features:- Time tracking and invoicing
- Magic inbox for receipt matching
- Vault for document storage
- AI assistant for insights
- Real-time collaboration
- Next.js 16 with App Router
- tRPC for API calls
- React 19
- Zustand for state management
- TanStack Query for data fetching
Packages
Midday has 29+ shared packages organized inpackages/:
Database & Storage
@midday/db
Database client, schema, and queries using Drizzle ORM
@midday/supabase
Supabase client utilities for auth, storage, and realtime
@midday/cache
Caching utilities and strategies
Business Logic
@midday/banking
Bank connection and transaction handling
@midday/invoice
Invoice generation and management
@midday/accounting
Accounting integration (Xero, QuickBooks, Fortnox)
@midday/documents
Document processing and storage
@midday/inbox
Receipt matching and processing
@midday/insights
Financial insights and analytics
Infrastructure
@midday/jobs
Background job definitions
@midday/job-client
Job client for Trigger.dev
@midday/logger
Structured logging with Pino
@midday/events
Event tracking and analytics
@midday/notifications
Notification system
Utilities
@midday/utils
Shared utility functions
@midday/encryption
Encryption utilities
@midday/location
Geolocation services
@midday/categories
Transaction categorization
UI & Components
@midday/ui
Shared UI components (Shadcn-based)
@midday/email
Email templates with React Email
Hosting & Infrastructure
Supabase
Services: Database (PostgreSQL), Storage, Realtime, AuthAll data is stored in Supabase with Row Level Security (RLS) policies for multi-tenancy.
External Services
Trigger.dev
Background job orchestration and scheduling
Resend
Transactional and marketing emails
GoCardless
Bank connections in EU
Plaid
Bank connections in US/Canada
Teller
Additional US bank connections
OpenPanel
Event tracking and analytics
Polar
Payment processing
Typesense
Full-text search
OpenAI & Gemini
AI capabilities
Architecture Patterns
Monorepo Structure
Data Flow
All applications share the same TypeScript packages, ensuring consistency and reducing duplication.
Development Workflow
Running All Apps
Running Specific Apps
Building for Production
Code Quality
Next Steps
Database
Learn about the database schema and queries
Monorepo
Understand the monorepo structure
Contributing
Start contributing to Midday