Write us on Telegram@Odilient

SAAS

BiliMind

AI course generator for self-directed learners: name a topic or upload PDFs and get a structured course with 27 lesson formats, graded practice and a study schedule.

In-house product
Client
Education
Industry
Ongoing
Duration
2026
Year
Where it started

The Challenge

Chat assistants can outline a course in seconds, but the outline scrolls away and nobody finishes it. We wanted a product where a generated course becomes a persistent object: structured as a real learning path, taught in formats that fit each kind of knowledge, graded honestly and scheduled around a learner's actual week. Generation had to stay cheap, observable and resilient, because a full course means dozens of slow, failure-prone model calls.

What we did

The Solution

We built BiliMind as a Laravel API and a Nuxt 4 frontend over PostgreSQL. A queued, idempotent pipeline clarifies intent, generates the outline as a directed acyclic graph and expands only the lessons a learner picks, validating every model reply against a JSON Schema and logging tokens and cost per call. Lessons combine 27 formats with deterministic, rubric-based and in-browser code grading, and a scheduler packs the graph into calendar sessions that re-flow when a day is missed.

Built with
LaravelNuxt 4PostgreSQLVue 3Tailwind CSSOpenRouterDeepSeekPaddleCapacitorCodeMirror
Inside the build

How It Came Together

An AI course generator that turns topics into courses people finish

bilimind.com is our in-house AI course generator for self-directed learners, instructors and teams. A learner names a topic or uploads their own PDFs, slides and notes, answers a few clarifying questions, and gets a structured learning path instead of a chat answer that scrolls away. Each lesson is written in formats chosen for the kind of knowledge it teaches, graded for real, placed on a calendar and brought back for spaced review.

The public site sums the product up as 27 lesson formats and 20 course languages. Planning a course is free; learners pay only when they want lessons written in full. Finished courses can be published at a public URL and browsed in a catalog of courses written end to end.

Key features

  • Courses as a learning graph — the outline is a directed acyclic graph of topics and subtopics, drawn as a roadmap-style map rather than a bulleted list.
  • Lessons shaped by knowledge type — each lesson is classified into one of 11 knowledge archetypes, such as procedural, conceptual or communicative, which decides which of the 27 formats it gets: walkthroughs, checklists, comparisons, worked examples, flashcards, role-play dialogues and more.
  • Grading that checks the answer — multiple choice, multi-select and cloze questions are graded deterministically, essays and projects against a rubric generated in the same call as the question, and code by running it.
  • Code exercises in the browser — CodeMirror 6 editors, with learner code run in a sandboxed Web Worker under a hard timeout.
  • A schedule that survives a bad week — the graph is topologically ordered into calendar sessions and re-compacted when a session is skipped, so a missed day shifts the plan instead of breaking it. A Today screen shows what is due.
  • Your own material, actually used — uploaded PDFs and notes are retrieved with PostgreSQL full-text search, configured without language-specific stemming because courses come in many languages, to ground lessons in the learner's syllabus.
  • Edit, rewrite, restore — every lesson change is a version with word-level diffs and one-click restore; "Rewrite with AI" rewrites a single block on instruction, and removing a quiz retires its questions instead of deleting learners' attempts.
  • Private markup — highlights, notes, pen, text labels and whiteboards, plus reading settings that follow the learner across devices.
  • Web, mobile and Telegram — the same app runs on the web, as Capacitor-based Android and iOS builds, and as a Telegram Mini App with silent sign-in.
  • Organizations from day one — every account is an organization, so a solo learner and a school with many seats share one model.

Architecture and tech stack

Backend and generation pipeline

The API is Laravel 13 on PHP 8.3, with PostgreSQL as the only supported database; it also backs the queue and cache. Around 20 route groups cover courses, generation, assessments, scheduling, materials, search, imagery, audio, speech, billing, organizations and Telegram auth, with Sanctum for tokens and 164 backend tests.

The design rule is that every expensive operation runs on the queue and is idempotent. A single LlmClient class generates all text: it renders a JSON Schema into the prompt, validates the reply, feeds validation errors back as a corrective turn, retries, and writes a generation_runs row with real token counts and cost on every call, success or failure. Versioned prompt classes and queued jobs sit on top: ClarifyIntentJob → GenerateOutlineJob → ExpandCourseJob → a batch of ExpandNodeJob. The expensive model tier writes only the outline, because structure is the part worth paying for; a cheaper tier expands lessons, regenerates and grades. GraphBuilder drops back-edges to keep the outline acyclic and assigns each node a layer by longest path, which drives the roadmap layout. Progress streams to the browser over Server-Sent Events, with no WebSocket server to run.

Text generation runs through OpenRouter on DeepSeek V4 models, and switching to DeepSeek's own API is a single environment variable. Measured during development, a 12–20 node outline took 3–6 minutes and about $0.03, and each expanded lesson roughly one cent, which is why expansion is per lesson and opt-in. AI illustrations are capped per course and by a weekly budget, so the feature falls back to alt text instead of failing mid-lesson.

Frontend and mobile

The frontend is Nuxt 4 with Vue 3.5 and Tailwind CSS v4, plus CodeMirror 6, Mermaid for diagrams and perfect-freehand for ink. The course graph is hand-rolled SVG with bezier connectors laid out from server-computed layers. Capacitor 8 wraps the same codebase for Android and iOS.

Billing

Paddle is the primary merchant of record, with Stripe still integrated behind a provider-neutral billing layer. Allowances meter written lessons and illustrations separately.

SEO and discoverability

Every public course lives at a readable URL and carries schema.org/Course structured data. A dedicated course sitemap, a shared usePageSeo composable for canonical, Open Graph and Twitter tags, and IndexNow pings on publish help new courses get found. Comparison and guide pages ("vs. ChatGPT", "vs. Coursera & Udemy", "For teams & schools") answer the questions people ask before choosing a learning tool.

Localization

Generated content is language-agnostic: clarifying questions, lessons, rubrics and grading feedback come back in the course language, and we verified the full flow end to end in Uzbek. The interface itself is in English for now.

Our role

BiliMind is our own product. We designed and built it end to end, from product definition and UX to the Laravel API, the generation pipeline, the Nuxt frontend, mobile builds, billing and the Telegram Mini App, and we continue to develop and operate it.

BiliMind brings together our AI integration and automation, web app development and mobile app development work. Its Telegram entry point has its own write-up: BiliMind Telegram Mini App. For another in-house product, see Bronjoy, our appointment booking marketplace for Uzbekistan.

Video Demo

Product Walkthrough

Let's Build

Want something like BiliMind?

Tell us what your product needs to do. We'll shape the scope, map a timeline and send a fixed price — free, and with no obligation to proceed.

Free consultation No commitment Fast reply