# No Hype AI Django 5.2 + Wagtail 7 blog engine for No Hype AI. ## Environment Variables Required: - `SECRET_KEY` - `DATABASE_URL` - `ALLOWED_HOSTS` - `DEBUG` - `WAGTAIL_SITE_NAME` Also used: - `WAGTAILADMIN_BASE_URL` - `CONSENT_POLICY_VERSION` - `EMAIL_BACKEND` - `EMAIL_HOST` - `EMAIL_PORT` - `EMAIL_USE_TLS` - `EMAIL_HOST_USER` - `EMAIL_HOST_PASSWORD` - `DEFAULT_FROM_EMAIL` - `NEWSLETTER_PROVIDER` ## Containerized Development ```bash docker compose build docker compose run --rm web python manage.py migrate docker compose up ``` App is exposed on `http://localhost:8035`. ## Test/Lint/Typecheck (Docker) ```bash docker compose run --rm web pytest docker compose run --rm web ruff check . docker compose run --rm web mypy apps config ``` ## Deploy Runbook ```bash git pull origin main pip install -r requirements/production.txt python manage.py migrate --run-syncdb python manage.py collectstatic --noinput python manage.py tailwind build python manage.py check_content_integrity sudo systemctl reload gunicorn ``` ## Backups - PostgreSQL dump daily: `pg_dump | gzip > backup-$(date +%Y%m%d).sql.gz` - `MEDIA_ROOT` rsynced offsite daily - Restore DB: `gunzip -c backup-YYYYMMDD.sql.gz | psql "$DATABASE_URL"` - Restore media: `rsync -avz :/path/to/media/ /srv/nohypeai/media/` ## Runtime Notes - Keep Caddy serving `/static/` and `/media/` directly in production. - Keep Gunicorn behind Caddy and run from a systemd service/socket pair. - Use `python manage.py purge_old_comment_data --months 24` in cron for comment-data retention.