From 9341a97372078cde380167077e30d7cefe3c8b3c Mon Sep 17 00:00:00 2001 From: Fabian Meyer <44942030+dinooo13@users.noreply.github.com> Date: Tue, 29 Sep 2026 15:34:10 +0200 Subject: [PATCH 1/2] Refresh labs: add Pladder and Good Vibes Only, sharpen Habit Tracker Replace the Watch Wise and TV Show Bingo entries with Pladder and Good Vibes Only, rewrite Habit Tracker around the agent software factory that built it, and return 410 Gone for the removed lab URLs. Co-Authored-By: Claude Opus 5.5 (1M context) --- content/labs/good-vibes-only.yml | 17 +++++++++++++++++ content/labs/habit-tracker.yml | 19 ++++++++++--------- content/labs/pladder.yml | 17 +++++++++++++++++ content/labs/tv-show-bingo.yml | 16 ---------------- content/labs/watch-wise.yml | 16 ---------------- public/.htaccess.tpl | 2 ++ 6 files changed, 46 insertions(+), 41 deletions(-) create mode 100644 content/labs/good-vibes-only.yml create mode 100644 content/labs/pladder.yml delete mode 100644 content/labs/tv-show-bingo.yml delete mode 100644 content/labs/watch-wise.yml diff --git a/content/labs/good-vibes-only.yml b/content/labs/good-vibes-only.yml new file mode 100644 index 0000000..8141e4c --- /dev/null +++ b/content/labs/good-vibes-only.yml @@ -0,0 +1,17 @@ +title: Good Vibes Only +description: Claude Code plugins that take care of the annoying parts of agent work, so agents stay on track and you do not have to babysit them. The first plugin, usage-limits, lets long agent runs survive a usage limit. Claude pauses cleanly and picks up in the same thread once the window resets. +challenge: Nothing kills the vibe like hitting a usage limit halfway through a long autonomous run. Work stops mid-step, context is lost, and someone has to come back, figure out where things stood, and restart by hand. Agents should handle that interruption themselves, without burning tokens while they wait. +approach: usage-limits watches the 5-hour and 7-day usage windows while Claude works, and Claude loads it on its own before long jobs. When a limit gets close, Claude finishes the current step, commits, writes itself a handoff note, and starts a background script that sleeps until the reset. Claude Code then wakes the same thread, which reads the note and carries on, and the wait costs no tokens. Usage is read with the token Claude Code already stores, passed on stdin and never cached or printed. When the usage endpoint rate-limits, every check on the machine backs off and falls back to CodexBar or clearly marked stale data. +nextSteps: + - Add more plugins for the friction points of long-running agent work. + - Keep hardening usage-limits against rate limiting and stale usage data. + - Learn from people running long autonomous jobs which annoyance to automate away next. +icon: i-lucide-party-popper +status: wip +repoUrl: https://github.com/dinooo13/good-vibes-only +tags: + - Claude Code + - Agent skills + - Agentic engineering +date: 2026-09-24T22:12:35Z +note: "Install it from the Claude Code plugin marketplace: dinooo13/good-vibes-only." diff --git a/content/labs/habit-tracker.yml b/content/labs/habit-tracker.yml index 44227fd..c9dc5cb 100644 --- a/content/labs/habit-tracker.yml +++ b/content/labs/habit-tracker.yml @@ -1,17 +1,18 @@ title: Habit Tracker -description: Habit tracking app focused on atomic daily routines, progress visibility, and a simple flow that makes consistency easier to keep up over time. The idea is to keep the product lightweight while still making momentum and streaks feel tangible. It is one of the more product-minded side projects, with room to evolve into a sharper daily-use tool. -challenge: Habit tools often become overloaded with dashboards, settings, and complexity that gets in the way of daily use. The core challenge here is keeping the experience lightweight enough for repetition while still making progress visible and motivating over time. -approach: The product is framed around a narrow daily loop with fast check-ins, clear streak visibility, and a smaller set of interactions that reinforce consistency instead of feature discovery. That lets the project stay product-minded while leaving room to sharpen onboarding, retention cues, and routine design later. +description: A local-first habit tracker based on Atomic Habits, built end to end by a seven-stage agent software factory. Plan habits around the identity you want to build, work through a focused daily queue, reflect on misses, and get coaching grounded in the four laws of behavior change. It installs as a PWA, works offline, and keeps all data on your device. +challenge: Habit apps tend to bury the daily routine under dashboards, and generic AI coaching is hard to trust. The bigger experiment is the process. Can a product be built and maintained by agents running on a schedule, with humans only approving plans and merging, and still hold a real engineering bar? +approach: Requirements live in GitHub issues. Seven scheduled agents (triage, planner, implementer, rebaser, reviewer, QA tester, and docs auditor) move each issue through a label state machine from plan to a reviewed and tested pull request, with human gates on plan approval and merge. A machine-checked factory manifest describes the pipeline and declares an idempotency guard for every stage. The output holds up, with 24 architecture decision records, Vitest and Playwright suites, versioned Zod-validated IndexedDB storage with migrations, cross-tab sync, and deterministic coaching that needs no LLM at runtime. nextSteps: - - Refine the core daily tracking flow so logging habits feels faster and more obvious on repeat visits. - - Explore lightweight progress summaries that reinforce consistency without turning the UI into a dashboard. - - Test which habit and streak mechanics actually improve retention before expanding the feature set. + - Make the factory portable so other repositories can run the same pipeline. + - Turn the descriptive factory manifest into the source of truth that configures the live agent routines. + - Keep refining the daily queue and coaching based on real use. icon: i-lucide-calendar-check status: wip url: https://habits.fmeyer.dev repoUrl: https://github.com/dinooo13/habit-tracker tags: - - Vue - - Productivity - - Habits + - Nuxt + - PWA + - Software factory + - Agentic engineering date: 2026-02-22T15:06:22Z diff --git a/content/labs/pladder.yml b/content/labs/pladder.yml new file mode 100644 index 0000000..dd7d3ab --- /dev/null +++ b/content/labs/pladder.yml @@ -0,0 +1,17 @@ +title: Pladder +description: Push-to-talk dictation for macOS, built for talking to coding agents. Hold a key, speak, let go, and about 300 ms later the prompt is in Claude Code, Codex, Cursor or OpenCode. It runs entirely on device, works offline in 25 languages, and is free and MIT licensed. +challenge: Prompts for agents keep getting longer, and speaking is three to four times faster than typing. Dictation has always given that advantage back in the wait after you stop talking, and cloud tools add a subscription, an account, and the question of where your audio ends up. The goal is release-to-paste latency close to zero on the slowest supported Mac, without a single word leaving the machine. +approach: Pladder runs NVIDIA's Parakeet TDT v3 on the Neural Engine and transcribes while you are still speaking, so an M1 pastes in about 300 ms whether you spoke for five seconds or five minutes. Everything else was moved off the critical path, and every change to it ships with a before-and-after benchmark. Around that core sits a polished menu bar app with a Liquid Glass pill, a send key that pastes and presses Return in one motion, a dictionary that learns your project's jargon, filler-word removal, spoken punctuation, and a CLI so other tools can use it for speech-to-text. +nextSteps: + - Ship a signed download so installing no longer means building from source. + - Graduate the experimental on-device polish step that turns "wait, no, Friday" into "Friday". + - Keep pushing release-to-paste latency down, with a benchmark for every change. +icon: i-lucide-mic +status: wip +repoUrl: https://github.com/dinooo13/pladder +tags: + - Swift + - macOS + - On-device AI + - Speech-to-text +date: 2026-09-09T21:51:23Z diff --git a/content/labs/tv-show-bingo.yml b/content/labs/tv-show-bingo.yml deleted file mode 100644 index 4831ecd..0000000 --- a/content/labs/tv-show-bingo.yml +++ /dev/null @@ -1,16 +0,0 @@ -title: TV Show Bingo -description: Lightweight shared bingo game for watching TV shows together, built around playful prompts and a more social second-screen viewing experience. The project leans into fun over complexity and explores how a tiny interaction can make shared watching more participatory. It is a compact experiment in building something playful, fast, and easy to pick up. -challenge: Small social games only work if the rules are obvious immediately and the setup overhead stays close to zero. The hard part is making the experience playful enough to spark interaction without requiring much explanation or coordination between viewers. -approach: The project stays intentionally compact, focusing on quick prompts, simple shared participation, and a lightweight interface that supports second-screen use. By keeping the scope narrow, it can explore how tiny mechanics change group viewing without the weight of a larger game system. -nextSteps: - - Add a smoother multiplayer or shared-room flow that is easier to start during a live watch session. - - Iterate on the bingo prompt set so rounds feel more dynamic and less repetitive. - - Polish the mobile experience since the product is most useful as a casual second-screen tool. -icon: i-lucide-tv -status: prototype -repoUrl: https://github.com/dinooo13/tv-show-bingo -tags: - - TypeScript - - Games - - TV shows -date: 2026-02-22T15:57:33Z diff --git a/content/labs/watch-wise.yml b/content/labs/watch-wise.yml deleted file mode 100644 index fb0353f..0000000 --- a/content/labs/watch-wise.yml +++ /dev/null @@ -1,16 +0,0 @@ -title: Watch Wise -description: Movie and TV discovery concept centered on an AI recommendation interface, with the focus on a polished browsing flow and stronger content suggestions. It is less about building a full platform and more about exploring how recommendation UX can feel clearer and more curated. The project gives room to experiment with interface quality, media browsing patterns, and AI-assisted product ideas. -challenge: Recommendation products often overwhelm people with too much choice and vague ranking logic, especially in media browsing. The challenge here is to make discovery feel more curated and understandable while still using AI as a meaningful part of the product concept. -approach: The concept focuses on the recommendation interface itself rather than trying to become a complete content platform. That makes it easier to experiment with browsing patterns, suggestion framing, and how AI-assisted discovery can feel clearer, more opinionated, and more polished. -nextSteps: - - Improve how recommendations are explained so suggestions feel more trustworthy and intentional. - - Explore stronger browsing states for mood, genre, or context-driven discovery. - - Tighten the visual system to make the concept feel closer to a finished product direction. -icon: i-lucide-clapperboard -status: prototype -repoUrl: https://github.com/dinooo13/watch-wise -tags: - - TypeScript - - AI UI - - Movies and TV -date: 2026-02-22T15:55:53Z diff --git a/public/.htaccess.tpl b/public/.htaccess.tpl index 408d2e6..15add07 100644 --- a/public/.htaccess.tpl +++ b/public/.htaccess.tpl @@ -27,4 +27,6 @@ ErrorDocument 410 __BASE__410/index.html RewriteRule ^tags(/.*)?$ - [G,L,NC] RewriteRule ^en(/.*)?$ - [G,L,NC] RewriteRule ^legal/?$ - [G,L,NC] + RewriteRule ^labs/watch-wise/?$ - [G,L,NC] + RewriteRule ^labs/tv-show-bingo/?$ - [G,L,NC] From def1b3f9f7cd2325e47ad548fd1f141fd3bd9254 Mon Sep 17 00:00:00 2001 From: Fabian Meyer <44942030+dinooo13@users.noreply.github.com> Date: Tue, 29 Sep 2026 15:36:16 +0200 Subject: [PATCH 2/2] Curate lab order and remove fmeyer.dev lab Add an optional `order` field to lab entries so the labs page shows Pladder, Habit Tracker, Good Vibes Only in that order. The homepage teaser now says "Featured lab" since the first lab is curated rather than the newest. Remove the fmeyer.dev lab and return 410 for its URL. Co-Authored-By: Claude Opus 5.5 (1M context) --- AGENTS.md | 3 ++- CLAUDE.md | 3 ++- app/components/landing/LabsTeaser.vue | 2 +- app/utils/labs.ts | 5 ++++- content.config.ts | 1 + content/labs/fmeyer-dev.yml | 17 ----------------- content/labs/good-vibes-only.yml | 1 + content/labs/habit-tracker.yml | 1 + content/labs/pladder.yml | 1 + public/.htaccess.tpl | 1 + 10 files changed, 14 insertions(+), 21 deletions(-) delete mode 100644 content/labs/fmeyer-dev.yml diff --git a/AGENTS.md b/AGENTS.md index 7153ac7..eb1e31c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -135,6 +135,7 @@ status: wip # required: wip | prototype | paused tags: - Vue date: 2025-01-01T00:00:00Z # required +order: 1 # optional manual position (lower comes first) icon: i-lucide-code # optional Iconify icon image: /path/to/image.jpg # optional, goes in public/ url: https://... # optional live demo URL @@ -275,7 +276,7 @@ Run `pnpm lint:fix` before committing if you change formatting. ### Sorting and slug logic -- Labs are sorted by `date` descending, then alphabetically by `title`. Use `sortLabs()`. +- Labs are sorted by the optional `order` field ascending (entries without `order` come after), then `date` descending, then alphabetically by `title`. Use `sortLabs()`. The first lab is shown as the homepage's featured lab. - Talks are sorted by `date` descending (undated entries come after dated ones, `placeholder: true` last). Use `sortTalks()`. - Slugs are derived from the YAML filename stem (last path segment). If no stem is available, a slug is generated from the title. diff --git a/CLAUDE.md b/CLAUDE.md index 2092d92..4bd27e3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -135,6 +135,7 @@ status: wip # required: wip | prototype | paused tags: - Vue date: 2025-01-01T00:00:00Z # required +order: 1 # optional manual position (lower comes first) icon: i-lucide-code # optional Iconify icon image: /path/to/image.jpg # optional, goes in public/ url: https://... # optional live demo URL @@ -275,7 +276,7 @@ Run `pnpm lint:fix` before committing if you change formatting. ### Sorting and slug logic -- Labs are sorted by `date` descending, then alphabetically by `title`. Use `sortLabs()`. +- Labs are sorted by the optional `order` field ascending (entries without `order` come after), then `date` descending, then alphabetically by `title`. Use `sortLabs()`. The first lab is shown as the homepage's featured lab. - Talks are sorted by `date` descending (undated entries come after dated ones, `placeholder: true` last). Use `sortTalks()`. - Slugs are derived from the YAML filename stem (last path segment). If no stem is available, a slug is generated from the title. diff --git a/app/components/landing/LabsTeaser.vue b/app/components/landing/LabsTeaser.vue index 6793e7a..b9db905 100644 --- a/app/components/landing/LabsTeaser.vue +++ b/app/components/landing/LabsTeaser.vue @@ -42,7 +42,7 @@ defineProps<{

