Education

Building my own Duolingo — A Low-Code Language Learning System Designed Around My Exact Needs

Building my own Duolingo — A Low-Code Language Learning System Designed Around My Exact Needs

My role

Product Owner: Dam Khanh Hoang

Product Builder: Dam Khanh Hoang

Overview

TL;DR: After hitting the ceiling of Duolingo's Chinese learning path, I designed and built my own personalized language learning system using low-code automation tools — inheriting Duolingo's best learning principles while solving the exact limitations I experienced as a real user.

Table of content

Background

From User to Builder

Three years ago, I started learning Mandarin Chinese from scratch. Like millions of language learners, my first stop was Duolingo.

I genuinely loved it — and for good reason. Two things stood out:

  1. Spaced Repetition: Duolingo's core learning engine schedules reviews at increasing intervals (e.g., after 1 day → 3 days → 1 week → 1 month). This exploits how the brain works: by re-exposing you to information right before you're about to forget it, knowledge gets consolidated from short-term to long-term memory far more efficiently than cramming.

  1. Adaptive Difficulty: Lesson difficulty adjusted to my pace and performance, which kept me in the "flow zone" — challenging enough to progress, but not overwhelming enough to quit.

The result? Within about 1 year of 10–20 minutes of daily learning, I had completed Duolingo's entire Mandarin Chinese curriculum.

Problem Statement

When a Great Product Runs Out of Road

Reaching the top of Duolingo felt like a win. But it quickly revealed a hard ceiling that no amount of engagement could fix:

Pain Point

Root Cause

No new vocabulary or grammar to learn

Fixed, predefined curriculum; no user-generated content

Couldn't practice writing, listening (in-depth), or reading

Learning methods locked to limited learning formats

Subscription cost becoming a barrier

Gated features behind a paid tier, with diminishing returns at advanced level

The core issue wasn't that Duolingo was bad — it was that Duolingo was built for the masses, not for me. Its curriculum was designed for beginners reaching conversational proficiency, not for someone who'd already cleared its content and wanted to go further.

As an advanced learner, I had three unmet needs:

  • Custom vocabulary: Learn the words I encounter in real life, not a fixed word list

  • Multi-modal practice: Writing characters, listening to native content, constructing sentences — not just tapping multiple choice

  • Cost efficiency: A system I control, without recurring subscription fees for a product I'd outgrown

I accepted that I couldn't change Duolingo. So I decided to build my own.

Product Thinking

Defining the Right Scope

Before touching any tools, I ran a quick self-discovery exercise as both the product owner and the sole user:

Jobs-To-Be-Done

  • "When I encounter a new word in a Chinese article or show, I want to save it quickly and have it automatically reviewed later."

  • "When I want to practice writing Hanzi, I want a frictionless way to generate practice sheets without manually picking characters."

  • "When I consume content on YouTube, I want to turn passive watching into active listening practice."

Design Principles I Set

  1. Inherit what works — Keep spaced repetition and adaptive review from Duolingo's proven model

  2. Break the content ceiling — Users define their own learning material, no more fixed curricula

  3. Multi-modal by default — Practice must extend beyond multiple choice

  4. Low friction above all — The system must fit into daily habits, not create new ones

Scope Decision:

Rather than rebuilding a full app from the ground up, I made a deliberate call to use existing interfaces and automation tools. This let me ship a working MVP in weeks — not months — and focus my energy on the learning logic rather than UI infrastructure.

Tech Stack Decisions

Choosing the Right Tools for the Right Reasons

Every technology choice was a conscious product decision, not a default:

Layer

Tool

Rationale

User Interface

Telegram

Personal-scale app; Telegram's bot API provides a familiar, zero-install chat interface. No need to build a UI from scratch.

Automation & Logic

n8n

Flexible enough to connect all third-party services (Notion, AI APIs, YouTube), and low-code enough to allow rapid iteration without engineering resources.

Data Storage

Notion

Highly customizable data structure, easy to inspect and modify manually, and perfectly stable for personal-scale data volumes.

AI Layer

LLM API

Powers vocabulary explanation, sentence grading, listening question generation, and personalized feedback.

This stack reflects a key product mindset that I apply: use boring, reliable technology for infrastructure, so you can spend creativity on the actual product experience.

Feature Design

Feature 1 — Add Vocabulary

The Duolingo way: You learn a pre-packaged word list. You have no say in what you study.

My approach: You add any word you want, at any time, via Telegram. The system then uses AI to generate a rich, personalized explanation — including definition, example sentences, tone/context notes, and mnemonics — formatted in whatever style the user prefers.

