Why I built henfs

I am an elementary-school teacher in Germany, not a trained software developer.

A few months ago, some children in my class almost begged me to let them use the school iPads during Math lessons. After one particularly successful lesson, I promised them that I would find a way to use the devices more often.

The hardware was already there. What I was missing was software that matched the way I wanted the children to practice: focused but fun exercises, simple layouts, no advertising, fully functional including individual accounts but no unnecessary distractions.

I first used regular ChatGPT to help me create a few basic HTML exercises. They were small and simple, but the children could immediately use them in class. Over time, those individual pages became a small collection of learning games.

Later, working with Codex changed what was possible at that time. I could describe a classroom problem through speech-to-text, discuss possible solutions, test them, reject ideas that did not work for children, and gradually turn the old collection into a real learning platform.

The platform itself already existed before OpenAI Build Week. I am not submitting the whole history of henfs as one week of work. My submission focuses only on the additions made during the official submission period.

What henfs does

henfs is a free to use and advertising-free learning platform especially for primary-school children.

Children can play Math, German, logic, and skill-based learning games as guests or with their own accounts. With an account, their progress, XP, highscores, game states, and learning statistics can be saved.

Teachers can create and manage classes, generate simple login options for children, decide which games are visible to a class, and review learning progress. The interface works on school tablets, desktop computers, and phones.

This is important to me because henfs is not an abstract software idea. I want to use it in real lessons. A teacher should be able to select a relevant exercise, let the children practice for a few minutes, and then understand where individual children still need support.

What I added during OpenAI Build Week

During the official Build Week submission period, I focused on three major improvements to henfs.

  • Teacher diagnostics: A new workflow that allows teachers to inspect individual children's learning progress and analyze the actual mistakes they made instead of relying only on summary statistics.

  • Data minimisation and reliable synchronisation: A redesigned backend workflow that stores only the data needed for diagnostics and validation while making learning progress resilient to unstable school Wi-Fi.

  • Complete English interface: The platform received a full English interface while intentionally keeping German-language learning games unavailable in English mode where a translation would no longer make educational sense.

In addition, four new learning games were implemented during the submission period: Article Practice, Word Search, Stickman Labyrinth, and Units (which is still work in progress). Other work included improvements to continuation states, highscores, progression, direct game links, and several existing games.

Teacher diagnostics

The new teacher diagnostics workflow was designed to make the collected learning data genuinely useful in everyday teaching.

Teachers can move directly from a class overview into an individual child's profile while keeping the selected game as context. Instead of only seeing totals or percentages, they can inspect performance across different modes and difficulty levels and, for supported Math and German activities, review the actual tasks a child answered incorrectly together with the submitted answers. This makes it much easier to recognise patterns and understand where individual children still need support.

Access to this information is checked on the server for every request. An adult account alone is not sufficient. The requesting teacher must currently be assigned to the relevant class, and the child must still be an active member of that class and school.

The judging accounts contain synthetic demonstration data for four fictional children with deliberately different learning profiles. No real children's data is included in the submission.

Data minimisation and unreliable school networks

One goal during Build Week was to make henfs more reliable in real classroom conditions while storing only the information that is actually needed.

School Wi-Fi is often unstable. Children may continue playing while the connection briefly disappears and returns. To avoid losing learning progress, the browser now maintains a durable local queue for learning attempts and playtime. Recoverable requests are retried automatically once a connection becomes available again instead of silently failing.

At the same time, the stored data was reduced wherever possible. Routine correct answers can be represented much more compactly, while detailed wrong answers remain available for teacher diagnostics and the information required for validated highscores is preserved. Teacher dashboards only load live data when it is actually needed, since they are typically used outside the classroom on reliable connections. Payload sizes, batches, retained state, and diagnostic queries are also bounded so the backend does not perform unnecessary work and can continue to scale efficiently.

This approach reflects two realities of everyday school life: internet connections are not always reliable, and children's learning data should be handled as carefully as possible.

English interface

With GPT 5.6 Sol Ultra I was able to create an English Interface for many parts of the Website in just 2 hours.

The selected language is applied consistently across the public website, authentication, account management, teacher and administrator areas, child profiles, navigation, statistics, and all language-independent games. German remains the default and fallback language.

German-language learning games required a different approach. Simply translating their interface would not turn German vocabulary, article, reading, or spelling exercises into meaningful English learning activities. Those games are therefore identified centrally and remain unavailable in English mode, including when someone opens a direct URL. Instead of pretending that these activities work in another language, the platform makes it clear that they are currently available only in German.

The result is an English version that behaves consistently across the entire platform while preserving the educational purpose of every individual game.

How I used Codex and GPT-5.6

GPT-5.6 was used as the model inside of Codex. henfs does not call an OpenAI model while children or teachers use the platform.

Codex also helped me maintain project documentation and hand-off notes. This allowed later Codex threads to understand the platform structure, technical contracts, and earlier decisions much more quickly.

My normal workflow began with a classroom observation or a feature idea. I often described it through speech-to-text, including what I wanted the experience to feel like for a child or teacher. Codex then helped trace the existing code, propose an implementation, update React and TypeScript components, create database migrations and Supabase Edge Functions, and build automated checks.

The first result was not always the final result. I repeatedly tested features, compared them with the classroom need, found unrealistic behaviour, and asked for revisions. This was especially important for game mechanics, touch controls, progression, generated demonstration data, teacher statistics, and privacy decisions as we are handling children data.

How henfs is built

The frontend uses React, TypeScript, and Vite. It is deployed through Cloudflare Pages.

Supabase provides authentication, PostgreSQL storage, Row Level Security, and server-side Edge Functions. Most games use React, CSS, and SVG. Phaser is loaded only for games that need a real-time 2D engine.

The repository also contains automated checks for games, internationalisation, diagnostics, synchronisation, sessions, XP, persistence, and highscores. The submitted source snapshot passes the complete test suite, TypeScript checking, and the production build.

The hardest parts

One challenge was being honest about an existing project. henfs has no complete Git history, and many important platform features predate Build Week. I therefore reconstructed the submission period from Codex task timestamps, deployments, migrations, documentation, and the current source instead of presenting the entire platform as new work.

Another challenge was making diagnostics useful without turning them into unnecessary surveillance. Teachers need enough detail to recognise a learning problem, but that does not mean every interaction needs to be stored forever.

What I learned

The biggest lesson for me is that Codex works best as a partner in an ongoing process, not as a button that produces a finished product. Also that you can learn a lot along the way with Codex if you instruct it to explain what it does and carefully document the ongoing progress and tasks it does.

But the human factor is still extremely relevant. I needed to understand the classroom problem, describe it precisely, test the result, notice when something feels wrong, and make the final decision. The better I can explain the real situation and describe what we could change in the existing codes through Codex own documentations, the more useful the technical result became.

As a teacher, I can now turn observations from everyday lessons into working software. That does not make me a traditional software developer, but it gives me a way to build tools that previously would have remained ideas, unfulfilled wishes or extremely expensive third party tools.

What comes next

I want to continue improving accessibility, security, performance, and the English experience. In the longer term, I would also like to package henfs for iOS and Android.

At the moment, henfs is used by me, colleagues at my school, and a small number of teachers at nearby schools who have shown interest in the platform. I want to make it available to more schools once I am confident that it is ready for broader use.

Built With

Share this project:

Updates