Six real problems.What we built. What changed.

For each case: the problem, what we chose not to build, how the work runs now and when we would stop. Under the hood, each case shows the technical detail, with every term translated.

01

Research navigator for lung cancer treatmentHealthcare

Deployed MVPPublic capstone

Lung cancer research grows faster than an oncologist can read it.

Oncologists need the studies that fit one patient, and they need to see why each study was picked. New findings can take years to reach the clinical guidelines.

A six-person team project on the MIT programme AI/ML: Leading Business Growth. Mario owned the strategy, the plan and the deployment, did most of the data and evaluation work, and built the whole app.

Options considered

  • A chatbot that answers medical questionsIt sounds sure even when it is wrong.
  • A model trained on medical papersYou still cannot trace an answer to its source.
  • An AI agent that searches and decides on its ownToo much freedom where a wrong answer is costly.

Chosen: Fixed rules do the matching and the ranking. AI only searches for studies the rules would miss.

One ordinary day

Before

An oncologist prepares for one patient. They search several databases, read paper after paper, check each one against the patient's disease stage and biomarkers, and compare it with the guidelines by hand. Little time is left to check how any summary was made.

After

The oncologist enters the patient's case once: disease stage, tissue type, treatment line and biomarkers. The navigator lists the studies that fit, ranked by a fixed score, each linked to its source and labelled against the ESMO guidelines. Unclear studies go to a manual review list. The doctor is responsible for the clinical assessment and decisions.

AI in this system

  1. Rules

    Turns the case into fixed fields

  2. Rules

    Matches studies to the patient

  3. AI

    Finds studies the rules missed

  4. Rules

    Ranks them and checks the guidelines

  5. People

    Oncologists review unclear findings

AI does one of five steps. It widens the search. It never ranks a study or decides.

We would stop if

  • a citation cannot be checked against its source
  • the system invents a medical fact
  • answers read better but are less correct than a plain search
  • oncologists do not trust it or do not use it

Where it stands

+44% more matching evidence when AI search feeds the rules: 704 items instead of 490, on 15 fixed test cases.

Deployed as a public MVP. It helps oncologists review studies. The doctor remains responsible for clinical decisions. Recall is still 40%, so it is a working prototype, not a finished clinical tool.

See the project page

Under the hood

For the technically curious. Jargon included, each term translated.

Stack

  • Python rules engine
  • FastAPI
  • Next.js 15
  • React 19
  • Vercel
  • Supabase Postgres
  • Qdrant Cloud
  • OpenRouter
  • text-embedding-3-small
  • Gemini 2.5 Flash, optional
  • PubMed
  • ESMO guidelines

Terms, translated

Deterministic cohort matching
Fixed rules check whether the patients in a study look like this patient. The same input always gives the same result.
ERS evidence score
Each study gets a score for its design, the strength of its results, how recent it is and how credible the source is. Anyone can check why one study ranks above another.
Hybrid search: dense and sparse vectors
Two searches run side by side. One looks for meaning, the other for exact words. A study is found even when it uses other terms for the same thing.
Embeddings, 1,536 dimensions
Each text becomes a list of 1,536 numbers. Texts with similar meaning get similar numbers, so a computer can measure how close they are.
Reciprocal Rank Fusion (RRF)
Merges the two result lists by position, not by raw score, so neither search wins by accident.
Guideline mapping
Each study is labelled as in line with, in conflict with or not covered by the ESMO guidelines, the European standard for cancer care.

How it is tested

  • Baseline: an oncologist's manual research and plain keyword search. The system has to beat it, not just sound fluent.
  • Measures: search correctness, citation and answer faithfulness (the answer says only what the source says), time to evidence, agreement between oncologists and error analysis.
  • Test packs: 10 to 15 patient cases with starter PubMed and ESMO sets, small enough to check by hand and break on purpose. A confusion matrix tracks false negatives (relevant studies the system missed).
  • Frozen benchmark, 15 patient cases, current build: recall 40% (share of expected studies found; the rest are false negatives), first label correct in 8 of 15 cases (53%), exact guideline topic in 4 of 15 (27%). Low, and shown on the project page as low.
  • Hybrid search on the same pack: 487 extra studies found, and 214 more evidence items aligned after the rules checked them (704 instead of 490). The rules engine still sets every final label.

