Edit + commit
Content or markup change in the local repo; git commit on the main branch.
A neighborhood espresso bar's first real web presence — vanilla site, real deploy pipeline, HTTPS that renews itself.
A neighborhood espresso bar with no web presence and no in-house technical capacity. The job was a real site, a real domain, and a deploy pipeline the owner could keep running without ever opening a terminal. Vanilla code. Boring infrastructure. HTTPS that renews itself.
Most small-business sites are either over-built (Shopify + Wix + booking add-ons for a shop with no online ordering) or under-built (a Squarespace template that goes stale the day after launch). For a coffee shop that mostly needs to show hours, location, and menu, and that doesn't want a monthly platform fee, the right answer is a tiny vanilla site on its own infrastructure.
Designer, engineer, operator. One-month build, single client, hand-off-ready.
Web standards are good enough that vanilla HTML + CSS Grid + a small amount of JS produce a faster site than most SaaS templates. Let's Encrypt + Certbot's webroot ACME flow makes HTTPS truly hands-off. Together, those mean a shop can have a real online presence without paying a platform tax.
Owner-grade deploy pipeline: every release is versioned, atomic, and rolls back in one symlink swap.
Content or markup change in the local repo; git commit on the main branch.
git push to the droplet's bare remote triggers a post-receive hook.
Hook writes the working tree into /var/www/releases/<timestamp>, leaving the previous releases untouched.
Single symlink swap (/var/www/current → new release dir). Nginx serves the new content instantly; old releases stay around for rollback.
Certbot's webroot ACME flow renews the Let's Encrypt cert without taking Nginx offline.
5-release rollback window — point the symlink at a prior release dir, reload Nginx, done.
A single-page site — hero, about, menu, gallery, hours, location, contact — built with HTML5, CSS Grid, custom properties, vanilla JS. Mobile hamburger nav, smooth scroll, no framework tax. 18 WebP photos optimized to ~2.3 MB total page weight. Teal accent (#3FBFBF), Pacifico script logo. Deployment is a release-versioned pipeline: a bootstrap script that sets up the droplet (Nginx, deploy user, SSH config), a deploy script that pushes a new release dir with an atomic symlink cutover, and a 5-release rollback window. Let's Encrypt HTTPS via Certbot's webroot ACME flow, so cert renewal never takes the site down. The cutover from the legacy subdomain to the apex `.com` walled off MX / TXT / nameservers so email and external integrations on the old DNS kept working through the transition.
Static site, real deploy pipeline. No CMS, no platform fee, no platform lock-in.
Owner-edited HTML, CSS, JS, WebP images. No build step.
Stages a new release dir, then swaps the /var/www/current symlink atomically.
Old release directories are preserved; rollback is a single symlink swap.
Serves the symlinked release. Apex + www + legacy subdomain all redirect to the canonical apex.
Cert renewal happens without taking the site down.
Walled off MX / TXT / nameservers during cutover — email and external integrations on the old DNS kept working.
Standalone takes port 80 to renew. Webroot lets Nginx keep serving traffic. That's why renewals are silent.
The apex cutover only touched A / CNAME records. Email and third-party integrations on the legacy DNS were never paused.