- name
- unitcycle-demo technical details (updated 2026-04-06)
- description
- Build workflow, database, API structure, key gotchas for the unitcycle-demo project
- type
- project
Codebase Identity
- Location:
/home/claude/projects/unitcycle-demo/ (symlinked from /home/claude/claude_code/unitcycle-demo/)
- Repo:
rafael-private/unitcycle-demo (master). Auth as deploystaff.
- Stack: Angular 19 (frontend) + Django 5 + DRF (backend) + PostgreSQL 17
Build & Deploy
cd /home/claude/projects/unitcycle-demo
npx ng build
cp -r dist/unitcycle/browser/* .
pm2 restart unitcycle
- Property images AUTO-INCLUDED in build via angular.json assets config
- NEVER run
ng serve or python manage.py runserver — PM2 manages both
- NEVER deploy if property cards show map thumbnails instead of photos
Database
- Name:
unitcycle_demo
- User:
propintel / Password: propintel2024
- 33 properties, 6,666 units, ~6,258 occupied
API Endpoints (server.js port 4400)
/api/properties/ — list properties
/api/properties/stats/ — portfolio KPIs (snake_case)
/api/dashboard/stats/ — dashboard stats (camelCase — different format!)
/api/work-orders/, /api/invoices/, /api/vendors/, /api/units/, /api/owners/, /api/collections/, /api/renewals/
Frontend
- 62 features in
src/app/features/
- Standalone components, OnPush, signals, @if/@for/@switch
- Tailwind CSS + CSS custom properties — ZERO hardcoded hex
- Navy + Gold branding. Manrope headings, Inter body.
- ApexCharts only. Reactive Forms only.
Mandatory Agents
agents/pm-research.md — research before features
agents/angular-frontend.md — all frontend work
agents/django-backend.md — all backend work
Gotchas
claude_code/unitcycle-demo = SYMLINK to projects/unitcycle-demo
/api/properties/stats/ (snake_case) vs /api/dashboard/stats/ (camelCase) — use the right one
- unitcycle-austria is SEPARATE — don't mix
- HTML pages for Rafael → always Nginx, never raw IP:port
- NEVER create Django app named
collections — shadows stdlib