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/app.vue b/app/app.vue index 763bb86..4bda9a4 100644 --- a/app/app.vue +++ b/app/app.vue @@ -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() diff --git a/app/components/OgImage/Default.satori.vue b/app/components/OgImage/Default.satori.vue index b06ae80..aee4da3 100644 --- a/app/components/OgImage/Default.satori.vue +++ b/app/components/OgImage/Default.satori.vue @@ -44,7 +44,7 @@ defineProps({
- Fabian Meyer · Chapter Lead Vue at eventim Tech + Fabian Meyer · Staff Agentic Engineer at Cordes & Graefe fmeyer.dev
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/index.yml b/content/index.yml index 35651ce..a78eb6f 100644 --- a/content/index.yml +++ b/content/index.yml @@ -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 @@ -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 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 new file mode 100644 index 0000000..4d7ee84 --- /dev/null +++ b/content/labs/good-vibes-only.yml @@ -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." diff --git a/content/labs/habit-tracker.yml b/content/labs/habit-tracker.yml index 44227fd..085fdc0 100644 --- a/content/labs/habit-tracker.yml +++ b/content/labs/habit-tracker.yml @@ -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 diff --git a/content/labs/pladder.yml b/content/labs/pladder.yml new file mode 100644 index 0000000..e5a7f83 --- /dev/null +++ b/content/labs/pladder.yml @@ -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 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/content/speaking/spec-driven-development-online-course.yml b/content/speaking/spec-driven-development-online-course.yml new file mode 100644 index 0000000..eaf0de3 --- /dev/null +++ b/content/speaking/spec-driven-development-online-course.yml @@ -0,0 +1,23 @@ +title: "Spec-Driven Development with AI Coding Agents: From Prompt to Process" +summary: A four-hour live online course on building a structured Spec, Code, Verify workflow for coding agents like Claude Code, Cursor, or Copilot — from skills and subagents to a software factory that turns specs into verified software. +description: >- + Coding agents are powerful, but ad-hoc prompting doesn't hold up in real + project work. In this live online course you learn how to establish a + structured Spec-Driven Development workflow with coding agents such as + Claude Code, Cursor, or Copilot. We cover skills, subagents, hooks, and + persistent project context, and how to connect agents to Jira, GitLab, and + GitHub via CLI or MCP. Live demos contrast classic prompting with the SDD + approach, and the course closes with the idea of a software factory that + turns specifications into verified software. +event: Rheinwerk Online-Kurs +organizerTitle: "Spec-Driven Development mit KI-Coding-Agenten − vom Prompt zum Prozess" +location: Online +topic: Spec-Driven Development +date: 2026-11-17 +dateLabel: "November 17, 2026 · 09:00" +time: "09:00" +duration: 4 hours (09:00–13:00 CET) +format: Online Course +language: German +url: https://www.rheinwerk-verlag.de/online-kurse/spec-driven-development/ +eventUrl: https://www.rheinwerk-verlag.de/online-kurse/ diff --git a/nuxt.config.ts b/nuxt.config.ts index 3ebbc8e..885d279 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -16,7 +16,7 @@ export default defineNuxtConfig({ site: { url: process.env.NUXT_PUBLIC_SITE_URL || 'https://fmeyer.dev', name: 'fmeyer.dev', - description: 'Fabian Meyer — Leader, software engineer and AI mentor at eventim Tech. Vue chapter leadership, agentic engineering, and frontend craft.', + description: 'Fabian Meyer — Staff Agentic Engineer at Cordes & Graefe KG, moving the organisation to agentic engineering.', defaultLocale: 'en' }, @@ -120,11 +120,11 @@ export default defineNuxtConfig({ name: 'Fabian Meyer', url: process.env.NUXT_PUBLIC_SITE_URL || 'https://fmeyer.dev', image: '/profile/fabian-meyer-portrait.jpg', - description: 'Chapter Lead Vue, software engineer, and AI mentor at eventim Tech. Leads the Vue chapter, provides technical leadership for the Tixx Online Shop, and helps teams apply agentic engineering with measurable customer impact.', - jobTitle: 'Chapter Lead Vue, Software Engineer, AI Mentor', + description: 'Staff Agentic Engineer at Cordes & Graefe KG. Leads the organisation-wide move to agentic engineering, building agent-ready tooling, spec-driven development workflows, and enabling engineers to work effectively with agents.', + jobTitle: 'Staff Agentic Engineer', worksFor: { '@type': 'Organization', - 'name': 'eventim Tech GmbH' + 'name': 'Cordes & Graefe KG' }, sameAs: [ 'https://github.com/dinooo13', diff --git a/public/.htaccess.tpl b/public/.htaccess.tpl index 408d2e6..58ce26e 100644 --- a/public/.htaccess.tpl +++ b/public/.htaccess.tpl @@ -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]