Project · Web · PWA · Real-Time

Porchfest Day Planner

Progressive Web App Vanilla JS Node.js Express SQLite Web Push Service Worker Docker Cloudflare Tunnel Self-hosted

Project Overview

Who

Built for a group of friends attending Modesto Porchfest 2026 — the annual one-afternoon event where roughly 90 home porches across town host live music. With 140 acts on the official lineup running across five hours, anyone trying to coordinate a group ends up drowning in "where are you" texts.

What

A self-hosted Progressive Web App that turns the official Porchfest lineup into something a group can actually plan and navigate together. Each user picks acts they want to catch, gets overlap warnings when two picks conflict, and can use a built-in router that fills the gap between a chosen start and end act based on genre preferences and walking distance.

Live features round it out: check in to acts manually or by GPS, see where friends are right now, post per-act comments, find the nearest open restroom with one-tap directions in the OS map app, and get push reminders 10 minutes before each act on your plan. A "now playing" ticker and a popularity heat-glow on acts surface what's happening across the festival in real time.

When

Built in May 2026 ahead of the Sunday May 17 festival. Went from concept to deployed PWA over a couple of build weekends — most of the effort went into the planner routing logic and the push notification fan-out.

Where

Self-hosted as a Docker Compose stack on a homelab server. Public access via Cloudflare Tunnel at pf.alexgreimann.com. Installable to the home screen on iOS and Android, with offline support for the lineup view through a service worker cache.

Why

Modesto Porchfest sprawls across the whole downtown neighborhood. With 140 acts crammed into one afternoon, no single person can see them all, and groups inevitably split up. The default coordination tool — a group text thread — devolves into "where are you", "we already left", and "wait, which porch".

This app replaces that with a shared, persistent picture of the day: who's where, what's next, and what's nearby. The data underneath is the public Porchfest lineup; the personality on top is the social and logistics layer the official site doesn't try to do.

Stack & Tools

App Type
Progressive Web App
Frontend
Vanilla JS · No build step
Offline
Service Worker · Cache API
Backend
Node.js · Express
Database
SQLite · better-sqlite3
Notifications
Web Push · VAPID
Geocoding
OpenStreetMap Photon
Auth
Username · 2-emoji credential
Containers
Docker · Docker Compose
Remote Access
Cloudflare Tunnel
Host OS
Ubuntu Server