Files
TimeTracker/docs/competitive-analysis/PHASE_1_PRD.md
T
Dries Peeters 9b7f6a54b0 docs: update project structure, quality gates, competitive analysis, and index
- PROJECT_STRUCTURE: add workforce/timesheet governance, desktop/mobile, workforce templates
- Add FRONTEND_QUALITY_GATES.md (a11y, performance, modernization milestones)
- Add competitive-analysis (gap rubric, phase 1/2 PRDs)
- Link new docs from development/README and main docs README
2026-03-06 15:46:18 +01:00

144 lines
9.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Phase 1 PRD: Freelancer-Critical Gaps
**Version:** 1.0
**Status:** Draft
**Audience:** Individuals and freelancers (primary); small teams (secondary).
**Related:** [GAP_RUBRIC.md](GAP_RUBRIC.md), Competitive Feature Gap Analysis plan.
---
## 1. Purpose and Goals
Phase 1 closes the highest-impact gaps for freelancers and small teams by:
1. **Timesheet period close** — Formal submit/approve/close workflow so time is locked by period and ready for billing/payroll.
2. **Payroll-ready exports and payroll connectors** — Structured exports and optional integrations so users can hand off data to payroll or accounting without manual rework.
3. **Mobile and desktop parity for invoicing, expenses, and reporting** — Core cash-flow actions (invoices, expenses, basic reports) available in mobile and desktop apps, not only on the web.
Success is measured by: reduced time-to-invoice, fewer support requests about “how do I get my data to payroll?”, and increased use of mobile/desktop for invoicing and expenses.
---
## 2. Scope
### In scope
- Timesheet period model and period-based submit/approve/close workflow (with locking).
- Payroll-ready export formats (e.g. CSV/Excel with required fields and optional templates).
- At least one payroll or accounting connector (e.g. export format accepted by a major payroll provider, or sync to QuickBooks/Xero for payroll-related data).
- Mobile app: list/create/edit invoices; list/add expenses; view a basic time/revenue report.
- Desktop app: same as mobile (list/create/edit invoices; list/add expenses; basic report view).
- API support for all new period and export behaviors so mobile/desktop can use them.
### Out of scope for Phase 1
- Full accounting reconciliation or double-entry.
- PTO/leave and time-off (Phase 2).
- Automated activity capture / desktop timeline (backlog).
- Geofencing or field workforce controls (backlog).
### Optional Phase 1 quick wins (from rubric)
- **Focus mode packaging:** Defaults and onboarding that emphasize timer + quick log + invoice for solo users.
- **Mileage GPS UI:** Expose existing GPS mileage backend via routes and UI (start/stop track, create expense from track).
---
## 3. User Stories and Requirements
### 3.1 Timesheet period close
| ID | Role | Story | Acceptance criteria |
|----|------|--------|---------------------|
| T1 | User | As a user, I can submit my time for a given period (e.g. week) so that it is ready for approval. | User selects a period (e.g. week); system validates entries are complete (e.g. no open timer); user submits; period moves to “submitted”. |
| T2 | Approver | As an approver, I can approve or reject a submitted timesheet with a comment. | Approver sees list of submitted periods; can approve or reject with optional comment; submitter is notified. |
| T3 | Admin | As an admin, I can close a period so that no further edits are allowed. | Once closed, time entries in that period are locked (no add/edit/delete); configurable by period type (e.g. weekly/monthly). |
| T4 | User | As a user, I see clearly which periods are draft, submitted, approved, or closed. | UI and API show period status; filters and reports can use it. |
**Requirements:**
- **Period definition:** Support at least weekly period type (e.g. MonSun or configurable start day). Optional: bi-weekly or monthly.
- **Validation:** Before submit, warn or block if there is an active timer or if required fields (e.g. project) are missing on any entry in the period.
- **Locking:** When a period is closed, entries in that period are read-only. Optional: allow admin override with audit log.
- **Notifications:** Optional email/in-app when period is submitted, approved, or rejected.
- **API:** Endpoints for: list periods, get period status, submit period, approve/reject period, close period (admin). Mobile/desktop use these for period status and submit.
### 3.2 Payroll-ready exports and payroll connectors
| ID | Role | Story | Acceptance criteria |
|----|------|--------|---------------------|
| P1 | User | As a user, I can export my time (or my teams) in a payroll-ready format. | Export includes: user, period, hours, rate (if applicable), project/cost center, and other fields required by a defined payroll template. |
| P2 | Admin | As an admin, I can choose a payroll export template (e.g. provider-specific format). | At least one template (e.g. generic CSV with standard columns); optional second template for a specific payroll product. |
| P3 | User | As a user, I can export approved time only so I dont send unapproved data to payroll. | Filter: “approved periods only” or “closed periods only” for export. |
| P4 | User | As a user, I can push time (and optionally expenses) to QuickBooks or Xero for payroll/accounting. | Connector syncs approved/closed time (and optionally expenses) to the connected product; documented limitations and field mapping. |
**Requirements:**
- **Export formats:** CSV and Excel with configurable columns. At least one “payroll” preset: user identifier, name, period start/end, total hours, billable flag, project/code, rate, amount (if applicable).
- **Templates:** Admin can save/select export templates (column set + filters). One template marked as “payroll default”.
- **Approval gating:** Export UI and API support “only approved” or “only closed” periods.
- **Connectors:** Phase 1 delivers at least one of: (a) improved QuickBooks/Xero sync for time (and optionally expenses), or (b) a documented export format that matches a specific payroll providers import. Full bidirectional sync is out of scope; one-way export/sync is in scope.
- **API:** Export endpoint (or report endpoint with format=payroll) that returns payroll-ready data for given period and filters.
### 3.3 Mobile and desktop parity (invoicing, expenses, reporting)
| ID | Role | Story | Acceptance criteria |
|----|------|--------|---------------------|
| M1 | User | As a mobile/desktop user, I can list and open my invoices. | List shows key fields (number, client, amount, status); tap/click opens detail. |
| M2 | User | As a mobile/desktop user, I can create and send a new invoice from tracked time. | User selects period/project/entries; system generates draft invoice; user can edit line items and send (email). |
| M3 | User | As a mobile/desktop user, I can list and add expenses. | List with filters; add expense (amount, category, date, receipt photo optional); link to project. |
| M4 | User | As a mobile/desktop user, I can view a simple time or revenue report. | At least one report: time by project or by period, or revenue/billable summary; same date range and filter options as web where feasible. |
**Requirements:**
- **API:** Mobile and desktop consume existing or new API endpoints. Ensure:
- Invoices: list, get, create, update, “send” (email).
- Expenses: list, get, create, update; optional file upload for receipt.
- Reports: time summary and/or revenue summary by period, project, user (permissions apply).
- **UI:** Mobile (Flutter) and desktop (Electron) add screens for: Invoice list and detail; Invoice create/edit; Expense list and add; Report (one summary view). Reuse existing API tokens and auth.
- **Offline:** Optional: cache invoice and expense list for offline viewing; sync when back online. Not required for Phase 1 MVP if time-consuming.
- **Consistency:** Same business rules as web (e.g. who can see which invoices/expenses, rounding, currency).
---
## 4. Non-Functional Requirements
- **Performance:** Period list and export for 1 year of data for a single user complete in < 5 s under normal load.
- **Security:** Period close and approval actions are permission-controlled; export and connector data respect role and scope.
- **Compatibility:** Existing web flows (timer, time entries, invoicing, expenses) continue to work; period close is additive (e.g. optional per workspace or per role).
- **Accessibility:** New web UI meets existing WCAG 2.1 AA expectations; mobile/desktop follow platform guidelines.
---
## 5. Dependencies and Constraints
- **Existing models:** Time entries, projects, users, approvals (per-entry). Period model is new; period status and lock logic are new.
- **Existing API:** `api_v1` time-entries, invoices, expenses, reports. Extend with period endpoints and payroll export.
- **Mobile/desktop:** Current apps use timer, time entries, projects, tasks. Add invoicing, expenses, and one report; reuse existing auth and API client patterns.
- **Integrations:** QuickBooks and Xero connectors exist; extend for time (and optionally expenses) sync if chosen for Phase 1.
---
## 6. Success Metrics (Targets)
- **Adoption:** X% of active workspaces use at least one of: period submit, payroll export, or mobile/desktop invoice or expense action within 3 months of release (target TBD).
- **Support:** Reduction in “how do I export for payroll?” and “can I invoice from the app?” type tickets.
- **Usage:** Increase in mobile/desktop share of invoice and expense creation (measure via API or analytics if available).
---
## 7. Open Questions
- Period type: weekly only for MVP or also bi-weekly/monthly?
- Payroll connector: prioritize QuickBooks/Xero time sync vs. a specific payroll vendor CSV format?
- Mobile receipt upload: use existing attachment API or new endpoint?
---
## 8. Appendix: Optional Quick Wins
- **Focus mode:** Default dashboard and onboarding path for “solo freelancer”: timer, quick log, “Create invoice from time” and “Add expense” prominent; hide or de-emphasize CRM/inventory for this mode.
- **Mileage GPS UI:** Expose `GPSTrackingService` and `MileageTrack` via REST routes and a simple web UI (start/stop track, create expense from track). Mobile can call same API later.
These can be scheduled in Phase 1 if capacity allows, or immediately after the three main pillars.