← Back to list

Language Learning · 10/29/2026

Vocab — English Practice

An English learning application with separate spaced-repetition schedules for words, phrases, and sentences, plus AI-assisted grammar practice. Built with TypeScript, Go, and PocketBase.

Vocab — English Practice

A daily learning tool, built around practice

Vocab is an account-based English learning application. It brings vocabulary, everyday phrases, example sentences, and grammar exercises into one interface. The goal is to make daily practice manageable while keeping learning decisions and progress on the server.

Learning modes and review scheduling

Word practice introduces five new words per day alongside reviews that are due. English-to-Turkish and Turkish-to-English have separate answer histories and review schedules: knowing a word in one direction does not automatically count as knowing it in the other. Incorrect answers bring words back sooner. Extra practice and hard-word sessions let the learner continue without changing the main learning records.

Phrase practice has its own allowance, history, and statistics, with a versioned starter catalog of 255 phrases. Sentence practice uses approved example pairs from studied words and keeps its progress separate. Known answers are checked on the server; an unmatched answer can be submitted for an explicit AI assessment instead of silently being marked correct.

Grammar practice offers 12 tense/aspect forms and rounds of 1–20 Turkish-to-English sentences. Questions are generated from studied vocabulary. The tense is hidden until assessment; feedback includes a reference answer and a rule reminder. A round can be resumed, and its results do not change word or phrase scores.

Architecture: a small frontend, server-owned rules

The frontend uses TypeScript, HTML/CSS, and Vite without a UI framework. It handles presentation, interaction, and English/Turkish translations. The Go backend extends PocketBase with custom APIs for practice sessions, answer evaluation, statistics, and AI requests. PocketBase stores account and learning data in SQLite, with private files and owner-scoped records.

A practice request retrieves the next eligible item. The learner submits an answer to the API; the server checks it and applies the relevant direction's learning rules. The UI then displays the saved result. Keeping this logic on the server avoids relying on a browser's local state as the source of truth across devices.

AI assistance with a deterministic core

Gemini provides optional meaning and example suggestions, sentence support, and grammar generation or assessment. A configured OpenRouter provider can act as a fallback. Provider keys remain on the server. Existing content and deterministic practice still work without an AI key; generation and optional assessment require an available provider and are subject to its limits.

Deployment, data, and limits

The frontend and backend are packaged with Docker and deployed through Dokploy behind Cloudflare. A persistent PocketBase volume holds the database and uploads across deployments. The project includes Go and frontend tests and build checks in CI.

The interface supports English and Turkish, light and dark themes, audio, private images, and daily statistics. Account requests require administrator approval. There is no offline answer queue or real-time synchronization between open devices. A one-time desktop JSON migration helps move an empty account from the earlier desktop application; it is not a general backup-import system.

The source code is available on GitHub. The application link opens the sign-in screen; access requires an approved account.

typescriptvitegopocketbasesqlitespaced-repetitiongeminidocker