In my case, I configured the AI to explain vocabulary in a casual, playful tone — similar to Duolingo's mascot personality — because I learn better when I'm entertained.

Why this matters from a PM lens:

  • Removes the curriculum ceiling entirely — any word at any proficiency level is valid

  • Personalized explanation style increases retention and engagement

  • Ultra-low friction: one message to Telegram is all it takes

Feature 2 — Spaced Repetition Review (Enhanced)

The Duolingo way: Mark a word as "learned" by answering a multiple-choice question correctly. That's the only signal the system uses.

My approach: The daily review engine pulls vocabulary from the Notion database based on spaced repetition intervals. But instead of only multiple choice, it supports three review modes:

  1. Sentence Construction

Each day, the system prompts: "Use [word] in a sentence." The user replies in Chinese. The AI then:

  • Grades the sentence for grammar accuracy and naturalness

  • Rewrites it to sound more native

  • Explains what was corrected and why

This forces active recall and production, two of the most effective learning mechanisms in language acquisition research.

  1. Hanzi Writing Practice

The system auto-generates a formatted vocabulary worksheet based on a pre-built template. The user opens it on their iPad in a drawing app and traces/writes the characters by hand.

Handwriting Hanzi is proven to dramatically strengthen character memorization through motor memory.

  1. Traditional Multiple Choice (inherited from Duolingo)

Still available as a quick daily check-in, requiring minimal cognitive load.

Why this matters from a PM lens:
This feature expansion came directly from watching myself use Duolingo for a year. I identified the gap: the system only validated recognition, not production. Adding sentence construction and writing shifts the product from passive to active learning — a meaningful capability upgrade with high retention impact.

Feature 3 — AI-Powered Listening Practice

The gap I identified: There's almost no product that turns your own content into structured listening exercises. You either listen passively (YouTube) or do generic listening drills (textbooks). Neither worked for me.

My approach: I built a pipeline where I add YouTube videos I'm already interested in to a playlist. Each day, the system:

  1. Fetches the transcript of a queued video

  2. Converts the relevant segment into a Chinese audio file (TTS)

  3. Auto-generates multiple-choice comprehension questions — modeled after the format of standardized Chinese language certification exams (HSK)

  4. Delivers the audio + questions to me via Telegram

  5. After I answer, provides a full explanation of correct and incorrect options

The result: Passive content I would have watched anyway becomes a structured daily listening drill — zero additional content curation needed from me.

Why this matters from a PM lens:
This feature demonstrates a core product instinct: reduce the marginal effort required to engage with a feature. By plugging into content I'm already consuming (YouTube), I eliminated the "what should I study today?" decision fatigue entirely.

Reflections

What This Project Taught Me About Product Work

Building this system as both the PM and the user gave me an unusually honest feedback loop. A few learnings that shaped how I think about product:

1. Being the user is a superpower — and a blind spot.

I could test in real conditions, feel friction immediately, and iterate fast. But I also had to consciously check myself: "Is this a me problem, or a broader user problem?" That question is the dividing line between a personal project and a scalable product.

2. Constraints accelerate good decisions.

No engineering team, no budget, no timeline. These constraints forced me to cut scope ruthlessly and prioritize impact per unit of effort. Every feature had to justify itself against: "Is this worth the automation complexity?"

3. Low-code isn't a limitation — it's a product prototyping advantage.

By the time most teams would have finished requirements documentation, I had a working system I was actually learning Chinese with. The speed of low-code prototyping makes validation cycles dramatically faster.

4. Automation is a PM leverage multiplier.

Understanding how to wire together APIs, data pipelines, and AI without writing code changes what a PM can independently validate. I didn't need to wait for an engineer to test whether AI-generated sentence feedback was actually useful — I just built it and found out.

What's Next

This is a living system. Features I'm actively experimenting with:

  • Reading comprehension pipeline — Auto-extract articles from RSS feeds, highlight unknown words, and push to vocabulary review

  • Tone & pronunciation feedback — Use speech recognition APIs to evaluate Mandarin tones and give corrective feedback

  • Multi-user expansion — Onboarding a larger group of friends and colleagues to validate whether the system's personalization model generalizes beyond my own usage patterns

  • Commercialization hypothesis — If the multi-user pilot shows strong retention, explore whether this could become a lightweight SaaS product for advanced language learners who've "graduated" from Duolingo

Closing Thought

I started this project as a user who had hit a wall with the tools available to them. What I built wasn't just a language learning app — it was a proof of concept for a bigger idea:

When you combine product thinking with automation fluency, you can go from identifying a user problem to having a working solution in your hands — without waiting for anyone else.

