What I'm building
Live pulse of my work. It reads my commit history across every project I work on. Design work, client work, learning, and thinking don't show up here.
- Commits
- 6114
- Per day
- 31.0
- Active days
- 197
- Projects
- 19
Last 31 days
Last 7 days
Yesterday
Sunday, October 11
Saturday, October 10
Friday, October 9
Thursday, October 8
Wednesday, October 7
Tuesday, October 6
Monday, October 5
Sunday, October 4
Saturday, October 3
Friday, October 2
Thursday, October 1
Wednesday, September 30
Tuesday, September 29
Monday, September 28
Saturday, September 26
Friday, September 25
Thursday, September 24
Wednesday, September 23
Tuesday, September 22
Monday, September 21
Sunday, September 20
Pulled the latest project changelogs in from their source repos.
Saturday, September 19
Friday, September 18
Thursday, September 17
The Pulse year card gained a Days, Weeks and Months reading toggle so the year can be read as week bars, and the docs were corrected after a drift audit.
Wednesday, September 16
Tuesday, September 15
Monday, September 14
Sunday, September 13
Saturday, September 12
Friday, September 11
Thursday, September 10
Wednesday, September 9
Tuesday, September 8
Monday, September 7
Pulse now lets a registry entry declare a repo the walk cannot reach, along with the moment its copied history ends, so work split out of a project still counts once under it.
Sunday, September 6
Saturday, September 5
Pulse year card now opens on the current year in Live view and the ADHD window in Dev, with hours shown on Today and a rolling "12 mo" label.
Friday, September 4
Thursday, September 3
Fixed NumberRoll so the mask stays off resting glyphs and figures rest on their true baseline, shipped in release 0.0.4.
Wednesday, September 2
Tuesday, September 1
Sunday, August 30
Saturday, August 29
Friday, August 28
Thursday, August 27
Wednesday, August 26
Tuesday, August 25
Sunday, August 23
Saturday, August 22
Friday, August 21
Thursday, August 20
Wednesday, August 19
Tuesday, August 18
Unified three storefront histories under one Pulse project, registered the shared tooling, and documented the repository-merge workflow and its traps.
Monday, August 17
Refined server detection so a server running from a tool's own working directory never surfaces as a row, and added the project identity file.
Added the project identity file.
Added the project identity file.
Added the project identity file.
Added the project identity file.
Added the project identity file.
Added the project identity file.
Added the project identity file.
Added the project identity file.
Added the project identity file.
Added the project identity file, kept in the wiki repo since Raycast extensions cannot ship a docs folder.
Added the project identity file.
Added the project identity file.
Added the project identity file.
Added the project identity file.
Sunday, August 16
Extended dev-server detection beyond the JavaScript world with runtime badges, replaying each server's original command on restart and handling workers that share a port. Hardened restart so replay is positional and decided before the kill, and workers now die with their supervisor.
Added a fullscreen control.
Friday, August 14
Released version 1.7.4, redirected Home and Explore to X history, and documented package-version lockstep.
Thursday, August 13
Wednesday, August 12
Tuesday, August 11
Shipped lossless JPEG to JXL transcode in the single-image editor, fixed a drag test to wait for the intro to mount before dispatching, and closed out the transcode spec, roadmap, and brief.
Sunday, August 9
Added jpegli using libjxl's tuned JPEG encoder, captured a reproducible baseline, and completed the supporting documentation. Updated SvelteKit and related dependencies with the CI audit gate green.
Saturday, August 8
Upgraded JPEG XL to libjxl 0.12 through its public C API and retuned the quality curve at full resolution. Fixed cache eviction so newly admitted entries remain valid, and established a reproducible cache-cold, module-warm benchmark baseline with corrected WebP alpha handling.
Friday, August 7
Thursday, August 6
Refreshed the data.
Wednesday, August 5
Expanded the roadmap with a server detail pane and started-by attribution.
Tuesday, August 4
Monday, August 3
Made the app installable with a web app manifest and generated install icons, folding the apple-touch icon into the icon pipeline and adding iOS standalone metadata.
Fixed a process-detection rule to ask ps for the executable name instead of scanning argv, so matching stays reliable.
Sunday, August 2
Fixed the menu bar so same-named Start rows always carry a distinguishing subtitle, keeping duplicate entries tellable apart.
Saturday, August 1
Added a kill HUD confirming menu bar kills on real exit, and made a click survive until its in-flight API work finishes instead of a fixed wall-time. Delegated menu bar restarts to the dashboard's replace-in-place spawn flow, and fixed SVG asset rasterization that dropped line and polygon elements.
Reworked Pulse Explore: rolling digest labels and entry-gated click-to-day promoted from the lab, grid hit areas that tile across the column gaps, and affordances that track real entry availability. Pruned the experimental lab down to the surviving views.
Friday, July 31
Reworked Pulse identity to use verbatim repository names with registry-only reveal and rename-proof matching, and added a retention ledger so deleting a repo never erases its history.
Thursday, July 30
Wednesday, July 29
Tuesday, July 28
Documented the sidecar ULP drift trap in the gotchas.
Recorded the permanent naming constraints.
Recorded the brand mark direction in the design doc.
Rescued the inset-card system and two silent traps from memory into the docs.
Monday, July 27
Fixed the reload loop by keying detection on the document starting state and capping repeated reloads, then stopped over-cleaning from breaking YouTube Music and offline downloads. Reverted the withdrawn Firefox permission change and added offline end-to-end and Chromium smoke gates.
Sunday, July 26
Landed a broad post-release fix pass: helper reaping now kills only workerd orphans, never a tool still running; favicon fetches are pinned to each server’s origin; and pending and failed start rows survive the window closing and stay findable. Added Finder selection as a picker row and fixed the silent auto-open.
Moved local dev onto a named portless URL at https://tavlean.loc, dropped the pinned dev port and the now-unused second dev-server slot, and refreshed the brief for the agent preview port move.
Saturday, July 25
Gave each starting server its own dashboard row, ordered newest first, spinning with a precomputed 20fps arc and failing in place, not a toast. Named the portless-proxy-down and other spawn failures, shared that with restart, and reshaped toasts to lead with the cause and the fix as a button.
Closed several security holes: an edge SSRF, a /projects open redirect, a commit-subject injection path, and an OG visibility leak, adding npm run check:leaks to guard the last. Dropped the featured flag so the home OG strip takes the first four by order, and re-aligned to the house standard.
Added search and link-preview metadata plus an og:image social card and its generator, then rebuilt the card dark to mirror the landing, balanced it, restored the missing SVG format, and enlarged the brand lockup. Kept crawler-only files out of the service-worker install shell and adopted the house standard.
Added new benchmark scores: GDPval-AA v2 for Opus 5 and Fable 5, and BrowseComp for Fable 5. Re-aligned the docs to house standard v1.9 and polished the style tie-breaker files with behavior unchanged.
Friday, July 24
Added Claude Opus 5 to the model dataset, including its full set of reasoning-level variants, and refreshed the simulated ranking data to match.
Tuesday, July 21
Logged two code-review findings in the issue-list backlog.
Monday, July 20
Adopted the lean house documentation standard: a ratified AGENTS.md split down to navigation and hard rules, a one-line CLAUDE.md, and an exemplar truth pass that locked verified reference files.
Sunday, July 19
Fixed project-list accessibility, then adopted the house documentation standard: a real agent brief, a disciplined docs index, lowercase doc names, a one-line CLAUDE.md, and a consistent project-management layout, simplifying 136 long sentences to plain prose across 19 files.
Drove ESLint from 101 errors to zero and wired TypeScript parsing for Svelte script blocks, then ran a dead-code audit, removed unused code and 1.8 MiB of unreferenced assets, fixed dependency placement, and applied the Svelte documentation review.
Saturday, July 18
Unified the design across the darkroom, porcelain, and hybrid lab skins with a shared Nucleo icon set and a common LabIcon host, added tab-bar navigation and a two-door index, and corrected the theme and info icons.
Friday, July 17
Shipped a Share button as the mobile path to the photo library, and fixed dropped-file import to read plain files directly rather than their webkit entry. Added end-to-end tests driving the landing's drag-and-drop and both paste paths.
Thursday, July 16
Fixed the landing on mobile with theme-aware browser chrome and a consistent body canvas, and pinned the intro logomark so the wordmark can no longer overlap it. Ran a fable pass tidying lab brand handling and doc accuracy, tuned the intro lockup, and unblocked unit tests in CI.
Completed the drafts reject-cascade with lossless undo, an archive-on-supersede option, and the supporting UI, across both server and validator. Re-ran the gating simulation on real multi-level data for the first time: three models won outright and stay enabled.
Shipped 1.5.1. Firefox now recovers when the youtube.com host permission is missing instead of failing silently, and the content script detects in-page navigations on mobile YouTube with Firefox scoping corrected.
Wednesday, July 15
Rebranded across the app with a new theme-aware logomark and wordmark, unified to a single canonical logo source, and regenerated broken icons. Shipped a redesigned landing with finalized copy, an inline paste action, and mobile WCAG AA contrast. Hardened production builds to strip dev-only UI and block OS junk.
Tuesday, July 14
Standardized the Frisp brand name across the app while keeping identifier-safe slugs separate.
Sunday, July 12
Shipped an SVG optimization lane with guarded automatic tuning, vector-true previews, and a 215-file benchmark corpus that outperformed nano and ImageOptim. Also added calibrated film grain across formats with live preview and per-image controls.
Updated the mobile header menu to use the browser's native command invoker.
Saturday, July 11
Shipped a subject-first drafts review page with fast publishing, per-item promotion, identity questions, and aliases that prevent repeat decisions. Wired DeepSWE 1.1 and CursorBench 3.2 into RAGI Code and added Grok 4.5.
Reserved an npm placeholder for the frisp CLI name and filed a support ticket after the unscoped name was blocked by a similarity filter, and specced the codec batch: JPEG XL, jpegli, JPEG-to-JXL transcode, and auto-quality.
Friday, July 10
Shipped Quiet Secret on the Pulse page, rendering private work as a lock and count on chips and the day journal, and built a multi-view Pulse lab behind a dev-only nav link. Added in-dev auto-sync of commit data, and fixed the theme picker's keyboard and ARIA model.
Deepened the drafts review UI with save, finalize, reopen, and three inbox lab directions. Added a level-attribution ruling: a score claims a reasoning level only when its own evidence shows it. Fixed a crash where a product variant could become a family's representative, and made model deletion cascade cleanly.
Explored the intro page through billboard, frame, split, ledger, prism, and showcase variants, unified under a graphite-first identity. Ran a craft pass on the bulk and editor code, fixing a debounce-timer leak on reset.
Thursday, July 9
Advanced the admin lab with version sub-tabs, a dedicated lab gallery, draft-review layout variants, and a redesigned draft triage flow, while documenting onboarding-audit findings that reduced repeated discovery work for future agents.
Moved project pages from /projects to the site root, made the projects grid the home page, added redirects for old URLs, refreshed discovery and OG generation, and tightened Pulse self-exclusion.
Wednesday, July 8
Taught the menu bar to resolve a raster favicon variant for sites that only ship an SVG, and fixed monochrome detection to count CSS named colors as explicit. Reworked the rows to lead with the project name, parenthesized the port and domain, and pruned recents for deleted folders.
Synced the latest Dev Servers changelog into the site.
Tuesday, July 7
Shipped a Cmd+K command palette, and cut admin payloads by turning SSR off and lazy-loading sidecars: RAGI Studio fell from 3.4 MB to 182 KB and the matrix from 3.9 MB to 663 KB. Caught a save bug that would have permanently disabled simulation priors.
Ran a first-principles review of the app and executed it: cached decoded sources so passes stop re-decoding, replaced the pair barrier with per-slot drain loops, and transferred buffers instead of cloning. Retired the codegen script, swept dead code, and built a crop tool alongside porcelain and darkroom editor re-skins.
Added per-server favicons to the menu bar with tinted fallbacks and a red kill control, and improved process detection to resolve helper binaries and pnpm shims back to their spawning tool while hiding ephemeral listeners.
Monday, July 6
Reworked the landing intro: a rebuilt brand lockup with capability-aware copy, a livelier animated blob field you can click anywhere to open the picker, and OS light/dark theming with a softened load button. Refreshed the logo and wordmark assets and set a clearer page title.
Sunday, July 5
Finished the Sqush-to-Presk-to-Frisp rename with the brand centralized in one module, moved the app to Cloudflare Workers static-assets hosting, and stood up a sunset Worker that takes over the old domains with a verified kill switch and query-preserving redirects. Also fixed an e2e bulk-override race and hardened CI flakiness.
Renamed the project entry twice as Sqush became Presk then Frisp, updating the slug, registry, route, redirects, and pulse data, and repointed the registry at the renamed local repo folder.
Friday, July 3
Shipped the contextual left panel with image info and Compare as controls, then promoted bulk mode with two-or-more-file routing, folder import, dropped-folder traversal, ZIP Save all, keep-larger safeguards, undo, and the stack resting stage.
Enabled the accepted level-aware simulation priors in production, kept the failed Pro floor off, added reassessment gates for new data, removed the unapproved public levels table, fixed level ordering and composite percents, and trimmed dead scoring config.
Thursday, July 2
Designed the bulk UI around production editor components, landing the stack stage, multi-select, hero stats, and a promotion spec. Grew the bulk engine with relative-path import, keep-larger export, pure undo, encode sharing, persistent workers, and 58 tests.
Drove the score-record migration through family merges, provenance, redirects, per-score source UX, and reasoning-level editing. Designed level-aware simulation priors with a seedable CV harness, shipped /api/export, and retired old scoring code.
Shipped a menu bar command with per-server actions, frecency starts, and per-project Kill All. Made Shopify theme startup choose a free port when 9292 is busy and explain conflicts clearly.
Built the Raycast extension with model and benchmark search, /api/export SWR loading, detail panels, and AI tools. Fixed production JSON parsing, hid blank level tables, and moved documentation to the wiki.
Registered Presk and a private project, folded wiki repos and linked worktrees into main checkouts, and synced Dev Servers and Tab Limiter changelogs.
Wednesday, July 1
Shipped a safer update path: new service-worker versions now prompt users to refresh, hashed assets cache immutably, stale fractional settings self-heal on load, and CI separates formatting from deeper checks.
Added Sonnet 5 and refreshed leaderboard data.
Updated Vite to 8.1.2.
Updated Vite.
Updated Vite to 8.1.2.
Tuesday, June 30
Fixed deploy freshness by auto-activating new service workers, reloading controlled tabs onto the latest build, and preventing stale cached service-worker files.
Monday, June 29
Fixed tab limiting so already-open tabs are never closed when a window is over its limit.
Sunday, June 28
Shipped undo/redo with buttons and shortcuts, backed by a new encode-result cache and history foundation. Overhauled resize and zoom, made size presets shrink-only, added Reset view, and unified codec panels into Quality, Effort, and Advanced tiers.
Added dev-only deltas to the Pulse Today, week, and month cards and widened the hourly snapshot to three days. Fixed NumberRoll baseline alignment, logged the XPlus changelog, and tightened Pulse self-scan exclusions.
Saturday, June 27
Trimmed the codec set by removing browser JPEG, PNG, GIF, and QOI outputs, then reconciled e2e coverage, benchmarks, and docs with the leaner encoder list. Bumped Vite to clear a high-severity advisory.
Thursday, June 25
Upgraded the site to Astro v7 and bumped the sitemap integration to 3.7.3.
Wednesday, June 24
Shipped 1.7.3, fixing a break-ending warning that fired at the same time as the redirect.
Made an early work-in-progress commit.
Tuesday, June 23
Updated the frontend toolchain and clarified the npm package manager.
Preserved non-square project icons' natural aspect ratio and bumped the Fill project's order.
Monday, June 22
Added an OG image generation system, generated social cards for every page, and wired the OG/Twitter meta tags, hooking the Pulse card into the pulse automation. Shipped a resolved-order theme picker as the header control and synced the TubePlus and XPlus changelog/privacy from source docs.
Updated the privacy policy permissions (declarativeNetRequest, retained tabs), dropped the unused tabs permission, and cleaned em dashes from the changelog and privacy copy.
Removed an em dash from the 1.7.2 changelog entry.
Friday, June 19
Shipped releases 1.7.1 and 1.7.2: break-ending warnings now fire before a break ends rather than after it resumes, plus a popup visual refresh with a zinc/amber palette, abbreviated units, a shared dialog backdrop, and no opening animation.
Thursday, June 18
Refreshed Code DesignArena coverage across new and existing models, adding Minimax M3 and Grok Build 0.1 while recomputing RAGI scores.
Wednesday, June 17
Added GLM 5.2 and Kimi K2.7 Code to the leaderboard with refreshed benchmarks and recomputed RAGI scores, fixed a Button href resolution bug that was crashing the admin during SSR, and patched a high-severity devalue DoS advisory.
Upgraded the build to Vite 8 and vite-plugin-svelte 7, and cleared outstanding security advisories with an npm audit pass.
Patched a high-severity devalue DoS advisory.
Patched a high-severity devalue DoS advisory.
Patched a high-severity devalue DoS advisory.
Tuesday, June 16
Released 1.5.0 with a redesigned popup, granular mix and playlist cleaning controls, and playlist-context stripping before load, plus clearer privacy and architecture docs.

