Files
2026-07-16 05:48:12 -05:00

2.0 KiB

monica_site

Django 6.0 marketing platform for a single realtor client — a cheaper replacement for PostcardMania with added social-media automation.

  • Public site with a reCAPTCHA-protected contact form.
  • Private portal for the realtor: lead inbox + UTM/campaign analytics.
  • Mailing list with per-channel consent and easy opt-out; outreach over email + SMS (SMTP2GO) and postcard (pluggable provider, default Lob).
  • Social automation — schedule/post to Facebook, Instagram, and LinkedIn via native APIs.

See docs/monica-site-design.md for the full architecture, data model, folder layout, deployment, and phased implementation plan.

Stack

  • Django 6.0, Python 3.12
  • Postgres (production), SQLite (local fallback)
  • Django Tasks (django.tasks) for background work (sends, scheduled posts) — Postgres queue store + a single worker process; no Redis/Celery
  • uv package manager
  • Docker; deployed via the server-infra Ansible pipeline onto active/active hosts behind Nginx Proxy Manager (same pattern as company_site)

Status

Design/planning phase. Implementation follows the phases in the design doc:

  1. Scaffolding & deploy skeleton
  2. Public site + contact form + leads + UTM
  3. Mailing list + email/SMS outreach + opt-out
  4. Postcards
  5. Social automation
  6. Hardening & polish

Local development (planned)

Once scaffolded:

uv sync
docker compose up            # web + postgres
uv run python manage.py migrate
uv run python manage.py runserver
# Dev uses ImmediateBackend — tasks run inline. For prod-like workers, run worker-entrypoint.

Deployment

CI on merge to main runs tests, then calls server-infra/scripts/deploy.sh --app monica_site --env prod --ref <sha>. Requires a monica_site entry in the server-infra app_catalog, a reserved host port pair, a shared-Postgres database, a singleton django.tasks worker on one host, and a control-node secret env file. Details in the design doc.