UnitCycle — Tech Context

Stack

Layer Technology Version
Frontend Angular (standalone) 19.2
CSS Tailwind CSS 4
Backend Django + DRF 5.x
Database PostgreSQL 17
Server Node.js (server.js)
Process Manager PM2
Tests Playwright
Maps MapLibre GL JS 5
AI Claude API claude-sonnet-4-20250514
PDF Extraction LlamaParse

Infrastructure

Project Structure

/home/claude/projects/unitcycle-demo/
├── src/app/
│   ├── features/           # Angular feature modules
│   │   ├── dashboard/
│   │   ├── invoices/
│   │   ├── lease-abstraction/
│   │   ├── lease-generation/
│   │   ├── move-in-inspection/
│   │   ├── properties/
│   │   ├── property-map/
│   │   ├── settings/
│   │   ├── tenant-screening/
│   │   └── work-orders/
│   └── core/               # Services, theme, guards
├── src/styles/
│   └── theme-tokens.css    # 208 CSS variables
├── backend/
│   ├── django_api/         # Django project root
│   └── media/invoices/     # Uploaded invoice PDFs
├── dist/unitcycle/browser/ # Angular build output
├── server.js               # Node server (frontend + raw SQL API)
├── tests/                  # Playwright E2E tests
├── memory-bank/            # Memory Bank (this folder)
├── CLAUDE.md               # Agent rules
└── public/assets/docs/     # AI spec documents

Database

Build & Deploy

cd /home/claude/projects/unitcycle-demo
npx ng build
cp backend/media/property_images/real_*.jpg dist/unitcycle/browser/media/property_images/
pm2 restart unitcycle && pm2 save

Git

Known Constraints & Pitfalls

  1. propintel = DML only — all DDL via sudo -u postgres
  2. managed=False on Yardi models — never ALTER those tables
  3. _aed_usd naming — Django model fields use _aed, API responses use _usd (legacy Dubai/TownX)
  4. server.js fragile — agents overwrite it during delegated tasks, guard carefully
  5. Angular cache clearing can cause full site outage
  6. PortalUser ≠ Django User — login uses custom model, NOT auth_user
  7. *ngTemplateOutlet silent failure — standalone components need NgTemplateOutlet in imports
  8. Multi-project confusionunitcycle-demo/ and unitcycle/ are DIFFERENT projects, don't mix