Featured work
itcrib itcrib.com
IT interview-prep & e-learning platform — spaced repetition, gamification, RAG-grounded answers and an isolated code sandbox.
- PHP 8.2 / Symfony 7.4
- Nuxt 3
- PostgreSQL 17 / pgBouncer
- Meilisearch
- RabbitMQ
- Redis
- Docker
The problem
Interview prep is a mess of scattered PDFs, stale blog posts and quiz apps that forget you the moment you close the tab. I wanted one place that teaches Go, PHP, Symfony, algorithms, system design and cloud — and actually remembers what I struggle with and brings it back at the right time.
Architecture
A decoupled monorepo: Symfony 7.4 / PHP 8.2 REST API (Controller/Api/V1) plus an EasyAdmin back-office, and a Nuxt 3 / Vue 3 SSR frontend. Data sits in PostgreSQL 17 behind pgBouncer, with Meilisearch for full-text search, RabbitMQ for async work, and Redis for caching.
The interesting parts:
- Spaced-repetition engine (FSRS) —
ReviewLog,TopicMastery,UserStreakdrive a personalised review schedule instead of dumb flashcards. - RAG-grounded content — a
ContentEmbeddinglayer plus an AI mock-interviewer (“AI recruiter”). - Isolated coderunner — a dedicated sandbox service executes user code submissions, off by default and resource-capped.
- A content pipeline compiles the same markdown corpus into printable interview handbooks via Python tooling.
Highlights
- 50 Doctrine entities, ~35 services, 37 migrations, 34 API controllers — a broad, production-grade surface.
- Security-hardened: JWT + refresh tokens, token encryption, OAuth state validation, cookie-consent modelling.
- A 13-service Docker stack (php, coderunner, nginx, nuxt, postgres, pgbouncer, redis, meilisearch, rabbitmq, worker, backup…), health-checked; PHPStan clean, PHPUnit green.
Results
800+ markdown topics across 15 content domains, compiled both into the live platform and into a senior-interview handbook — the product and my own prep material are the same corpus.
Lessons
- FSRS turns “I studied everything once” into “I remember the hard things”. Scheduling is the feature.
- A code sandbox is 10% execution and 90% making sure it can’t touch anything it shouldn’t.