A lot of what I build never gets a landing page. These are the internal tools, pipelines, and AI systems that run quietly behind other people's work — or, in one case, behind my own kitchen table. Written up here because the thinking is the interesting part.
Private · running
Retell Twilio Claude Buffer
Socializer
A phone call that becomes a week of posts.
Every week an AI interviewer rings my mobile, asks what I've been working on and thinking about, and has a real conversation for 10-20 minutes. By the time I've finished my coffee, the transcript has become a week of LinkedIn and Instagram drafts, queued for review.
I built it because I have never been good at social media. Talking to an interested party is effortless for me; typing from nothing is not. Moving the capture step to a phone call and then having that analyzed for what could be interesting removed the friction completely. Automating the review and posting was icing on the cake.
Underneath it's Retell running the voice agent, Twilio for telephony, Claude for drafting, and Buffer for scheduling, with a DST-safe cron and a retry sweep so a missed call doesn't cost the week. Nothing publishes without my approval.
Call → draftsScheduled posts queue
Personal build
Next.js Neon Postgres Whisper Claude
herhjemme
Home education, documented without the paperwork.
Herhjemme — "here at home" — is a homeschooling app built for exactly one family: mine. Its first job is to turn the ordinary days of a six-year-old's education into a durable record without anyone having to sit down and log anything. Voice notes, photos, and scraps of text go in as they happen; transcription, filing, and mapping happen afterwards, out of sight.
The second job is what made it worth building. Danish home education is supervised by the local kommune, so a year of learning has to be presented back as documentation. The app holds two views of the same material: one that reflects how a week actually felt, and one that maps those same events onto what Ærø Kommune expects to see. One capture, two structures, and a Danish PDF at the end of it.
It suggests activities too, but only from a corpus we curated ourselves, governed by a values file that outranks every other document in the repo. It learns as we go, like a teaching assistant should.
Ambient captureKommune export
Internal · live
Next.js Neon Postgres Vercel Clerk
ATW Adapter
The Adapter is the integration layer between the Academy of Therapy Wisdom's course platform, its CRM, and everything else. It replaced dozens of Zapier automations that had accumulated over the years — each one individually reasonable, collectively an undebuggable web of silent failures and monthly invoices.
It's a self-hosted webhook service built on a simple discipline: write the event down before doing anything with it. Processing, retries, and logging all happen after the event is safely stored, so nothing is lost to a bad deploy or a slow third-party API. A course registry table means adding a new course is a database row rather than a new automation, and failures announce themselves by an instant message to me instead of settling into an inbox nobody checks.
The part I'd defend hardest is the rollout. Before anything went live it ran in shadow mode — processing real events in parallel with Zapier and recording what it would have done — so the two could be compared side by side before cutting over. Seven phases, all shipped, all running.
AutomationsCourse registry
Internal · live
Next.js Neon Postgres Google Calendar API
ATW Project Hub
Where course production actually gets planned.
The Project Hub is where the Academy plans what it's making. It replaced both Clickup and Fusebase, which the team tolerated but never enjoy. At its center is a launch calendar showing what ships when, with the video editing pipeline hanging off it as a board of tasks that move as the work moves.
It syncs to Google Calendar so the schedule lives where people already look, and it carries a planning section for the Therapy Wisdom Circle's monthly programming. Most features arrived by request: a video director or content director says "I wish I could see X," and the next day X exists.
Because it's internal, it's allowed a personality — it's warm, faintly silly, and quietly gamified, on the theory that a tool people enjoy opening is a tool people keep up to date. That turns out to matter more than any feature on the roadmap.
Project BoardEmail and Call Calendars
Internal · live
Next.js Neon Postgres pgvector MCP integrations
ATW Intelligence
One source of truth, with an analyst on top.
The Academy's numbers lived in four systems that quietly disagreed with each other — the CRM, the attribution platform, and webhook streams from the video and community platforms. Answering something as ordinary as "how did that launch actually do" meant four tabs, three CSV exports, and an afternoon of reconciling by hand. This pulls all of it into one store and keeps it current.
On top of that sits a custom real-time dashboard: revenue and refunds, the acquisition funnel, membership churn, engagement, and launch performance — each panel built around a question the business actually asks rather than whatever a generic BI tool ships with. Having one place where the numbers reconcile has been worth more than any single view. It surfaced a year-to-date figure that had silently frozen, a scheduled job that had been failing for a fortnight, and an integration burning through its monthly API quota unnoticed.
The layer above that is the Consultant — an AI analyst wired into the same sources. The dashboard answers what we already knew to ask; the Consultant is for what we didn't, and it can go and query rather than paraphrasing a cache back at you. Generating plausible answers was never the hard part. Getting it to say "I can't reach that source" instead of inventing a confident number was, and most of the work has gone into grounding, source attribution, and testing whether it can genuinely see what it claims to.
Real-time dashboardConsultant layer
In development
Next.js Neon Postgres Bunny Stream Clerk
Courses app
Owning the platform instead of renting it.
The Academy currently rents its course platform. That's an upgrade from the custom system we previously built, but it's not very customizable, and it's missing key learning features. This is the replacement: video hosting, library-wide search, and the studying experience itself built AI-enabled throughout for a customizable, in-depth learning experience for all of our courses going forward and retroactively.
The interesting piece is the transcripts. Every lesson is ingested twice — once as the clean, hand-edited version people read, and once as the raw machine transcript with timestamps. The second makes the entire library searchable to the second, cheaply. From those, the app generates summaries, key points, chapter markers, and knowledge checks, plus a study assistant scoped strictly to the lesson at hand so it has nothing to wander off and invent.
Still being built.
Lesson view
Personal build
Next.js Neon Postgres Claude MusicBrainz
Smag
Discovery that explains itself.
Smag — Danish for taste — is a discovery engine for books and music, built for a household of two with fairly different tastes. You start it by pasting in a heap of what you love and what you can't stand, or by talking it through with an interviewer, and from that it writes a dossier of your taste and begins recommending. Each recommendation comes with a reason — why this one, for you — and the thread it belongs to, so a suggestion opens a path rather than sitting there as a dead end. It learns from your verdicts as you go, and a background watcher surfaces newly released music that fits, matched to your taste rather than to a chart.
I built it because I kept catching myself doing something odd. The recommendation engines at Spotify, YouTube, Amazon and the rest are genuinely extraordinary, and yet whenever I actually wanted to find something worth reading or hearing next, I opened a chat with a language model instead. The reason turned out to be structural. Those engines are tuned to keep you inside their catalogue rather than send you outward toward something new; a chat will happily send you outward, but it has no memory of your taste and no idea what came out last week. Smag is the wrapper that was missing — the reasoning of a language model, given a memory, a learning loop, and a feed of what's new.
The bet underneath it is that a language model's latent knowledge of books and music is a better judge of taste than any engine built on similarity of metadata, and a better one than the platforms' own. So the model does the reasoning, working from an evolving written dossier rather than a vector space. The part I'd defend hardest is what it is not allowed to do: it never invents an identifier or a release date. Every book and album it names is resolved against real metadata before it reaches me, and every "new release" traces back to an actual feed rather than the model's memory of one. Getting a confident reasoner to stay honest was, as usual, most of the work.
It's also built to outlast the services it talks to. The taste engine sits in the middle knowing nothing about any particular platform; media arrive through input adapters and streaming services are fed through output ones, so when Spotify closed its API to new apps it changed nothing that mattered — a finished list drops straight into YouTube Music, or exports as a portable file for anything else. Two people, two tastes, one quiet engine that remembers both, and can always say why.
Taste dossierRecommendations, with reasons
Next
Most of these started as something I needed on a Tuesday.
If you're weighing up whether a bespoke internal tool beats another subscription, I'm happy to talk it through.