# Architecture practices: project tracker using Django

## Summary
A project tracker blueprint for architecture practices built with Django on Ample. Domain schema: client_entities (name, entity_type, site_address): clients and project sites; projects (client_entity_id, project_name, stage, period_start, period_end): engagement periods by RIBA/AIA-style stage; drawing_sets (project_id, set_name, revision, object_key, issued_at): versioned drawing issues; approvals (project_id, drawing_set_id, approver_role, decided_at, decision): client sign-offs per issue; state_transitions (record_type, from_state, to_state): the allowed state machine. Public information: portfolio and services, team and accreditations, studio locations. Kept out of scope until handling is reviewed: unreleased drawings and site surveys, planning submissions before filing, client contact details. Drawings and surveys are client-confidential until issued; the portal models per-project authorization only. Technical basis verified on Django: 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
- Architecture practices: project tracker using Django
- Where can I host Architecture practices: Project tracker built with Django?
- I need a genuinely specialized project tracker workflow covering project phases, drawing versions and reviewer access.

## Workflow Steps
1. **Model the architecture practices domain**: Create the tables client_entities, projects, drawing_sets, approvals, state_transitions. Clients and project sites lives in client_entities; keep the sensitive classes (unreleased drawings and site surveys, planning submissions before filing, client contact details) 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.
   ```
   ample deploy . --name  --public --start "python3 run.py" --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 architecture practices workflow.
   ```
   ample logs  --kind build
   ```

## Limitations
- The technical basis (relational records on Django) was verified with the pattern fixture; the architecture 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. Drawings and surveys are client-confidential until issued; the portal models per-project authorization only.
- Public content and synthetic examples only until actual data-handling requirements have been reviewed.
- Verified on the python-3.12 template at s-1vcpu-1gb; region, request-duration limits and other sizes are unknown or unverified.
- Managed PostgreSQL 16 only; extensions, connection limits and backup or restore procedures are not verified.
- PutObject and GetObject with path-style addressing are verified; other S3 operations and CDN cache rules are not.

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

## Cost Estimate
- **Currency**: USD
- **Monthly Amount**: 10.0
- **Basis**: size prices from pricing.toml (loaded by the API) at build revision 1ac5595375130d45290090e82ed0f554ccd45405-dirty
### Components
- **App server**
   - Size: s-1vcpu-1gb 
   - Quantity: 1.0 
   - Monthly Amount: 5.0
- **Managed PostgreSQL database**
   - Size: 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.

## Examples
- **Title**: Django pattern fixture
- **Description**: Verified relational records basis for this blueprint.
- **Source Ref**: tests/deploy-canaries/django-patterns

## Evidence Summary
- **Kind**: canary_run
  - **Summary**: Django pattern fixture deployed on Ample; the relational records checks passed: 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).
  - **Observed At**: 2026-09-20T03:31:44Z
  - **Implementation Revision**: 03b6402b1b3e19178985f08ea4033804521d85d4-dirty (CLI b75e104)
  - **Expires At**: 2027-03-19T03:31:44Z
  - **Scope**: 
    - **Checks**: [/p/relational-records] 
    - **Pattern**: pattern:relational-records 
    - **Template**: python-3.12

## Next Actions
- **Browse the catalog index**
   - **Action ID**: browse-catalog
   - **Method**: GET
   - **Relative Path**: /v1/catalog
- **Search published recipes** by intent, stack and constraints
   - **Action ID**: search-recipes
   - **Method**: POST
   - **Relative Path**: /v1/catalog/search
   - **Parameters**: {"body":{"limit":5,"query":"Architecture practices: project tracker using Django"}}
- **Prepare a side-effect-free deployment plan** for an authorized project
   - **Action ID**: plan:page:blueprints:architecture-practices:project-tracker:django
   - **Method**: POST
   - **Relative Path**: /v1/catalog/plan
   - **Parameters**: {"body":{"inputs":{},"projectId":"","recipeId":"page:blueprints:architecture-practices:project-tracker:django","recipeRevision":"r1"}}
- **Read the existing agent authentication setup**
   - **Action ID**: auth-setup
   - **Method**: GET
   - **Relative Path**: /mcp/setup
- **Browse Architecture practices**
   - **Action ID**: browse:industry:architecture-practices
   - **Method**: GET
   - **Relative Path**: /v1/catalog/nodes/industry%3Aarchitecture-practices
- **Browse Project tracker**
   - **Action ID**: browse:workload:project-tracker
   - **Method**: GET
   - **Relative Path**: /v1/catalog/nodes/workload%3Aproject-tracker
- **Browse Django**
   - **Action ID**: browse:stack:framework-django
   - **Method**: GET
   - **Relative Path**: /v1/catalog/nodes/stack%3Aframework-django
- **Browse Deploy web app**
   - **Action ID**: browse:intent:deploy-web-app
   - **Method**: GET
   - **Relative Path**: /v1/catalog/nodes/intent%3Adeploy-web-app