Ruled out

Free-form LLM answers as the authority. They change from run to run and are hard to audit. The LLM layer stays optional: grounded summaries and import help, never the clinical source of truth.

What broke

A strict rules engine can still fail on meaning. To a doctor, egfr-tki, tki and targeted can mean the same treatment. To the code they were three different tags, until the team built a shared vocabulary across patient cases, PubMed and ESMO.

Build order

The rules engine and its test harness came first. Then small test packs, data cleanup, the shared vocabulary, the web app and the live rules engine. Hybrid search came seventh. The optional AI summary came last.

What it records

Each answer keeps its source document, the evidence fragment, the data version, the search logic, the model and prompt settings, and the review trail.

02

Contract-to-payout workflowMarketing and events

CompletedAnonymised

Freelancer contracts ran through email, spreadsheets and an outside firm. The firm added about 30% on top of each contract's value.

An events and marketing agency works with many freelancers. Each one needs a contract, a signature and a payout. Nobody could see where a contract was stuck, or who owned the next step.

Options considered

  • AI that writes the contractsThe legal risk was too high.
  • AI that drafts each job descriptionAn approved list of job types does it without guesswork.

Chosen: One clear process, built on approved contract templates, with a person checking each step that carries risk. No AI.

One ordinary day

Before

A producer books a freelancer for an event. Personal and tax details travel by email and end up in spreadsheets. An outside firm handles the paperwork. The status lives in people's inboxes, so when a contract stalls, nobody can see where.

After

The producer picks the project and the type of work from an approved list. The freelancer gets a personal link and fills in their details once. The contract comes from an approved template. Accounting checks the package in their usual task board, then it goes out for e-signature. Everyone sees the status, and every step is recorded.

AI in this system

  1. People

    Producer picks project and work type

  2. People

    Freelancer adds their details

  3. Rules

    Contract from an approved template

  4. People

    Accounting checks the package

  5. Rules

    Sent for e-signature and tracked

  6. Rules

    Ready for payout

AI does none of the six steps. It was not needed, and it would have added legal risk.

We would stop if

  • the agency still needs the outside firm
  • legal risk goes up
  • people do the same work twice
  • the cost does not fall below the outsourced process

Where it stands

30% of each contract's value no longer goes to an outside firm. It is fully replaced.

Completed and handed over to the agency in October 2026. The agency runs every contract in-house, and people check the steps that carry risk.

Under the hood

For the technically curious. Jargon included, each term translated.

Stack

  • Next.js 15
  • React 19
  • TypeScript
  • Turborepo
  • Auth.js with Google sign-in
  • Google Sheets
  • Google Drive
  • Asana API
  • Autenti e-signature API
  • Gmail API
  • pdf-lib
  • Zod
  • Sentry
  • Vercel

Terms, translated

State machine
A contract can only move along allowed steps. It cannot jump from a draft straight to paid.
Append-only event log
Every change is added as a new line and never overwritten. The full history of each contract can be read back.
A spreadsheet as the database
In this version a Google Sheet holds the data. Only one layer of the code may read or write it, and IDs come from the server, never from row numbers.
Webhooks
The task board and the signature service tell the app when something changes. Nobody has to check by hand.
Outbox and retry jobs
If an outside service is down, the request waits in a queue and goes out again later. It does not get lost.
Magic link
The freelancer opens a personal link. No account, no password.
AES-GCM encrypted drafts
A half-filled form is saved encrypted, so a freelancer can finish later and the data is not stored in plain text.

