Drawing 02.5, marketing site and admin
TCL Auto Detail
A site and admin for a mobile auto detailer in Tuscaloosa, Alabama. The detailer drives to the customer, so the site's job is to price the work plainly and turn a search into a quote request.
| No. | Part | What it does here |
|---|---|---|
| 1 | Browser | Customers price a detail and send a quote request; the owner works leads and photos in the admin. |
| 2 | CloudFront | Caches public pages for up to five minutes when the origin allows it, so crawlers never reach Lambda. |
| 3 | Next.js on Lambda | Site, quote form, and admin in one image, capped at 30 at once so a burst cannot become a bill. |
| 4 | Neon Postgres | Packages, gallery, content, and leads by status; reads retry when a frozen Lambda's socket is dead. |
| 5 | S3 media | Gallery photos uploaded by presigned PUT, served only through CloudFront. |
| 6 | GitHub Actions | Builds, migrates, and rolls the image through OIDC; CDN and DNS changes stay a manual apply. |
| 7 | SendGrid | The quote to the detailer and a confirmation back to the customer. |
Why it exists
A one-truck detailing business does not need a platform. It needs to be found, to be trusted in about eight seconds, and to get a quote request to someone who is currently under a dashboard. Everything else is overhead the owner pays for and never uses.
The interesting part
It is the same Lambda and CloudFront pattern as the rest of my AWS work, and the interesting part was cost at the bottom of the traffic curve. Crawlers were waking a serverless database on every pass, so public pages are cached at the edge for up to five minutes and anonymous visitors stop reaching the origin at all.
A Lambda that sits frozen long enough loses its database socket, so reads retry instead of showing an error to whoever arrives first that morning. Concurrency is capped at thirty, so a burst cannot fan out into a database bill the owner never agreed to. The quote form shows a running estimate as the customer picks a package, then saves the lead and emails the detailer and the customer.
What it does
- Plain package pricing with a running estimate on the quote form
- Quote requests saved, then emailed to the detailer and the customer
- Public pages cached at the edge so crawlers never wake the database
- Reads that retry after a frozen Lambda drops its socket
- An admin for leads by status, gallery photos, and content
Plates
