EmberVault is a full-stack scalable multimedia file management platform designed with a microservices architecture. It provides file storage, user management and media handling and sharing, similar in spirit to platforms like Google Drive, Dropbox, MEGA or Proton Drive.
This project was developed as a final-year Computer Science thesis, with a focus on scalable system design, distributed services and DevOps practices.
The main objectives behind EmberVault were:
- Design and implement a microservices-based architecture
- Explore scalable backend patterns
- Handle large file uploads and object storage
- Apply containerization and orchestration
- Build a complete production-like full-stack system
- GitHub Projects – project management and planning
- Postman – API testing and debugging
- DBeaver – database management
- redis-commander - redis management and monitoring
- Version Control: Git + GitHub
- Backend: Node.js, Express, TypeScript
- Database: PostgreSQL
- ORM: Prisma
- Cache: Redis
- Frontend: React, TypeScript, TailwindCSS
- File Storage: SeaweedFS (S3 compatible Object Storage)
- Containerization: Docker
- Orchestration: Docker Compose
- Reverse Proxy / API Gateway: Nginx
- Authentication: JWT + bcrypt
- CI/CD: GitHub Actions
- Automation: Bash, PowerShell
- API Documentation: OpenAPI / Swagger
- Local HTTPS certificates: mkcert
- Figma – UI/UX design and prototyping
- draw.io – system architecture diagrams
- Inkscape – vector graphics and logo design
- Vitest – unit testing framework
- ESLint – linting and code consistency
- Prettier – code formatting
EmberVault follows a microservices architecture, where each domain is isolated into independent services:
- Auth Service → Authentication and authorization
- User Service → User data management
- Media Service → File handling and metadata
- SeaweedFS → Distributed object storage
- PostgreSQL → Relational data persistence
- Nginx → API Gateway and HTTPS reverse proxy
- Redis → Distributed cache
All services are orchestrated via Docker Compose and exposed under a single domain for local deployment: https://embervault.local
(low opacity nodes are not yet implemented)
.
├── apps/
│ ├── web/ # React + Vite frontend
│ ├── auth-service/ # Authentication service
│ ├── user-service/ # User service
│ └── media-service/ # Media service
│
├── packages/
│ └── auth-utils/ # Shared authentication library
│
├── infrastructure/
│ ├── db/ # DB deployment
│ ├── nginx/ # Reverse proxy config
│ ├── certs/ # Local TLS certificates
│ ├── cache/ # Redis deployment and config
│ └── seaweedfs/ # Object storage setup
│
├── scripts/ # Scripts
│
├── compose.yaml # Docker Compose orchestration
└── .env.example # Environment variables template
git clone https://github.com/agm454-ua/TFG-Alex-Garcia-Martinez/
cd EmberVaultCopy .env.example → .env and fill required values.
Repeat for each service:
auth-service/.envuser-service/.envmedia-service/.envweb/.env
# Linux / macOS
bash ./scripts/setup-dev.sh
# Windows
./scripts/setup-dev.ps1docker compose up --buildhttps://embervault.local