How it is tested

  • Baseline: the outsourced process, about 30% on top of each contract's value, with little visibility.
  • Success means the whole process runs in-house, with visible status, fewer handoffs, no loss of legal control and a lower cost than the baseline. Result: the outside firm is fully replaced.
  • Built in seven two-week sprints from February to May 2026, then hardened in real use. More than 900 automated tests.

Ruled out

LLM contract generation. Approved legal templates are the only source of contract text, and only a small set of fields can change.

What broke

A spreadsheet has request limits. Under load the app hit Google's quota, so it now retries with back-off (each retry waits a little longer) and defers work instead of failing.

What it records

Each contract keeps its status, every event, its documents, the signature trail, the handoffs and the decisions. ID numbers, bank details and document contents never go into the event log.

03

Initial assessment of product and marketing conceptsCustomer research

CompletedConfidential

Consumer research takes time and money. Weak product and marketing concepts reached expensive studies or were rejected on intuition alone.

The team needed an affordable way to assess product and marketing concepts before research with people. It wanted to select the strongest proposals for further testing.

Options considered

  • Ask an AI model what customers thinkOne confident opinion that nobody can check.
  • A synthetic survey instead of real researchReal people must stay the benchmark.

Chosen: AI generates text responses for the audiences the team describes. We turn the responses into scores and compare the concepts. The team chooses the strongest for research with people.

One ordinary day

Before

The team has more product and marketing concepts than it can research within its budget. They choose in a meeting which ones to test. If the chosen ones are weak, the budget is spent before they learn anything useful.

After

The team describes product or marketing concepts and their audiences. AI generates text responses from each audience’s perspective. Each answer becomes a survey-style score, from definitely not to definitely yes, with the reasons and a note on uncertainty. The team sends the strongest concepts to the real panel.

AI in this system

  1. People

    Team describes concepts and audiences

  2. AI

    Generates text responses

  3. AI

    Each answer is scored by its meaning

  4. Rules

    Control concepts check the run

  5. People

    Team picks what goes to the real panel

AI does two of five steps. It writes the answers and measures their meaning. People choose what goes to the real panel.

We would stop if

  • the top picks do not do better with real respondents
  • results change from run to run
  • it gives the team false confidence
  • people start using it instead of real research

Where it stands

98% lower cost per screening run than a real panel, with results agreeing with the real panel above 88%.

Completed. Over 100 concepts screened. Only the strongest go to real respondents, and human panels stay the benchmark.

Under the hood

For the technically curious. Jargon included, each term translated.

Stack

  • Python
  • OpenRouter
  • Qwen3 30B A3B Instruct
  • BAAI bge-m3, 1,024 dimensions
  • Local-only web console

Terms, translated

Textual elicitation
AI generates a text response, similar to an interview answer, instead of selecting a number directly.
Semantic Similarity Rating (SSR)
Each answer is compared with reference sentences. For a purchase question, these range from "I would definitely not buy this" to "I would definitely buy this". How close it is to each one becomes a score distribution.Technically: free-text answer → embedding → cosine similarity to Likert anchor statements → probability over the scale → segment distribution
Reference anchors
The model sentences that stand for each point of the scale. Different anchors give different scores, so we test several sets.
SSR temperature
How sharply an answer is pinned to one score. It has to be tuned for each type of question. One value does not fit all.
Pre-registered controls
Before a run we add a concept that should clearly win and one that should clearly lose. If the method cannot separate them by a set margin, the run does not count.
Frozen runs
Prompts, models, settings, anchors and inputs are saved with each result, so any run can be repeated and challenged.

