Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.

Expand Down
3 changes: 2 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.

Expand Down
2 changes: 1 addition & 1 deletion app/components/landing/LabsTeaser.vue
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ defineProps<{
<UBadge
color="neutral"
variant="soft"
label="Latest lab"
label="Featured lab"
/>
<h3
v-if="lab"
Expand Down
5 changes: 4 additions & 1 deletion app/utils/labs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export type LabEntry = {
repoUrl?: string
tags: string[]
date: string | Date
order?: number
note?: string
}

Expand All @@ -41,7 +42,9 @@ export const labStatusIconMap: Record<LabStatus, string> = {

export const sortLabs = <Lab extends LabEntry>(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)
})
}

Expand Down
1 change: 1 addition & 0 deletions content.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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()
})
}),
Expand Down
17 changes: 0 additions & 17 deletions content/labs/fmeyer-dev.yml

This file was deleted.

18 changes: 18 additions & 0 deletions content/labs/good-vibes-only.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
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
order: 3
note: "Install it from the Claude Code plugin marketplace: dinooo13/good-vibes-only."
20 changes: 11 additions & 9 deletions content/labs/habit-tracker.yml
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
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
order: 2
18 changes: 18 additions & 0 deletions content/labs/pladder.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
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
order: 1
16 changes: 0 additions & 16 deletions content/labs/tv-show-bingo.yml

This file was deleted.

16 changes: 0 additions & 16 deletions content/labs/watch-wise.yml

This file was deleted.

3 changes: 3 additions & 0 deletions public/.htaccess.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,7 @@ 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]
RewriteRule ^labs/fmeyer-dev/?$ - [G,L,NC]
</IfModule>
Loading