Requirements
RequirementsThe candidate studied Tajweed before and familiar with Tajweed Rules.3–5 years building, shipping and operating backend services in production.Java 21 or Kotlin, and Spring Boot 3.x — Spring MVC, Spring Data, Spring Security. Comfortable with modern Java (records, pattern matching, and either Virtual Threads or reactive WebFlux — we do not expect deep expertise in both).PostgreSQL, properly — schema design, indexing including GIN, JSONB, reading query plans, transactions and isolation levels, JPA / Hibernate, and migrations as versioned code.Modelling a real domain. Much of this platform is a curriculum, a progression and a credential. Relational modelling and getting state machines right matter here as much as the AI surface does.HTTP as a craft — REST and microservice API design, streaming responses (SSE, NDJSON or chunked transfer), Range requests, disciplined status codes and error contracts, and a timeout on every outbound call.Authentication and authorization — OAuth2 / JWT, refresh rotation, and role-based access control across genuinely distinct user types.Asynchronous work — background jobs, queues or schedulers (Kafka, RabbitMQ or similar), and the discipline that comes with them: retries, dead letters, at-least-once delivery and idempotent handlers.Integrating services you do not control — internal or third-party APIs that are slow, rate-limited, occasionally down and expensive. Retries with backoff, idempotency keys, and circuit-breaking as a concept even if you have not used a specific library.Files and binary data — uploads, object storage, and streaming large payloads without loading them into memory.Testing discipline — JUnit 5 and Mockito, and the habit of testing against a real database rather than mocking your persistence layer.Docker, Linux, Git, CI/CD, and structured logging.Clear written English. This is a remote team, and a pull request description that explains the reasoning is part of the work.A degree in computer science or equivalent practical experience. We care about what you have built, not where you studied.Judgment about cost. You will be spending real money on every model call. We want someone who instinctively asks what a feature costs per request.Preferred skillsgRPC and Protocol Buffers for the Spring Boot ↔ Python service contracts — adopted for schema and contract discipline across a language boundary, not for latency.Redis for distributed caching, rate limiting and token buckets, alongside an in-process cache tier.Resilience4j — circuit breakers, bulkheads and rate limiters around the AI calls.pgvector and Qdrant, and hybrid dense/sparse retrieval, for the Tafsir and Hadith agents.LiveKit / WebRTC for live student–teacher sessions and remote examinations.OpenTelemetry, Prometheus and Grafana for distributed tracing and metrics.Testcontainers for integration tests against real PostgreSQL, Redis and object storage.A dedicated worker tier, and container orchestration when we outgrow Render, as the dubbing and analysis workloads grow past a single service.Preferred / strong plusesWorking with audio: codecs (Opus, AAC, PCM), FFmpeg, sample-rate and format normalization.Building against LLM or ASR provider APIs — streaming responses, token budgets, quota and cost management.Retrieval-augmented generation in production: chunking, embeddings, ranking, evaluating whether an answer is actually grounded.Integrating with Python AI/ML services (FastAPI, PyTorch, ONNX, Triton).Graph or hierarchical data — narrator chains, prerequisite trees, curriculum dependencies.Arabic — reading it, or experience with Arabic NLP and Unicode Uthmani text. A real advantage here, and not a requirement.Learning-platform or credentialing experience — progress models, assessment, certificate issuance and verification.Mobile-facing API experience — offline tolerance, retries over flaky networks, payload-size discipline.
Description
Backend Engineer — Spring Boot (Java 21), Qur'an Learning PlatformLevel: Mid-Level (3–5 years building and operating production backends)Employment: Full-time · Remote / HybridCore stack: Java 21 or Kotlin, Spring Boot 3.3+, Spring Security (OAuth2 / JWT), Spring Data JPA / Hibernate, PostgreSQL 16 (JSONB, GIN), Flyway, SSE / NDJSON streaming, OpenAPI / Swagger, Maven or Gradle, Git, Docker, GitHub Actions, Render, JUnit 5On the roadmap: gRPC / Protobuf, Redis, pgvector & Qdrant, Resilience4j, Kafka or RabbitMQ, LiveKit, OpenTelemetry, TestcontainersWhat we are buildingA platform for learning to recite the Qur'an correctly — and for being formally certified in it. Recitation correction is one function of it, not the whole. Under one roof:The recitation engine. A student recites; the engine returns per-letter pronunciation errors, tajweed rule findings, and Madd and Ghunnah durations measured against the reciter's own tempo, with letter-level timings for playback.The Tafsir agent. Hybrid semantic and lexical retrieval over 6,236 āyāt and 31,180 tafsir entries across several classical books, answering a student's questions with citations and under strict guardrails. This one is already running.The Hadith agent. The same retrieval discipline extended to Hadith — narrator chains (isnād), authenticity gradings, and cross-references to the āyāt a report bears on.The mastery roadmap. A structured tajweed curriculum rather than a catalogue: courses, lessons, the specific points each lesson makes a student master, progress state, and deep links straight into the reader or into a pre-filled recitation attempt.The teacher loop. Booking and scheduling, live student–teacher sessions, and a human teacher's recorded reply on a student's attempt.Translation and dubbing. A teacher's spoken explanation transcribed, translated, and re-voiced in the student's own language — subject to a hard invariant: the recitation portion of a reply is never dubbed, only the explanation.Ijāzah certification. Readiness tracking, a scholar's review and decision, and an issued certificate naming the qirā'ah it covers, with a public verification link.More is planned beyond this. The principle the whole product bends around: the machine prepares, the scholar authorizes.Where the system is, and what you would be hired to doWe will be straight with you, because you would find this out in week one anyway.Today the Tafsir agent works — hybrid dense and sparse retrieval over a live corpus, streaming answers, persisted sessions. So does a recitation-analysis demo returning per-letter errors and letter-level timings, behind an HTML screen. It all runs on Python/FastAPI, against a shared hosted-model quota measured in tens of requests per minute, with the analysis engine admitting ten concurrent recitations before it sheds load.Next is the platform above: a Spring Boot backend, a Flutter app carrying students and teachers in one binary, the recitation engine on our own hardware, and a scale target in the thousands of concurrent reciters — Ramadan and the daily prayer windows are genuine traffic peaks for a product like this.You are the engineer who takes it from the first to the second, and who then builds most of what is listed above. This is a greenfield backend on top of a proven core — not maintenance of someone else's platform, and not a CRUD app with a new coat of paint.Core responsibilitiesBuild the Spring Boot backend. API design, PostgreSQL schema and versioned migrations, Spring Security with role-based access for students, teachers, examiners and scholars, refresh-token rotation, and the microservice boundaries between our tier and the Python AI services.Model the curriculum. Courses, lessons, per-point mastery, progress and readiness — the data model behind the mastery roadmap, and the progress rules that decide when a student may request certification.Own the streaming path. Chunked NDJSON / SSE endpoints delivering two-stage recitation feedback and streamed agent answers to the Flutter app, including partial-then-failure semantics and client disconnects.Own the audio pipeline. Upload from mobile, format and sample-rate normalization, storage, retention, and HTTP Range streaming so a student can seek into reciter audio without pulling a whole chapter.Build the asynchronous job tier that carries dubbing and any other work too slow for a request, with progress visible to the client and the recitation-safety invariant enforced in the pipeline itself.Make the expensive path cheap. Caching for Mushaf pages, āyah text, tafsir and Hadith; admission control, rate limiting and idempotency around metered analysis and model calls; pre-warming ahead of known peaks.Keep it debuggable. Structured logging with request correlation from day one, metrics on the paths that cost money, and tracing across app → Spring Boot → AI services → PostgreSQL as the system grows.Test it properly. Integration tests against real dependencies, deterministic tests around the AI boundary, and load tests before we promise anyone a scale number.Evolve the API without breaking installed apps. Once the Flutter app is in the stores you cannot force an update, so backward-compatible API evolution and versioning are part of the job rather than an afterthought.Work with the people around the code. Review your colleagues' work and have yours reviewed. Write the decision record when a choice would be expensive to reverse. Agree the service contracts directly with the Python AI team, and the rules themselves with the scholars who own them.