
Sample food-ordering app skeleton showcasing code quality and maintainable structure, with CI/static-analysis badge indicating attention to code health and style.
Munchies is a restaurant management system focused on order delivery scheduling and restaurant logistics, built as a set of microservices.
helm/)| Tool | Version |
|---|---|
| Java | 21 (see .java-version) |
| Gradle | 8.14.5 (via the Gradle Wrapper, no local install needed) |
| Node.js | See individual service package.json files for Express.js/Vue.js services |
| Docker | Required to run MongoDB, Kafka, and the services locally |
The JVM services use Gradle's toolchain support (javaVersion in gradle.properties), so the
correct JDK is provisioned automatically as long as Java 21 (or a JDK auto-provisioner) is available.
| Package | Stack | Role |
|---|---|---|
user-service |
Kotlin + Micronaut | Manages user accounts, authentication, and authorization. |
restaurant-service |
Kotlin + Micronaut | Manages restaurant data, menus, and availability of dishes. |
order-service |
Kotlin + Micronaut | Handles order creation, processing, and status tracking. |
gateway-service |
Express.js | Acts as the API gateway, routing requests to appropriate services. |
notification-service |
Express.js | Sends notifications to users and restaurant staff via email/SMS. Receives messages only via Kafka. Agent-based architecture. |
payment-service |
Express.js | Handles payment processing and integration with payment gateways. |
scheduler-service |
Express.js | Manages delivery scheduling and logistics; acts as a middleware between the user and the order-service. |
table-reservation-service |
Express.js | Manages table reservations for restaurants. |
frontend-service |
Vue.js | Provides the user interface for customers and restaurant staff. |
Each service module has a matching -shared module containing code shared with other services.
domain/, application/, infrastructure/). See order-service for the Kotlin reference implementation and
payment-service for the Express.js one.The whole system (all services and their infrastructure dependencies: MongoDB, Kafka, etc.) is started and stopped via Docker Compose, either directly through Gradle or via the deployment script:
./gradlew composeUp # Build images and start all services
./gradlew composeDown # Stop and tear down all servicesAlternatively, scripts/deploy.sh wraps the same composeDown/composeUp cycle with a git
pull step and post-deploy health checks, and is meant for deploying to a host:
./scripts/deploy.shThe individual Docker Compose files for each infrastructure dependency are also available under config/
(config/mongodb, config/kafka, config/service) if you need to start a single dependency in isolation.
The JVM services are built with Gradle (via the wrapper, no local Gradle install required):
./gradlew build # Build all JVM services
./gradlew test # Unit tests
./gradlew integrationTest # Integration tests
./gradlew componentTest # Component tests
./gradlew e2eTest # End-to-end tests (BDD + Cucumber)./gradlew spotlessApply # Fix formatting
./gradlew detekt # Static analysisEach Express.js/Vue.js service is built and tested independently via its own package.json (see the individual
service directories).
docs/
mkdocs.yml
helm/
k8s/
This project is licensed under the Apache License 2.0.
Munchies is a restaurant management system focused on order delivery scheduling and restaurant logistics, built as a set of microservices.
helm/)| Tool | Version |
|---|---|
| Java | 21 (see .java-version) |
| Gradle | 8.14.5 (via the Gradle Wrapper, no local install needed) |
| Node.js | See individual service package.json files for Express.js/Vue.js services |
| Docker | Required to run MongoDB, Kafka, and the services locally |
The JVM services use Gradle's toolchain support (javaVersion in gradle.properties), so the
correct JDK is provisioned automatically as long as Java 21 (or a JDK auto-provisioner) is available.
| Package | Stack | Role |
|---|---|---|
user-service |
Kotlin + Micronaut | Manages user accounts, authentication, and authorization. |
restaurant-service |
Kotlin + Micronaut | Manages restaurant data, menus, and availability of dishes. |
order-service |
Kotlin + Micronaut | Handles order creation, processing, and status tracking. |
gateway-service |
Express.js | Acts as the API gateway, routing requests to appropriate services. |
notification-service |
Express.js | Sends notifications to users and restaurant staff via email/SMS. Receives messages only via Kafka. Agent-based architecture. |
payment-service |
Express.js | Handles payment processing and integration with payment gateways. |
scheduler-service |
Express.js | Manages delivery scheduling and logistics; acts as a middleware between the user and the order-service. |
table-reservation-service |
Express.js | Manages table reservations for restaurants. |
frontend-service |
Vue.js | Provides the user interface for customers and restaurant staff. |
Each service module has a matching -shared module containing code shared with other services.
domain/, application/, infrastructure/). See order-service for the Kotlin reference implementation and
payment-service for the Express.js one.The whole system (all services and their infrastructure dependencies: MongoDB, Kafka, etc.) is started and stopped via Docker Compose, either directly through Gradle or via the deployment script:
./gradlew composeUp # Build images and start all services
./gradlew composeDown # Stop and tear down all servicesAlternatively, scripts/deploy.sh wraps the same composeDown/composeUp cycle with a git
pull step and post-deploy health checks, and is meant for deploying to a host:
./scripts/deploy.shThe individual Docker Compose files for each infrastructure dependency are also available under config/
(config/mongodb, config/kafka, config/service) if you need to start a single dependency in isolation.
The JVM services are built with Gradle (via the wrapper, no local Gradle install required):
./gradlew build # Build all JVM services
./gradlew test # Unit tests
./gradlew integrationTest # Integration tests
./gradlew componentTest # Component tests
./gradlew e2eTest # End-to-end tests (BDD + Cucumber)./gradlew spotlessApply # Fix formatting
./gradlew detekt # Static analysisEach Express.js/Vue.js service is built and tested independently via its own package.json (see the individual
service directories).
docs/
mkdocs.yml
helm/
k8s/
This project is licensed under the Apache License 2.0.