862 lines
50 KiB
Markdown
862 lines
50 KiB
Markdown
# Phase 5 Build Plan — Multi-App Deployment (1 Doc)
|
||
|
||
**Purpose:** This is the single instruction set for Claude Code to build the Phase 5 execution document (`05-other-apps-deployment.md`). This doc covers deploying all 6 remaining Alorig apps on the shared infrastructure established in Phase 0.
|
||
|
||
---
|
||
|
||
## CRITICAL BASELINE RULES
|
||
|
||
Before writing the doc, internalize these infrastructure-verified facts:
|
||
|
||
### Shared Infrastructure (Established in Phase 0)
|
||
|
||
- **VPS:** Hostinger KVM 4 — 4 vCPU, 16GB RAM, 200GB NVMe
|
||
- **Docker Network:** `alorig_net` (external, all apps join this network)
|
||
- **Shared Services** (alorig-infra docker-compose.yml):
|
||
- `alorig_postgres` — PostgreSQL 16, separate database per app
|
||
- `alorig_redis` — Redis 7, app-specific key prefixes (`psydge:`, `snapify:`, etc.)
|
||
- `alorig_caddy` — Caddy 2, reverse proxy + SSL via Cloudflare DNS challenge
|
||
- `portainer` — Portainer CE, Docker GUI for managing 25+ containers
|
||
- `flower` — mher/flower, Celery monitoring (on-demand)
|
||
- **DNS:** All domains managed in Cloudflare (free tier), wildcard A records to VPS IP
|
||
- **GitHub:** All repos on GitHub (private), one repo per app
|
||
- **IGNY8 already running:** Production + staging on new server (Phase 0–4 complete)
|
||
|
||
### Per-App Container Pattern (Standard)
|
||
|
||
Every Django app follows this identical structure:
|
||
- `{appname}_backend` — Django + Gunicorn (WSGI) or Daphne (ASGI)
|
||
- `{appname}_celery_worker` — Background task processing
|
||
- `{appname}_celery_beat` — Scheduled task scheduling
|
||
- React frontend built as static files → served via `alorig_caddy` (NO separate frontend container)
|
||
|
||
**Exceptions:**
|
||
- **Psydge:** Adds 4th container `psydge_channels` for Django Channels (ASGI/WebSocket)
|
||
- **Alorig Site Builder:** Adds `sitebuilder_payload` container for Node.js/Payload CMS alongside Django containers
|
||
|
||
### Alorig Tech Stack (Shared Across All Apps)
|
||
|
||
| Layer | Technology | Version |
|
||
|-------|-----------|---------|
|
||
| Backend | Django | 5.1–5.2+ |
|
||
| API | Django REST Framework | 3.15+ |
|
||
| Database | PostgreSQL | 16 (shared instance) |
|
||
| Cache/Broker | Redis | 7 (shared instance) |
|
||
| Task Queue | Celery | 5.3+ |
|
||
| Frontend | React + TypeScript | React 19, TS 5+ |
|
||
| State Mgmt | Zustand | 4–5 |
|
||
| Styling | Tailwind CSS | 3–4 |
|
||
| Build Tool | Vite | 5–6 |
|
||
| Containerization | Docker + Docker Compose | External network (alorig_net) |
|
||
| Reverse Proxy | Caddy 2 | Cloudflare DNS challenge SSL |
|
||
|
||
### Resource Budget (from Alorig Master Plan)
|
||
|
||
| Component | RAM Estimate | Notes |
|
||
|-----------|-------------|-------|
|
||
| Shared infra (PG + Redis + Caddy + Portainer) | ~2.5 GB | PostgreSQL serving 7 databases is biggest consumer |
|
||
| IGNY8 (prod + staging) | ~1.8 GB | Already running |
|
||
| Psydge | ~1.75 GB | WebSockets hold memory per connection; heaviest at 30 users |
|
||
| Snapify | ~700 MB | Standard CRUD with image processing |
|
||
| Observer OS | ~700 MB | AI pattern detection is external API calls |
|
||
| Alorig Site Builder | ~1.25 GB | Django + Payload/Node.js dual runtime |
|
||
| AstroTiming | ~400 MB | Lightest app. Brief CPU bursts for ephemeris |
|
||
| ASMS Phase 1 | ~600 MB | Pilot scale, basic modules only |
|
||
| OS + Docker overhead | ~1.0 GB | |
|
||
| **TOTAL STEADY STATE** | **~10.7 GB / 16 GB** | **~5 GB headroom for spikes** |
|
||
|
||
**Upgrade trigger:** Steady-state RAM consistently above 13 GB, or OOM kills on any container. Options: upgrade to KVM 8, or split Psydge to its own KVM 1.
|
||
|
||
### Source of Truth
|
||
|
||
- Start the doc with: `**Source of Truth:** Alorig-Master-Plan-v1.md + individual app blueprints`
|
||
- Infrastructure decisions from Alorig Master Plan override individual app docs
|
||
|
||
---
|
||
|
||
## DOC STRUCTURE STANDARD
|
||
|
||
The `05-other-apps-deployment.md` doc MUST follow this structure:
|
||
|
||
```
|
||
# Phase 5 — Multi-App Deployment
|
||
**Source of Truth:** Alorig-Master-Plan-v1.md + individual app blueprints
|
||
**Version:** 1.0
|
||
**Date:** 2026-03-23
|
||
|
||
## 1. Current State
|
||
## 2. What to Build
|
||
## 3. Shared Deployment Pattern
|
||
## 4. App 1: Psydge
|
||
## 5. App 2: Snapify
|
||
## 6. App 3: Alorig Site Builder
|
||
## 7. App 4: Observer OS
|
||
## 8. App 5: AstroTiming
|
||
## 9. App 6: ASMS Phase 1
|
||
## 10. Post-Deployment Monitoring
|
||
## 11. Acceptance Criteria
|
||
## 12. Claude Code Instructions
|
||
```
|
||
|
||
---
|
||
|
||
## DEPLOYMENT ORDER & RATIONALE
|
||
|
||
The apps deploy in this specific order, one at a time. Monitor RAM after each before proceeding to next.
|
||
|
||
| # | App | Why This Order | Trigger |
|
||
|---|-----|----------------|---------|
|
||
| 1 | **Psydge** | Most complex (WebSockets, Django Channels, real-time broker connection). Deploy early to validate server under real load. | After IGNY8 stable on new server |
|
||
| 2 | **Snapify** | Standard Django stack. Good validation that multi-app pattern works. WhatsApp integration adds external service validation. | After Psydge stable |
|
||
| 3 | **Alorig Site Builder** | Dual runtime (Django + Payload CMS/Node.js). Tests Node.js container alongside Django stack. | After Snapify stable |
|
||
| 4 | **Observer OS** | Standard Django + React. Light resource requirements initially. Planetary alignment layer shares ephemeris logic with AstroTiming. | When ready |
|
||
| 5 | **AstroTiming** | Lightest app. Minimal containers needed. Can share `pyswisseph` ephemeris data cache with Observer OS. | When ready |
|
||
| 6 | **ASMS Phase 1** | School management MVP. Basic modules for pilot deployment at 74 Schools. | When ready |
|
||
|
||
---
|
||
|
||
## APP 1: PSYDGE — AI Trading Discipline Platform
|
||
|
||
### Product Summary
|
||
Psydge (Psychological Edge) is a web-based trading discipline and execution platform. It sits between the trader and their MT4/MT5 broker via MetaApi, enforcing hard-coded discipline rules that structurally prevent self-destructive trading behavior. Two products under one platform: Psydge Core (discipline engine) and Vista Strategies (pre-defined strategy suite).
|
||
|
||
### Source Documents
|
||
- `Psydge/Psydge_Technical_Documentation.pdf` (26 pages)
|
||
- `Psydge/psydge-project/` (project scaffold if exists)
|
||
|
||
### Tech Stack Specifics (Beyond Alorig Standard)
|
||
| Addition | Technology | Purpose |
|
||
|----------|-----------|---------|
|
||
| Real-Time | Django Channels + Redis | WebSocket for live price feeds, position updates, gate status, AI messages |
|
||
| Broker Bridge | MetaApi (Cloud) | MT4/MT5 connectivity, order execution, position polling via REST + WebSocket |
|
||
| AI | Claude API (Anthropic) | Trade supervision, behavioral prediction, pre-entry validation, session debriefs |
|
||
| Charts | TradingView Lightweight Charts | Live candlestick charts, M1 through D1 timeframes |
|
||
| Billing | Stripe | Subscription management (Psydge Core + Vista Strategies tiers) |
|
||
|
||
### Container Architecture (4 containers — exception to standard 3)
|
||
| Container | Image | Role | Port |
|
||
|-----------|-------|------|------|
|
||
| `psydge_backend` | psydge-backend:latest | Django + Gunicorn (WSGI for REST API) | 8012 |
|
||
| `psydge_channels` | psydge-backend:latest | Django + Daphne (ASGI for WebSocket) | 8013 |
|
||
| `psydge_celery_worker` | psydge-backend:latest | Celery worker (AI calls, behavioral analysis, scoring) | — |
|
||
| `psydge_celery_beat` | psydge-backend:latest | Celery beat scheduler | — |
|
||
|
||
### Database
|
||
- Database name: `psydge_db` on shared `alorig_postgres`
|
||
- Redis key prefix: `psydge:`
|
||
- Redis DB: 2 (separate from IGNY8's DB 0 and staging DB 1)
|
||
|
||
### Core Data Models
|
||
| Model | Storage | Key Fields | Purpose |
|
||
|-------|---------|-----------|---------|
|
||
| User | PostgreSQL | id, email, timezone, broker_credentials (encrypted), subscription_tier | User account |
|
||
| BrokerConnection | PostgreSQL + Redis | user_id, broker, server, account_number, connection_status | MT4/MT5 connection state |
|
||
| DisciplineConfig | PostgreSQL | user_id, loss_lock_r, profit_lock_r, cooldown_hours, max_risk_pct, session_hours, symbol_whitelist | Per-user discipline parameters |
|
||
| GateState | Redis | user_id → hash: buffer_go, buffer_whitelist, buffer_session, buffer_equity, buffer_cooldown, buffer_risk | Real-time gate buffer values (sub-ms reads) |
|
||
| Trade | PostgreSQL | id, user_id, symbol, direction, entry, sl, tp, lot, risk_pct, r_result, strategy, status, opened_at, closed_at | Complete trade record |
|
||
| Violation | PostgreSQL | id, user_id, violation_code, attempted_action, timestamp, gate_state_snapshot | Every blocked trade attempt |
|
||
| DisciplineScore | PostgreSQL | user_id, date, score, metric_breakdown (JSON) | Daily discipline score history |
|
||
| ReflectionEntry | PostgreSQL | user_id, date, session_notes, ai_prompt, ai_summary | Session journal entries |
|
||
| AIInteraction | PostgreSQL | id, user_id, trade_id, role (supervisor/validator/predictor), input_context, output, timestamp | AI call history for audit |
|
||
| BehavioralPattern | PostgreSQL | user_id, pattern_type, occurrence_count, last_instance, trend | Detected violation patterns |
|
||
|
||
### Redis State Schema
|
||
| Key Pattern | Type | TTL | Content |
|
||
|-------------|------|-----|---------|
|
||
| `psydge:gate:{user_id}` | Hash | None (persistent) | All 6 buffer values |
|
||
| `psydge:cooldown:{user_id}` | String | Cooldown duration | Timestamp when cooldown expires |
|
||
| `psydge:session_r:{user_id}` | String | End of day | Cumulative R for current session |
|
||
| `psydge:positions:{user_id}` | Hash | None (live sync) | Open position data from MetaApi |
|
||
| `psydge:prices:{symbol}` | String | 5 seconds | Latest bid/ask from MetaApi stream |
|
||
| `psydge:lock:{user_id}` | String | End of session | Session lock flag when equity guard triggers |
|
||
|
||
### Caddy Routes
|
||
```
|
||
psydge.com → static React build (frontend)
|
||
api.psydge.com → psydge_backend:8012 (REST API)
|
||
ws.psydge.com → psydge_channels:8013 (WebSocket)
|
||
```
|
||
|
||
### Key Discipline Engine Components
|
||
- **6 Gate Buffers:** GO Signal (B), Symbol+TF Whitelist (C), Session Filter (D), R-Based Equity Guard (E), Cooldown Timer (H), Risk % Check (K)
|
||
- **Locked Rules (Non-Negotiable):** Loss Lock (-2R daily), Profit Lock (+3R daily), 4hr Cooldown, 1.0% risk per trade, London+NY sessions only, Psydge web panel only execution surface
|
||
- **Violation Response Levels:** Level 1 (Alert) → Level 2 (Overlay) → Level 3 (Blackout) → Level 4 (Session Lock)
|
||
- **Discipline Score:** 0–100 weighted composite: Rule Compliance 25%, Session Discipline 15%, Risk Management 15%, Patience Score 15%, Post-Win Control 15%, Cooldown Respect 10%, Revenge Prevention 5%
|
||
|
||
### 4 AI Roles (All via Claude API + Celery)
|
||
| Role | Trigger | Input | Output |
|
||
|------|---------|-------|--------|
|
||
| Trade Supervisor | Trade hits TP1 or R threshold | Symbol, entry, SL/TP, duration, delta, trend, TM score | scale / hold / tighten_sl / exit |
|
||
| Pre-Entry Validator | User initiates new trade (if enabled) | Setup context, TM score, multi-TF alignment, recent trade history | approve / stand_down + reasoning |
|
||
| Behavioral Predictor | Session start + post-trade | User's violation history, trade patterns, time patterns, win/loss sequence | Risk alerts + enforcement tightening suggestions |
|
||
| Session Debrief | Session end | All trades, violations, discipline score, behavioral data | Natural language session summary + improvement insights |
|
||
|
||
### Vista Strategy Suite (4 Tiers)
|
||
| Strategy | Timeframe | Style | Target R |
|
||
|----------|-----------|-------|----------|
|
||
| Scalper Engine | M1–M5 | Delta breakouts, microstructure | 1.5–2R |
|
||
| Intraday Momentum | M15–H1 | Trend trades with intelligent scaling | 2–7R |
|
||
| Swing Position | H1–D1 | HTF structure, trend reclaim | 5–12R |
|
||
| Vault Trail | H4–D1 | Receives winning handoffs from other strategies | 15–20R |
|
||
|
||
### 6 Proprietary Indicators
|
||
NDNS (Net Delta/Net Strength), SV (Structure Validation), TM (Trend-Momentum), MOM (Momentum Oscillator), FHS (Fractal/Harmonic Structure), HAMFIST (Harmonic + Fib Integrated)
|
||
|
||
### Celery Tasks
|
||
| Task | Schedule | Function |
|
||
|------|----------|----------|
|
||
| `calculate_discipline_score` | End of each trading session | Compute daily discipline score from all trade/violation data |
|
||
| `detect_behavioral_patterns` | After every violation | Update BehavioralPattern records, check for new patterns |
|
||
| `ai_session_debrief` | Session end | Generate AI session summary via Claude API |
|
||
| `sync_metaapi_positions` | Every 5 seconds (per connected user) | Pull position/equity data from MetaApi WebSocket |
|
||
| `weekly_behavioral_report` | Sunday 23:00 UTC | Generate weekly AI behavioral report per user |
|
||
|
||
### Implementation Steps (for 05 doc)
|
||
1. Create GitHub repo `psydge` with Django project scaffold
|
||
2. Configure `docker-compose.psydge.yml` (4 containers on `alorig_net`)
|
||
3. Create `psydge_db` database on shared PostgreSQL
|
||
4. Build Django models, migrations, admin
|
||
5. Build Discipline Engine (gate buffers, violation logging, enforcer)
|
||
6. Integrate MetaApi SDK (broker connection, order flow, position sync)
|
||
7. Build WebSocket consumers (Django Channels) for real-time data
|
||
8. Build Vista strategy engine (indicator calculations, TM scoring)
|
||
9. Integrate Claude API for 4 AI roles via Celery tasks
|
||
10. Build React frontend (trade panel, analytics dashboard, settings)
|
||
11. Configure Caddy routes for psydge.com, api.psydge.com, ws.psydge.com
|
||
12. Build Stripe subscription integration
|
||
13. Deploy, smoke test with paper trading account
|
||
14. Monitor RAM usage — expected ~1.75 GB steady state
|
||
|
||
---
|
||
|
||
## APP 2: SNAPIFY — Pakistani E-Commerce Platform
|
||
|
||
### Product Summary
|
||
Snapify.pk is a mobile-first, AI-powered e-commerce platform enabling Pakistani micro-sellers to create online stores via WhatsApp. Three-interface architecture: buyer-facing store (server-rendered Django + Tailwind for SEO), seller dashboard (React 19 PWA), admin panel (React 19 SPA). Target: 5M+ informal sellers, breakeven at ~150 paying users.
|
||
|
||
### Source Documents
|
||
- `Snapify/Snapify-Blueprint-v3-Complete.pdf` (34 pages)
|
||
|
||
### Tech Stack Specifics (Beyond Alorig Standard)
|
||
| Addition | Technology | Purpose |
|
||
|----------|-----------|---------|
|
||
| WhatsApp | WhatsApp Business Cloud API | Onboarding bot, order notifications, seller commands |
|
||
| Image CDN | Cloudinary (free tier + scale) | Image optimization, responsive srcset, WebP |
|
||
| File Storage | DigitalOcean Spaces (S3-compatible) | Product images, generated assets, backups |
|
||
| Social APIs | Meta Graph API (FB + Instagram) | Auto-posting, story creation for Pro sellers |
|
||
| AI Engine | OpenAI GPT-4 API + Whisper API | Content generation, image analysis, speech-to-text (Urdu/Punjabi) |
|
||
| Email | SendGrid | Transactional emails, seller notifications |
|
||
| Search | PostgreSQL Full-Text + pg_trgm | Product search, store discovery |
|
||
| Monitoring | Sentry + custom middleware | Error tracking, performance monitoring |
|
||
| Payment | JazzCash / EasyPaisa / Stripe (future) | Pakistani payment gateways |
|
||
|
||
### Container Architecture (3 containers — standard pattern)
|
||
| Container | Image | Role | Port |
|
||
|-----------|-------|------|------|
|
||
| `snapify_backend` | snapify-backend:latest | Django + Gunicorn (serves REST API + server-rendered store pages) | 8014 |
|
||
| `snapify_celery_worker` | snapify-backend:latest | Celery worker (AI processing, image optimization, social posting, SEO gen) | — |
|
||
| `snapify_celery_beat` | snapify-backend:latest | Celery beat (sitemap regen, hub page regen, analytics aggregation) | — |
|
||
|
||
**Note:** Buyer-facing store is server-rendered Django templates (NOT React) — critical for SEO on 3G connections. Seller dashboard and admin panel are React builds served as static files via Caddy.
|
||
|
||
### Database
|
||
- Database name: `snapify_db` on shared `alorig_postgres`
|
||
- Redis key prefix: `snapify:`
|
||
- Redis DB: 3
|
||
|
||
### Three-Interface Architecture
|
||
| Interface | Users | Technology | URL |
|
||
|-----------|-------|-----------|-----|
|
||
| Buyer-Facing Store | Buyers / public | Server-rendered Django + Tailwind CSS | snapify.pk/store-name |
|
||
| Seller Dashboard | Store owners / sellers | React 19 PWA (installable on phone) | app.snapify.pk |
|
||
| Admin Panel | Alorig team / support | React 19 internal SPA | admin.snapify.pk |
|
||
|
||
### Core Data Models (Key Entities)
|
||
| Model | Key Fields | Purpose |
|
||
|-------|-----------|---------|
|
||
| Store | id, seller_id, name, slug, city, category, custom_domain, template, subscription_tier, is_verified | Multi-tenant store entity |
|
||
| Product | id, store_id, title, description, price, images (JSON), category_id, variants (JSON), is_active, seo_meta | Product listing |
|
||
| Order | id, store_id, buyer_name, buyer_phone, products (JSON), total, status (pending/confirmed/shipped/delivered/cancelled), tracking_number | WhatsApp-native order lifecycle |
|
||
| Category | id, store_id, name, slug, product_count | Store-level product categories |
|
||
| Analytics | id, store_id, page_type, page_slug, visitor_ip_hash, referrer, city, timestamp | Per-pageview analytics |
|
||
| Subscription | id, store_id, plan (free/pro), started_at, expires_at, payment_method | Seller subscription |
|
||
| Post | id, store_id, platform, content, image_url, scheduled_at, status, engagement_metrics | Social auto-posting records |
|
||
| WhatsAppSession | id, store_id, phone_hash, state, last_message_at | Onboarding conversation state machine |
|
||
|
||
### Multi-Tenant Architecture
|
||
- `StoreBaseModel` — FK to Store with auto-assignment (equivalent to IGNY8's `SiteSectorBaseModel`)
|
||
- `StoreModelViewSet` — all queries scoped to store
|
||
- `StoreMiddleware` — resolves tenant from URL path (snapify.pk/store) or custom domain lookup
|
||
- Custom domain support: buyer visits `silkhouse.pk` → CNAME to snapify.pk → StoreMiddleware resolves via `custom_domain` field
|
||
|
||
### AI Pipeline (5 Stages via Celery)
|
||
| Stage | Input | Output | Technology |
|
||
|-------|-------|--------|-----------|
|
||
| Image Analysis | Product photos | Category, color, material, style detection | GPT-4 Vision API |
|
||
| Voice Processing | WhatsApp voice notes | Structured text (product, price, description) | Whisper API + custom parser |
|
||
| Content Generation | Product metadata + category | Title, description, bullets, meta tags | GPT-4 with retail prompts |
|
||
| SEO Optimization | Generated content + city data | City-specific landing pages, schema markup | Custom SEO templates + GPT |
|
||
| Social Content | Product images + AI content | Post-ready images with overlays and CTAs | Pillow image engine + GPT captions |
|
||
|
||
### Store Page Types (Server-Rendered Django Templates)
|
||
| Page Type | URL Pattern | Rendering |
|
||
|-----------|------------|-----------|
|
||
| Store Homepage | snapify.pk/store-name | Django template, product grid, category filters |
|
||
| Product Detail | snapify.pk/store-name/product-slug | Full product layout with Schema.org markup |
|
||
| Category Page | snapify.pk/store-name/category-slug | Filtered product grid |
|
||
| City Landing (Pro) | snapify.pk/store-name/delivery-to-lahore | Programmatically generated, geo-targeted copy |
|
||
| Store About | snapify.pk/store-name/about | Seller info, trust signals, verified badge |
|
||
| Category Hub (Platform) | snapify.pk/best-clothing-stores-punjab | Aggregated cross-store listings |
|
||
|
||
### Performance Targets (3G Pakistan)
|
||
| Metric | Target |
|
||
|--------|--------|
|
||
| First Contentful Paint | < 1.0s on 3G |
|
||
| Largest Contentful Paint | < 2.0s on 3G |
|
||
| Total Page Size | < 200KB |
|
||
| PageSpeed Score | 95+ (mobile) |
|
||
|
||
### Caddy Routes
|
||
```
|
||
snapify.pk → snapify_backend:8014 (server-rendered store pages)
|
||
api.snapify.pk → snapify_backend:8014/api/ (REST API)
|
||
app.snapify.pk → static React PWA build (seller dashboard)
|
||
admin.snapify.pk → static React SPA build (admin panel, IP-restricted)
|
||
```
|
||
|
||
### Pricing
|
||
| Plan | Price | Limits |
|
||
|------|-------|--------|
|
||
| Free | Rs. 0 | 15 products, basic dashboard, Snapify branding |
|
||
| Pro | Rs. 2,500/month | Unlimited products, custom domain, analytics, social posting, no branding |
|
||
|
||
### Celery Tasks
|
||
| Task | Schedule | Function |
|
||
|------|----------|----------|
|
||
| `process_whatsapp_webhook` | On webhook receipt | Parse incoming WhatsApp messages, route to handler |
|
||
| `generate_product_content` | On product photo upload | AI image analysis + content generation pipeline |
|
||
| `generate_city_pages` | Weekly (Pro stores) | Programmatic city landing page generation |
|
||
| `regenerate_sitemap` | Daily 2 AM | Per-store XML sitemap regeneration |
|
||
| `regenerate_hub_pages` | Weekly Sunday 3 AM | Platform-level category hub page regeneration |
|
||
| `social_auto_post` | Per schedule | Post to FB/IG via Meta Graph API |
|
||
| `invalidate_store_cache` | On product/store change | Clear Redis-cached rendered HTML pages |
|
||
|
||
### Implementation Steps
|
||
1. Create GitHub repo `snapify` with Django project scaffold
|
||
2. Configure `docker-compose.snapify.yml` (3 containers on `alorig_net`)
|
||
3. Create `snapify_db` database on shared PostgreSQL
|
||
4. Build multi-tenant models (Store, Product, Order, Category, Analytics)
|
||
5. Build WhatsApp Business API integration (webhook receiver, state machine onboarding)
|
||
6. Build server-rendered Django store templates (6 page types, 7 store templates)
|
||
7. Build AI content generation pipeline (5 stages via Celery)
|
||
8. Build React seller PWA dashboard (products, orders, analytics, settings)
|
||
9. Build React admin panel (store management, moderation, platform metrics)
|
||
10. Build SEO engine (programmatic city pages, schema markup, sitemap generator)
|
||
11. Integrate Cloudinary for image CDN
|
||
12. Configure Caddy routes for all 4 subdomains
|
||
13. Integrate JazzCash/EasyPaisa payment for Pro subscriptions
|
||
14. Deploy, test WhatsApp onboarding flow end-to-end
|
||
15. Monitor RAM usage — expected ~700 MB steady state
|
||
|
||
---
|
||
|
||
## APP 3: ALORIG SITE BUILDER — Multi-Tenant Website Platform
|
||
|
||
### Product Summary
|
||
AI-powered multi-tenant website builder platform. Dual runtime architecture with Django handling business logic/API and Payload CMS (Node.js) handling content management and visual editing. This is the only app with a Node.js container alongside Django.
|
||
|
||
### Source Documents
|
||
- `Alorig Site Builder/Alorig-Site-Builder-Blueprint.docx`
|
||
|
||
### Tech Stack Specifics (Beyond Alorig Standard)
|
||
| Addition | Technology | Purpose |
|
||
|----------|-----------|---------|
|
||
| CMS | Payload CMS (Node.js) | Visual content editing, block-based page builder |
|
||
| Node Runtime | Node.js 18+ | Payload CMS server alongside Django |
|
||
| AI | OpenAI GPT-4 / Claude | AI-powered content generation, design suggestions |
|
||
|
||
### Container Architecture (4 containers — exception with Node.js)
|
||
| Container | Image | Role | Port |
|
||
|-----------|-------|------|------|
|
||
| `sitebuilder_backend` | sitebuilder-backend:latest | Django + Gunicorn (REST API, auth, billing, tenant management) | 8016 |
|
||
| `sitebuilder_payload` | sitebuilder-payload:latest | Payload CMS (Node.js, content editing, block rendering) | 8017 |
|
||
| `sitebuilder_celery_worker` | sitebuilder-backend:latest | Celery worker (AI generation, site builds, deployments) | — |
|
||
| `sitebuilder_celery_beat` | sitebuilder-backend:latest | Celery beat scheduler | — |
|
||
|
||
### Database
|
||
- Database name: `sitebuilder_db` on shared `alorig_postgres`
|
||
- Redis key prefix: `sitebuilder:`
|
||
- Redis DB: 4
|
||
- Payload CMS: Can share same PostgreSQL database or use separate `sitebuilder_payload_db`
|
||
|
||
### Caddy Routes
|
||
```
|
||
alorig.com/builder → static React build (builder dashboard)
|
||
api.alorig.com/builder → sitebuilder_backend:8016 (Django API)
|
||
cms.alorig.com → sitebuilder_payload:8017 (Payload CMS)
|
||
*.sites.alorig.com → rendered sites (wildcard)
|
||
```
|
||
|
||
### Implementation Steps
|
||
1. Create GitHub repo `alorig-site-builder` with Django + Payload dual scaffold
|
||
2. Configure `docker-compose.sitebuilder.yml` (4 containers on `alorig_net`)
|
||
3. Create `sitebuilder_db` database
|
||
4. Build Django models (Tenant/Site, User, Subscription, Deployment)
|
||
5. Build Payload CMS configuration (block types, page schemas, media)
|
||
6. Build Django↔Payload sync layer (auth sharing, data bridge)
|
||
7. Build AI content generation pipeline
|
||
8. Build React dashboard (site management, templates, billing)
|
||
9. Configure Caddy routes including wildcard for rendered sites
|
||
10. Deploy, test multi-tenant site creation end-to-end
|
||
11. Monitor RAM usage — expected ~1.25 GB steady state
|
||
|
||
---
|
||
|
||
## APP 4: OBSERVER OS — Consciousness/Behavioral Awareness Platform
|
||
|
||
### Product Summary
|
||
Observer OS (0·i·G·8) is a self-operating behavioral operating system. Four progressive symbolic modules (0: Dissolution → i: Identity → G: The Gate → 8: Infinity) guide users through observation of ego patterns via AI-powered journaling, pattern detection, ambient environment adaptation, and planetary alignment layers. NOT a meditation app — it's an architecture of awakening.
|
||
|
||
### Source Documents
|
||
- `oigate/Observer-OS-Project-Specification-v1.pdf` (34 pages)
|
||
- `oigate/site/` (project scaffold if exists)
|
||
|
||
### Tech Stack Specifics (Beyond Alorig Standard)
|
||
| Addition | Technology | Purpose |
|
||
|----------|-----------|---------|
|
||
| AI (Primary) | OpenAI GPT-4o | Text analysis, pattern detection, ambient generation, module transitions |
|
||
| AI (Secondary) | Anthropic Claude | Nuanced paradox detection, reflective prompt generation |
|
||
| TTS/Audio | OpenAI TTS / ElevenLabs | Ambient sound generation, optional voice responses |
|
||
| Image Gen | Runware / Stable Diffusion | Ambient visual generation, thumbnail creation |
|
||
| Ephemeris | Swiss Ephemeris (pyswisseph) or AstroAPI | Planetary position data for alignment layer |
|
||
| Push | FCM/APNS | Push notifications (web + future mobile) |
|
||
| Mobile (Phase 2) | React Native or Flutter | iOS + Android (future) |
|
||
|
||
### Container Architecture (3 containers — standard)
|
||
| Container | Image | Role | Port |
|
||
|-----------|-------|------|------|
|
||
| `observer_backend` | observer-backend:latest | Django + Gunicorn (REST API) | 8018 |
|
||
| `observer_celery_worker` | observer-backend:latest | Celery worker (AI analysis, pattern detection, ambient refresh) | — |
|
||
| `observer_celery_beat` | observer-backend:latest | Celery beat (scheduled pattern analysis, planetary updates, data cleanup) | — |
|
||
|
||
### Database
|
||
- Database name: `observer_db` on shared `alorig_postgres`
|
||
- Redis key prefix: `observer:`
|
||
- Redis DB: 5
|
||
|
||
### Django App Structure
|
||
| Directory | Purpose | Contents |
|
||
|-----------|---------|----------|
|
||
| `auth/` | Authentication | User model, anonymous auth, JWT, account context middleware |
|
||
| `api/` | API infrastructure | Base ViewSets, authentication classes, pagination, response format |
|
||
| `modules/observer/` | Observer module API | Module state endpoints, journal API, pattern API, dashboard API |
|
||
| `modules/ambient/` | Ambient environment API | Color state, sound state, planetary overlay endpoints |
|
||
| `modules/system/` | System configuration | Settings, AI model config, prompt templates |
|
||
| `business/patterns/` | Pattern detection services | PatternService, EgoLoopDetector, FlowAnalyzer, ContradictionEngine |
|
||
| `business/modules/` | Module transition logic | ModuleTransitionService, state machine, trigger evaluation |
|
||
| `business/journal/` | Journaling services | JournalService, NLP processing, prompt generation |
|
||
| `business/ambient/` | Ambient environment | ColorEngine, SoundEngine, PlanetaryService |
|
||
| `ai/` | AI engine | AIEngine, function registry, providers (OpenAI, Anthropic), model registry |
|
||
| `ai/functions/` | AI function implementations | AnalyzeJournal, DetectPatterns, GeneratePrompt, DetectParadox, GenerateAmbient, AssessTransition |
|
||
| `tasks/` | Celery task definitions | PatternAnalysisTask, ModuleTransitionTask, PlanetaryUpdateTask, AmbientRefreshTask |
|
||
|
||
### Core Data Models
|
||
| Model | Key Fields | Purpose |
|
||
|-------|-----------|---------|
|
||
| User | id, email (optional), created_at, current_module, preferences, anonymous_token | Anonymous-first user account |
|
||
| ModuleState | user_id, active_module (0/i/G/8), entered_at, transition_signals, accumulated_score | Tracks active module and transition readiness |
|
||
| JournalEntry | user_id, text (encrypted), emotion_tag, timestamp, module_at_time, ai_analysis_summary | Encrypted journal entries with optional AI analysis |
|
||
| Pattern | user_id, pattern_type, label, frequency, last_occurrence, first_detected, evidence_refs | Detected behavioral patterns across all input channels |
|
||
| StateLoop | user_id, loop_id, triggers, behaviors, resolution_state, occurrence_count | Ego loops: trigger → reaction → resolution tracking |
|
||
| Event | user_id, timestamp, module, trigger_type, text_input, system_reaction | Granular event log for behavioral analysis |
|
||
| AmbientState | user_id, current_palette, current_sound, planetary_context, last_updated | Current ambient environment configuration |
|
||
| PlanetarySnapshot | date, planetary_positions, major_transits, awareness_theme | Daily planetary data cache for alignment layer |
|
||
| PromptTemplate | module, trigger_context, prompt_text, usage_count, effectiveness_score | AI prompt templates per module and context |
|
||
| SystemConfig | key, value, category | Global system configuration (AI models, feature flags) |
|
||
|
||
### 4 Core Modules (0 → i → G → 8)
|
||
| Module | Symbol | Role | AI Processing |
|
||
|--------|--------|------|--------------|
|
||
| Dissolution | 0 | Disengage the machinery of "I" — break reactive identification | NLP analysis for identity-reinforcement patterns, ambient adaptation |
|
||
| Identity | i | Surface and expose egoic patterning — mirror the constructed self | Longitudinal pattern recognition (2-4 weeks), ego-pattern classification, dynamic prompt generation |
|
||
| The Gate | G | Trigger collapse of division between observer and observed | Contradiction detection, paradox generation, context-aware silence |
|
||
| Infinity | 8 | Sustain choiceless awareness and non-fragmented perception | Flow state detection, ambient adaptation, self-obsolescence logic |
|
||
|
||
### Module Transition Logic (Automatic, Never Announced)
|
||
| From → To | Trigger | User Experience |
|
||
|-----------|---------|---------------|
|
||
| 0 → i | Emergence of habitual pattern, ego language, or resistance to stillness | Prompts shift from silence to reflection; journal prompts appear |
|
||
| i → G | Observer begins observing the observer — paradox or deep contradiction arises | Interface becomes more minimal; paradox questions surface |
|
||
| G → 8 | Surrender occurs — "I" loses center stage, replaced by ambient being | System recedes; ambient environment takes over; almost no text |
|
||
| 8 → 0 | Identity re-coagulates or new life loop forms | Gentle restart — not regressive, but rhythmic; cycle begins again |
|
||
|
||
### Ambient Environment System
|
||
**Color System:**
|
||
| State | Color Palette | Module Alignment |
|
||
|-------|--------------|-----------------|
|
||
| Calm / Presence | Deep indigo, soft violet, midnight blue | Module 8 (Infinity) |
|
||
| Alert / Activation | Amber, warm gold, burnt orange | Module i (Identity) |
|
||
| Stillness / Dissolution | Charcoal, muted slate, near-black | Module 0 (Dissolution) |
|
||
| Threshold / Paradox | Silver-white, pale lavender, stark contrast | Module G (Gate) |
|
||
| Agitation / Resistance | Desaturated tones, slight red warmth | Any module (friction detected) |
|
||
|
||
### Privacy Architecture (Foundational, Not Feature)
|
||
| Tier | Location | Data Type | Encryption |
|
||
|------|----------|-----------|-----------|
|
||
| Tier 1 (Local Only) | Device storage | Journal entries, emotion tags, raw behavioral data | Device-level encryption |
|
||
| Tier 2 (Encrypted Sync) | Cloud database | Pattern summaries, module state, preferences, anonymized loop data | AES-256 at rest, TLS in transit |
|
||
| Tier 3 (Ephemeral) | Cloud AI API | Anonymized text snippets for NLP processing | Processed and discarded, never stored |
|
||
|
||
### API Endpoint Structure
|
||
| Endpoint Group | Base Path | Key Endpoints |
|
||
|---------------|-----------|--------------|
|
||
| Auth | /api/v1/auth/ | register, login, anonymous-login, token-refresh, delete-account |
|
||
| Module State | /api/v1/observer/module/ | current-state, transition-history, signal-log |
|
||
| Journal | /api/v1/journal/ | create, list, export, delete-all |
|
||
| Patterns | /api/v1/patterns/ | list, detail, loops, flow-states, contradictions |
|
||
| Ambient | /api/v1/ambient/ | current-state, update-palette, update-sound, planetary-context |
|
||
| Dashboard | /api/v1/dashboard/ | flow-summary, module-view, pattern-overview |
|
||
| Chat | /api/v1/chat/ | send-message, get-prompt, silence-mode |
|
||
| Settings | /api/v1/settings/ | preferences, notifications, privacy, data-export |
|
||
|
||
### Celery Tasks
|
||
| Task | Queue | Schedule | Function |
|
||
|------|-------|----------|----------|
|
||
| Pattern Analysis | analysis | Every 6 hours (active users) | Process accumulated behavioral data, update Pattern records |
|
||
| Module Transition Check | transitions | Every 2 hours (active users) | Evaluate transition signals, trigger module shifts if thresholds met |
|
||
| Planetary Update | planetary | Daily at midnight | Pull ephemeris data, generate awareness themes, cache snapshot |
|
||
| Ambient Refresh | ambient | On state change or hourly | Recalculate color/sound environment based on current signals |
|
||
| Journal NLP Processing | analysis | On new entry (debounced 5 min) | Run AI analysis on journal entry, update pattern data |
|
||
| Data Cleanup | maintenance | Weekly | Purge ephemeral AI data, compress old event logs, update aggregates |
|
||
|
||
### Caddy Routes
|
||
```
|
||
observeros.app → static React build (web app)
|
||
api.observeros.app → observer_backend:8018 (REST API)
|
||
```
|
||
|
||
### Implementation Steps
|
||
1. Create GitHub repo `observer-os` with Django project scaffold
|
||
2. Configure `docker-compose.observer.yml` (3 containers on `alorig_net`)
|
||
3. Create `observer_db` database
|
||
4. Build Django models with encryption (JournalEntry text field encrypted at rest)
|
||
5. Build anonymous auth system (no email required for core functionality)
|
||
6. Build 4-module state machine (ModuleTransitionService)
|
||
7. Build pattern detection engine (PatternService, EgoLoopDetector, FlowAnalyzer, ContradictionEngine)
|
||
8. Build journaling API with NLP processing pipeline
|
||
9. Build ambient environment system (ColorEngine, SoundEngine, PlanetaryService)
|
||
10. Integrate AI providers (OpenAI primary, Claude secondary) via function registry
|
||
11. Build React frontend (dual interface: conversational chat + visual dashboard)
|
||
12. Build ambient components (color engine, sound player, planetary overlay)
|
||
13. Configure Caddy routes
|
||
14. Deploy, test module transition flow end-to-end
|
||
15. Monitor RAM usage — expected ~700 MB steady state
|
||
|
||
---
|
||
|
||
## APP 5: ASTROTIMING — Planetary Hours Intelligence Engine
|
||
|
||
### Product Summary
|
||
AstroTiming transforms ancient celestial timing wisdom (Al Saat by Kash Al Barni) into a modern API-powered productivity tool. Three-layer architecture: Layer 1 (Classical Planetary Hours), Layer 2 (Live Planetary Positions via Swiss Ephemeris), Layer 3 (Intelligence Engine with Timing Quality Score 0–100). Three products: consumer web app, developer API, premium scheduling layer.
|
||
|
||
### Source Documents
|
||
- `Astro Timing/AstroTiming-System-Blueprint.pdf` (5+ pages)
|
||
|
||
### Tech Stack Specifics (Beyond Alorig Standard)
|
||
| Addition | Technology | Purpose |
|
||
|----------|-----------|---------|
|
||
| Ephemeris | pyswisseph (Python Swiss Ephemeris bindings) | Sub-arcsecond planetary position calculations |
|
||
| Sunrise/Sunset | SunCalc or astronomical calculation | Precise sunrise/sunset for planetary hour computation |
|
||
| AI (optional) | OpenAI GPT-4o | Natural language timing recommendations, scheduling suggestions |
|
||
| Calendar | Google Calendar API / CalDAV | Premium scheduling layer integration |
|
||
|
||
### Container Architecture (3 containers — standard, lightest app)
|
||
| Container | Image | Role | Port |
|
||
|-----------|-------|------|------|
|
||
| `astrotiming_backend` | astrotiming-backend:latest | Django + Gunicorn (REST API + consumer web) | 8020 |
|
||
| `astrotiming_celery_worker` | astrotiming-backend:latest | Celery worker (ephemeris pre-computation, AI recommendations) | — |
|
||
| `astrotiming_celery_beat` | astrotiming-backend:latest | Celery beat (daily planetary data cache, user calendar sync) | — |
|
||
|
||
**Note:** AstroTiming is the lightest app (~400 MB). Ephemeris calculations are CPU-burst (brief) but the pyswisseph library uses zero external dependencies — all calculations are local.
|
||
|
||
### Database
|
||
- Database name: `astrotiming_db` on shared `alorig_postgres`
|
||
- Redis key prefix: `astrotiming:`
|
||
- Redis DB: 6
|
||
|
||
### Three-Layer Engine Architecture
|
||
**Layer 1: Classical Planetary Hours (Al Saat Ruleset)**
|
||
- Deterministic. Requires only geographic location + date/time
|
||
- Sunrise/sunset → 12 unequal daytime + 12 unequal nighttime planetary hours (24 total)
|
||
- Chaldean Order assignment: Saturn → Jupiter → Mars → Sun → Venus → Mercury → Moon
|
||
- Day ruler = first hour ruler
|
||
- Activity-planet mapping from Al Saat's complete taxonomy
|
||
- Works entirely offline, zero external dependencies
|
||
|
||
**Layer 2: Live Planetary Positions (Swiss Ephemeris)**
|
||
- Exact ecliptic longitude of all 7 classical planets at any given moment
|
||
- Planetary dignities: domicile, exaltation, detriment, fall
|
||
- Retrograde status
|
||
- Planetary aspects: conjunction, sextile, square, trine, opposition
|
||
- Lunar phase and Moon sign
|
||
- Moon void-of-course periods
|
||
- NASA JPL DE431 data: 13201 BCE to 17191 CE, 0.1 arcsecond precision
|
||
|
||
**Layer 3: Intelligence Engine (Scoring & Recommendations)**
|
||
- **Timing Quality Score (TQS):** 0–100 composite score for any activity at any moment
|
||
- **Forward Search:** Given an activity, scan upcoming hours/days and find optimal windows
|
||
- **Smart Scheduler:** Given user activities + priorities, generate optimized weekly/monthly calendar
|
||
- **Conflict Detection:** Flag activities in unfavorable windows with suggested alternatives
|
||
|
||
### TQS Scoring Model
|
||
| Factor | Weight | Description |
|
||
|--------|--------|-------------|
|
||
| Hour Ruler Match | 30% | Does the planetary hour ruler align with the activity? (Al Saat mapping) |
|
||
| Day Ruler Harmony | 15% | Does the day ruler support or conflict with the hour ruler? |
|
||
| Planetary Dignity | 15% | Is the hour ruler in domicile/exaltation (boost) or detriment/fall (penalty)? |
|
||
| Lunar Condition | 15% | Moon phase, sign, void-of-course status, aspects to hour ruler |
|
||
| Planetary Aspects | 15% | Major aspects between hour ruler and benefics/malefics |
|
||
| Retrograde Status | 10% | Is the hour ruler or key planet for the activity retrograde? |
|
||
|
||
Score interpretation: 80–100 Excellent, 60–79 Good, 40–59 Neutral, 20–39 Unfavorable, 0–19 Avoid.
|
||
|
||
### Planet-Activity Mapping (Core Ruleset from Al Saat)
|
||
| Planet | Arabic | Domains |
|
||
|--------|--------|---------|
|
||
| Sun (Shams) | Authority, Vitality, Success | Leadership, health, government, recognition |
|
||
| Moon (Qamar) | Emotions, Travel, Public | Travel, public/social, domestic, emotional |
|
||
| Mars (Mirrikh) | Action, Competition, Courage | Physical action, competition, bold ventures |
|
||
| Mercury (Utarid) | Communication, Commerce, Learning | Writing, commerce, learning, technology |
|
||
| Jupiter (Mushtari) | Expansion, Wealth, Spirituality | Business expansion, education, spiritual practice |
|
||
| Venus (Zuhra) | Beauty, Love, Harmony | Arts, relationships, beauty, social gatherings |
|
||
| Saturn (Zuhal) | Discipline, Structure, Endings | Organization, long-term projects, boundaries, endings |
|
||
|
||
### Core Data Models
|
||
| Model | Key Fields | Purpose |
|
||
|-------|-----------|---------|
|
||
| User | id, email, location (lat/lng), timezone, preferences | User with location for planetary calculations |
|
||
| Location | id, name, latitude, longitude, timezone, user_id | Saved locations for quick access |
|
||
| ActivityCategory | id, planet, category_name, activities (JSON) | Al Saat activity-planet mapping reference |
|
||
| TimingQuery | id, user_id, activity, location_id, datetime, tqs_score, breakdown (JSON) | Logged timing queries with scores |
|
||
| ScheduleEntry | id, user_id, activity, preferred_window, assigned_window, tqs_score | Smart scheduler entries |
|
||
| PlanetaryCache | date, location_hash, sunrise, sunset, planetary_hours (JSON), positions (JSON), aspects (JSON) | Pre-computed daily planetary data |
|
||
| APIKey | id, user_id, key_hash, tier (free/developer/premium), requests_today, rate_limit | Developer API key management |
|
||
|
||
### API Products (3 Tiers)
|
||
| Tier | Price | Features |
|
||
|------|-------|----------|
|
||
| Free (Consumer) | $0 | Web app: current planetary hour, TQS for any activity, daily view |
|
||
| Developer API | $9–49/month | REST API: TQS scoring, forward search, bulk queries, webhooks |
|
||
| Premium | $4.99/month | Smart scheduler, calendar sync, personalized daily briefings, optimal window alerts |
|
||
|
||
### Caddy Routes
|
||
```
|
||
astrotiming.com → static React build (consumer web app)
|
||
api.astrotiming.com → astrotiming_backend:8020 (REST API + developer API)
|
||
```
|
||
|
||
### Celery Tasks
|
||
| Task | Schedule | Function |
|
||
|------|----------|----------|
|
||
| `precompute_daily_planetary_data` | Daily 00:00 UTC | Calculate planetary hours + positions for all saved locations, cache in PlanetaryCache |
|
||
| `generate_daily_briefing` | Daily per user timezone (sunrise - 30min) | Premium users: generate personalized daily timing briefing |
|
||
| `sync_user_calendars` | Every 30 minutes (premium users) | Pull calendar events, run conflict detection, suggest rescheduling |
|
||
| `cleanup_old_queries` | Weekly | Purge old TimingQuery records beyond retention period |
|
||
|
||
### Implementation Steps
|
||
1. Create GitHub repo `astrotiming` with Django project scaffold
|
||
2. Install `pyswisseph` and verify ephemeris calculations work
|
||
3. Configure `docker-compose.astrotiming.yml` (3 containers on `alorig_net`)
|
||
4. Create `astrotiming_db` database
|
||
5. Build Layer 1: Classical planetary hours calculation engine (Al Saat ruleset)
|
||
6. Build Layer 2: Swiss Ephemeris integration (positions, dignities, aspects, retrogrades, lunar data)
|
||
7. Build Layer 3: TQS scoring engine combining Layer 1 + Layer 2
|
||
8. Build forward search and smart scheduler algorithms
|
||
9. Build Django models, REST API endpoints
|
||
10. Build developer API with key management and rate limiting
|
||
11. Build React frontend (consumer app: daily view, activity search, score display)
|
||
12. Configure Caddy routes
|
||
13. Implement PlanetaryCache pre-computation pipeline
|
||
14. Deploy, validate TQS scores against known Al Saat test cases
|
||
15. Monitor RAM usage — expected ~400 MB steady state
|
||
|
||
---
|
||
|
||
## APP 6: ASMS PHASE 1 — School Management System
|
||
|
||
### Product Summary
|
||
Alorig School Management System (ASMS) Phase 1 is a pilot deployment for 74 Schools in Pakistan. Foundation platform: student/guardian management, multi-school tenant architecture, admissions, gradebook, attendance, courses, RBAC, LMS core. Phase 1 focuses on the Foundation Platform (700–1,030 hours scope); Advanced Modules & Intelligence Layer (3,010–4,480 hours) are Phase 2+ scope.
|
||
|
||
### Source Documents
|
||
- `ASMS/documentation/74-Schools-Development-Effort-Breakdown.md`
|
||
- `ASMS/documentation/74_Schools_Digital_Transformation_Project_Scope.docx`
|
||
- `ASMS/documentation/74_Schools_Project_Scope_v2_AI_Layer.docx`
|
||
|
||
### Tech Stack Specifics (Beyond Alorig Standard)
|
||
| Addition | Technology | Purpose |
|
||
|----------|-----------|---------|
|
||
| Multi-Tenant | Head Office → Branch → School hierarchy | 74-campus data isolation |
|
||
| RBAC | Django permission groups | 10 user roles (HO Admin, Branch Admin, Principal, Teacher, Parent, Student, etc.) |
|
||
| Attendance | GPS + geo-fence (future) | 100m radius per school, spoof detection (Phase 2) |
|
||
| WhatsApp | WhatsApp Business API (future) | Parent notifications, auto-translated messages (Phase 2) |
|
||
| AI (future) | Predictive analytics, adaptive assessment | At-risk identification, auto-report cards (Phase 2) |
|
||
| PWA (future) | Service worker, offline-first | Low-bandwidth optimization for school environments (Phase 2) |
|
||
|
||
### Container Architecture (3 containers — standard)
|
||
| Container | Image | Role | Port |
|
||
|-----------|-------|------|------|
|
||
| `asms_backend` | asms-backend:latest | Django + Gunicorn (REST API) | 8022 |
|
||
| `asms_celery_worker` | asms-backend:latest | Celery worker (report generation, data import, notifications) | — |
|
||
| `asms_celery_beat` | asms-backend:latest | Celery beat (attendance reports, grade calculations) | — |
|
||
|
||
### Database
|
||
- Database name: `asms_db` on shared `alorig_postgres`
|
||
- Redis key prefix: `asms:`
|
||
- Redis DB: 7
|
||
|
||
### Multi-School Tenant Architecture
|
||
- 3-level hierarchy: Head Office → Branch (regional) → School (campus)
|
||
- `SchoolBaseModel` — FK to School with tenant isolation
|
||
- `SchoolModelViewSet` — queries scoped to user's school(s)
|
||
- HO Admin sees all schools; Branch Admin sees branch schools; Principal sees own school only
|
||
|
||
### Phase 1 Foundation Modules (Scope)
|
||
| Module | Scope | Key Models |
|
||
|--------|-------|-----------|
|
||
| Student & Guardian Management | Registration, profiles, guardian contacts, transfers, graduation | Student, Guardian, Enrollment, Transfer |
|
||
| Multi-School Tenant | 74-campus data isolation with hierarchy | HeadOffice, Branch, School, SchoolUser |
|
||
| Admissions & Registration | Application tracking, admission levels, step workflows | Application, AdmissionLevel, AdmissionStep |
|
||
| Gradebook & Report Cards | Standards-based grading, marking periods, GPA, printable transcripts | Grade, MarkingPeriod, Transcript, ReportCard |
|
||
| Discipline & Behavior | Infraction logging, action tracking, parent notification triggers | Infraction, DisciplineAction, BehaviorLog |
|
||
| Attendance (Base) | Daily by homeroom/class, absence reasons, chronic flags | Attendance, AttendanceRecord, AbsenteeFlag |
|
||
| Courses & Scheduling | Subject allocation, class sections, teacher assignments, conflict detection | Course, ClassSection, TeacherAssignment, Schedule |
|
||
| RBAC (10 Roles) | Granular permissions per role per school level | Role, Permission, UserSchoolAccess |
|
||
| LMS Core | Curriculum structure, lesson plans, quiz engine, grade calculator | Curriculum, LessonPlan, Quiz, Question, LearningOutcome |
|
||
| REST API Layer | DRF API for all foundation modules | ViewSets, serializers, permissions |
|
||
| React Frontend | Web application for all modules | Dashboards, forms, tables, reports |
|
||
|
||
### Caddy Routes
|
||
```
|
||
schools.alorig.com → static React build (web app)
|
||
api.schools.alorig.com → asms_backend:8022 (REST API)
|
||
```
|
||
|
||
### Implementation Steps
|
||
1. Create GitHub repo `asms` with Django project scaffold
|
||
2. Configure `docker-compose.asms.yml` (3 containers on `alorig_net`)
|
||
3. Create `asms_db` database
|
||
4. Build multi-tenant hierarchy models (HeadOffice, Branch, School)
|
||
5. Build RBAC system (10 roles with granular permissions)
|
||
6. Build Student & Guardian management module
|
||
7. Build Admissions workflow module
|
||
8. Build Courses & Scheduling module with conflict detection
|
||
9. Build Attendance module (daily homeroom/class, absence tracking)
|
||
10. Build Gradebook module (standards-based grading, report cards, transcripts)
|
||
11. Build Discipline & Behavior tracking module
|
||
12. Build LMS core (curriculum, lesson plans, quiz engine)
|
||
13. Build React frontend (role-based dashboards, CRUD screens, reports)
|
||
14. Build REST API layer for all modules
|
||
15. Seed with pilot school data (5 schools initially)
|
||
16. Deploy, run pilot testing with 5 schools
|
||
17. Monitor RAM usage — expected ~600 MB steady state
|
||
|
||
---
|
||
|
||
## POST-DEPLOYMENT MONITORING PROTOCOL
|
||
|
||
After EACH app deployment:
|
||
|
||
### Immediate (First 24 Hours)
|
||
1. Run `docker stats` — verify container RAM matches budget estimates
|
||
2. Check PostgreSQL connections: `SELECT count(*) FROM pg_stat_activity;` — ensure not approaching `max_connections`
|
||
3. Check Redis memory: `redis-cli INFO memory` — verify key prefix isolation
|
||
4. Verify Caddy routes resolve correctly (SSL, domain routing)
|
||
5. Run basic smoke tests (login, core functionality, API responses)
|
||
|
||
### Ongoing (First Week)
|
||
1. Monitor RAM usage pattern over full business cycle
|
||
2. Check Celery task queue depths — ensure no backlogs
|
||
3. Verify inter-app isolation (no Redis key collisions, no DB cross-contamination)
|
||
4. Test under expected concurrent user load
|
||
|
||
### Upgrade Triggers
|
||
| Condition | Action |
|
||
|-----------|--------|
|
||
| Steady-state RAM > 13 GB | Consider KVM 8 upgrade or split heaviest app |
|
||
| OOM kills on any container | Immediate investigation — reduce worker count or split app |
|
||
| PostgreSQL connections > 80 | Review connection pooling (PgBouncer) |
|
||
| Redis memory > 2 GB | Review TTLs, add eviction policies |
|
||
| Celery task queue > 1000 pending | Add dedicated worker or split queues |
|
||
|
||
### Docker Compose File Naming Convention
|
||
```
|
||
docker-compose.infra.yml ← Shared infrastructure (PG, Redis, Caddy, Portainer)
|
||
docker-compose.igny8.yml ← IGNY8 production
|
||
docker-compose.igny8-staging.yml ← IGNY8 staging
|
||
docker-compose.psydge.yml ← Psydge
|
||
docker-compose.snapify.yml ← Snapify
|
||
docker-compose.sitebuilder.yml ← Alorig Site Builder
|
||
docker-compose.observer.yml ← Observer OS
|
||
docker-compose.astrotiming.yml ← AstroTiming
|
||
docker-compose.asms.yml ← ASMS Phase 1
|
||
```
|
||
|
||
All compose files use `external: true` for `alorig_net` network.
|
||
|
||
---
|
||
|
||
## ACCEPTANCE CRITERIA (for the 05 doc)
|
||
|
||
The `05-other-apps-deployment.md` doc is complete when:
|
||
|
||
1. Each of the 6 apps has a self-contained deployment section with: containers, database, Redis config, Caddy routes, implementation steps
|
||
2. Deployment order is specified with rationale and triggers
|
||
3. Post-deployment monitoring protocol is documented
|
||
4. Resource budget is specified per app with upgrade triggers
|
||
5. Docker compose file naming convention is established
|
||
6. Each app section references its source blueprint document
|
||
7. Exception patterns (Psydge WebSocket, Site Builder Node.js) are clearly documented
|
||
8. Port assignments don't conflict across apps
|
||
9. Redis DB numbers don't conflict across apps
|
||
10. All Caddy routes are listed with no domain conflicts
|
||
|
||
---
|
||
|
||
## PORT ASSIGNMENT MAP (No Conflicts)
|
||
|
||
| App | Backend Port | Additional Ports |
|
||
|-----|-------------|-----------------|
|
||
| IGNY8 (prod) | 8011 | — |
|
||
| IGNY8 (staging) | 8031 | — |
|
||
| Psydge | 8012 | 8013 (WebSocket/Channels) |
|
||
| Snapify | 8014 | — |
|
||
| Alorig Site Builder | 8016 | 8017 (Payload CMS) |
|
||
| Observer OS | 8018 | — |
|
||
| AstroTiming | 8020 | — |
|
||
| ASMS | 8022 | — |
|
||
|
||
## REDIS DB ASSIGNMENT MAP (No Conflicts)
|
||
|
||
| DB | App |
|
||
|----|-----|
|
||
| 0 | IGNY8 production |
|
||
| 1 | IGNY8 staging |
|
||
| 2 | Psydge |
|
||
| 3 | Snapify |
|
||
| 4 | Alorig Site Builder |
|
||
| 5 | Observer OS |
|
||
| 6 | AstroTiming |
|
||
| 7 | ASMS |
|
||
|
||
---
|
||
|
||
## BUILD SEQUENCE
|
||
|
||
Claude Code builds the single doc `05-other-apps-deployment.md` using this plan as the instruction set. The doc follows the standard structure (Current State → What to Build → Implementation Steps → Acceptance Criteria → Claude Code Instructions) but is organized per-app within those sections.
|
||
|
||
**Dependencies:** Phase 0 (infrastructure) must be complete. Phase 1–4 (IGNY8) should be complete or stable. Each app in Phase 5 deploys independently and sequentially.
|
||
|
||
---
|
||
|
||
*This build plan is the single instruction set for Phase 5. All 6 app deployment specifications are contained here with full technical depth extracted from individual app blueprints.*
|