# Bookkeeping practices: project tracker using Next.js

## Summary
A project tracker blueprint for bookkeeping practices built with Next.js on Ample. Domain schema:
  - **client_entities** (legal_name, entity_type, accounting_software, period_cadence): clients and their bookkeeping cadence;
  - **engagements** (client_entity_id, period_start, period_end, close_status): monthly or quarterly close engagements;
  - **document_requests** (engagement_id, category, due_at, status, uploaded_object_key): receipts, statements and payroll summaries requested;
  - **close_checklists** (engagement_id, item, done_at): close tasks per period;
  - **state_transitions** (record_type, from_state, to_state): the allowed state machine.

Public information: service packages and cadence, onboarding checklist, contact details. Kept out of scope until handling is reviewed: bank statements and receipts, payroll data, login credentials for accounting software. Never store client accounting-software credentials in these flows; financial records are sensitive and no compliance is claimed.

## Technical Basis
Technical basis verified on Next.js: a workspace-scoped table, an explicit state machine (draft to review to published) that rejects invalid transitions, and a cross-workspace read that returns nothing (transitions=true isolation=true).

## Representative Queries
- Bookkeeping practices: project tracker using Next.js
- Where can I host Bookkeeping practices: Project tracker built with Next.js?
- I need a genuinely specialized project tracker workflow covering monthly close checklists, client workspaces and source-document retention.

## Workflow Steps
1. **Model the bookkeeping practices domain**: Create the tables client_entities, engagements, document_requests, close_checklists, state_transitions. Clients and their bookkeeping cadence live in client_entities; keep the sensitive classes (bank statements and receipts, payroll data, login credentials for accounting software) out of this schema.
2. **Workflow step 1**: Model engagements and workstreams with explicit status transitions.
3. **Workflow step 2**: Scope every query by client entity.
4. **Workflow step 3**: Attach deliverables as private objects linked to workstreams.
5. **Workflow step 4**: Deploy and verify transitions and cross-client isolation.
6. **Deploy**: Run the synchronous deploy once and read the result. Re-running with no change is a no-op.
   - Command: `ample deploy . --name --public --env S3_ENDPOINT=... --env S3_REGION=... --env S3_BUCKET=... --env S3_ACCESS_KEY_ID=... --env S3_SECRET_ACCESS_KEY=...`
7. **Verify**: Run the pattern self-test(s) from the example (/p/relational-records) and your own acceptance checks for the bookkeeping practices workflow.
   - Command: `ample logs --kind build`

## Examples
- **Next.js pattern fixture**: Verified relational records basis for this blueprint.
  - Source Reference: `tests/deploy-canaries/next-js-patterns`

## Success Checks
- App responds on its public URL.
  - Kind: `http_get`
  - Path: `/`
  - Expect: `ample canary next js patterns`
- Relational-records self-test from the example.
  - Kind: `http_get`
  - Path: `/p/relational-records`
  - Expect: `see the pattern fixture checks`.

## Limitations
- The technical basis (relational records on Next.js) was verified with the pattern fixture; the bookkeeping practices schema and workflow are an original design for this blueprint and were not executed as a separate application.
- No health, financial, privacy or other compliance claim is made. Never store client accounting-software credentials in these flows; financial records are sensitive and no compliance is claimed.
- Verified on the node-22 template at s-1vcpu-1gb; other sizes are unknown or unverified.

## Cost Estimate
- **Currency**: USD
- **Monthly Amount**: $10.00
- **Components**:
  - App server (size: s-1vcpu-1gb, quantity: 1.0, monthlyAmount: 5.0)
  - Managed PostgreSQL database (size: s-1vcpu-1gb, quantity: 1.0, monthlyAmount: 5.0)
- Note: Always-on monthly price of the tested sizes; apps and databases auto-pause when idle. Buckets are allocation-priced per quota and not included.