That's the kind of speed and ownership I want to bring to every product I work on.

Note

This case study is part of a series exploring the intersection of product thinking and low-code automation. The application described here also serves as hands-on workshop material for the Automation Foundation course that I teach at UX Foundation.

Background

From User to Builder

Three years ago, I started learning Mandarin Chinese from scratch. Like millions of language learners, my first stop was Duolingo.

I genuinely loved it — and for good reason. Two things stood out:

  1. Spaced Repetition: Duolingo's core learning engine schedules reviews at increasing intervals (e.g., after 1 day → 3 days → 1 week → 1 month). This exploits how the brain works: by re-exposing you to information right before you're about to forget it, knowledge gets consolidated from short-term to long-term memory far more efficiently than cramming.

  1. Adaptive Difficulty: Lesson difficulty adjusted to my pace and performance, which kept me in the "flow zone" — challenging enough to progress, but not overwhelming enough to quit.

The result? Within about 1 year of 10–20 minutes of daily learning, I had completed Duolingo's entire Mandarin Chinese curriculum.

Problem Statement

When a Great Product Runs Out of Road

Reaching the top of Duolingo felt like a win. But it quickly revealed a hard ceiling that no amount of engagement could fix:

Pain Point

Root Cause

No new vocabulary or grammar to learn

Fixed, predefined curriculum; no user-generated content

Couldn't practice writing, listening (in-depth), or reading

Learning methods locked to limited learning formats

Subscription cost becoming a barrier

Gated features behind a paid tier, with diminishing returns at advanced level

The core issue wasn't that Duolingo was bad — it was that Duolingo was built for the masses, not for me. Its curriculum was designed for beginners reaching conversational proficiency, not for someone who'd already cleared its content and wanted to go further.

As an advanced learner, I had three unmet needs:

  • Custom vocabulary: Learn the words I encounter in real life, not a fixed word list

  • Multi-modal practice: Writing characters, listening to native content, constructing sentences — not just tapping multiple choice

  • Cost efficiency: A system I control, without recurring subscription fees for a product I'd outgrown

I accepted that I couldn't change Duolingo. So I decided to build my own.

Product Thinking

Defining the Right Scope

Before touching any tools, I ran a quick self-discovery exercise as both the product owner and the sole user:

Jobs-To-Be-Done

  • "When I encounter a new word in a Chinese article or show, I want to save it quickly and have it automatically reviewed later."

  • "When I want to practice writing Hanzi, I want a frictionless way to generate practice sheets without manually picking characters."

  • "When I consume content on YouTube, I want to turn passive watching into active listening practice."

Design Principles I Set

  1. Inherit what works — Keep spaced repetition and adaptive review from Duolingo's proven model

  2. Break the content ceiling — Users define their own learning material, no more fixed curricula

  3. Multi-modal by default — Practice must extend beyond multiple choice

  4. Low friction above all — The system must fit into daily habits, not create new ones

Scope Decision:

Rather than rebuilding a full app from the ground up, I made a deliberate call to use existing interfaces and automation tools. This let me ship a working MVP in weeks — not months — and focus my energy on the learning logic rather than UI infrastructure.

Tech Stack Decisions

Choosing the Right Tools for the Right Reasons

Every technology choice was a conscious product decision, not a default:

Layer

Tool

Rationale

User Interface

Telegram

Personal-scale app; Telegram's bot API provides a familiar, zero-install chat interface. No need to build a UI from scratch.

Automation & Logic

n8n

Flexible enough to connect all third-party services (Notion, AI APIs, YouTube), and low-code enough to allow rapid iteration without engineering resources.

Data Storage

Notion

Highly customizable data structure, easy to inspect and modify manually, and perfectly stable for personal-scale data volumes.

AI Layer

LLM API

Powers vocabulary explanation, sentence grading, listening question generation, and personalized feedback.

This stack reflects a key product mindset that I apply: use boring, reliable technology for infrastructure, so you can spend creativity on the actual product experience.

Feature Design

Feature 1 — Add Vocabulary

The Duolingo way: You learn a pre-packaged word list. You have no say in what you study.

My approach: You add any word you want, at any time, via Telegram. The system then uses AI to generate a rich, personalized explanation — including definition, example sentences, tone/context notes, and mnemonics — formatted in whatever style the user prefers.

In my case, I configured the AI to explain vocabulary in a casual, playful tone — similar to Duolingo's mascot personality — because I learn better when I'm entertained.

Why this matters from a PM lens:

  • Removes the curriculum ceiling entirely — any word at any proficiency level is valid

  • Personalized explanation style increases retention and engagement

  • Ultra-low friction: one message to Telegram is all it takes

