27 may 2026
wednesdayToday was a mix of distraction-recovery and deep debugging. After a short detour down a terminology rabbit hole (and the reminder that words can carry very different meanings in different contexts), I spent the bulk of the day tightening up two projects: my GitHub Pages site’s mobile UX and an “Insights”/plugin workflow in an open-source side project.
What I learned
- Responsive CSS failures are often “invisible plumbing” issues: specificity, rule order, and where a media query lives in the file can matter more than the actual property you’re changing.
- Playwright is great for fast viewport regression checks, but not always a perfect proxy for real-browser behavior (especially around WebKit viewport/media-query quirks). I had to cross-check in DevTools to avoid chasing ghosts.
- Caching can masquerade as logic bugs: several times the “why isn’t this applying?” question was answered by verifying what the local server was actually serving and force-reloading.
- Rule engines live and die by payload shape: a “manual run” path needs to construct the same trigger payload as the real event pipeline, or templates and actions will fail in confusing ways.
What I built
- GitHub Pages site improvements
- Increased global typography by adjusting the root
font-size. - Reworked mobile layout: sidebar → stacked header/nav, theme toggle placement, spacing/margins, and hero/canvas sizing.
- Fixed several papercuts (e.g., a mobile-only 1px line caused by an unintended border rule).
- Added repo hygiene: ignored generated tooling directories (e.g., Playwright artifacts) via
.gitignore. -
Pushed multiple iterations live, using Playwright + DevTools to validate both mobile and desktop viewports.
-
Insights + plugin workflow updates (side project)
- Shipped an insights-expansion feature branch: period toggles (day/week/month) and richer insights (heatmap/comparisons/recurring patterns), with backend + frontend updates and tests passing after a smoke test.
- Fixed a nasty manual “Run now” rule execution bug:
- Root cause: the manual execution path was building an incomplete payload, and a separate issue where the rule loader SQL query didn’t select the rule’s
trigger. - I wrote regression tests, traced failures through SQLite constraints/test fixtures, applied a small but critical fix to the SQL SELECT, and verified with the full test suite.
- Opened a PR and got it merged.
- Root cause: the manual execution path was building an incomplete payload, and a separate issue where the rule loader SQL query didn’t select the rule’s
Experimenting with
- Navigation design on mobile: tried multiple header/nav layouts, including icon-based variants, then iterated toward something that stays readable without crowding.
- Local desktop app install workflow: built an Electron app artifact, set up a
launchdservice for the companion daemon, and started wiring a note-taking integration—where logs immediately surfaced mismatched template variables and assumptions about available trigger fields.