1. Stop Saying "Build Me This": Why Vibe Coders Get Stuck
When most builders open Claude, Cursor, Lovable, or Bolt, their initial reflex is to say:
"Build me a sleek B2B time tracking app with a start/stop timer, billable rates, project tags, and Stripe export."
Within 20 seconds, the model gives you a gorgeous visual mockup with animated buttons and mock cards. You feel like a genius. But ten minutes later, you ask it to add client invoicing, and suddenly:
- The agent rewrites half the UI and erases your timer state logic.
- It stores running timestamps in fragile browser
localStorage, which vanishes when tabs are closed or backgrounded. - There are zero tests, so fixing a button on the dashboard silently breaks the billing calculation.
- Your database queries run unindexed, creating the connection starvation covered in our guide on Why Your AI App Crashes When Multiple People Use It.
Spend your first 60 to 90 minutes forcing the agent to stay in Planning Mode. Do not let it create or modify a single code file until it has constructed, challenged, and stress-tested a multi-phase technical spec.
Throughout this tutorial, we will construct a production-ready planning prompt for a real-world product: a Team Time Tracker & Customizable Invoice Generator. Watch how each section adds critical architectural layers to our expanding prompt block below.
2. Stage 1: The Initial Intent & The "Planning Mode" Handshake
Let's start by walking through the product we actually want to build. We are creating a modern, B2B Time Tracking Application designed for boutique software agencies, freelance consultants, and distributed engineering teams.
Here is what we want the product to do at its core:
- The User Journey: A contractor logs into their company workspace in the morning, selects Client "Acme Corp" and Project "Marketing Overhaul" from a dropdown, and taps Start Timer.
- Idle Detection: When they step away for coffee, the app detects 15 minutes of inactivity and prompts them upon return: "Keep or discard 15 minutes of idle time?"
- Tiered Rates: Hours are automatically categorized under distinct billable rates ($100/hr for engineering, $65/hr for QA).
- Role-Based Dashboards: Daily and weekly summary charts let admins review team hours, while contractors see only their assigned projects.
The first rule of planning mode is explicitly revoking the agent's permission to write implementation code. You instruct it to become a Principal Systems Architect whose only job is to interview you and lay down the product boundary:
Act as a Principal Systems Architect.
We are going into PLANNING MODE. Do NOT write any application code, do NOT create files, and do NOT install packages yet.
I want to build a production-grade Time Tracking Application.
Core capabilities required:
1. Live clock-in / clock-out timer with idle time detection.
2. Tagging hours by Client, Project, and Billable Rate tier.
3. Daily/Weekly summary dashboard with time distribution charts.
4. Multi-user workspace with Role-Based Access Control (Admins, Contractors, Viewers).
Your initial task in Planning Mode:
- Clarify any ambiguous product requirements or edge cases.
- Present a high-level breakdown of the system before we proceed.
- Acknowledge that you will not write code until the full specification is locked.
Notice the phrase: "Do NOT write any application code... Acknowledge that you will not write code until the full specification is locked." This prevents Cursor or Claude from rushing into half-baked React components.
3. Stage 2: Expanding The Scope — Adding a Robust Invoicing Engine
Any good time tracking software has the ability to send invoices, and we want that to be pretty robust. So, we'll add this part:
Think about the actual user journey. A freelancer or boutique agency doesn't track hours just to admire pretty charts on a dashboard. At the end of every two-week sprint or month-end billing cycle, the project manager needs to bill their client and get paid. If your time tracker can't turn logged hours into clean, professional invoices, users are forced to manually re-type their hours into an external tool—creating data duplication and accounting errors.
So, what do we actually need our invoicing engine to do?
- Customizable Invoice Numbering: Businesses already have existing accounting systems (QuickBooks, FreshBooks, Xero). They cannot use random database UUIDs. The tool must support custom prefixes and sequential auto-incrementing (like
INV-2026-001orACME-042) unique to each workspace. - Custom Dates & Payment Terms: The user needs to set custom issue dates, due dates, and standard payment terms (Net 15, Net 30, Due Upon Receipt).
- Itemized Line Items Tied to Exact Timestamps: When the user selects a billing date range (e.g., Oct 1 – Oct 15), the system must query unbilled time entries and generate itemized line items displaying exact dates, start/end timestamps, tasks, and rates so clients have total transparency into what they are paying for.
- Tax & Currency Precision: Configurable sales tax or VAT percentages with automatic subtotal and total calculations stored strictly in integer cents to eliminate floating-point math bugs.
- Audit Locking: Once an invoice is generated or sent, those associated time entries must automatically be marked
is_locked = trueso contractors cannot alter hours after an invoice has gone out.
Watch how we introduce this to the agent's Planning Mode prompt. By adding these functional requirements now, we force the AI to think through data relationships and race conditions before writing a single button:
Act as a Principal Systems Architect.
We are going into PLANNING MODE. Do NOT write any application code, do NOT create files, and do NOT install packages yet.
I want to build a production-grade Time Tracking Application.
Core capabilities required:
1. Live clock-in / clock-out timer with idle time detection.
2. Tagging hours by Client, Project, and Billable Rate tier.
3. Daily/Weekly summary dashboard with time distribution charts.
4. Multi-user workspace with Role-Based Access Control (Admins, Contractors, Viewers).
// ── [NEW] CUSTOMIZABLE INVOICE GENERATOR & BILLING ENGINE ──
Invoice Engine Requirements:
1. Customizable Numbering: Support custom invoice prefix and sequential auto-increment per workspace (e.g., `INV-2026-001` or `ACME-042`).
2. Custom Dates & Terms: Configurable issue date, due date, and payment terms (Net 15, Net 30, Due Upon Receipt).
3. Itemized Time Logs: Automatically aggregate unbilled time entries within the selected date range into line items with exact dates, start/stop timestamps, and billable rates.
4. Tax & Totals: Calculate subtotal, configurable tax/VAT percentage, and total amounts strictly in integer cents.
5. Invoicing State: Mark invoiced time entries as locked (`is_locked = true`) to prevent post-billing modification.
Your initial task in Planning Mode:
- Clarify any ambiguous product requirements or edge cases.
- Present a high-level breakdown of the system before we proceed.
- Acknowledge that you will not write code until the full specification is locked.
By tying the prompt directly to what the application actually does, you eliminate the risk of the agent building a toy calculator instead of a true transactional invoicing system.
4. Stage 3: Adding Stack Constraints & The 200-Line File Cap
Now that our product scope includes both a live real-time timer and a multi-line invoice calculation engine, the danger of AI-generated code bloat skyrockets.
If you leave the tech stack up to an LLM, it will take the path of least resistance: dumping the timer hook, the invoice table, the tax calculation, and the export modal into one horrifying 1,400-line page.tsx. We prevent this by locking down the exact modern stack and enforcing an uncompromising 200-line modular file cap:
Act as a Principal Systems Architect.
We are going into PLANNING MODE. Do NOT write any application code, do NOT create files, and do NOT install packages yet.
I want to build a production-grade Time Tracking & Invoicing Application.
Core capabilities required:
1. Live clock-in / clock-out timer with idle time detection.
2. Tagging hours by Client, Project, and Billable Rate tier.
3. Daily/Weekly summary dashboard with time distribution charts.
4. Customizable Invoice Generator: Generate client invoices with custom invoice numbering (e.g. prefix + sequential format `INV-2026-001`), customizable issue/due dates, payment terms, tax rates, and itemized line items mapped to exact dates and timestamps.
5. Multi-user workspace with Role-Based Access Control (Admins, Contractors, Viewers).
// ── [NEW] TECH STACK & ARCHITECTURAL CONSTRAINTS ──
Stack Specifications:
- Framework: Next.js 14 (App Router) + TypeScript (Strict Mode).
- Database: PostgreSQL with Supabase / Neon (Must support connection pooling).
- Styling: Tailwind CSS with clean semantic HTML.
- State Management: Server State via TanStack Query (React Query); Client Timer via dedicated custom hook.
Modularity Rules:
- Hard File Cap: No single file may exceed 200 lines of code. Monolithic components will be rejected.
- Separation of Concerns: Presentation components (`/components`), custom hooks (`/hooks`), business logic (`/lib`), and server actions (`/actions`) must reside in isolated folders.
- No Mock State in Production Paths: Never use inline mock state arrays or `localStorage` as a substitute for real transactional persistence.
Your initial task in Planning Mode:
- Clarify any ambiguous product requirements or edge cases.
- Present a high-level breakdown of the system before we proceed.
- Acknowledge that you will not write code until the full specification is locked.
The 200-line file cap is vital. When files cross 400 lines, AI context windows start hallucinating or overwriting existing features. Forcing atomic separation keeps every component reviewable.
Need a principal engineer to co-design your planning prompt, database schema, and test harness?
5. Stage 4: Schema-First Data Modeling & UTC Timezones
In a time tracking application with client invoicing, the number one source of catastrophic production bugs is timezones and timestamp precision. If contractor A starts a timer in London (UTC+1) and the admin reviews reports in New York (UTC-4), naive string dates like "2026-10-15" will cause billing discrepancies and payroll disputes.
In our guide on How to Build a Great AI Prompt for Your MVP, we emphasized schema-first prompting. Now we bake those data entity requirements directly into our growing planning prompt:
Act as a Principal Systems Architect.
We are going into PLANNING MODE. Do NOT write any application code, do NOT create files, and do NOT install packages yet.
I want to build a production-grade Time Tracking & Billing Application.
Core capabilities required:
1. Live clock-in / clock-out timer with idle time detection.
2. Tagging hours by Client, Project, and Billable Rate tier.
3. Daily/Weekly summary dashboard with time distribution charts.
4. Customizable Invoice Generator: Generate client invoices with custom invoice numbering (e.g. prefix + sequential format `INV-2026-001`), customizable issue/due dates, payment terms, tax rates, and itemized line items mapped to exact dates and timestamps.
5. Multi-user workspace with Role-Based Access Control (Admins, Contractors, Viewers).
// ── TECH STACK & ARCHITECTURAL CONSTRAINTS ──
Stack Specifications:
- Framework: Next.js 14 (App Router) + TypeScript (Strict Mode).
- Database: PostgreSQL with Supabase / Neon (Must support connection pooling).
- Styling: Tailwind CSS with clean semantic HTML.
- State Management: Server State via TanStack Query (React Query); Client Timer via dedicated custom hook.
Modularity Rules:
- Hard File Cap: No single file may exceed 200 lines of code. Monolithic components will be rejected.
- Separation of Concerns: Presentation components (`/components`), custom hooks (`/hooks`), business logic (`/lib`), and server actions (`/actions`) must reside in isolated folders.
- No Mock State in Production Paths: Never use inline mock state arrays or `localStorage` as a substitute for real transactional persistence.
// ── [NEW] SCHEMA SPECIFICATIONS & RELATIONAL MODELING ──
Data Model Requirements:
1. All timestamp columns (`started_at`, `ended_at`, `created_at`) MUST be stored in `TIMESTAMPTZ` (UTC). Timezone conversion happens strictly in the client view layer.
2. Provide explicit database entities:
- `workspaces` (id, name, created_at)
- `users` (id, workspace_id, email, role, hourly_rate_cents)
- `projects` (id, workspace_id, client_name, project_name, is_billable, default_rate_cents)
- `time_entries` (id, workspace_id, user_id, project_id, started_at, ended_at, duration_seconds, is_locked)
- `invoices` (id, workspace_id, project_id, invoice_number, issue_date, due_date, status, subtotal_cents, tax_percent, total_cents, notes)
- `invoice_line_items` (id, invoice_id, time_entry_id, description, hours, rate_cents, total_cents)
3. Foreign key constraints and database indexes on (`workspace_id`, `user_id`, `started_at`) must be defined upfront.
4. Prevent overlapping active timers per user via database-level exclusion constraints or transactional validation guards.
5. Enforce unique composite constraint on (`workspace_id`, `invoice_number`) to prevent duplicate invoice numbers across concurrent sessions.
Your initial task in Planning Mode:
- Clarify any ambiguous product requirements or edge cases.
- Present a high-level breakdown of the system before we proceed.
- Acknowledge that you will not write code until the full specification is locked.
6. Stage 5: Mandating Regression Testing Before & After Every Feature
Here is the most critical missing ingredient in modern AI coding: Regression Testing Discipline.
When you build Feature 1 (Timer Clock-In), it works. Then you ask the agent for Feature 2 (Custom Invoicing), and the agent inadvertently breaks the timer math or creates race conditions in invoice sequential numbering. If there is no automated test runner in place, you won't realize Feature 1 is broken until days later when you manually test the app.
To solve this, we instruct the agent that testing is a prerequisite gate. The agent must formulate a test suite, run tests before modifying code, and re-run all tests after modifying code:
Act as a Principal Systems Architect.
We are going into PLANNING MODE. Do NOT write any application code, do NOT create files, and do NOT install packages yet.
I want to build a production-grade Time Tracking & Billing Application.
Core capabilities required:
1. Live clock-in / clock-out timer with idle time detection.
2. Tagging hours by Client, Project, and Billable Rate tier.
3. Daily/Weekly summary dashboard with time distribution charts.
4. Customizable Invoice Generator: Generate client invoices with custom invoice numbering (e.g. prefix + sequential format `INV-2026-001`), customizable issue/due dates, payment terms, tax rates, and itemized line items mapped to exact dates and timestamps.
5. Multi-user workspace with Role-Based Access Control (Admins, Contractors, Viewers).
// ── TECH STACK & ARCHITECTURAL CONSTRAINTS ──
Stack Specifications:
- Framework: Next.js 14 (App Router) + TypeScript (Strict Mode).
- Database: PostgreSQL with Supabase / Neon (Must support connection pooling).
- Styling: Tailwind CSS with clean semantic HTML.
- State Management: Server State via TanStack Query (React Query); Client Timer via dedicated custom hook.
Modularity Rules:
- Hard File Cap: No single file may exceed 200 lines of code. Monolithic components will be rejected.
- Separation of Concerns: Presentation components (`/components`), custom hooks (`/hooks`), business logic (`/lib`), and server actions (`/actions`) must reside in isolated folders.
- No Mock State in Production Paths: Never use inline mock state arrays or `localStorage` as a substitute for real transactional persistence.
// ── SCHEMA SPECIFICATIONS & RELATIONAL MODELING ──
Data Model Requirements:
1. All timestamp columns (`started_at`, `ended_at`, `created_at`) MUST be stored in `TIMESTAMPTZ` (UTC). Timezone conversion happens strictly in the client view layer.
2. Provide explicit database entities: `workspaces`, `users`, `projects`, `time_entries`, `invoices`, `invoice_line_items`.
3. Foreign key constraints and database indexes on (`workspace_id`, `user_id`, `started_at`) must be defined upfront.
4. Prevent overlapping active timers per user via database-level exclusion constraints or transactional validation guards.
5. Enforce unique composite constraint on (`workspace_id`, `invoice_number`) to prevent duplicate invoice numbers across concurrent sessions.
// ── [NEW] TEST HARNESS & REGRESSION TESTING GATES ──
Testing Infrastructure (Vitest + Playwright / React Testing Library):
1. Test-Driven Planning: For every feature phased into our implementation roadmap, define explicit unit tests for business logic and integration tests for user flows.
2. Pre-Implementation Regression Check: Before modifying code for any new phase, run existing test suites to establish a clean passing baseline.
3. Post-Implementation Regression Check: After implementing a feature, re-run all test suites. Any regressions or broken tests must be resolved immediately before proceeding.
4. Critical Test Scenarios:
- Duration Calculation: Calculating elapsed seconds across daylight saving transitions and midnight crossings.
- Concurrency: User simultaneously clocking in on two devices (must reject or reconcile the second timer).
- Rounding & Money: Precision calculation of fractional hours multiplied by billable cents without floating point drift.
- Invoice Numbering: Concurrency test ensuring sequential numbering (`INV-YYYY-NNN`) increments atomically without duplicate key conflicts.
- Date Range Filtering: Test that time entries on boundary timestamps (e.g. 23:59:59 on end date) are accurately included without timezone leakage.
Your initial task in Planning Mode:
- Clarify any ambiguous product requirements or edge cases.
- Present a high-level breakdown of the system before we proceed.
- Acknowledge that you will not write code until the full specification is locked.
7. Stage 6: Hardening Security, Row-Level Access & Secret Isolation
In a multi-tenant B2B tool, contractor and client financial isolation is non-negotiable. If Contractor X modifies an API payload, they must never be allowed to view Contractor Y's hourly rate, Company Z's timesheets, or another workspace's invoice numbers.
Additionally, as highlighted in our guide on Publishing Vibe-Coded Apps Without the CLI, AI agents frequently leak API keys or bypass Row-Level Security (RLS). We bake strict security guardrails directly into the prompt:
// ... [Includes all Stages 1-5 above] ...
// ── [NEW] SECURITY, TENANT ISOLATION & SECRETS RULES ──
Security & Auth Guardrails:
1. Zero Client-Side Secret Exposure: All billing calculations, rate card mutations, and external API requests (e.g. Stripe, email invoicing) must occur strictly in server-side routes or Server Actions. Never prefix private tokens with `NEXT_PUBLIC_`.
2. Row-Level Security (RLS): Write explicit Supabase / PostgreSQL RLS policies ensuring:
- Users can only view or mutate records matching their verified `workspace_id`.
- Contractors can only view their own `time_entries` and assigned `projects`.
- Only users with role `admin` can read `hourly_rate_cents` across team members or generate invoices.
3. Input Validation: Every incoming server payload must be validated via a strict Zod schema before hitting the database layer.
4. Server Session Validation: Verify JWT session authenticity using `supabase.auth.getUser()` on every request—never trust client-supplied user IDs in headers.
Your initial task in Planning Mode:
- Clarify any ambiguous product requirements or edge cases.
- Present a high-level breakdown of the system before we proceed.
- Acknowledge that you will not write code until the full specification is locked.
8. Stage 7: Real-World Edge Cases, Tab Suspension & Accessibility (a11y)
What happens when a contractor starts a timer, shuts their laptop lid, and opens it 4 hours later? If your timer was implemented with a simple setInterval() in JavaScript, modern browsers (Chrome/Safari) throttle or suspend inactive background tabs. When they reopen the laptop, the counter is frozen or inaccurate.
In planning mode, you force the AI to solve these real-world architectural bugs upfront:
// ... [Includes all Stages 1-6 above] ...
// ── [NEW] REAL-WORLD EDGE CASES & ACCESSIBILITY (A11Y) ──
Edge Case Specifications:
1. Clock Drift & Tab Suspension:
- Do NOT calculate elapsed time by incrementing a state counter every 1000ms.
- Always calculate elapsed duration by taking the delta: `(current_server_timestamp - started_at)`.
- When the user returns to the tab (`visibilitychange` event), recalculate elapsed time from the database timestamp immediately.
2. Offline Recovery:
- If network drops while a timer is running, cache the stop event timestamp in IndexedDB and reconcile with the server upon reconnection.
3. Accessibility & Usability:
- Full keyboard navigation: Hotkeys for start/stop (e.g. `Ctrl/Cmd + Alt + S`).
- High-contrast visual timer state indicators for screen readers (`aria-live="polite"`).
- Empty states with clear guidance when a project has zero logged hours.
Your initial task in Planning Mode:
- Clarify any ambiguous product requirements or edge cases.
- Present a high-level breakdown of the system before we proceed.
- Acknowledge that you will not write code until the full specification is locked.
9. Stage 8: The Master Copy-Paste Planning Prompt (With Placeholders)
Here is the complete, unified Planning Mode prompt assembled from all seven stages. It includes configurable placeholders ([YOUR_PRODUCT_NAME], [YOUR_DATABASE], [YOUR_CORE_ENTITIES]) so you can copy and paste it directly into Claude Code, Cursor (.cursorrules), Lovable, or Bolt for your next MVP.
Act as a Principal Software Architect. We are entering STRICT PLANNING MODE. Rules of Engagement: 1. Do NOT write any application source code. 2. Do NOT create, overwrite, or edit production files yet. 3. Do NOT execute package installations. 4. Your sole responsibility is to design a complete, battle-hardened technical specification, data schema, and regression test harness. ================================================================ 1. PRODUCT OVERVIEW & SCOPE ================================================================ Application: [Time Tracking & Billing Tool / YOUR_PRODUCT_NAME] Target Users: [Contractors, Small Agencies, Freelancers / YOUR_USERS] Core Capabilities: - [Live clock-in / clock-out timer with idle time detection] - [Tagging hours by Client, Project, and Billable Rate tier] - [Daily/Weekly summary reports with export capabilities] - [Customizable Invoice Generator: sequential invoice numbering with custom prefix (e.g. `INV-2026-001`), issue/due dates, payment terms, tax calculation, and itemized time ranges with exact timestamps] - [Workspace tenant isolation with Role-Based Access Control: Admin, Member, Viewer] ================================================================ 2. TECH STACK & ARCHITECTURAL CONSTRAINTS ================================================================ - Frontend/Framework: [Next.js 14 App Router / React Vite / YOUR_FRAMEWORK] - Language: TypeScript in Strict Mode (`noImplicitAny: true`) - Database: [PostgreSQL via Supabase or Neon with Port 6543 Pooling / YOUR_DB] - State Architecture: Server State via TanStack Query; UI state separated from business logic. - Modular File Limit: No single file may exceed 200 lines of code. Split components into atomic presentation elements, custom hooks, and server actions. - No Mocking in Production Paths: Never use inline mock state arrays or `localStorage` as a substitute for real transactional persistence. ================================================================ 3. SCHEMA-FIRST DATA MODELING & TIMEZONES ================================================================ - All timestamps must be stored as `TIMESTAMPTZ` in UTC. Timezone rendering is strictly a UI concern. - Primary Entities required: [workspaces, users, projects, time_entries, invoices, invoice_line_items] - Foreign key constraints, unique composite indexes, and query performance indexes (on workspace_id, user_id, timestamps, invoice_number) must be drafted in SQL migrations before UI components exist. - Exclusion / Transaction guards: Prevent duplicate or overlapping active timers per user, and enforce unique composite constraint on (`workspace_id`, `invoice_number`). ================================================================ 4. TEST HARNESS & REGRESSION TESTING GATES ================================================================ - Test Runner: [Vitest + React Testing Library + Playwright / YOUR_TEST_RUNNER] - Two-Gate Regression Rule: 1. Pre-Implementation: Run all existing tests to establish a green baseline. 2. Post-Implementation: Re-run all test suites after any file modification. Any regression or broken test must be remediated before starting the next feature. - Mandatory Test Scenarios: - Duration & date math across daylight saving and midnight boundaries. - Floating-point financial precision (store currency in integer cents). - Multi-tab or multi-device concurrency conflicts. - Sequential invoice numbering race condition tests (atomic generation without number collision). - Accurate date/time range filtering for line items without boundary bleed. ================================================================ 5. SECURITY & TENANT ISOLATION ================================================================ - Row-Level Security (RLS): Every query must verify `workspace_id = auth.workspace_id()`. - Secret Isolation: Keep all API keys, billing secrets, and private credentials strictly in server-side functions. Never leak secrets to client bundles. - Input Sanitization: Validate all incoming payloads with strict Zod schemas. ================================================================ 6. REAL-WORLD EDGE CASES & ACCESSIBILITY ================================================================ - Clock Drift: Calculate elapsed time via delta against the server timestamp upon `visibilitychange`. - Offline Grace: Cache active state in IndexedDB during brief network disconnections and reconcile on reconnect. - Accessibility (a11y): High-contrast states, keyboard shortcuts, and `aria-live` screen-reader announcements. ================================================================ YOUR DELIVERABLE IN THIS PLANNING SESSION: ================================================================ 1. Ask me up to 5 clarifying questions about business logic trade-offs. 2. Outline a phased 5-step implementation roadmap with explicit test criteria for each phase. 3. Provide the initial SQL schema migration script with RLS policies and indexes. Confirm your understanding of these rules before proceeding.
10. Stage 9: The Payoff: Why 2 Hours of Planning Beats 3 Days of Debugging
When you feed an AI agent a prompt like this, the conversation changes completely:
- Starts coding in 15 seconds.
- Creates an 800-line spaghetti component.
- Hardcodes user rates in client JavaScript.
- Breaks the timer when adding project tags.
- Crashes under 20 concurrent users.
- Result: Total codebase rewrite after 1 week.
- Spends 60 minutes interviewing you on edge cases.
- Generates atomic, tested files under 200 lines.
- Locks data in UTC with Postgres indexes and RLS.
- Runs automated tests before and after each feature.
- Handles tab suspension and offline sync seamlessly.
- Result: Production-ready MVP ready for real traffic.
The next time you open Cursor, Claude, or Bolt, do not ask for a feature. Ask for a plan. Treat your AI agent like an eager junior engineer who needs precise architectural guidance, and watch your prototype ship without the pain.
See the Time Tracker & Invoice Generator in Action
Here is the exact application built from the prompt above: live clock-in/out timer with clock drift recovery, project rate tiers, green Vitest regression suites, and customizable invoice generation with date ranges and sequential numbering.