How it is tested

  • Client use: over 100 concepts screened, 98% lower cost per run than a panel, agreement with real panel results above 88%.
  • The method was first tested on public survey data with real answers (Mendeley, CC BY 4.0).
  • New-product survey, 6 questions, 438 real respondents: KS similarity 0.887 (how much the AI and human answer patterns overlap, 1 is identical), mean absolute error 0.036 per answer option, and the average score 0.39 points off on a 7-point scale.
  • A harder survey on green purchases, 253 respondents: KS similarity 0.73, then 0.78 after a prompt revision. Useful for direction, not a replacement for a panel.
  • Model choice: with the same embeddings, Qwen3 30B came out ahead of DeepSeek on all three measures, and ahead of Gemini Flash Lite on score error. In the embedding comparison, bge-m3 scored best, ahead of qwen3-embedding-8b and text-embedding-3-small.

Ruled out

Simple LLM opinions, classic synthetic surveys and fully simulated agent respondents. Text answers scored with SSR kept the reasoning and still gave numbers that can be compared.

What broke

A model comparison failed on plumbing, not quality. One provider kept hitting rate limits (it refuses requests when too many arrive) and returned broken JSON. Since then every comparison reports reliability next to quality. And when a run missed our pre-set control margin by a few hundredths, we marked it failed, not nearly passed.

What it records

Each result keeps the prompt version, the model and provider, the run settings, audience segments, SSR anchors, raw answers, final scores, cost and time.

04

Visitor forecasting and staffing for venuesHospitality and entertainment

In progress

Managers planned shifts without a reliable forecast of how busy each day would be.

Some shifts risked too many staff, others too few at the peak, which hurts service and sales.

Options considered

Discovery found seven candidate ideas. The forecast went first, because it links directly to a cost the business can measure.

  • Start with an AI forecasting modelFirst prove that a simple average is not already enough.

Chosen: Test a forecast on a past month against a simple average by weekday. Build only if it wins.

One ordinary day

Before

A shift manager plans next week. They look at the calendar, the reservations and what they remember from last year, then guess how busy each day will be. Rain or a local event can upset the guess.

After (planned)

The manager opens next week's forecast: expected visitors per day, from past sales, the weather and local events, with a suggested number of staff and the reasons. They adjust it and approve. After each shift, the forecast is compared with what really happened.

AI in this system

  1. Data

    Past sales and visits

  2. Data

    Weather and local events

  3. AI

    Forecasts the demand

  4. Rules

    Suggests the staffing

  5. People

    Manager adjusts and approves

  6. Feedback

    Compared after each shift

AI will do one of six steps: the forecast. The manager makes the call.

We would stop if

  • the model does not beat a simple average by weekday
  • the data is too incomplete
  • managers do not find the suggestions useful
  • it needs too much manual work

Where it stands

In progress. We proposed a four-week MVP. The first test runs on a closed past month, before any live pilot.

Under the hood

For the technically curious. Jargon included, each term translated.

Stack

  • Booking and ticketing data
  • Point-of-sale data
  • Staff scheduling app
  • Calendars and spreadsheets
  • Weather
  • Local events

These are the data sources. The model is chosen after the baseline test.

Terms, translated

Baseline
The simplest forecast anyone could make: the average for that weekday, plus the events we already know about. A model has to beat it to earn its place.
Backtest on a closed month
We hide a past month, forecast it and compare the forecast with what really happened. No live risk.
Forecast error
How far the forecast was from the real number, on average.
Seasonal drift
A forecast slowly gets worse as seasons and habits change. We watch for it.

How it is tested

  • Baseline today: manager experience, calendars, reservations, manual reports and simple rules by weekday, season and weather.
  • Measures: forecast error, understaffed and overstaffed shifts, time to plan the schedule, lost or served demand, and feedback from managers and reception.

Ruled out

Going straight to a live model. The simple baseline may be good enough, or the backtest may show that the data is not ready yet. Both are useful answers.

What broke

Nothing yet. This part fills in after the first backtest.

What it records

Each forecast will show the history period it used, the data sources, the weather and event inputs, the model version and every correction a manager made.

05

Group event planningHospitality and entertainment

