Tech Stack¶
Meister Bill is built with modern, performance-oriented technologies across all layers.
Overview¶
| Layer | Technology |
|---|---|
| Frontend | Nuxt 3 + Tailwind CSS |
| Backend/API | Hono + Bun |
| App | Ionic |
| Shared Types | Zod schemas |
| Package Mgmt | pnpm with workspaces |
| Database | PostgreSQL (external) |
| CI/CD | Gitea with act_runner |
Frontend Technologies¶
Nuxt 3¶
- Purpose: Web application framework
- Features: SSR/SSG support, auto-imports, file-based routing
- Location:
apps/web/
Tailwind CSS + DaisyUI¶
- Purpose: Utility-first CSS framework with component library
- Features: Responsive design, dark mode, customizable themes
- Configuration:
apps/web/tailwind.config.ts
Vue 3¶
- Purpose: Reactive frontend framework
- Features: Composition API, TypeScript support,
Backend Technologies¶
Hono¶
- Purpose: Lightweight web framework for Bun
- Features: Fast routing, middleware support, OpenAPI integration
- Location:
apps/api/
Bun¶
- Purpose: JavaScript runtime and package manager
- Features: Fast builds, native TypeScript support, compatible APIs
- Version: Latest stable
Mobile/Desktop¶
Ionic + Capacitor¶
- Purpose: Cross-platform mobile and desktop applications
- Features: Native device APIs, offline support, PWA capabilities
- Location:
apps/app/
Validation & Type Safety¶
Zod V4¶
- Purpose: Runtime type validation and schema definitions
- Features: TypeScript inference, composable schemas, custom validations
- Location:
schemas/(workspace package) - See: Schema Validation Guide
Database¶
PostgreSQL¶
- Purpose: Primary data store
- Features: JSONB support, full-text search, complex queries
- Access: Via Supabase client library
- Schema:
database/tables/
Supabase¶
- Purpose: Database access layer and authentication
- Features: Row-level security, real-time subscriptions, auth
Package Management¶
pnpm Workspaces¶
- Purpose: Monorepo management
- Features: Efficient disk usage, fast installs, workspace protocol
- Configuration:
pnpm-workspace.yaml
Testing Frameworks¶
Vitest¶
- Purpose: Unit testing for frontend
- Used In:
apps/web/,apps/app/,schemas/ - Features: Fast, Vite-native, Jest-compatible API
Jest¶
- Purpose: Unit testing for backend
- Used In:
apps/api/ - Features: Mature, extensive ecosystem, snapshot testing
Playwright¶
- Purpose: End-to-end testing
- Features: Cross-browser support, auto-waiting, trace viewer
Cypress¶
- Purpose: E2E testing for Ionic app
- Used In:
apps/app/ - Features: Time-travel debugging, automatic screenshots
State Management¶
XState V5¶
- Purpose: State machine for complex workflows
- Used For: Invoice status, project status, payment workflows
- Benefits: Predictable state transitions, prevents invalid states
Development Tools¶
mise¶
- Purpose: Runtime version management
- Manages: Node.js version (24+)
TypeScript¶
- Purpose: Type-safe JavaScript
- Configuration: Per-workspace
tsconfig.jsonfiles
CI/CD¶
Gitea + act_runner¶
- Purpose: Continuous integration and deployment
- Features: Self-hosted, Docker-based jobs, GitHub Actions compatible
- Configuration:
.gitea/workflows/
Deployment Platform¶
Fly.io¶
- Purpose: Application hosting
- Features: Global CDN, auto-scaling, zero-downtime deployments
- Apps:
meisterbill-web,meisterbill-api
Additional Services¶
Mailpit (Development)¶
- Purpose: Local email testing
- Interface: http://localhost:8026/
- Use: Testing invoice emails and auth flows
Gotenberg (PDF Generation)¶
- Purpose: HTML to PDF conversion
- Endpoint: http://localhost:3003/
- Use: Generating invoice PDFs
Umami Analytics¶
- Purpose: Privacy-friendly web analytics
- Features: GDPR-compliant, self-hosted, no cookies
See Also¶
- Development Setup - Getting started with these technologies
- Project Structure - How these technologies are organized
- Testing Guide - Using the testing frameworks