Bermudia is an open-source gamified learning platform that combines education with adventure. Players explore a virtual archipelago, solve challenges, collect treasures, and engage in a dynamic trading system while learning new concepts through an immersive gaming experience.
- Island Exploration: Navigate through multiple territories with unique islands containing educational challenges
- Treasure System: Unlock treasures using different types of keys (Blue, Red, Golden, Master)
- Dynamic Market: Real-time trading system with websocket-based market operations
- Challenge System: Multiple difficulty levels (Easy, Medium, Hard) with educational content
- Player Progression: Track achievements, collect resources, and manage inventory
- Real-time Notifications: Inbox system for player communications and updates
- Audio Experience: Immersive background music and sound effects
- Admin Bot Integration: Telegram/Bale bot for correction and administration
Bermudia follows a modern full-stack architecture:
- Backend: Go (Golang) with Chi router, WebSocket support, and PostgreSQL/SQLite
- Frontend: Vue.js 3 with Vite, Tailwind CSS, and responsive design
- Real-time Communication: WebSocket-based events for market, inbox, and game state
- External Services: Integration with Gofino and Jitsi for extended functionality
- Backend Documentation - API endpoints, services, and backend architecture
- Frontend Documentation - Component structure, setup, and development guide
- API Documentation - Detailed API reference
- Phase 2 Documentation - Feature roadmap and implementation details
- Phase 3 Documentation - Advanced features and future plans
- Go 1.24+ (for backend)
- Node.js 18+ and npm/yarn (for frontend)
- PostgreSQL 15+ or SQLite (for database)
- Docker and Docker Compose (optional, for containerized deployment)
git clone https://github.com/Rastaiha/bermudia.git
cd bermudiacd backend
go mod download
cp .env.example .env # Configure your environment variables
go run main.goThe backend will start on http://localhost:8080 by default.
cd frontend
npm install
cp .env.example .env # Configure your environment variables
npm run devThe frontend will start on http://localhost:5173 by default.
For detailed setup instructions, see the Backend README and Frontend README.
Build and run with Docker Compose:
docker-compose up -dThis will start both the backend and frontend services with proper networking.
Backend:
cd backend
docker build -t bermudia-backend .
docker run -p 8080:8080 bermudia-backendFrontend:
cd frontend
docker build -t bermudia-frontend .
docker run -p 80:80 bermudia-frontendEnvironment variables can be set in backend/.env:
DATABASE_URL- PostgreSQL connection stringJWT_SECRET- Secret key for JWT token generationPORT- Server port (default: 8080)CORS_ORIGIN- Allowed CORS originsBOT_TOKEN- Telegram/Bale bot token for admin features
Environment variables can be set in frontend/.env:
VITE_API_BASE_URL- Backend API URLVITE_WS_BASE_URL- WebSocket server URL
Players collect and manage various resources:
- Coins: Primary currency for trading and purchases
- Fuel: Required for island navigation
- Keys: Blue, Red, Golden, and Master keys for unlocking treasures
- Books: Educational content collected from islands
The game world is organized into territories, each containing multiple islands:
- Educational Islands: Contain learning challenges
- Challenge Islands: Test player knowledge
- Refuel Stations: Replenish fuel supplies
- Terminal Islands: Story progression points
- Final Islands: End-game content
Real-time marketplace where players can:
- Create trade offers
- Accept offers from other players
- Exchange resources dynamically
- View market history
The admin bot handles:
- Challenge correction and verification
- Player communication
- Administrative notifications
Configure bot token in backend environment variables.
Used for extended gameplay features and social interactions.
Provides video conferencing capabilities for multiplayer features.
bermudia/
├── backend/ # Go backend service
│ ├── api/ # API handlers and WebSocket hub
│ ├── internal/ # Core business logic
│ │ ├── domain/ # Domain models
│ │ ├── repository/ # Data access layer
│ │ └── service/ # Business logic
│ └── adminbot/ # Bot integration
├── frontend/ # Vue.js frontend
│ ├── src/
│ │ ├── components/ # Vue components
│ │ ├── pages/ # Page components
│ │ ├── services/ # API and WebSocket services
│ │ └── router/ # Vue Router configuration
│ └── public/ # Static assets
└── docs/ # Documentation
Backend:
cd backend
go test ./...Frontend:
cd frontend
npm run testBackend:
go fmt ./...Frontend:
npm run formatKey API endpoints:
POST /api/auth/login- User authenticationGET /api/territories- List all territoriesGET /api/islands/:id- Get island detailsPOST /api/islands/:id/challenge- Submit challenge answerGET /api/player- Get player informationGET /api/market- Get market offersWS /api/ws- WebSocket connection for real-time updates
For complete API documentation, see API Documentation.
- Seyed Ali Hosseini - Core Developer
- Meysam Bavi - Core Developer
- Roham Ghasemi - Core Developer
- Fardad Arab - Core Developer
Developed by the team at Rasta.
This project is open source. Please check the LICENSE file for more details.
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
If you encounter any bugs or issues, please report them on the Issues page.
For questions and support, please contact the development team at Rasta.
Made with ❤️ by the Rasta Development Team