← Projects
A cloud-native grading platform
Reviewers submit grades against rubrics; grades aggregate themselves through events. Follow one grade, or click any box.
Run it: docker-compose repo ↗Timeline
- 2023On AWS with Terraform
- Dec 2023CI/CD pipelines
- 2024Cloud-native rework: Keycloak, config bus, resilience, events, observability
Follow one grade
1 / 6 · frontend → gateway → Keycloak · RedisA reviewer submits a gradeThe gateway validates the token against Keycloak and applies the rate limit, kept in Redis, before anything reaches a service. Every route also has a circuit breaker, retry and time limit.
- 1A reviewer submits a grade
- 2The grade is computed
- 3Admin publishes, then consumes its own event
- 4All reviewers in → the assessment grade
- 5All five assessments in → the final grade
- 6The admin’s bell rings
servicebrokerdata storeplatformthis step
Run it
One command, the whole platform.
$ ./docker-compose.sh up -d
The compose setup is split per concern and started in health-gated order, so the platform comes up the same way every time.
databaseredisrabbitmqkeycloakspring-cloudspring-bootfrontendprometheusgrafana
fyp-grading-docker-compose ↗Asynchronous communication
Built three ways. One shipped.
The asynchronous paths were built on RabbitMQ, on Kafka and with Spring’s non-blocking WebClient, then compared. RabbitMQ is the one committed.
Built in
Built to keep working when services fail.
Services will fail; the platform assumes it and keeps grading anyway.
01Self-consumed event queueAggregation leaves the request path, retried and never lost.
02Gateway defence in depthCircuit breaker, retry, rate limit and time limit on every route.
03Reliable messagingFive attempts with backoff, then a dead-letter queue.
04Database per servicePostgres with Liquibase, MongoDB where the data is documents.
05One command to runCompose split per concern, health-gated startup order.
06Observability built inMetrics, logs and dashboards from day one.
07CI/CD and IaCPR builds, semver Docker images, Terraform on AWS.
Repositories
one per service, all publicfyp-grading-docker-composeRuns everything with one commandfyp-grading-api-gatewayEdge, auth checks, resiliencefyp-grading-admin-serviceTeams, reviewers, aggregationfyp-grading-evaluation-serviceGrades and weighted scoresfyp-grading-rubric-serviceRubrics and weightsfyp-grading-notification-serviceFinalized-grade notificationsfyp-grading-config-serverCentral configurationfyp-grading-configThe configuration itselffyp-grading-registry-serverService discoveryfyp-grading-frontendReact web appfyp-grading-terraform-awsAWS infrastructure as code
Firas Khalife