Feature 2 — Spaced Repetition Review (Enhanced)

The Duolingo way: Mark a word as "learned" by answering a multiple-choice question correctly. That's the only signal the system uses.

My approach: The daily review engine pulls vocabulary from the Notion database based on spaced repetition intervals. But instead of only multiple choice, it supports three review modes:

  1. Sentence Construction

Each day, the system prompts: "Use [word] in a sentence." The user replies in Chinese. The AI then:

  • Grades the sentence for grammar accuracy and naturalness

  • Rewrites it to sound more native

  • Explains what was corrected and why

This forces active recall and production, two of the most effective learning mechanisms in language acquisition research.

  1. Hanzi Writing Practice

The system auto-generates a formatted vocabulary worksheet based on a pre-built template. The user opens it on their iPad in a drawing app and traces/writes the characters by hand.

Handwriting Hanzi is proven to dramatically strengthen character memorization through motor memory.

  1. Traditional Multiple Choice (inherited from Duolingo)

Still available as a quick daily check-in, requiring minimal cognitive load.

Why this matters from a PM lens:
This feature expansion came directly from watching myself use Duolingo for a year. I identified the gap: the system only validated recognition, not production. Adding sentence construction and writing shifts the product from passive to active learning — a meaningful capability upgrade with high retention impact.

Feature 3 — AI-Powered Listening Practice

The gap I identified: There's almost no product that turns your own content into structured listening exercises. You either listen passively (YouTube) or do generic listening drills (textbooks). Neither worked for me.

My approach: I built a pipeline where I add YouTube videos I'm already interested in to a playlist. Each day, the system:

  1. Fetches the transcript of a queued video

  2. Converts the relevant segment into a Chinese audio file (TTS)

  3. Auto-generates multiple-choice comprehension questions — modeled after the format of standardized Chinese language certification exams (HSK)

  4. Delivers the audio + questions to me via Telegram

  5. After I answer, provides a full explanation of correct and incorrect options

The result: Passive content I would have watched anyway becomes a structured daily listening drill — zero additional content curation needed from me.

Why this matters from a PM lens:
This feature demonstrates a core product instinct: reduce the marginal effort required to engage with a feature. By plugging into content I'm already consuming (YouTube), I eliminated the "what should I study today?" decision fatigue entirely.

Reflections

What This Project Taught Me About Product Work

Building this system as both the PM and the user gave me an unusually honest feedback loop. A few learnings that shaped how I think about product:

1. Being the user is a superpower — and a blind spot.

I could test in real conditions, feel friction immediately, and iterate fast. But I also had to consciously check myself: "Is this a me problem, or a broader user problem?" That question is the dividing line between a personal project and a scalable product.

2. Constraints accelerate good decisions.

No engineering team, no budget, no timeline. These constraints forced me to cut scope ruthlessly and prioritize impact per unit of effort. Every feature had to justify itself against: "Is this worth the automation complexity?"

3. Low-code isn't a limitation — it's a product prototyping advantage.

By the time most teams would have finished requirements documentation, I had a working system I was actually learning Chinese with. The speed of low-code prototyping makes validation cycles dramatically faster.

4. Automation is a PM leverage multiplier.

Understanding how to wire together APIs, data pipelines, and AI without writing code changes what a PM can independently validate. I didn't need to wait for an engineer to test whether AI-generated sentence feedback was actually useful — I just built it and found out.

What's Next

This is a living system. Features I'm actively experimenting with:

  • Reading comprehension pipeline — Auto-extract articles from RSS feeds, highlight unknown words, and push to vocabulary review

  • Tone & pronunciation feedback — Use speech recognition APIs to evaluate Mandarin tones and give corrective feedback

  • Multi-user expansion — Onboarding a larger group of friends and colleagues to validate whether the system's personalization model generalizes beyond my own usage patterns

  • Commercialization hypothesis — If the multi-user pilot shows strong retention, explore whether this could become a lightweight SaaS product for advanced language learners who've "graduated" from Duolingo

Closing Thought

I started this project as a user who had hit a wall with the tools available to them. What I built wasn't just a language learning app — it was a proof of concept for a bigger idea:

When you combine product thinking with automation fluency, you can go from identifying a user problem to having a working solution in your hands — without waiting for anyone else.

That's the kind of speed and ownership I want to bring to every product I work on.

Note

This case study is part of a series exploring the intersection of product thinking and low-code automation. The application described here also serves as hands-on workshop material for the Automation Foundation course that I teach at UX Foundation.