Drawing 02.4, marketing site and admin
Stunt Dudes
A site and admin for a professional BMX and skateboard stunt team, a nonprofit that plays school assemblies, festivals, and ministry events: shows, a tour schedule, a media gallery, and a booking form, all edited by the team without a developer.
| No. | Part | What it does here |
|---|---|---|
| 1 | Browser | Promoters and schools watch the act and send an inquiry; the team edits shows and photos in the admin. |
| 2 | CloudFront | TLS and the www redirect; caches assets and photos, and passes pages and every form post to Lambda. |
| 3 | Next.js on Lambda | Site, admin, and booking form in one image tagged by commit, with secrets read from SSM at start. |
| 4 | Neon Postgres | Shows, athletes, gallery records, inquiries with status, admin accounts, and rate limits. |
| 5 | S3 media | Private: prebuilt photo sizes and admin uploads, read only through CloudFront. |
| 6 | GitHub Actions | Builds the image, migrates, and applies Terraform through OIDC, then refreshes the pages. No stored keys. |
| 7 | SendGrid | The booking note to the team and the confirmation to the promoter, from the authenticated domain. |
Why it exists
The act is loud, physical, and genuinely impressive, and their old template made it look like a hobby. A stunt team gets booked because a promoter or a principal watched thirty seconds of footage and believed it, so the site's job is to carry the act and then get out of the way of the booking.
How it is built
This is the ShirePath AWS pattern at its cleanest: one Next.js container on Lambda behind CloudFront, Terraform in the repo, and deploys through GitHub's OIDC with no stored keys. Pages come from the function and are cached inside Next until an admin edit or a deploy refreshes them; CloudFront caches what never changes: assets, photos, and generated images.
A booking is saved to Postgres before anyone is emailed, behind a honeypot and a rate limit. Then SendGrid sends one note to the team and a confirmation to the promoter from the authenticated domain, and the team works the inquiry in the admin by status. Gallery photos are prebuilt into the sizes the page needs and served from S3 through the CDN. There is one seeded admin, no signup, and a forced password change on the first sign-in.
What it does
- Shows, tour dates, athletes, and a gallery the team edits itself
- Booking inquiries saved first, then sent to the team and the promoter
- An inquiry inbox with status and notes
- Photos uploaded straight to S3 and served from the CDN
- Structured data and per-page metadata so promoters can find them
Plates
