Files
monica_site/README.md
T
2026-07-16 05:48:12 -05:00

55 lines
2.0 KiB
Markdown

# 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`](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:
0. Scaffolding & deploy skeleton
1. Public site + contact form + leads + UTM
2. Mailing list + email/SMS outreach + opt-out
3. Postcards
4. Social automation
5. Hardening & polish
## Local development (planned)
Once scaffolded:
```bash
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.