MicroStack is a production-style microservices architecture built using:
- Node.js (Express)
- Docker & Docker Compose
- PostgreSQL + Prisma
- Redis (Upstash)
- Nodemailer (Ethereal)
- Render (Cloud hosting)
This project demonstrates real-world backend engineering, including service isolation, inter-service communication, queues, deployments, and environment handling.
Handles user identity and authentication.
- User registration
- Login
- JWT token generation
- Password hashing (bcryptjs)
- PostgreSQL + Prisma ORM
https://microstack-auth-service.onrender.com
| Method | Endpoint | Description |
|---|---|---|
| POST | /auth/register |
Register new user |
| POST | /auth/login |
Login, returns JWT |
| GET | /auth/me |
Get user profile (requires token) |
Handles file uploads and returns a public URL.
- Accepts
multipart/form-data - Uses multer for storage
- Protected via JWT
https://microstack-file-service.onrender.com
| Method | Endpoint | Description |
|---|---|---|
| POST | /file/upload |
Upload a file |
Handles async email notifications using Redis-based event architecture.
- Publishes & subscribes via Redis
- Sends emails using Nodemailer
- Ethereal email previews
https://microstack-notification-service.onrender.com
| Method | Endpoint | Description |
|---|---|---|
| POST | /notify/email |
Send email notification |
MicroStack uses different architectures for local vs cloud environments.
ββββββββββββββ
Request β NGINX Gateway β Auth Service
ββββββββββββββ€
β File Service
ββββββββββββββ€
β Notification Service
Docker Compose spins up:
- Auth Service
- File Service
- Notification Service
- Redis
- PostgreSQL
- NGINX API Gateway
Run locally via:
docker compose up --buildEach service is deployed as a standalone microservice:
Auth Service β Public URL
File Service β Public URL
Notification Service β Public URL
This represents true microservice principles:
- Independent deployment
- Independent logs
- Independent scaling
POST https://microstack-auth-service.onrender.com/auth/register
{
"name": "kishlay",
"email": "test@example.com",
"password": "pass123"
}
POST https://microstack-auth-service.onrender.com/auth/login
Copy the returned token.
GET https://microstack-auth-service.onrender.com/auth/me
Authorization: Bearer <TOKEN>
POST https://microstack-file-service.onrender.com/file/upload
Headers: Authorization: Bearer <TOKEN>
Body: multipart/form-data field "file"
POST https://microstack-notification-service.onrender.com/notify/email
{
"to": "test@example.com",
"subject": "Hello",
"message": "From MicroStack"
}
- Docker
- Node.js (optional if not running inside Docker)
git clone https://github.com/innovatewithkishlay/MicroStack.git
cd MicroStack/microstackdocker compose up --buildbash verify.shmicrostack/
β
βββ auth-service/
βββ file-service/
βββ notification-service/
βββ gateway/ # Local NGINX Gateway
βββ shared/ # Shared utils (JWT etc.)
βββ verify.sh # Automated test script
βββ docker-compose.yml
βββ README.md
- Microservice isolation
- API gateways (local only)
- Cloud deployments without gateway
- Redis pub/sub communication
- Prisma migrations & cloud database handling
- JWT authentication
- Docker development workflow
- Add frontend dashboard
- Add Prometheus + Grafana monitoring
- Rate limiting with Redis
- Kubernetes deployment (Helm chart)
- File storage via AWS S3
Kishlay Kumar
Full Stack Developer | Backend Learner | Building in Public