The Cave is an experimental 3D web application. It serves as a playground of mini games and chill out areas for me and my mates. It's also a learner project for me to explore Golang and React Three Fiber.
- 🌐 React Three Fiber for declarative 3D scene management
- ⚡ Game Server built with Golang
- 🎮 Interactive mini games for user engagement
- 🏗️ Modular architecture for easy extensibility
- ⚡ Backend API built with Golang and PostgreSQL
- React & React Three Fiber – for managing the 3D scenes
- Three.js – for low-level 3D rendering
- TypeScript – for type safety and maintainability
- Tailwind – for styling
- ShadCn – for web components
- Vite – for fast development and bundling
- Go (Golang) – for a robust and performant server & API
- PostgreSQL – for relational database storage
- Gorilla/mux – for a lightweight http web framework
- pgx – for PostgreSQL driver and query building
- Goose – for database migrations
- Socket.IO – for real-time communication
- Docker – for managing PostgreSQL and pgAdmin
To run the project locally, follow these steps:
git clone https://github.com/Kezanwar/the-cave.git
cd the-cave# Start PostgreSQL and pgAdmin using Docker Compose
docker-compose up -dcd client
# Install dependencies
yarn install # or npm install
# Start the development server
yarn dev # or npm run devcd server
# Install Go dependencies
go mod tidy
# Set up environment variables (example in .env file)
# Run database migrations
goose up
# Start the server
make devOnce the client and server are running:
- Visit the frontend at:
http://localhost:5173 - API is available at:
http://localhost:3000
This motivation behind this project is to improve my skills in:
- Understanding 3D math (vectors, matrices, transformations)
- Writing custom GLSL shaders
- Implementing physics-based animations
- Optimizing performance in WebGL
- Developing full-stack applications with Go & PostgreSQL
- Implementing real-time communication with Socket.IO
- Using Docker for database management
Contributions are welcome! Feel free to fork the repo, create a new branch, and submit a pull request.
This project is licensed under the MIT License. See the LICENSE file for details.
For questions, ideas, or collaboration, reach out to me on GitHub!