Follow my cursor
Turn the animation off
Open to new problems
Michael Hoefert headshotMichael Hoefert biking

Product manager · Mediocre cyclist ·
Building with AI

Michael Hoefert

I just really like to build things that solve people's problems and make them happy. At Mitie I did this by shadowing and embedding myself into the worlds of the operators that I was building the products for. For myself, I do this by building products and automations that solve challenges I'm having.

Besides building, I spend far too much time riding my bike. Biking has helped me build amazing communities across the world and lets me challenge myself to see where my limits are. Check out the challenges I've done below.

Scroll for selected work↓
Highlights

What I'm working on

What each thing is, and the problem it solves

Joey
01Live

Product

Joey

What

Custom resume generator built on your career knowledge graph

Problem

Tailoring a resume for every job takes too long

Outcome

30 min → 10 min per application

Live

Product

Playi

What

Adaptive sales playbook for sales teams

Problem

Playbooks go stale the week they're published and no one knows exactly how the best rep keeps selling

Outcome

15+ design partners

40% token cut, found through a full eval build

Used by design partners
03

AI workflow

AI Second Brain

What

One context engine for everything I work on: AI research, my career history, books and notes, and every product spec and plan

Problem

Every time a better model or harness came out, I had to seed my context from scratch

Outcome

66 links between my AI research and Joey's build docs

5,100+ notes in one vault

Live
04

AI workflow

Cycling Coach

What

An AI coach using my ride and qualitative data to rehab me back from injury

Problem

Strava ride data was a tiny piece of the puzzle. I needed my qualitative injury feel data and leading ITB rehab research all analyzed together

Outcome

416h of training analyzed YTD

Live
05

Automation

Harness-Agnostic Automation Engine

Because I don't want to be locked in to one AI lab.

What

Scheduled GitHub jobs with scripts and LLM API calls that monitor the health of my second brain system and make sure it is clean and current (since the AI world moves so fast)

Problem

Harness automation features (like Codex/Cursor) lock you in, and paying these labs to do deterministic work wastes money

Outcome

~$0.50 a month in LLM costs

9 jobs running

Live
+

Open slot

Your problem here

What

Got a problem you want solved?

Problem

Tell me about it. I like to try new things.

Open to new problemsEmail me
Products

Things I've built end to end

Full-stack products, from discovery to production

invite-only landing page
the whole pipeline; seven specialists
dashboard & ready-to-review drafts
tailoring studio block editor
my experience career vault
Compounding Memory Architecture
Google Stitch Design Artifacts
Joey Design Theme & Design.md Artifact
Information Architecture Planning
7-agent Adversarial Pipeline [Part 1]
7-agent Adversarial Pipeline [Part 2]
01 / 11
01AGENTIC SYSTEMS · CAREER VAULT

Joey

Custom Resume Generator

In today's job market, you need a custom-tailored resume just to even have a chance. I kept hearing the same pain from so many friends that relying on AI chatbots, or even something like Claude Cowork, just doesn't cut it. They don't learn your language, they don't get better over time, and they constantly hallucinate. Friends were spending more time babysitting the AI and editing its lies than if they had just written it themselves.

To fix this, I built Joey. A self-learning AI career engine that orchestrates a 7-agent adversarial LangGraph pipeline to generate hyper-tailored resumes without hallucinations, powered by a compounding memory system that adapts to your unique writing style over time.

Instead of relying on a single AI prompt, I have challenger and defender agents literally debating each other to fact-check claims and kill hallucinations before you ever see the output. I also integrated LangSmith so we can actually understand and measure agent performance. To keep the AI from hallucinating logic, I built a Shared Tool Registry—the agents are bound to deterministic Python scripts they can call to scrape job descriptions with Firecrawl, execute exact KNN vector searches against a Postgres database, and securely decrypt PII during document export.

But the coolest part is the Compounding Memory System. In the background, Joey's memory agents analyze your edits and feedback to build specific writing 'skills' tailored to different job titles, company sizes, and industries (e.g., a Staff PM at a Growth-Stage FinTech). When you apply for a job that fits those criteria, the system's writing agents automatically retrieve and use those exact skills via a HyDE (Hypothetical Document Embeddings) RAG model. These skills are constantly refined every time you provide feedback or make an edit, meaning Joey learns your unique voice over time. The product uses some of the best agentic memory practices so that you aren't constantly context seeding. Coupled with a 'Labor Illusion' UI that shows you the agents' thought processes in real-time, it's an engine built from the ground up to actually learn your career narrative and never lie.

Multi-Agent Orchestration

7-Agent Adversarial PipelineLangGraph Debate Engine
Agentic ObservabilityLangSmith Reasoning Measurement

