feat(web): placeholder site for the apex and www, owned by infra #49

Merged
jfraeys merged 1 commit from jfraeys/feat/placeholder-site into main 2026-10-10 13:11:41 -04:00
Owner

The apex (jfraeys.com, www) must be served from infra for now, and later by a dedicated jfraeys_com project, not by the coaching site.

New generic role roles/placeholder_site: static "coming soon" page + nginx vhost for the apex and www. The file is 00-placeholder.conf so nginx (alphabetical include) takes it before the coaching-site vhost for the same server names; the later duplicates log "conflicting server name ... ignored", which is expected. Reuses the existing apex Let's Encrypt cert (skips itself if absent). nginx -t runs before reload; on failure the vhost is disabled again. Wired into playbooks/web.yml under tag placeholder_site.

Verified: syntax-check and ansible-lint pass; a check-mode --diff run against the production web host shows only the expected creates (web root, page, vhost, link) and a guarded reload.
Not verified: the live result. Deploy with scripts/with-vault.sh ansible-playbook -i inventory/hosts.yml playbooks/web.yml --tags placeholder_site --limit web_hosts, then confirm jfraeys.com/www return the placeholder. Rollback: remove /etc/nginx/sites-enabled/00-placeholder.conf and reload.

Follow-ups not in this PR: the coaching site should leave the apex (its coaching_site_domain), and its cert dependency plus mail.jfraeys.com (origin cert lacks it, Cloudflare 526) need a decision.

🤖 Generated with Claude Code

The apex (jfraeys.com, www) must be served from infra for now, and later by a dedicated `jfraeys_com` project, not by the coaching site. New generic role `roles/placeholder_site`: static "coming soon" page + nginx vhost for the apex and www. The file is `00-placeholder.conf` so nginx (alphabetical include) takes it before the coaching-site vhost for the same server names; the later duplicates log "conflicting server name ... ignored", which is expected. Reuses the existing apex Let's Encrypt cert (skips itself if absent). `nginx -t` runs before reload; on failure the vhost is disabled again. Wired into `playbooks/web.yml` under tag `placeholder_site`. Verified: syntax-check and ansible-lint pass; a check-mode `--diff` run against the production web host shows only the expected creates (web root, page, vhost, link) and a guarded reload. Not verified: the live result. Deploy with `scripts/with-vault.sh ansible-playbook -i inventory/hosts.yml playbooks/web.yml --tags placeholder_site --limit web_hosts`, then confirm jfraeys.com/www return the placeholder. Rollback: remove /etc/nginx/sites-enabled/00-placeholder.conf and reload. Follow-ups not in this PR: the coaching site should leave the apex (its coaching_site_domain), and its cert dependency plus `mail.jfraeys.com` (origin cert lacks it, Cloudflare 526) need a decision. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(web): placeholder site for the apex and www, owned by infra until jfraeys_com exists
All checks were successful
Lint / lint (pull_request) Successful in 1m20s
43114c5176
New generic role placeholder_site: a static "coming soon" page and an nginx
vhost for the apex and www (00-placeholder.conf, loaded before the coaching-site
vhost so it wins the duplicate names), validated with nginx -t before reload and
disabled again if nginx rejects it. Reuses the existing apex Let's Encrypt
certificate and skips itself if that is missing. Wired into playbooks/web.yml
under the placeholder_site tag. Dry run against the production web host (check
mode, --diff) shows exactly the expected five changes.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jfraeys/infra!49
No description provided.