NNabeel Hassan

Blog · October 5, 2026 · 8 min read

Plans, Not Chat: How to Build AI Personalization That People Actually Follow

By Nabeel Hassan — AI Engineer · ICPC World Finalist

TL;DR: If you are building an AI app that personalises something, a plan, a routine, a programme, do not make the chat window the product. A chatbot gives every user a blank box and a fresh answer each time, which is hard to trust, hard to track and impossible to improve. The better shape is a structured plan the model generates into a fixed format your app owns, a tracking loop that records what the user actually did, and a narrow, explicit path for the model to adjust the plan from that data. Keep the model on one job (drafting and revising the plan), keep the app in charge of state, set hard boundaries on topics where advice can hurt, and measure whether people come back on day seven, not how impressive day one looked.

I co-founded Lifemaxxing AI with Benjamin Siegel. It is an AI self-improvement app: it helps people reimagine where their life could go and then gives them personalised plans and tracking to get there. Before that I co-founded LectureNotes AI, and these days most of my client work is AI voice and chat agents. Across all of it, the same lesson keeps coming back: the model is the easy part. The product is everything that turns a model's output into something a person can follow tomorrow morning.

This post is about that layer, for founders and engineers building any "AI that knows you" product.

Why "just add a chatbot" is the wrong default

When a founder says "it's like a personal coach, powered by AI", the first build almost always ends up as a chat screen. It demos well. Ask a question, get a thoughtful paragraph back.

Then real users arrive, and three problems show up quickly.

The blank box problem. Most people do not know what to ask. A self-improvement app exists precisely because people are unsure what to do next. Handing them an empty text field puts the hardest step, framing the problem, back on the user.

Nothing persists. A chat answer is a paragraph that scrolls away. There is no "plan" to come back to, no checklist, no notion of done. The user has to remember the advice, which is the thing they came to the app to stop doing.

Nothing is measurable. If the output is free text, you cannot tell whether the user followed it, whether it helped, or whether a prompt change made it better or worse. You are flying blind on the one thing your product promises.

Chat has its place. I build chat agents for business websites and they work well when the job is answering questions. But a personalisation product's job is not answering questions. It is producing a plan and helping someone stick to it.

The shape that works: plan, track, adjust

The architecture I trust for this kind of product has three parts, and the model only owns one of them.

1. The plan is structured data the app owns

The model's job is to draft a plan, but the plan itself should be data in a format your app defines: goals, the actions under each goal, how often each action happens, and how progress is measured. The model fills that structure. It does not invent the structure.

This matters for a few reasons:

This is the same discipline as function calling in a voice agent: let the model decide what to say, but make it hand over anything the system acts on in a shape the system can check.

2. Tracking is the real product

A plan nobody follows is a nice document. The value of a self-improvement product is in the loop: the user does something, records it in a second or two, and sees that it counted.

Two rules I hold to here:

3. Adjustment is a narrow, explicit step

Personalisation is not the first plan. Anyone can generate a decent first plan. Personalisation is what happens in week two, when the user has skipped the morning routine five days running and nailed the evening one.

So the adjustment step gets its own deliberate design: the app summarises what actually happened, hands that summary to the model along with the current plan, and asks for specific revisions in the same structured format. The user sees what changed and why, and accepts it.

What I avoid is letting the model silently rewrite the whole plan every time it is called. Plans that change under people feel random, and random destroys trust faster than a mediocre plan does.

Boundaries: what the model must never do

A self-improvement app touches health, fitness, sleep, money, relationships and mood. Some of those are areas where generic AI advice can do real harm. That needs to be designed in, not left to a polite line in the system prompt.

The approach I take on any AI product in sensitive territory:

Cost and context: do not feed the model everything

There is a tempting design where every request sends the model the user's whole history so it "really knows them". It works for a week, then it gets slow and expensive, and the quality often drops because the important signal is buried in noise.

The better pattern is to keep a compact profile and a short summary of recent progress, maintained by your app, and send that. The model gets what it needs to revise a plan, not a diary. I went deep on why every model call has to earn its cost in the unit economics of an AI consumer app, and personalisation products are where that discipline pays off most, because your most engaged users are also the ones with the longest histories.

It also helps to split the jobs. Generating or revising a plan is occasional and worth a capable model. Small things, like phrasing a reminder or tagging a note, run constantly and should use something cheaper, or no model at all.

What to measure

Day one of an AI personalisation app always looks good. The first plan is impressive, people screenshot it, and that is not the number that matters.

The metrics I care about for this kind of product:

None of these are about the model's eloquence. They are about whether the loop works.

What I would tell a founder starting one

If you are building an AI product that promises to know the user, here is the short version I give in discovery calls:

  1. Design the plan format before you write a single prompt.
  2. Make tracking one tap, and store it as data, not chat.
  3. Give adjustment its own step, show the user what changed, and let them say no.
  4. Write down the topics the app must never advise on, and test them every release.
  5. Keep the model's context small and the model itself swappable.
  6. Judge the product on week two, not on the first screenshot.

Building Lifemaxxing AI with a co-founder in the US while I work from Lahore also reinforced the founding-team side of this, which I wrote about in being the technical co-founder with a US partner. The short version: one person owns the product promise, one owns the system that keeps it, and both read the retention numbers every week.


I build AI products, voice and chat agents, and mobile and web apps for founders across the US, UK and Europe, including my own AI apps with real users. If you are building something that turns a model into a personalised experience, more about me is here, or book a call and we can sketch the plan, track and adjust loop for your product.

FAQ

Should an AI personalization app be a chatbot?

Usually not as the core product. A chat window gives users a blank box, produces answers that scroll away and leaves nothing to track. A structured plan the app owns, a tracking loop and an explicit adjustment step give people something to follow and give you something to measure.

How do you make LLM-generated plans reliable?

Define the plan format yourself and have the model fill it, then validate the output in code before the user sees it, rejecting plans with missing fields or unrealistic scope. Owning the schema also means you can swap the model behind it without rewriting the app.

How does an AI app personalize over time?

By recording what the user actually does as structured tracking data, summarizing it, and asking the model for specific revisions to the current plan in the same format. Show the user what changed and why, and let them accept or reject it, instead of silently regenerating the whole plan.

How do you stop an AI self-improvement app from giving harmful advice?

Write down the out-of-scope topics up front, such as diagnosing conditions or crisis support, route those inputs to a fixed pre-written response that points to a professional, treat user text as untrusted input, and run a fixed set of tricky test inputs against every prompt change.

Building something in this space?

I take on AI-agent, automation and product work directly — scoped fast, shipped fast.

Book a discovery call →

Keep reading