Drawing 02.6, marketing site and admin
Mediation & People Solutions
A site for a mediation and organizational consulting practice in Maury County, Tennessee. Both offerings get equal weight, the contact form asks for what a conflicts check needs, and the owner edits and publishes his own details.
| No. | Part | What it does here |
|---|---|---|
| 1 | Browser | Visitors reading the practice's pages; the owner editing his details in the admin. |
| 2 | CloudFront | One distribution: pages and assets from S3, the form and the admin to Lambda. |
| 3 | S3 site bucket | Prerendered pages and hashed assets, private and reachable only through CloudFront. |
| 4 | Form and admin | A Lambda for the contact form, the page-view count, and the admin as server-rendered HTML. |
| 5 | Publish Lambda | Renders the pages from the owner's published facts, and is the only thing that can write them. |
| 6 | Neon Postgres | Contact requests, the owner's facts with drafts and history, QR campaigns, and view counts. |
| 7 | GitHub Actions | Builds, uploads, ships both functions, and triggers a publish through OIDC with no stored key. |
Why it exists
The practice has two offerings of equal weight, and the site had to present both without drifting into a mediation-only page. A mediator's credibility rests on every stated fact being exactly right, so every line traces to something the client wrote or confirmed, and the facts that change he can now change himself.
How it is built
The pages are prerendered to real HTML and served from a private S3 bucket behind CloudFront, so the public site has no server to keep up. A fact we do not have yet is a placeholder, and the build fails if one reaches a page, because a mediator's homepage should never state something nobody confirmed.
One Lambda behind the same CloudFront takes the contact form and serves the admin as plain server-rendered HTML. A second Lambda with no public URL is the only thing that can rewrite the pages: it reads the facts the owner published, checks them again, renders the eight pages, and its role may write those eight files and nothing else. DNS moved to Route 53 in stages, because the domain also carries the client's live Microsoft 365 email.
What it does
- Every page prerendered; the build fails if an unconfirmed fact survives
- The owner edits and publishes his phone, email, bio, and counties
- Contact requests stored and read in the admin, behind a honeypot and a rate limit
- QR codes for printed material, counted without storing who scanned
- DNS moved in stages around the client's Microsoft 365 mail
Plates
