Pocono Lake House

3 min read pwa, web, offline

A single-page, installable web app for three nights at Midlake unit 301, Big Boulder / Lake Harmony, PA — Tue Aug 4 → Fri Aug 7, 2026. Five of us.

Open it: https://pfeilbr.github.io/pocono-lake-house-2026/

Add it to your home screen — iPhone: Share → Add to Home Screen. Android: menu → Install app. It then opens without a browser bar and works with no signal.

What’s in it

SectionWhat it’s for
StayThe real listing facts, all 52 host photos with a lightbox, what’s provided vs. what to bring, house rules, who sleeps where
WeatherLive forecast for the condo’s own coordinates, fetched every time you open the page
MomThe trip is built around her. Seats with a view, one outing a day, the practical file — meds, ER, urgent care
LakeBig Boulder Lake is private. Read this before you put a kayak on the roof
Do16 options with drive times, tagged for who each one actually suits
CraftStudios nearby, plus at-the-house ideas. Doubles as the rain plan
EatThe host’s own recommendations first, then Jim Thorpe, then groceries and gas
PackCheckboxes that persist on your phone. Towels are at the top, because the host doesn’t supply them
PlanFour day cards, each carrying its own live forecast
InfoNumbers, addresses, the six things nobody has confirmed yet, and every source

How the weather works

Client-side Open-Meteo call — no API key, CORS-enabled, free — against 41.0501, -75.5931, the condo’s coordinates. Nothing is baked in at build time:

  • Fetched fresh on every page open, and again on tab focus if the last one is over 15 minutes old.
  • Last good response is kept in localStorage and rendered with a “saved forecast, N hours ago” label when there’s no signal. Coverage genuinely dies in the Lehigh gorge and out at Boulder Field.
  • Interleaved, not bolted on. Each day card in Plan carries its own forecast; the wettest trip day names itself and highlights the rain-plan rows in the Do table; a high UV day surfaces the sunscreen line; current wind speed shows up in the Lake section because chop matters in a kayak. It all degrades quietly once the trip dates are in the past.

Offline

A service worker precaches the shell — HTML, manifest, the self-hosted fonts, icons and the handful of photos that show before you scroll. The other 48 photos fill in as you browse, or all at once via “Save all 52 photos for offline” in the Info section (~8 MB, do it on wifi). The forecast call is never cached by the worker; the page handles staleness itself.

Fonts are self-hosted in fonts/ rather than loaded from Google, so nothing about the design depends on a connection.

Sourcing

Every factual claim on the page carries a click-through source link, and the Info section lists all of them in one place. Where nothing published answers a question — most importantly whether there are stairs or an elevator up to unit 301, and whether a guest may launch a personally owned kayak at the Boulder Lake Club — the page says so plainly instead of guessing, and lists it as a call to make before leaving.

Layout

index.html          the whole app — markup, styles, script
app.webmanifest     installable PWA manifest
sw.js               service worker (offline shell + photo cache)
fonts/              self-hosted woff2 subsets, 383 KB
img/                52 photos from the live listing, 1200px wide
icons/              PWA icon set, 16 → 1024 px, plus maskable and og
research/           the Airbnb scrape this was all written from, kept verbatim
CLAUDE.md           project notes, sourcing rules, open questions

research/airbnb-listing-state.json is the parsed listing page state as of 2026-08-03. Prefer it over re-scraping — the live listing can change, and the page’s facts were written from this copy.