= { export const sortLabs = (labs: Lab[]) => { return labs.slice().sort((left, right) => { - return (getTimestamp(right.date) ?? 0) - (getTimestamp(left.date) ?? 0) || left.title.localeCompare(right.title) + return (left.order ?? Infinity) - (right.order ?? Infinity) + || (getTimestamp(right.date) ?? 0) - (getTimestamp(left.date) ?? 0) + || left.title.localeCompare(right.title) }) } diff --git a/content.config.ts b/content.config.ts index 3c6a6d6..3ded724 100644 --- a/content.config.ts +++ b/content.config.ts @@ -95,6 +95,7 @@ export default defineContentConfig({ repoUrl: z.string().url().optional(), tags: z.array(z.string()), date: z.date(), + order: z.number().int().optional(), note: z.string().optional() }) }), diff --git a/content/labs/fmeyer-dev.yml b/content/labs/fmeyer-dev.yml deleted file mode 100644 index e91e1e9..0000000 --- a/content/labs/fmeyer-dev.yml +++ /dev/null @@ -1,17 +0,0 @@ -title: fmeyer.dev -description: Personal website and portfolio built with Nuxt, used to shape a more intentional public profile and a clean home for writing, speaking, and side projects. It is also where I iterate on tone, layout, and how technical work is presented in public. The project doubles as a small frontend playground for content structure, polish, and continuous refinement. -challenge: Building a personal site that feels intentional instead of template-like means balancing clarity, personality, and maintainability across content, layout, and navigation. The challenge is to keep the site easy to evolve while still giving each section enough editorial weight to present work in a sharper way. -approach: The site is structured around content collections and a small set of reusable page patterns so new sections can stay consistent without flattening the presentation. I use it as a safe place to refine Nuxt UI composition, content modeling, and the tone of how projects, talks, and experience are framed publicly. -nextSteps: - - Expand the labs and speaking sections with richer detail pages and stronger internal navigation. - - Add writing or notes that make the site more useful as a public technical home, not just a portfolio. - - Keep iterating on visual polish and content structure as the body of work grows. -icon: i-lucide-layout-panel-top -status: wip -url: https://fmeyer.dev -repoUrl: https://github.com/dinooo13/fmeyer.dev -tags: - - Nuxt - - Portfolio - - Personal site -date: 2022-09-28T20:11:20Z diff --git a/content/labs/good-vibes-only.yml b/content/labs/good-vibes-only.yml index 8141e4c..4d7ee84 100644 --- a/content/labs/good-vibes-only.yml +++ b/content/labs/good-vibes-only.yml @@ -14,4 +14,5 @@ tags: - Agent skills - Agentic engineering date: 2026-09-24T22:12:35Z +order: 3 note: "Install it from the Claude Code plugin marketplace: dinooo13/good-vibes-only." diff --git a/content/labs/habit-tracker.yml b/content/labs/habit-tracker.yml index c9dc5cb..085fdc0 100644 --- a/content/labs/habit-tracker.yml +++ b/content/labs/habit-tracker.yml @@ -16,3 +16,4 @@ tags: - Software factory - Agentic engineering date: 2026-02-22T15:06:22Z +order: 2 diff --git a/content/labs/pladder.yml b/content/labs/pladder.yml index dd7d3ab..e5a7f83 100644 --- a/content/labs/pladder.yml +++ b/content/labs/pladder.yml @@ -15,3 +15,4 @@ tags: - On-device AI - Speech-to-text date: 2026-09-09T21:51:23Z +order: 1 diff --git a/public/.htaccess.tpl b/public/.htaccess.tpl index 15add07..58ce26e 100644 --- a/public/.htaccess.tpl +++ b/public/.htaccess.tpl @@ -29,4 +29,5 @@ ErrorDocument 410 __BASE__410/index.html RewriteRule ^legal/?$ - [G,L,NC] RewriteRule ^labs/watch-wise/?$ - [G,L,NC] RewriteRule ^labs/tv-show-bingo/?$ - [G,L,NC] + RewriteRule ^labs/fmeyer-dev/?$ - [G,L,NC]