Prerequisites
Before you begin, ensure you have the following tools installed on your system:Node.js
Version 18 or higher for frontend development
Go
Version 1.25.1 or higher for backend development
Docker
For running PostgreSQL database locally
Make
Build automation tool (pre-installed on macOS/Linux)
- Air: For Go hot-reloading during development
- Caddy: Reverse proxy for local development
- golangci-lint: For code linting
For detailed installation instructions for each prerequisite, see the Installation Guide.
Installation Steps
Configure environment variables
Create a See the Environment Configuration guide for detailed explanations of each variable.
.env file in the project root with the required configuration:Create the database
Create a PostgreSQL database with PostGIS extension using Docker:This command creates a Docker container named
postgresdb with PostgreSQL and PostGIS extension.The database will be created with the credentials specified in your
.env file. The container will persist data in a Docker volume named pgdata.Run the development server
Start all development services in parallel:This single command starts 7 processes concurrently:
- Vite dev server for Jabulani (merchant app) on port 5173
- Vite dev server for Tango (customer app) on port 5174
- Tailwind CSS compiler for Jabulani
- Tailwind CSS compiler for Tango
- Air hot-reload for Go backend
- PostgreSQL database container
- Caddy reverse proxy
The first run may take a minute to compile everything. Subsequent runs will be faster thanks to Go’s build cache and Vite’s HMR.
Verify Installation
Once all services are running, verify your installation:- API
- Merchant App
- Customer App
- Database
Test the backend API is running:You should receive a successful response from the health check endpoint.
Development Workflow
Making Code Changes
The development environment includes hot-reloading for rapid iteration:- Frontend Changes: Vite will automatically reload the browser when you save React components
- CSS Changes: Tailwind CSS will recompile automatically
- Backend Changes: Air will detect changes and rebuild the Go binary
Running Individual Services
If you need to run services separately for debugging:Stopping Services
PressCtrl+C in the terminal where make run is running to stop all services.
To stop the database container:
Building for Production
When you’re ready to create a production build:- Compile and minify Tailwind CSS for both apps
- Build optimized production bundles for Jabulani and Tango
- Export email templates
- Compile the Go backend with production tags
backend/bin/reservations and includes embedded frontend assets.
Next Steps
Architecture Overview
Learn about the system architecture and how components interact
Database Setup
Understand the database schema and migrations
Backend Development
Explore the Go backend structure and patterns
Frontend Development
Learn about the React applications and shared packages
Troubleshooting
Port already in use
Port already in use
If you see an error that ports 5173, 5174, or 8080 are already in use, stop any services using those ports or change the port numbers in your configuration.
Database connection errors
Database connection errors
Ensure the PostgreSQL container is running with
docker ps. If not, start it with make db or create it with make create-db.Go module errors
Go module errors
If you see Go module errors, try clearing the cache and re-downloading:
Node module errors
Node module errors
Clear your node_modules and reinstall:
Air not found
Air not found
Install Air globally:Make sure
$GOPATH/bin is in your PATH.