A working scratchpad for the Porto group calendar: things to remember, decisions made, and ideas not yet on the grid. The calendar itself lives in porto-chapter-calendar.html; this file is just the human context around it.
Last updated: 2026-07-16
google-calendar-mcp-setup.md)Longer-horizon structural changes, as opposed to the feature list above. Not urgent, but worth designing for before the single-file approach gets harder to unwind.
porto-chapter-calendar.html is one file for one trip (Porto, Jul 2026). Need a way to spin up a new instance per trip (next chapter, next city) without copy-pasting and forking the whole file each time — ideally one shared template/engine reused across trips, each trip only supplying its own data and a few config values (title, date range, timezone, links).EVENTS/SPANS/FLOATING are currently inline JS arrays inside the HTML. Move them out to their own file(s) (e.g. JSON or a small data module) so editing a trip’s schedule doesn’t mean editing the same file as the rendering logic. Also sets up the API-sync roadmap item above more cleanly, since an external feed would write to the data file, not the page.These two are linked: once data lives outside the code, “multiple instances” mostly becomes “same engine, different data file per trip” rather than a rewrite.
| # | Action | Owner | Status |
|---|---|---|---|
| 1 | Sunset river cruise (Sun 5 Jul, 19:30–21:30) happened before the calendar window (grid starts Mon 6 Jul), so it was dropped from the grid for now. Revisit if we ever want a “past / retrospective” section covering the first weekend. | — | Parked |
Add new actions above this line.
.ics on the fly (data URI, no Blob) and downloads on click. Skipped for FLOATING (dateless) items by design, and hidden for cancelled events (brunch, kayak) per call.display:nones an entire past row at once (only once every day in it is behind today) instead of hiding individual day cells, which used to leave ugly blank gaps. Days within a not-yet-fully-past row still gray out individually. Default changed to off — past rows stay hidden until switched on.HOUSEKEEPING array (which had separate clean/bedding entries on Mon/Tue/Thu) — bedding kind removed from HK_META since it’s no longer used.wifitribe.porto.jul26@gmail.com — Food Tour #2, Gerês hike, Borboleta dinner, Tribal Tuesday (Jul 21), World of Wine day pass, O Gaveto, Café Santiago, Sunset walk. ⚽ Final updated in place (location/description) rather than duplicated. Still manual — no automation wired up yet.post (18 Jul): Optional Slack permalink field added to the event schema, rendered in the drawer as “View Slack post ↗” and included in the .ics description. Going forward, every new entry added to the calendar should carry a post link back to its source message — manual version of the “link back to Slack posts” roadmap item above, ahead of any API integration. First use: foodtour2 (Hiba’s Vintage & Port Wine tour, confirmed for Wed 22 Jul).wifitribe.porto.jul26@gmail.com, GCP project wifitribe-porto-jul26, public iCal subscribe feed enabled. Claude Code wired to it via nspady/google-calendar-mcp (local stdio, OAuth Desktop client, credentials kept outside the repo). All 33 dated EVENTS/SPANS entries pushed as a one-off (cancelled events and undated FLOATING ideas skipped). No automatic sync yet — see google-calendar-mcp-setup.md and the new roadmap item above.ss-seo (Nigel’s SEO & GEO fundamentals) moved from FLOATING to EVENTS — poll picked Mon 27 Jul 6pm (8 votes) over Tue 28/Wed 29 (7/7); confirmed on the patio, same day as posting. ss-career added new (Dan’s careers/recruiting skill share) — poll picked Tue 4–5pm (9 votes) over four other 1-hour blocks; confirmed for Tue 28 Jul, 4–5pm. Both carry a post link per the 18-Jul convention. Not yet pushed to Google Calendar.serralves from Tue 28 to Thu 30 Jul, same 10am time. Still status:"interest" (not binding — tickets bought at the door), just the date changed.farewell-sunset — Nikki’s either/or poll (farewell dinner vs sunset picnic at Jardim do Morro), pinned to Thu 30 Jul 7:30–10pm, status:"interest". Sunset was leading when posted; no post link (message pasted directly by user, not scraped from Slack).https://cv.garlez.me/porto-chapter-calendar.html?v=3 — WhatsApp treats it as a new URL and re-fetches everything. Bump the number (?v=4, ?v=5, …) each time.og:image was a 320 KB PNG; WhatsApp silently drops previews over ~300 KB. Fix: switched to a 600×315 JPEG (~39 KB). Keep the OG image a small JPEG/PNG — avoid WebP, which WhatsApp doesn’t reliably render for previews.?v= trick works everywhere as a fallback.Europe/Lisbon).#por_jul26_adventures (WiFi Tribe Slack)development_runbook_jul26.md