This is a small toy project that I prepared to give some exercises to new colleagues who are approaching web development for the first time, so I can give them a starting point that allows me over time to be able to explain everything to them.
This project integrates the following technologies:
- Frontend: Next.js (App Router), Shadcn, TypeScript, Redux Toolkit, i18n.
- Backend: Fastify, Drizzle ORM, Pino, Swagger, WordPress.
- Infrastructure: Docker, Traefik, Valkey.
- Database: PostgreSQL, MySQL(for WordPress).
- Monitoring: ELK.
- Linting code: BiomeJS.
This setup provides a ready-to-use playground for exploring web development concepts and workflows, from frontend UI design to backend services and database interactions.
Create a .env file in the root directory renaming .env.placeholder to .env
To launch the project using Docker, run the following script:
./start.sh
This script will handle all necessary setup and start the services in a containerized environment.
The following features and examples are not yet implemented in the current version but can serve as exercises or extensions for developers:
-
Transaction Example
- Implement an example of database transactions using Drizzle ORM transactions.
-
Refresh Token Logic
- Design and implement the logic for generating and managing refresh tokens to improve authentication flows.
-
Backoffice Dashboard
- Create a functional backoffice dashboard with features like user management, analytics, or content control.
Contributions are welcome! If you'd like to add features, fix bugs, or enhance the documentation, feel free to fork the repository and submit a pull request.
This starter project is intended to evolve with new tools and features. Some potential future enhancements include:
- Integrating CI/CD workflows.
- Adding unit and integration testing.
- Expanding backend functionalities (e.g., file uploads, advanced authentication).
- Enhancing Docker configuration for production-ready deployment.
This project is licensed under the MIT License. Feel free to use, modify, and distribute as needed.