Commit Graph

5 Commits

Author SHA1 Message Date
Claude
6d797dc0d2
fix: root cause — sqlite_patch not applied when DATABASE_URL empty
Root cause: sqlite_patch checked `if "sqlite" in db_url` but db_url
was empty string when DATABASE_URL env var not set. Patch was skipped,
then models used PostgreSQL types (JSONB/Vector) with SQLite compiler
causing crash: "can't render element of type JSONB".

Fix: `if not db_url or "sqlite" in db_url` — apply patch when URL
is empty (defaults to SQLite anyway in database.py).

Also:
- Dockerfile: add libxml2/libxslt1.1 for lxml runtime
- Dockerfile: increase healthcheck start-period to 120s
- start.sh: log DATABASE_URL prefix for debugging

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-26 01:16:57 +00:00
Claude
ff83d28eba
fix: bust Docker cache + make init_db non-fatal for Railway
- ARG CACHEBUST=2 forces pip install to re-run (picks up slimmed requirements)
- init_db failure no longer kills the app — logs warning instead

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-26 01:00:33 +00:00
Claude
e5aa1cade6
fix(railway): healthcheck path + dynamic PORT + start.sh wrapper
Railway healthcheck was failing because:
1. healthcheckPath was /api/v1/health but endpoint is /health
2. CMD used hardcoded port 8000, Railway injects $PORT dynamically
3. ${PORT:-8000} doesn't expand without shell

Fix:
- railway.toml: healthcheckPath = "/health"
- start.sh: shell wrapper that expands $PORT properly
- Dockerfile CMD: ["./start.sh"] instead of direct uvicorn
- HEALTHCHECK: uses /health (matches root endpoint)
- start-period increased to 90s for cold start

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 19:38:32 +00:00
Claude
dd8d2ccc9e
fix(docker): CPU-only torch + multi-stage build to fix Railway 4GB limit
Railway build was failing with "Image of size 5.7 GB exceeded limit of
4.0 GB" because sentence-transformers pulled torch with full CUDA/NVIDIA
GPU packages (~3 GB).

Fix: multi-stage Dockerfile that:
1. Installs CPU-only torch first (--index-url pytorch.org/whl/cpu)
   saving ~3 GB (200 MB CPU vs 3.2 GB CUDA)
2. Multi-stage build: builder + runtime (smaller final image)
3. Non-root user (app:1000)
4. tini init for proper signal handling
5. Built-in HEALTHCHECK with 60s start-period
6. railway.toml with healthcheck path and restart policy

Also fixes healthcheck failure: start-period=60s gives the app time
to initialize before Railway starts checking /health.

Expected image size: ~2 GB (down from 5.7 GB).

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-23 13:33:09 +00:00
Claude
f1852c1121
Add SalesMatic AI Sales SaaS Platform - Complete Foundation
Full-stack AI-powered sales automation platform for Saudi SMEs:

Backend (FastAPI + PostgreSQL):
- Multi-tenant architecture with row-level isolation
- JWT auth with RBAC (owner/manager/agent/admin)
- Lead, Customer, Deal, Pipeline, Activity, Message, Proposal models
- Dashboard analytics API (overview, pipeline, revenue)
- WhatsApp Business API, Email (SMTP/SendGrid), SMS (Unifonic) integrations
- Celery + Redis workers for automated follow-ups and scheduled messages
- Property model for Real Estate module (Riyadh districts)
- Hijri date utilities, Arabic/English localization

Frontend (Next.js + Tailwind):
- Professional Arabic RTL landing page with 10 sections
- Brand identity: SalesMatic (سيلزماتك) with custom SVG logo
- Color system: Trust Blue #0F4C81, Growth Teal #00BFA6, CTA Orange #FF6B35
- IBM Plex Sans Arabic + Inter typography
- Responsive design, dark hero section, pricing table, FAQ

Industry Templates:
- Healthcare/Clinics: pipeline stages, WhatsApp message templates, auto-workflows
- Real Estate Riyadh: 20 districts, property tours, payment plans, matching

Infrastructure:
- Docker Compose (PostgreSQL, Redis, Backend, Celery, Frontend, Nginx)
- Nginx reverse proxy config
- Makefile for common operations

https://claude.ai/code/session_01LLR7jzpyNRwDA9kojtT3CW
2026-03-28 03:06:53 +00:00