A premium, animated coding tutor that takes you from your very first print()
all the way to Python bots, C++ engines and live servers β with a 2D robot
named Mochi who hovers over your mistakes and explains exactly what to fix.
Most coding apps stop at hello world. ChimCode is built for people who want to
build real things β Discord bots, HTTP servers, scrapers, systems code β and
who want a tutor that actually watches their code.
- π No server required. ChimCode runs entirely in your browser. The whole app, all 75 lessons and the achievement engine work offline; your account and progress save on your device. There is nothing to sign up for or pay for.
- π¨ A real vector icon set. Every icon is hand-drawn SVG that inherits its colour and scales crisply β no emoji standing in for design.
- π€ Mochi, a 2D animated robot tutor. A real canvas-rendered robot with a head, torso, robotic arms and legs. It hovers directly above your mistake with a speech bubble telling you what is wrong and what it should be instead.
- β¨ Transparent ghost text. When you are missing a piece of code, faint green text appears exactly where you need to type it. You finish the line yourself β Mochi never does the work for you.
- π£οΈ A bot voice. Mochi explains concepts out loud in a synthesized bot voice while the text appears on screen.
- π Super Days. Spend Books to unlock a whole day of only hard stuff. Mochi explains as many times as you need, opens a menu of "same idea, new shape" practice problems, and narrates a full line-by-line walkthrough while you retype it yourself.
- π 955 achievements across milestones, every language, lesson mastery, social play, your collection and Super Days.
- π₯ A real social layer. Custom accounts, profile pictures, bios, usernames, followers, friends, online/offline status and live progress.
- π Books currency. Earn Books by learning and spend them on avatars, profile effects, card overlays, themes, banners and Super Days.
- π A VIP interface. Glassmorphism, animated gradients, floating orbs, a premium dark theme and six unlockable themes.
- π± A native Android app. WebView shell with native Text-To-Speech for Mochi's voice, adaptive launcher icons and an in-app server setup screen.
A native Android app is included in android/. Everything is
bundled inside it, so it works immediately β no server, no internet, nothing
to set up.
Download the APK β chimcode-1.4.0-android.apk (signed, Android 7.0+). Open it, allow Install unknown apps, install.
Build it yourself:
python3 tools/export_static_data.py
cd android
echo "sdk.dir=$ANDROID_HOME" > local.properties
./gradlew assembleDebug # or assembleRelease for a signed buildRequires JDK 17+ and Android SDK platform 34. See android/README.md.
ChimCode is a static site. No server is needed β the app runs entirely in your browser and saves progress on your device.
git clone https://github.com/ChimeraAnt-DEV/ChimCode.git
cd ChimCode/frontend
python3 -m http.server 8080Then open http://localhost:8080. That is the whole setup. Any static file server works.
A Python server is included for shared accounts, a leaderboard across devices and a REST API. It is completely optional.
./run.shThen open http://localhost:12000. run.sh creates a virtual environment,
installs the dependencies, generates a secret key and starts the server.
- Click the green
< > Codebutton on GitHub. - Choose Download ZIP, then unzip it.
- Follow option 2 or 3 above.
The full icon set is generated and committed under
frontend/assets/icon/ β PNGs from 16px to 1024px plus
an SVG. Regenerate them any time with:
python frontend/assets/icon/make_icons.pyIt uses only the Python standard library, so no image tools are required.
| Language | Track highlights |
|---|---|
| π Python | Basics β classes, async, Discord bots, FastAPI servers, scraping, pytest |
| βοΈ C++ | Syntax, pointers, STL, memory & smart pointers, templates, TCP servers, profiling |
| π¨ JavaScript | Variables, arrays & methods, async/await, Node.js servers |
| π· TypeScript | Static types, interfaces, generics, unions |
| β Java | Classes, inheritance, collections, Spring Boot APIs |
| π― C# | Console apps, LINQ, async, Tasks |
| πΉ Go | Packages, goroutines & channels, net/http servers |
| π¦ Rust | Ownership & borrowing, Result/Option, error handling |
| ποΈ SQL | SELECT, filtering, joins and aggregation |
| π₯οΈ Bash | Scripts, loops, automation and pipes |
| π¨ HTML & CSS | Structure, styling, animations, responsive layout |
| πͺ Kotlin | Android development, null safety |
| ποΈ Swift | Apple platforms, optionals and guard |
| π R | Vectors, data frames, statistics |
| π PHP | Server-side web scripting |
| π Lua | Embeddable scripting, tables |
Every lesson includes theory, a worked example, a hands-on task, live mistake detection, a multiple-choice check, and most have a bonus challenge.
-
You type code. The editor analyses it as you go.
-
A mistake appears. Mochi pops up above that exact line:
'prnt' is not a python keyword. Did you mean 'print'?βprint -
Ghost text shows the fix. Faint green text marks where the missing piece goes, so you complete it yourself.
-
Run & check. You get a score, a checklist and a list of what Mochi found.
-
Ask Mochi anything. It answers in the dock, in text and out loud.
-
Watch Mochi build it. A full narrated walkthrough β you retype every line.
On a Super Day, step 6 becomes the main event: the bot explains endlessly, opens a menu of variations on the thing you are stuck on, and never writes the answer for you.
|
Learning
|
Account & social
|
|
Progression
|
Customisation
|
| Layer | Choice | Why |
|---|---|---|
| App | Vanilla JS + Canvas | No build step and no server; runs from a static file |
| Local backend | JavaScript + localStorage |
The whole API, offline, in the browser |
| Optional server | FastAPI + Uvicorn | Shared accounts and a REST API for multi-device use |
| Shared data | Generated JS | Curriculum, achievements and shop come from the server source |
| Database (server) | SQLite (stdlib) | Zero-config, file-based, easy to reset |
| Auth (server) | PBKDF2 + HMAC JWT (stdlib) | Secure hashing and tokens with no dependencies |
| Android | Kotlin + AndroidX WebView | Native shell with a Text-To-Speech bridge |
| Icons | stdlib PNG writer | Reproducible assets, no tooling required |
The curriculum, the 955-achievement engine and the shop live once in Python
(server/app/) and are exported to frontend/data/chimdata.js by
tools/export_static_data.py. The JavaScript engine and local backend read that
same data, so the offline app and the server can never drift apart.
The only third-party runtime dependencies are fastapi, uvicorn and
pydantic, and only if you run the optional server.
ChimCode/
βββ frontend/ # The whole app β runs with no server
β βββ index.html
β βββ styles.css # Glassmorphism, animations, six themes
β βββ app.js # Routing, lessons, shop, profiles, onboarding
β βββ api.js # Picks local or server backend automatically
β βββ local.js # The entire API in the browser (localStorage)
β βββ engine.js # Grading, mistake detection, ghost text, walkthroughs
β βββ icons.js # Hand-drawn SVG icon set (no emoji)
β βββ bot.js # Mochi: canvas robot + speech-synthesis voice
β βββ editor.js # Editor, mistake markers, ghost text, bot overlay
β βββ data/chimdata.js # Generated curriculum, achievements and shop
β βββ manifest.webmanifest
β βββ assets/icon/ # App icons 16β1024px, SVG, generator script
βββ server/ # Optional: shared accounts + REST API
β βββ app/
β β βββ main.py # FastAPI app and every API route
β β βββ database.py # SQLite schema and helpers
β β βββ security.py # PBKDF2 hashing + JWT
β β βββ engine.py # Python twin of frontend/engine.js
β β βββ achievements.py # The 955-achievement source of truth
β β βββ shop.py # Cosmetics catalogue (source of truth)
β β βββ curriculum/ # Lesson content (source of truth)
β βββ requirements.txt
βββ tools/
β βββ export_static_data.py # server/app/* -> frontend/data/chimdata.js
β βββ test_local_backend.js # Headless tests for the offline backend
βββ android/ # Native Android app (bundled, offline)
β βββ app/src/main/ # Activity, layout, manifest, launcher icons
β βββ tools/ # Launcher icon generator
β βββ gradlew # Gradle wrapper
βββ .github/workflows/ # CI that builds the APKs
βββ run.sh # Launches the optional server
βββ README.md
All optional β sensible defaults apply.
| Variable | Default | Purpose |
|---|---|---|
CHIMCODE_SECRET_KEY |
random per boot | Signing key for JWTs (set this in production) |
CHIMCODE_DATA_DIR |
server/data |
Where the SQLite database lives |
CHIMCODE_SUPERDAY_COST |
250 |
Books required to start a Super Day |
CHIMCODE_JWT_HOURS |
720 |
Session lifetime in hours |
HOST / PORT |
0.0.0.0 / 12000 |
Bind address for run.sh |
Click to expand the endpoints
| Method | Path | Description |
|---|---|---|
POST |
/api/auth/register |
Create an account |
POST |
/api/auth/login |
Log in, returns a token |
GET |
/api/me |
Current user |
POST |
/api/heartbeat |
Refresh online status |
GET |
/api/catalogue |
All languages |
GET |
/api/languages/{id} |
One language with lessons |
GET |
/api/lessons/{id} |
One lesson with checks |
POST |
/api/analyze |
Static analysis only (no rewards) |
POST |
/api/submit |
Grade a submission, award rewards |
POST |
/api/challenge |
Submit a challenge solution |
POST |
/api/quiz |
Answer a lesson quiz |
POST |
/api/bot/help |
Ask Mochi for help |
GET |
/api/bot/walkthrough/{id} |
Narrated walkthrough |
POST |
/api/superday/buy |
Activate a Super Day |
GET |
/api/progress |
Lesson progress and stats |
GET |
/api/achievements |
All achievements and earned state |
GET |
/api/shop |
Cosmetics catalogue + wallet |
POST |
/api/shop/buy/{id} |
Buy a cosmetic |
POST |
/api/shop/equip/{id} |
Equip a cosmetic |
POST |
/api/profile |
Update bio, avatar, privacy |
POST |
/api/username |
Change your username |
POST |
/api/onboarding |
Save onboarding answers |
GET |
/api/users |
Public profiles |
GET |
/api/users/{username} |
One profile with trophies |
POST |
/api/follow/{username} |
Follow / unfollow |
POST |
/api/friends/{username} |
Add / remove friend |
GET |
/api/leaderboard |
Top coders by XP |
GET |
/api/feed |
Live activity feed |
GET |
/api/health |
Health and content counts |
Interactive docs are available at /docs while the server runs.
The database is a single SQLite file. To start fresh:
rm -rf server/dataIt will be recreated on the next boot.
- Real code execution in a sandboxed runner
- Community-published lessons
- Mobile app wrapper (PWA install already works)
- More languages: Haskell, Scala, Elixir, Dart
Issues and pull requests are welcome. Please keep the frontend dependency-free and the backend on the standard library wherever practical.
Released under the MIT License.
ChimCode β because "hello world" was never the goal.