An-Nahwi (النحوي - "The Grammarian") is a learning project I started because I couldn't find a good Arabic learning app that combined text management, roots in-depth study, vocabulary learning and some analytics and flashcards learning tools.
What it does: Manage Arabic texts, explore word roots, build vocabulary, and track learning progress. Nothing revolutionary, just tools that I needed and thought others might find useful too.
Stack: Kotlin/Quarkus backend, Nuxt 4/TypeScript frontend, PostgreSQL database
Reality check: This is a personal project, not a polished product. The database starts mostly empty - you'll need to add your own texts and vocabulary as you learn. There are scripts included to backup, restore, and populate the database with some sample data, syncing them to a S3 bucket. Some features are incomplete, bugs are not excluded. But the core functionality works, and if you're learning Arabic and like to tinker with code, you might find it helpful.
- Docker & Docker Compose (easiest way to get started)
- Java 21+ (if you want to hack on the backend)
- Node.js 22+ and pnpm (for frontend development)
- PostgreSQL 17+ (if you prefer running locally)
- Backend uses Gradle wrapper for Quarkus/Kotlin builds
- Frontend uses pnpm for Node.js dependencies and Nuxt development
The app has these main parts:
- Text management: Add Arabic texts, mark difficult words, take notes
- Root exploration: Browse Arabic roots and see related vocabulary
- Vocabulary building: Track words you're learning with translations and examples
- Flashcard system: Basic spaced repetition for vocabulary practice
- Simple analytics: See what you've been working on
just dev # Start all services
# or
docker-compose upDatabase only:
just start-db # Start PostgreSQL containerBackend (local):
just local-be # Start in dev mode with hot reload
# or
cd backend && ./gradlew quarkusDevFrontend (local):
cd frontend && pnpm install && pnpm run devThis project uses just as task runner (similar to Makefile, just better! ;) ).
just dev- Start full stackjust build- Build all containersjust test- Run all testsjust clean- Clean containers and volumesjust start-db- Database onlyjust local-be- Backend dev mode- Backend build:
cd backend && ./gradlew build - Frontend dev:
cd frontend && pnpm run dev
There is a second docker-compose file in this project which additionally adds monitoring tools like Prometheus and Grafana. To run it, use:
docker-compose -f docker-compose-monitoring.yml up
# or
just monitoring- Frontend: http://localhost:3000
- Backend API: http://localhost:8080
- API Docs: http://localhost:8080/swagger-ui
- Screenshots and features
- API documentation available at http://localhost:8080/swagger-ui when running
This project is licensed under the MIT License. See the LICENSE file for details.

