Skip to content
Merged
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/app.vue
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ useSeoMeta({
useSchemaOrg([
defineWebSite({
name: 'fmeyer.dev',
description: 'Personal site of Fabian Meyer — Leader, software engineer and AI mentor at eventim Tech.',
description: 'Personal site of Fabian Meyer — Staff Agentic Engineer at Cordes & Graefe KG.',
inLanguage: 'en'
}),
defineWebPage()
Expand Down
2 changes: 1 addition & 1 deletion app/components/OgImage/Default.satori.vue
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ defineProps({
</div>

<div class="relative flex items-center justify-between text-[20px] text-neutral-500">
<span>Fabian Meyer · Chapter Lead Vue at eventim Tech</span>
<span>Fabian Meyer · Staff Agentic Engineer at Cordes &amp; Graefe</span>
<span class="text-blue-600">fmeyer.dev</span>
</div>
</div>
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
55 changes: 31 additions & 24 deletions content/index.yml
Original file line number Diff line number Diff line change
@@ -1,44 +1,52 @@
seo:
title: Fabian Meyer
description: Leader, software engineer and AI mentor at eventim Tech focused on agentic engineering, Vue chapter leadership, and frontend impact.
description: Staff Agentic Engineer at Cordes & Graefe KG, moving the organisation to agentic engineering across teams, tooling, and delivery.
title: Fabian Meyer
description: Leader, software engineer and AI mentor at eventim Tech focused on AI enablement, Vue chapter leadership, the Tixx Online Shop, and frontend craft.
description: Staff Agentic Engineer at Cordes & Graefe KG focused on organisation-wide agentic engineering, spec-driven development, and engineering enablement.
hero:
name: Fabian Meyer
role: Leader, software engineer and AI mentor at eventim Tech
intro: I lead frontend engineers through the Vue chapter, work across the stack in product delivery, provide technical leadership for the Tixx Online Shop, and help teams apply agentic engineering with measurable customer impact.
role: "Staff Agentic Engineer at Cordes\u00A0&\u00A0Graefe\u00A0KG"
intro: I am moving Cordes & Graefe to agentic engineering. That means shaping how teams work with agents, building the tooling and workflows that make the change stick, and staying hands-on so the practices hold up in real delivery.
focus:
title: Focus
description: What I spend time on right now.
items:
- title: AI enablement & agentic engineering
description: Teaching teams how to leverage agentic engineering to increase their business impact. I help to integrate tools and create custom SDD frameworks that automate team processes.
- title: Vue chapter leadership
description: Developing frontend engineers through coaching, shared standards, and practical enablement that helps the chapter grow consistently.
- title: Technical leadership for the Tixx Online Shop
description: Providing technical direction for a core commerce surface and helping teams navigate complexity with clarity, focus, and steady execution.
- title: Speaking and stage experience
description: Building more speaking experience after my first talk and developing talks that I can bring to more stages, teams, and events.
- title: Agentic engineering transformation
description: Moving the organisation to agentic engineering by defining the target way of working, guiding teams through the shift, and making sure adoption shows up as real delivery impact.
- title: Agent-ready tooling and workflows
description: Integrating agents into existing delivery tooling and building spec-driven development workflows that let engineers move from executing process to reviewing outcomes.
- title: Enablement and coaching
description: Workshops, pairing, and shared standards that help engineers build confidence with agents and grow the skills that matter when agents write most of the code.
- title: Speaking and sharing
description: Sharing what I learn about agentic engineering through talks and workshops, and bringing those sessions to more stages, teams, and events.
experience:
title: Experience
description: Current and previous roles across chapter leadership and software engineering.
description: Current and previous roles across agentic engineering, technical leadership, and software engineering.
items:
- period: Oct 2025 - Present
- period: Sep 2026 - Present
title: Staff Agentic Engineer
organization: Cordes & Graefe KG
summary: Staff-level role leading the organisation's move to agentic engineering.
highlights:
- Drive the organisation-wide shift to agentic engineering across teams and delivery.
- Build agent-ready tooling, workflows, and spec-driven development practices.
- Enable engineers through coaching, workshops, and shared standards.
- period: Oct 2025 - Sep 2026
title: Chapter Lead Vue | Sales & Settlement
organization: eventim Tech GmbH
summary: Chapter leadership role within Sales & Settlement, alongside ongoing hands-on engineering work at eventim Tech.
summary: Chapter leadership role within Sales & Settlement, alongside hands-on engineering work at eventim Tech.
highlights:
- Lead the Vue chapter through coaching, standards, and practical enablement.
- Connect chapter growth with day-to-day product delivery.
- Strengthen engineering practices while staying hands-on in delivery.
- period: Apr 2022 - Present
- Led the Vue chapter through coaching, standards, and practical enablement.
- Connected chapter growth with day-to-day product delivery.
- Strengthened engineering practices while staying hands-on in delivery.
- period: Apr 2022 - Sep 2026
title: Software Development Expert
organization: eventim Tech GmbH
summary: Ongoing software engineering role focused on shipping product work while growing frontend quality and team effectiveness.
summary: Software engineering role focused on shipping product work while growing frontend quality, team effectiveness, and agentic engineering adoption.
highlights:
- Technical leadership for the Tixx Online Shop since January 2026.
- Deliver product work with a focus on maintainable frontend solutions.
- Work full stack in delivery, from implementation to broader product execution.
- Provided technical leadership for the Tixx Online Shop from January 2026.
- Mentored teams in applying agentic engineering to real delivery work.
- Worked full stack in delivery, from implementation to broader product execution.
- period: Jan 2022 - Apr 2022
title: Software Developer
organization: neusta software development - neusta GmbH
Expand Down Expand Up @@ -66,7 +74,6 @@ labs:
speaking:
title: Speaking
description: Talks, sessions, and speaking work I want to keep building over time.
note: "First announced talk: Agentic Conf Hamburg 2026."
link:
label: View Speaking
icon: i-lucide-mic-vocal
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.

Loading