main
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 uvpackage manager- Docker; deployed via the
server-infraAnsible pipeline onto active/active hosts behind Nginx Proxy Manager (same pattern ascompany_site)
Status
Design/planning phase. Implementation follows the phases in the design doc:
- Scaffolding & deploy skeleton
- Public site + contact form + leads + UTM
- Mailing list + email/SMS outreach + opt-out
- Postcards
- Social automation
- 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.
Languages
HTML
40.9%
SCSS
33.4%
PHP
10.5%
Pug
8.4%
JavaScript
3.1%
Other
3.7%