LifeJet
Turn functional medicine into one trackable experiment at a time.
A care companion built specifically to apply AI to functional medicine. I built it solo across three workstreams: an agentic playbook the agent moves through at the user's pace, a product where the agent's output renders as persistent artifacts the user can return to, and the engineering decisions that keep voice and chat writing to one source of truth.

How functional medicine becomes a real product.
The founder was using ChatGPT to reason about longevity and functional medicine, but the work had nowhere durable to persist: sessions started cold, recommendations stacked into long protocols, and nothing circled back to whether the last change worked.
Functional medicine works through a different rhythm. A user might arrive with bad sleep and scattered notes from prior appointments. The agent mirrors first, narrows the pattern, proposes one experiment small enough to try for a few days, saves it as an object with a check-in cue, and opens the next session from what changed instead of asking the user to explain everything again.
To translate that into a product I needed a coaching arc the agent could move through at the user's pace, persistent artifacts the user could return to, and a memory layer that survived between sessions. Functional-medicine practitioners shaped the playbook alongside the build. The build landed on three concurrent workstreams. I led all three.
A coaching arc the agent moves through.
The playbook needed a visible progression through the conversation: validate first, surface one pattern, reframe the question, then package one experiment. Without that progression, sessions drift and the next one starts from scratch.
I built the playbook around an arc the agent moves through at the user's pace. Mirror: validate before analyzing, pure conversation, no tools. Pattern: synthesize what's been observed into one believable explanation, with the agent capturing the structured pattern through an invisible tool call. Reframe: produce alternative frames the user can compare and save. Experiment: package one keystone action with a guardrail and a tracking cue noticeable inside a few days. The agent never announces phase transitions; it stays in a phase until the user is ready to move.
The tools sit behind the phases. Deliverable tools render cards the user can act on: an Experiment plan, a set of Reframes to compare, a check-in prompt for an active experiment. Invisible tools modify saved artifacts in place when the agent has new information to record. A generation-only suggestion tool emits short follow-up prompts after every response. Whether any tool fires is the agent's call.
What the agent keeps.
A care relationship that resets every session is just chat. To become coaching it has to remember on its own, without an intake form, without the user re-explaining themselves, and without burying the model in a transcript it has to re-parse every turn.
LifeJet writes memory through Mem0, with typed buckets for distinct categories: identity facts that don't expire, the user's current health profile, the active intervention protocol (its own queryable surface so the agent can ask "what's active" without scanning a transcript), short conversation summaries, and working hypotheses that wait for validation. After every assistant turn a background job classifies the exchange and writes what's worth keeping into the right bucket. The next turn loads the relevant memory back into the system prompt as context.
Persistent artifacts sit alongside the memory layer. Experiments carry the keystone action and supersede prior versions, so the user's history reads as a single evolving line. Reframes are saveable identity-level shifts: better questions to hold, framed against the moment to reach for them. Observations are promoted patterns: the agent's working theory of the user's system after it has earned enough confidence to become user-facing.


A companion that helps people open up.
A user opening the app may be tired, inflamed, anxious, or unsure what changed. The surface needed to start with conversation and persist only the work worth returning to: an experiment, a reframe, an observation, a pattern.
The user opens the app and starts a conversation, by chat or by voice, about bad sleep, an inflammation flare, a hard week. The conversation surface gives them almost nothing to manage. The playbook mainly plays out as conversation; the screens are how the work persists.
The voice mode is built to slow people down. The model speaks in two or three short sentences with deliberate pauses and slightly elongated vowels. One question at a time. Silence is fine. It mirrors before it analyses. It can sit through silence, talk a user through a breathing pattern, walk them through a visualisation, or stay quiet while they figure out what to say. Voice today is one of the modalities. The interface is structured so it can become fully voice-driven as the underlying technology matures.


Home shows what you're trying.
Cards render only when the agent has produced something worth carrying forward. The Experiment Card carries the deliverable for the keystone action: name, action, what to keep fixed, the tracking cue, the success threshold, and a lifecycle state with a versioning chain. The Reframe Card saves a sharper question. The Observation Card is the promoted version of a pattern.
Outside the conversation, a quiet persistent layer mirrors the objects the agent has earned. Home can center the current experiment and next check-in, then widen into the relevant pattern, the systems already explored, and the most recent observation. /experiments lists active tests with lifecycle state and progress. /reframes is the saved-question library. /observations holds the patterns the agent has promoted. /pattern-map turns the user's accumulating experiments, observations, and lifestyle factors into a connected model they can inspect.
The visual system supports the same posture. Material depth comes from inset shadows and shadow rings, so interactive surfaces feel like physical objects under the cursor. Rose is reserved for status (active experiment, current focus, save action) so the accent stays meaningful at every appearance. The marketing site at lifejet.ai is built on the same component library, so a visitor arriving from outside lands on the same surface they'll work inside.



The decisions specific to LifeJet.
The hard constraint was keeping chat, voice, artifacts, and memory from becoming four separate systems. The agentic playbook and the product surface only work if those pieces share one durable write path.
I made three calls up front. Cards in the thread are rows in the database: when an assistant turn finalizes, an extraction pipeline reads the streamed tool parts, types each card against its target table, and writes it through to Supabase. The agent's lifecycle judgments are first-class schema fields: every deliverable tool call carries explicit decisions about state, whether to promote a pattern to user-facing, and whether the new artifact supersedes a prior one. Voice and chat write to the same artifact tables: the voice agent runs on its own runtime, but when a session ends the transcript hands off to the same artifact extraction pipeline as a chat turn. An experiment created during a voice call shows up alongside experiments created in chat.
The rest of the stack is commodity by choice (Next.js, Vercel AI SDK on Sonnet 4, OpenAI gpt-realtime through LiveKit, Supabase, Mem0) so the build effort goes toward what's specific to LifeJet. I designed and built every part of it: the playbook, tools, extraction pipeline, memory schema, persistent layer, cards, chat surface, voice agent, auth flow, Supabase schema and policies, design system, and the marketing site at lifejet.ai. Each piece had to fit cleanly with whatever I touched next.
One artifact layer reads from both surfaces. A user's voice session and chat turn write to the same memory; the next session loads it back.
What shipped.
LifeJet is live at lifejet.ai with 500 on the waitlist. The agentic playbook, the auto-extracted artifacts, the active-experiment check-ins, the saved reframes, the surfaced observations, the voice modality, and the shared artifact layer feeding the pattern map are all running in production. Every session opens with the relevant memory already loaded, and the next surface can show what the user is trying, what LifeJet has noticed, and how those pieces connect.
Praise
I implicitly trust David to make product and technology decisions that benefit the company. He's been instrumental in turning my rough vision into a real, working product. I don't second-guess a call he's made.
Mike MossFounder & CEO, LifeJetMM