Menu
Education

Conversational AI tutoring platform with database-managed, auditable prompts

A Laravel learning platform where an AI tutor conducts a grounded, per-question conversation with each learner — responses drawn from that module's teaching material and that question's guidance, with the tutor's persona, context and guidance stored as editable content rather than code, and every conversation turn persisted with the exact prompt that produced it.

Client — a professional education technology provider
Concept visuals — not actual screenshots
01 — Challenge

The most valuable part of professional training is a senior practitioner reading a learner's reasoning and telling them exactly where it's wrong — a 1:1 interaction that's expensive and doesn't scale. Automated marking can tell a learner they're wrong but not why, and an unguided language model answers from general knowledge in a generic voice at whatever length it chooses, which isn't a substitute for course-grounded feedback. The people who could actually improve the tutor's responses were subject-matter experts, not engineers, so every prompt change requiring a developer and a deployment meant the product's real quality lever sat with the wrong team.

02 — Approach

Moved the tutor's persona, guardrails, module context and per-question guidance out of code and into the database, edited through dedicated prompt-editor screens separate from ordinary content forms and behind an additional access gate — so improving the tutor became a content change made by whoever spotted the problem, with the original engineered prompts retained as a configuration fallback. The prompt itself is composed in layers with a clear owner per layer: persona and guardrails in the system message, module context and question guidance and the learner's answer and prior history in a structured user message.

Every conversation turn persists its role, its content, the exact system and user prompts used, and the raw provider response — so a bad response is explainable from what was actually sent, not reconstructed from prompts that have since changed. Built a DOM-based normalisation routine that converts WYSIWYG-authored teaching content into clean prompt text rather than stripping tags naively, since flattening a numbered section or a bulleted list destroys the structure the meaning depends on, and every answer type — free text, single choice, grouped choice, image matching, rating scale — gets rendered into a natural-language sentence before the model ever sees it, so one conversational pipeline serves the whole curriculum. A per-learner, per-question follow-up quota is enforced server-side, and steps needing no evaluation skip the model call entirely.

03 — Impact

Expert-style tutoring now reaches every learner on every question instead of being rationed to whoever can get time with a senior practitioner, and educators own the quality of that tutoring directly through the admin interface rather than waiting on a release. Every AI response is explainable months later from the exact prompt that produced it, learners can leave mid-module and resume with their full conversation intact, and conversation cost is bounded by design — a quota enforced server-side and steps that never call the model where there's nothing to evaluate.

Stack
AI / LLMLaravelMySQLPHPLaravelMySQLOpenAI APIRedisAWS S3BladeAlpine.js

Something holding you back?

New build, rebuild, or adding AI to what you already have — I'll take a look and give you an honest perspective.

Get in touch ↗