In useConfidential

Planning one group event took 15 to 20 minutes of checking availability, activity by activity.

An entertainment venue's events team plans group evenings from several activities. Their booking system holds the truth, but it does not fit how they build an event, and it has no integration API.

Options considered

  • Replace the booking systemIt works for bookings. The pain was the planning around it.
  • Book straight into the booking system from the new toolThere is no supported API, so writing into it was too risky.

Chosen: A read-only board that shows the whole day at once. The team plans on it, and every booking is still confirmed in the booking system.

One ordinary day

Before

A client asks for a group evening with several activities. A coordinator checks each activity in the booking system, writes down the free times and works out a schedule by hand. Two colleagues can plan around the same free slot without knowing it.

After

The coordinator picks a date and sees every activity on one board, with free times, spaces and how fresh the data is. They click the slots they need, and a draft schedule with start and end times builds itself below. Colleagues see at once that a slot is taken. A final check in the booking system confirms the booking.

AI in this system

  1. Data

    Reads free slots from the booking system

  2. Rules

    Shows the whole day on one board

  3. People

    Coordinator picks the slots

  4. Rules

    Builds the schedule and holds the slots

  5. People

    Final check in the booking system

AI does none of the five steps. The team needed exact, live availability in one place. That is a data job, not an AI job.

We would stop if

  • the board shows different availability than the booking system
  • reading the booking system fails too often to rely on
  • planning is not clearly faster than before
  • the team stops using it

Where it stands

58-87 h saved in September, before counting the manual schedule work. An estimate, because every booking is different.

In use by the events team. In September they made 353 reservations on the board, at a cautious 5 minutes each against 15 to 20 minutes in the booking system.

Under the hood

For the technically curious. Jargon included, each term translated.

Stack

  • Next.js 16
  • React 19
  • Supabase Postgres
  • Supabase Auth with Google sign-in
  • Supabase Realtime
  • Vercel

The data lives in a Supabase project that the client owns from day one.

Terms, translated

Read-only adapter
The board reads the booking system's public availability data and never writes to it. If that data changes shape, the board says so instead of guessing.
Freshness states
Every column shows when it was last read and whether the data is fresh, stale or failed, so a coordinator knows when to double-check.
Parity check
Compares the board with the booking system's own staff panel. Over two days, times and spaces matched exactly for every fixed-slot activity.
Realtime sync
When one person picks a slot, everyone else's board updates at once, without a refresh.
Internal reservation
A hold inside the board only. It stops two colleagues planning the same slot, but it never blocks or books anything in the real system.
Isolated columns
All activities load at the same time. If one fails, only its column shows the error. The rest of the board keeps working.

How it is tested

  • Baseline: 15 to 20 minutes to plan one event in the booking system, as reported by the events team.
  • Target for the availability check: about 1 minute.
  • September: 353 reservations on the board, about 30 hours of planning at a cautious 5 minutes each, against 88 to 117 hours for the same checks in the booking system. Estimates, not measurements.
  • The events team reviewed the board in a working session and accepted it without material changes.
  • A three-week evidence stage ended in a continue, change or stop decision.

Ruled out

Writing bookings into the booking system, rebuilding its capacity logic and sending messages to customers automatically. The booking system stays the source of truth, and people talk to customers.

What broke

Not a failure yet, but the main risk. With no API, the board reads the public availability data that the booking website uses, and that data can change shape without notice. So a failed, stale or changed read is a normal state on the board, shown to the team, never hidden.

What it records

Every availability read is stored with its time and result, so the team can see how stable the data is and what changed between reads. Every reservation and change is linked to the person who made it.

06

Curtains from one photoHome furnishing e-commerce

Completed

Made-to-measure curtains meant a tape measure, a trip to pick fabric and a wait for a visualisation.

The curtain startup zaslony.com wanted the whole purchase in one flow: from home, without a tape measure.

