Typer is an open-source, interactive typing platform designed specifically for programmers. Whether you're a seasoned developer looking to increase your typing speed or a beginner wanting to familiarize yourself with the syntax of a new language, Typer provides a hands-on environment to practice coding through muscle memory.
Typer is built on the belief that education and the tools to achieve it should be free, open, and accessible to everyone. In the spirit of the AGPL-3.0 license, this project encourages collaboration, transparency, and the collective improvement of our learning tools. Anyone is welcome to contribute, modify, and host their own version to help the community grow.
- Real Code Context: Practice with actual snippets from popular languages (Go, TypeScript, etc.) instead of random words.
- Language Immersion: Learn syntax and common patterns as you type.
- Gamified Experience: Track your progress with lives, streaks, and completion badges.
- Privacy First: Your progress is yours. Host it locally or on your own server.
- Multi-language Support: Built-in i18n support for English and Spanish speakers.
- Frontend: Angular 19 (Standalone Components, Signals, SCSS)
- Backend: Go (Chi Router, JWT Auth)
- Database: PostgreSQL (with automated schema migration)
- Infrastructure: Docker & Podman Compose (Ready for Development and Production)
- Podman/Docker and Compose installed on your machine.
make(optional, but recommended).
The project includes a Makefile to simplify environment management:
- Development (Hot-reload, local ports):
make dev
- Production (Optimized builds, Nginx, PostgreSQL):
make prod
- Stop everything:
make down
- Clone the repository and navigate to the folder.
- For Development:
podman compose --env-file .env.dev up --build
- For Production:
cp .env.prod.example .env.prod # Fill in your secrets! podman compose -f docker-compose.prod.yml --env-file .env.prod up -d
- Frontend:
http://localhost:4200(Dev) /http://localhost:80(Prod) - API:
http://localhost:8080/api/v1
apps/api-go/: Backend service built with Go.apps/web-angular/: Frontend application built with Angular 19.content/: JSON-based lesson files categorized by programming language.packages/lesson-schema/: Shared schema definition for lessons.docker/: Dockerfiles and Nginx configurations.
We welcome contributions from everyone! Whether it's adding new lessons, fixing bugs, or suggesting features:
- Fork the project.
- Create your feature branch (
git checkout -b feature/AmazingFeature). - Commit your changes (
git commit -m 'Add some AmazingFeature'). - Push to the branch (
git push origin feature/AmazingFeature). - Open a Pull Request.
Distributed under the GNU Affero General Public License v3.0. See LICENSE for more information.
Code is a craft. Practice it.