Compounding Memory System

HyDE RAG RetrievalContextual Search via pgvector
Dynamic Baseline ProfilesBackground Learning & Refinement

The User Experience

Labor Illusion UISupabase Realtime Transparency
Shared Tool RegistryDeterministic Script Calling
winning sales techniques
coaching module
maverick detection analysis
playbook evolution engine
team performance
detailed call report
user management portal
transcript grading workflow
playbook rubric generator workflow
01 / 09
02SALES ENABLEMENT · 0 to 1

Playi

Adaptive Sales Playbook for Sales Teams

A self-evolving sales coaching platform built with Next.js and Supabase that grades transcripts against custom rubrics using a multi-agent pipeline, flags rule-breaking wins, and programmatically generates schema-validated playbook evolutions.

Built over 7+ months as a solo founder project, the real complexity lives in the closed feedback loop the platform creates. Every graded call feeds a "maverick" detection layer that surfaces wins where reps broke the playbook and still closed deals. Each maverick is analyzed by complex context-seeking LLM APIs to distinguish replicable techniques from deal-specific context, then verified by the manager. The manager verification stage is crucial; it provides a human-in-the-loop verification gate but also allows managers to add commentary on why they are or aren't verifying a call. The manager commentary is then stored and used to power the self-learning maverick detection engine so that over time, the detections are more aligned with what the manager wants. Once enough verified mavericks accumulate, a correlation engine cross-references bypass frequency against historical coaching session records, and when a criterion has been coached repeatedly but top performers keep skipping it in winning calls, the system classifies it as terminally flawed and flags it for removal in the next evolution proposal. That proposal renders as a side-by-side rubric comparison with per-change rationale and evidence strength, with the pre-computed frequency analysis injected as structured context. The result is a methodology that updates itself from the team's own winning patterns, and a system that can tell a manager not just that their reps aren't following the script, but that the script is wrong.

Core Platform

Next.js 14App Router & Vercel
Upstash Redis3-Tier Rate Limiting

Data & Security

SupabasePostgres / RLS / Auth
ZodType-Safe Schema Val
MammothDOCX Text Extraction

Agentic AI & Utils

n8n WorkflowsAI Grading Pipelines
ResendTransactional Emails
15+design partners
40%token usage cut
Automations & AI workflows

Systems that run my week

Personal automations, second brains and AI workflows

relationship graph overview
HTML Dashboard - Frontier Models
HTML Dashboard - Frontier Model Product Stack
HTML Dashboard - AI Technology Layers
Obsidian Artifact Inventory
Obsidian Second Brain Index
career vault relationship graph
multi-agent resume workflow
multi-agent resume workflow
compounding memory and self-improvement
01 / 10
03KNOWLEDGE GRAPHS · MARKDOWN & AGENTS

AI Second Brain

Compounding LLM Wiki & Context Engine

My second brain is one context engine for everything I work on: the AI landscape, my full career history, the books I've read and the notes I've made, and the specs and implementation plans for everything I build. It follows Andrej Karpathy's LLM wiki approach in Obsidian, so it all lives as linked markdown any model can read, with indexes that let an agent pull only what it needs.

The point is that I never have to seed context again. Whichever harness has the leading model that week, I point it at the vault and it already knows my work, my writing and my products.

It started as two separate systems. The AI Intelligence wiki ingests raw market signals (web clips, podcasts, newsletters), classifies them, and keeps a queryable map of frontier models, technologies and startups. The Career Expansion vault ran a 6-agent resume pipeline and a 5-agent Q&A compiler with an advocate-critic loop and a cold factual audit, and it became the blueprint for Joey. Now they share one vault, and the links between them are where the value is: 66 links tie my AI research to Joey's build docs. That's how I learned how Sierra built its compounding memory system and brought the same idea into Joey.

01 / Ingest

Web clips, podcasts, newsletters and build transcripts compiled into markdown every night

02 / Connect

Classified into one linked wiki: AI landscape, career history, books and notes, product specs and plans

03 / Serve

Indexes built for progressive disclosure, so any harness pulls only the context it needs

66links between AI research and Joey build docs
5,100+notes in one vault
Cycling Coach Dashboard
Cycling Coach Dashboard
Cycling Coach Dashboard
Cycling Coach Dashboard
individual ride analysis
HR to Power decoupling analysis
01 / 06
04PERSONAL AI · ENDURANCE PERFORMANCE · ITB REHAB

AI Cycling Coach

Live Dashboards & AI Coaching From Any Harness

An elite-level training intelligence engine built on Next.js that brings three streams of data together: raw sensor streams (power, heart rate, cadence) directly from the Strava API, my qualitative ride feel and IT-band pain logs in Airtable, and Gemini Deep Research on ITB rehab and return-to-cycling protocols. The system performs advanced mathematical modeling, including cardiac drift (aerobic decoupling), Normalized Power (NP), and a dynamic CTL/ATL fatigue decay model, to compute performance metrics far beyond Strava's out-of-the-box analytics.

Using daily scheduled GitHub Actions workflows, an AI coaching agent processes all of it to self-correct, adapt training plans, and write morning coaching digests. The agent isn't tied to one tool: it runs in whichever harness has the leading model that week (Claude Code, Codex, or Cursor).

Built as a fully custom, self-improving training engine, the real complexity lives in the automated closed feedback loop and how the data flows into it. Every activity logged on Strava triggers a scheduled GitHub Actions workflow that streams raw sensor data into our Python math engine. Here, we run decay calculations to track CTL (Fitness), ATL (Fatigue), and TSB (Form), along with cardiac drift (Pa:HR) metrics to flag aerobic decoupling, and write the results back to Airtable. Airtable is also where my subjective recovery notes and IT-band pain logs live, right next to the ITB rehab research Gemini Deep Research pulled together for me.

Every morning, the coaching agent runs an analysis on the updated metrics, cross-references my recovery notes, pain logs, and the rehab research, and writes back detailed coaching narratives. Its coaching and workout-modification instructions live as plain markdown in my own repo rather than inside any one tool's automation feature, so I can point Claude Code, Codex, or Cursor at them without rebuilding anything. Raw data is server-side rendered directly from Airtable, ensuring the dashboard is always hydrated with live metrics, and the narratives actively shape future workout intensities, closing the loop from raw biometrics to physical adaptations.

Core Platform

Next.js 16SSR App Router & Vercel
Airtable APIMetrics, Ride Feel & Pain Logs

Data & Biometrics

Strava APIRaw Stream Ingestion
Python EngineNP, TSS, Cardiac Drift, & CTL/ATL/TSB
Gemini Deep ResearchITB Rehab Evidence

Agentic AI & Crons

Any HarnessClaude Code, Codex, or Cursor
GitHub ActionsDaily/Weekly Scheduled Workflows

Rides

140 ridesRides YTD, after a 4-month ITB injury

Lifts

142 liftsStrength sessions YTD

Total training

416 hoursTotal training YTD, live from Airtable

Training target

350 wattsFTP target. 8 Coggan power zones. Zero guesswork.
my github commit metrics snapshot
my active repos
github actions automated crons
01 / 03
05CI/CD & AUTOMATION · HARNESS-AGNOSTIC

Harness-Agnostic Automation Engine

Because I don't want to be locked in to one AI lab

Nine scheduled GitHub Actions keep my second brain clean, current and well linked, and keep Joey's model choices from going stale. They live in GitHub and plain Python, not inside any one harness's automation feature, because I don't want to be locked in to one AI lab.

The rule is deterministic first. Python does the routine work: scanning inboxes, fixing frontmatter and broken links, rebuilding indexes, and checking that key docs haven't gone stale. A single call to a small, cheap model only happens where judgement is needed, like classifying the day's AI news or turning build transcripts into spec updates. Jobs exit early when there's nothing new, so most runs cost nothing and the whole system runs on about $0.50 a month in LLM costs.

Every change lands as a pull request. A rules-based merger with a branch allowlist, path fences and its own tests decides what merges, so PRs from different agents and harnesses all go through the same gate. The newest job, Model watch, scans seven AI labs every Monday for new models, price changes and retirements, and proposes updates to Joey's model registry in one standing PR that I review and merge by hand.

Deterministic first

Python scriptsIndexes, links, freshness checks
Early exitsNo new input, no model call

Cheap judgement

One small-model callClassify, summarize, update specs
Model watch7 AI labs scanned weekly

Every change is a PR

Rules-based mergerBranch allowlist + path fences
Human gateModel changes merged by hand
~$0.50a month in LLM costs
9scheduled jobs
7AI labs watched
Experience

Where I've worked

Product at Mitie, strategy at JLL

London · Jan 2024 to present

Mitie

Product Manager

The UK's largest facilities management provider (£5.6bn FY26 revenue) and a leader in tech-enabled service delivery. I joined a brand-new product team as its second hire, building internal products for Mitie's two largest service lines, Cleaning and Security.

  • Shadowed cleaning teams and risk analysts on site and ran journey workshops across our top 20 accounts, then turned what I learned into PRDs and the roadmap for two 0-to-1 products.
  • Intelligent Cleaning: replaced static cleaning schedules with data-driven ones, so teams cut reactive tasks, travel and redundant cleans.
  • Intelligent Security: pulled 8+ operational systems into one transparent risk view on a Medallion data architecture.
  • Scaled from ~10 to 690+ sites, using Pendo to spot where operators stalled and fixing it with onboarding guides, help content and video demos.

Impact

4.5%
lower cost to serve
Intelligent Cleaning, across 690+ sites within two months
30 hrs
saved per account, every month
Risk analyst time, Intelligent Security
~80%
fewer 1:1 walkthroughs
Pendo onboarding plus help content and demos

Vancouver · May 2021 to Nov 2023

JLL Technologies

Corporate Strategy Analyst

JLL's global technology division, building software, data and services for commercial real estate across JLL's end-to-end real estate value chain. In Corporate Strategy I worked on PropTech expansion (sustainability tech, HaaS, underwriting tech) alongside JLL experts in Australia, the US, Germany and Japan.

  • Ran PropTech market sizing, competitor and pricing analysis, and presented recommendations directly to the JLLT CEO.
  • On a three-person team, led the adjacent-markets workstream for an acquired property-management software product and recommended a vendor marketplace built on its verified vendor network.
  • Worked with JLL Spark, JLL's venture arm, on build / buy / invest calls, and with Spark portfolio companies on product fit.
  • Wrote Python scripts that took PropTech market scans from quarterly to monthly.

Impact

20+
capabilities evaluated
For an acquired property-management product, leading to the vendor marketplace call
6 of 10
markets prioritized
Core and adjacent markets carried into the leadership growth plan
20+ hrs
of manual work saved
Python automation of the PropTech market scans
Capability snapshot

Skills & tools

Industries, expertise and the stack behind the work

Industries

AI landscape / infraFacilities / FMPropTech / CRESales enablementCareer tech

Functional expertise

User journey workshopsLLM evaluation harnessesDiscovery → roadmapLangGraph AI agentsCost-to-serveHuman-in-the-loop0-to-1 productCompounding memoryCorporate strategyContext & harness engineeringBuild / buy / investOTel / AxiomLangSmithPostgres / SQLHot / warm / cold storage

How I ship

Internal enablementObsidian Second BrainCross-functionalCursor + Claude CodeDesign-partner discoveryPreview + prod CI/CDPre-customer GTM

Tech & tools

Next.jsPower AutomatePostgresPendoSupabaseCopilot StudioRLSMonday.comLangGraph + FastAPIInngestn8nPythonRenderVercelGitHub ActionsLangSmithAxiomOpenTelemetryKarpathy LLM WikiCloudflare R2
Challenges

Hard things on a bike

The challenges I mentioned up top

Michael and two friends with their bikes at the finish in The Hague
11 May 2026

London to The Hague · 4 countries

London to The Hague in a day

448 kmdistance
1,673 melevation
24h30start to finish

4 countries, 2 best mates, and a cumulative 0 hours of sleep. Wouldn't do it any different.

See the ride
Michael riding the Dragon Devil in the rain on a Welsh moorland road
21 to 22 June 2025

Chase the Sun + Dragon Devil · London to Wales

Chasing the Dragon

563 kmdistance
5,250 melevation
20.5 hriding

Two flats, a dead phone and mild hypothermia in a Welsh storm. DNF at km 255. The real test was staying calm and finding a way out.

Day 1·Day 2
Michael giving a thumbs up on a Mallorca climb at sunset
24 May 2025

Mallorca 312 + Sa Calobra

The Lap of Mallorca

325 kmdistance
4,572 melevation
12.4 hriding

The last day of a week of riding. A 5:30am start under the stars, a seized lower back in the heat, and Sa Calobra to ourselves at sunset.

See the ride
Five friends in cycling kit with their bikes by the water in Denmark
14 September 2024

Skagen to Copenhagen · Denmark

Across Denmark in a day

325 kmdistance
1,172 melevation
10h14riding

When your best friends have one last-minute spot on a trip to bike across Denmark, and it leaves in two days, you can't say no.

See the ride
Cyclists gathering with their bikes on the ferry before the Cowichan Valley Nightmare Ride
13 October 2023

Nanaimo to Swartz Bay · Vancouver Island

Cowichan Valley Nightmare Ride

228 kmdistance
2,064 melevation
9h09riding

Pouring rain, 6 degrees, and 205km of gravel through pitch-black forests. Would I do it again? If you pay me a lot of money. Do I regret it? Nope.

Race·To the ferry
Vancouver and the North Shore mountains, with Cypress, Grouse and Seymour labelled
29 July 2023

Vancouver · Seymour, Grouse & Cypress

Triple Triple Crown

235 kmdistance
6,168 melevation
11h04riding

Three mountains, three times each, and one friend still willing to join me. It was really really really hard. I’m smiling thinking about it.

See the ride