Options considered

  • A sheet of A4 paper on the wall as a rulerOne more task for the customer, and less accurate.
  • A cheap general-purpose AI model to measureToo imprecise for centimetres.

Chosen: One photo. AI measures the wall from objects of known size and finds where curtains can hang. The customer confirms the area, sees the curtains on their own wall and orders.

One ordinary day

Before

A customer wants new curtains. They measure the window and the wall, travel to see fabrics, wait for a visualisation of how it might look, and only then order.

After

The customer takes one photo of the room with their phone. The wizard estimates the wall size, marks where curtains can hang and shows them on that wall in the chosen fabric, pleat and colour, with the price. The customer adjusts the area if needed and adds the order to the basket, without leaving home.

AI in this system

  1. People

    Customer uploads a room photo

  2. AI

    Measures the wall

  3. AI

    Finds the wall and the window area

  4. People

    Customer confirms the area

  5. Rules

    Renders the curtains and the price

  6. People

    Customer orders

AI does two of six steps. It measures the wall and finds where curtains can hang. The customer confirms before anything is priced.

We would stop if

  • measurements are too far off to make curtains that fit
  • customers do not trust the result and measure by hand anyway
  • the preview does not look like the real fabric

Where it stands

3-10% measurement error from one photo in our tests. An A4 sheet on the wall as a ruler gave 20 to 40%.

Completed. The whole order, from photo to basket, happens in one flow at home. There is no old sales number to beat, because this way of ordering did not exist before.

Under the hood

For the technically curious. Jargon included, each term translated.

Stack

  • Next.js 14
  • React 18
  • Genkit
  • Qwen VL
  • Mask2Former on a GPU service
  • SegFormer fallback
  • FastAPI
  • Canvas renderer
  • Blender fabric textures
  • Magento storefront API
  • IndexedDB

Terms, translated

Vision-language model (VLM)
An AI model that looks at a photo and answers questions about it. Here: how wide and how high is the opposite wall?
Scale from known objects
Doors, switches and furniture have typical sizes. The model uses them, plus the usual 72° field of view of a phone camera, to turn pixels into centimetres.
Segmentation (Mask2Former)
Labels every pixel of the photo as wall, window, floor or ceiling, so the wizard knows where curtains can hang.
Wall × box fractions
The model measures the whole wall. The area the customer marks is a share of it, so its size in centimetres follows from the wall's.
Percentile trimming (p10/p90)
Ignores the most extreme 10% at each edge of the detected wall, so a stray shadow does not stretch the measurement.
Artist texture pipeline
Fabric textures made in Blender. The renderer picks the fold type (wave, flex, double flex) from the pleat and the material, so the preview looks like the sewn curtain.

How it is tested

  • Measurement tests: within 3 to 10% of the real size from the photo alone, against 20 to 40% with the A4-sheet method.
  • A benchmark script runs photos against measured ground truth and logs the time each model takes.
  • Model choice: Qwen VL gave the best accuracy for its cost. GPT-4o-mini was too imprecise for centimetres.
  • No before-number for the business: the old way of ordering was not online, so there is nothing like-for-like to compare.

Ruled out

The A4 sheet as a ruler in every photo. It was one more task for the customer, and it failed on glass, mirrors and steep angles. Scale from known objects replaced it.

What broke

iPhones save photos as HEIC, which the pipeline could not read. The wizard now converts them in the browser, with a server fallback. And when the GPU service was down, large phone photos made the fallback model slow, so uploads are now resized before the call.

What it records

Each measurement keeps the model's raw answer, the prompt, the time it took, the warnings and the cache key, so the accuracy can be tuned.

Have a problem like one of these?

Tell us what is not working. After a 30-minute call you know whether we recommend Discovery, a focused test or no build. Discovery starts from 7.5k Euro. Not sure about Discovery yet? Start with a Signal Check for 2k Euro.

Send us a note

Last updated: