Production Readiness
Overview¶
SpeedPy intentionally ships demo and placeholder content as teaching examples: a Product CRUD app, demo API endpoints, a demo Celery task, placeholder pages, and a DEMO_MODE login shortcut. These are valuable while learning the framework but should be removed or replaced before going to production.
This guide explains what demo content exists, why it is there, and how to safely remove it from your fork.
What SpeedPy Ships as Demo Content¶
| Category | Artifact | Purpose |
|---|---|---|
| Django app | demoapp/ with Product CRUD at /demo/products/ |
Canonical example for building CRUD screens |
| API endpoint | GET /api/v1/products/ |
Example read-only business resource API |
| API endpoint | POST /api/v1/jobs/demo/ |
Example async job creation (202 + status URL) |
| Celery task | run_demo_job |
Example long-running background task |
| Setting | DEMO_MODE |
Shows hardcoded credentials on the login page |
| Deploy config | appliku_demo.yml |
Pre-configured demo deployment |
| Template sections | SpeedPy UI preview demo links, login credentials block | Demo navigation and credentials |
| Scopes | read:products |
OAuth2/PAT scope for demo Product API |
| Examples | CLI/MCP product commands | Integration starter code referencing demo endpoints |
Tools for Stripping Demo Content¶
SpeedPy provides three complementary tools:
1. Human Checklist (PRODUCTION_READY.md)¶
A step-by-step checklist in the project root covering every removal action. Organized by component with separate guidance for fresh forks (no production data) and existing databases.
2. Demo Manifest (demo-content.json)¶
A machine-readable JSON file listing every demo artifact with:
- Category (django_app, api_endpoint, celery_task, setting, template, etc.)
- Paths to the relevant files
- Settings entries to remove
- Routes to delete
- Removal action:
safe_remove(always safe),review(decide case-by-case), orreplace(provide your own content) - Verification terms for confirming removal
3. Agent Skill (/strip-demo)¶
An audit-first workflow for AI coding agents. It:
- Reads the manifest and scans for
SPEEDPY_DEMOmarkers - Cross-references with the current working tree
- Presents a removal plan organized by severity
- Waits for explicit confirmation before making any changes
- Executes approved removals and verifies the result
The skill ships inside the SpeedPy boilerplate (.claude/skills/strip-demo/) so fork owners inherit it automatically.
Searchable Markers¶
All demo artifacts are marked with SPEEDPY_DEMO comments in the source code. Quick audit:
Every marker corresponds to an entry in demo-content.json. The manifest is the authoritative list — broad keyword searches should not drive deletion decisions.
Key Decisions for Fork Owners¶
AsyncJob: Keep or Remove?¶
The AsyncJob model and JobStatusView implement a reusable 202 Accepted + status URL polling pattern. The demo job (DemoJobCreateView, run_demo_job) is just an example entry point.
- Keep
AsyncJobif your app has background tasks that need progress tracking - Remove only the demo entry point (
DemoJobCreateView,run_demo_job,/api/v1/jobs/demo/) - Remove everything only if you have no async job use case at all
Test Dependencies¶
Several shared tests use /api/v1/products/ as a convenient authenticated endpoint:
test_api_pagination.py— pagination behaviortest_api_throttle.py— rate limitingtest_api_request_id.py— request correlation IDs
Before removing the Product API, migrate these tests to use one of your own domain endpoints. The /strip-demo skill will flag these dependencies.
Placeholder Pages¶
The welcome and pricing pages are functional placeholders. Replace them with your own content rather than deleting them — the root URL (/) must resolve to something.
Database Considerations¶
- Fresh fork (no production data): Delete migration files and drop tables freely.
- Existing database: Write removal migrations or reset the database before deleting model code. Never delete a model file while its table still exists in a production database.
Step-by-Step Guide¶
For the detailed removal steps, see PRODUCTION_READY.md in the project root. The sections cover:
- Remove
demoapp/(Product CRUD) - Remove Product API and scopes
- Remove demo job entry points (keep or remove AsyncJob infrastructure)
- Remove
DEMO_MODEsetting and template blocks - Remove
appliku_demo.yml - Replace placeholder pages
- Clean up SpeedPy UI preview demo links
- Update CLI/MCP examples
- Update documentation references
- Verify with automated checks
Verification¶
After stripping demo content, verify your fork is clean:
# No remaining demo markers (exclude guidance files that legitimately reference the marker)
rg SPEEDPY_DEMO --glob '!PRODUCTION_READY.md' --glob '!demo-content.json' --glob '!AGENTS.md' --glob '!README.md' --glob '!.claude/skills/strip-demo/*'
# No remaining demo references
rg "demoapp" --type py --type html
rg "/api/v1/products/" --type py
rg "run_demo_job" --type py
rg "DEMO_MODE" --type py --type html
# Django checks pass
python manage.py check
# All tests pass
python manage.py test
# OpenAPI schema validates
python manage.py spectacular --file /tmp/speedpy-openapi.yaml --validate
See Also¶
- Deployment — environment configuration and production checklist
- Integration Readiness — verify API, auth, and webhook infrastructure