This is a hub platform for publishing and sharing 3D models and their specifications.
The main objective of this project is to explore data storage methods other than SQL, including the document-oriented MongoDB, the in-memory Redis, and the S3-compatible file storage system MinIO.
TypeScriptNxNestJSMongoDBMinIO/S3RedisSwaggerDockerViteReactSCSS
- Visual Catalog: Users can explore a clean, paginated grid of available 3D models.
- Category Filtering: A convenient sidebar allows users to filter models by specific categories.
- Community-Driven Rankings: The platform highlights the most popular models based on community likes.
- Creator Portfolios: Users can view a specific author's page to see their entire collection of uploaded models.
Note
This is an educational project. While the learning goals are met, the following features would be required for a production-ready commercial release.
-
Guest system: allow users to view models without registering.
-
Administration and blocking system: required to ensure protection against malicious content.
-
Advanced search and filtering system: The project already allows models to be filtered by users and categories, but it is recommended that the search capabilities be expanded.
-
More parameters: more model and licensing parameters, as well as model previews, will allow users to obtain more information about a model and its usage permissions before downloading it.
-
Storing likes in MongoDB: adding background synchronisation of likes with the main database (for example, once a minute, etc.) will enable advanced searches and also change Redis’s role from being the sole repository for likes to acting as a cache, which in turn will allow Redis to be purged of rarely used data.
The project is structured as a monorepo managed by Nx, integrating the frontend client, backend server, and shared modules. Databases and file storage are deployed and managed centrally using Docker Compose.
- Client (
apps/client): A SPA that handles the user interface. - Server (
apps/server): A REST API. Delegates core business logic and data operations to libraries. - Libraries (
libs/*): Isolated modules containing the backend logic, infrastructure integrations, and shared types. - MongoDB: The primary NoSQL database.
- Redis: An in-memory data store for the dynamic ranking system.
- MinIO: An S3-compatible object storage server for saving physical files.
The project has auto-generated Swagger documentation available at url: http://localhost:{SERVER_PORT}/api/docs.
# Service Configuration & Ports
PORT=3000
VITE_PORT=3000
VITE_API_FILE_URL=http://localhost:9000/main/
# Database Connection URLs
MONGO_URI=mongodb://your_db_user:your_db_password@localhost:27017/your_db_name?authSource=admin
REDIS_URI=redis://localhost:6379
# MinIO Configuration
MINIO_ENDPOINT="localhost"
MINIO_PORT=9000
MINIO_CONSOLE_PORT=8000
MINIO_USER="your_minio_user"
MINIO_PASSWORD="your_secure_minio_password"
# JWT Configuration
JWT_ACCESS_SECRET=your_jwt_access_secret_key_here
JWT_REFRESH_SECRET=your_jwt_refresh_secret_key_here
- Clone the repository
- Install dependencies:
npm ci - Configure environment variables:
- Create a
.envfile in the root directory. - Add the necessary variables as defined in the Environment section.
- Create a
- Start Docker services:
docker-compose up -d - Start the applications:
npx nx run-many --target=serve --all --parallel=2 - Open
http://localhost:4200in your browser
Tip
Highly recommend installing the Nx Console extension for VS Code.