Inspiration

JPLearn began with a frustration I had with many existing Japanese-learning apps. They can feel repetitive, overly dependent on subscriptions, or focused on isolated vocabulary without giving learners a clear sense of long-term progression.

For OpenAI Build Week, I wanted to create a desktop-first learning experience that combined structured study, short interactive minigames, local progress tracking, and an optional AI tutor.

My goal was to build the kind of Japanese-learning application I would want to use myself: focused, visually engaging, private, and useful even without a constant internet connection.

What it does

JPLearn is an offline-first desktop application for studying hiragana, katakana, kanji, vocabulary, and Japanese conversation.

Learners can practise through several minigame formats, including:

  • Converting romaji into Japanese
  • Reading Japanese and entering the romaji
  • Selecting the correct answer from multiple choices
  • Matching kanji with their meanings
  • Playing mixed sessions that combine different question types

JPLearn uses spaced repetition and active recall to track how well the learner understands each item. Difficult material can appear more frequently, while familiar material is reviewed at increasingly longer intervals.

The app also includes daily study plans, mastery tracking, study history, streaks, experience points, progression systems, and statistics that help learners identify weaker areas.

JPLearn also features an optional AI tutor. During setup, or later through the settings page, users can download a supported AI model. Once installed, the tutor can speak directly to the learner, answer questions, explain Japanese concepts, and provide additional guidance from within the app.

Because learning data and downloaded AI models are stored locally, the application is designed to remain private and usable offline.

How I built it

I built JPLearn by myself over almost three weeks for OpenAI Build Week.

The application uses Electron, React, TypeScript, Python, and SQLite.

The interface was built with React and TypeScript inside Electron, providing a responsive desktop experience with strongly typed frontend code. Python handles the learning systems, content processing, progression logic, and persistence, while SQLite stores progress locally.

I separated the application into three main architectural layers:

  • A domain layer containing deterministic learning logic, spaced repetition, progression rules, scoring, and mastery calculations
  • A data layer responsible for SQLite repositories and translating stored rows into domain models
  • An Electron frontend responsible for presentation, interaction, animation, and communication with the Python backend

The frontend and backend communicate through typed IPC contracts. This prevents learning logic from becoming embedded in the interface and makes individual systems easier to test and extend.

I also created development tools for architecture validation, database checks, static type checking, linting, and automated testing.

Technologies used throughout the project include Electron, React, TypeScript, Python 3.11, SQLite, Tailwind CSS, Radix UI, Vitest, Pytest, Mypy, Ruff, Oxlint, and local language models for the tutor.

Challenges I ran into

One of the largest challenges was managing the project’s scope. JPLearn grew rapidly from a set of study minigames into a larger learning platform with progression, persistence, daily activities, statistics, and an AI tutor.

Because I was building the project alone within almost three weeks, I had to continuously prioritise which systems were essential for the submitted build and which ideas should remain future work.

Another challenge was keeping the architecture manageable as more features were introduced. Progression rules, scoring, database operations, tutor functionality, and interface behaviour could easily have become tightly coupled. I addressed this by enforcing strict boundaries between the domain, data, and frontend layers.

Designing the progression system was also difficult. A fully linear course can frustrate experienced learners, while a completely open application can leave beginners unsure of what to study. I worked towards a hybrid approach that provides clear recommendations and progression goals without preventing learners from revisiting or exploring other content.

Integrating a local AI tutor presented additional challenges. The application needed to support different hardware capabilities, handle model downloads and setup clearly, and provide useful tutor interactions without making the rest of the application dependent on AI availability.

I also had to manage large learning datasets efficiently. Some early approaches generated thousands of individual data assets, which affected build performance and maintainability. This required reconsidering how learning content was generated, packaged, and loaded.

Accomplishments that I’m proud of

I am proud that I was able to build JPLearn alone in almost three weeks while still establishing a technical foundation that can support continued development.

JPLearn is more than a basic flashcard application. It combines multiple types of Japanese study, adaptive review, local progress tracking, daily study guidance, progression systems, statistics, and an optional downloadable AI tutor within one consistent desktop experience.

I am especially proud of the local tutor integration. Rather than requiring every user to rely on a hosted service, JPLearn allows learners to download an AI model through the setup process or settings page and speak with the tutor directly from the application.

I am also proud of the project’s architecture. Its core learning systems are deterministic, testable, and separated from the interface. This makes it much easier to introduce new content, minigames, tutor abilities, and progression systems without rebuilding the application from scratch.

Most importantly, JPLearn became the type of learning tool I originally wanted to create: private, offline-friendly, visually distinctive, and respectful of the learner’s time.

What I learned

Building JPLearn taught me that educational software involves much more than presenting correct information.

A learning application must decide when material should appear, how mistakes affect future sessions, how mastery should be measured, and how learners can remain motivated over a long period.

I learned the value of keeping learning logic separate from interface code. Making spaced repetition, scoring, mastery, and progression systems deterministic allowed me to test them independently and change them with greater confidence.

I also learned how difficult it is to design for learners with different levels of experience. Beginners benefit from guidance and clear goals, while more experienced learners need freedom and control. Supporting both required me to reconsider several early ideas about linear progression and locked content.

Developing the tutor taught me about the practical challenges of running AI locally. Model size, response quality, memory requirements, setup experience, and hardware compatibility all affect whether a local AI feature is genuinely useful.

On the technical side, I gained experience integrating an Electron and React frontend with a Python backend, designing typed IPC contracts, managing local SQLite data, packaging large learning datasets, and maintaining clear architectural boundaries across a quickly growing codebase.

What’s next for JPLearn

The next stage of JPLearn is to expand both its learning content and the capabilities of its tutor.

I plan to add listening and pronunciation exercises, more conversation-focused activities, deeper kanji and vocabulary coverage, achievements, unlockable customisation, and dedicated JLPT preparation from N5 through N1.

The AI tutor will also continue to evolve. Future versions could provide more detailed mistake explanations, generate contextual examples, create personalised practice sessions, and adapt its guidance based on the learner’s recent performance.

Other planned additions include downloadable offline dictionaries, improved learning analytics, more accessibility options, additional daily challenges, new minigames, and better tools for creating and maintaining learning content.

My long-term goal is for JPLearn to become a private, flexible, and enjoyable alternative to subscription-based language-learning platforms—one that can guide a complete beginner while continuing to support them as their Japanese improves.

Built With

Share this project:

Updates