# Law firms: project tracker using Laravel

## Summary
A project tracker blueprint for law firms built with Laravel on Ample. Domain schema: 
- **client_entities** (name, entity_type, conflict_check_reference): clients with conflict-check status
- **matters** (client_entity_id, practice_area, opened_at, closed_at, status): engagement periods as matters
- **document_requests** (matter_id, title, due_at, status, uploaded_object_key): documents requested from the client
- **shared_documents** (matter_id, title, object_key, authorized_role): documents released to authorized client contacts
- **state_transitions** (record_type, from_state, to_state): the allowed state machine.

Public information: practice areas and attorney profiles, intake process and fee structure overview, office locations. Kept out of scope until handling is reviewed: privileged communications and case files, identity and financial documents, opposing-party information. Matter documents are privileged; the portal models per-matter authorization only. Professional-conduct and confidentiality obligations are not established here.

## Technical Basis Verified on Laravel
- A workspace-scoped table
- An explicit state machine (draft to review to published) that rejects invalid transitions
- A cross-workspace read that returns nothing (transitions=true isolation=true).

## Prerequisites
- A Laravel project (composer install --no-dev from composer.lock, then FrankenPHP serving public/ (php-server with the index.php fallback) reading PORT on the php-8.5 template)
- A PostgreSQL driver reading DATABASE_URL (auto-provisioned when omitted)
- Bucket credentials from `ample bucket create` passed as encrypted S3_* environment variables
- A review of which law firms data classes may be handled at all; this blueprint models public information only

## Workflow Steps
1. Model the law firms domain: Create the tables client_entities, matters, document_requests, shared_documents, state_transitions.
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.
7. Verify: Run the pattern self-test(s) from the example (/p/relational-records) and your own acceptance checks for the law firms workflow.

## Success Checks
- App responds on its public URL: **ample canary laravel patterns**
- Relational-records self-test from the example

## Limitations
- The technical basis (relational records on Laravel) was verified with the pattern fixture; the law firms 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.

## Cost Estimate
- **Currency:** USD
- **Monthly Amount:** 10.0
- **Basis:** size prices from pricing.toml (loaded by the API)

### Components
- App server: s-1vcpu-1gb, Quantity: 1.0, Monthly Amount: 5.0
- Managed PostgreSQL database: s-1vcpu-1gb, Quantity: 1.0, Monthly Amount: 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.
