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.
Related work
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.



