Frontend-first SaaS MVP for structured proposal building.
- Next.js 16 (App Router)
- React 19 + TypeScript
- Tailwind CSS
- Headless UI
- TanStack Query
- Prisma ORM + PostgreSQL
- Next.js API routes (Node.js backend)
- Proposal management: create, edit, duplicate, archive, delete
- Proposal list with search, sort, status, last updated
- Structured proposal editor for all required MVP sections
- Drag-and-drop timeline phase ordering
- Cost breakdown table with currency (GBP/USD/EUR), discount, tax/VAT, and totals
- CTA + links editor (primary + secondary destinations)
- Asset/graphics model with placement metadata
- Split editor + live preview layout on desktop
- Print-friendly view and export/share endpoint foundation
- Template-driven architecture with default Gitwork template
- Settings foundation for reusable snippets and company profile defaults
- Workspace-scoped People & Rates roster API for Axis and other clients
- Landing:
/ - App dashboard:
/app - Proposals list:
/app/proposals - Proposal editor:
/app/proposals/[id] - Proposal preview:
/app/proposals/[id]/preview - Print/export-ready view:
/app/proposals/[id]/print - Public shared preview:
/preview/[id] - Settings:
/app/settings - Templates foundation:
/app/templates
GET /api/health(public health check)GET /api/proposalsPOST /api/proposalsGET /api/proposals/[id]PATCH /api/proposals/[id]POST /api/proposals/[id]/duplicatePOST /api/proposals/[id]/archiveDELETE /api/proposals/[id]/deleteGET /api/templatesPOST /api/proposals/[id]/costingPOST /api/proposals/[id]/timelinePOST /api/proposals/[id]/engagement(CTA + links)POST /api/proposals/[id]/export(print/PDF/share-link foundation)GET /api/rate-card/people(supportssearchandincludeArchived=true)POST /api/rate-card/peopleGET /api/rate-card/people/[id]PATCH /api/rate-card/people/[id]DELETE /api/rate-card/people/[id](soft archive)
GET /api/healthis public.- All other
/api/*routes require eitherAuthorization: Bearer <API_KEY>or the internalgitwork_api_sessionHttpOnly cookie used by the app shell. - Configure
API_KEYin the environment.NEXT_PUBLIC_API_KEYis still read as a compatibility fallback, but should be treated as legacy.
- Docs by Gitwork is the source of truth for shared People & Rates.
- Each
RateCardPersonstoresname,area,sourceRate,sourceCurrencyCode, andbillingPeriod(DAY,WEEK,MONTH). - Axis mirrors that roster locally, then converts it to a GBP day rate on-device for proposal pricing.
- The default Gitwork roster is seeded automatically into the default workspace.
prisma/schema.prisma includes:
UserWorkspaceWorkspaceMemberDocumentDocumentTemplateDocumentSectionCostLineItemTimelinePhaseAssetLinkCTAExportRateCardPerson
- Install dependencies:
npm install- Configure environment:
cp .env.example .env- Ensure
DATABASE_URLpoints to a running PostgreSQL instance. - Generate Prisma client:
npm run db:generate- Push schema:
npm run db:push- Seed default Gitwork template + sample proposal:
npm run db:seed- Start the app:
npm run devnpm run devnpm run buildnpm run lintnpm run db:generatenpm run db:pushnpm run db:migratenpm run db:seed
- PDF export is implemented as a foundation via print-optimized output and export records.
- Asset handling is URL-based for MVP.
- Architecture is document-type ready (Proposals now, SLAs and additional docs next).