A modern task and project management API built with Go, PostgreSQL, and Redis. Features user authentication, team collaboration.
- User authentication and authorization
- Project and task management
- Team collaboration
- Real-time updates via Redis
- PostgreSQL for persistent storage
- Docker containerization
- Hot reload development environment
- Custom HTTP Router
- Go 1.24+
- Docker and Docker Compose
- SQLC
- Make (optional)
First, generate the Go code from SQL definitions:
# Install sqlc if not already installed
go install [github.com/sqlc-dev/sqlc/cmd/sqlc@latest](https://github.com/sqlc-dev/sqlc/cmd/sqlc@latest)
# Generate code
sqlc generatereference sample env
The project includes two Dockerfiles for different environments:
Dockerfile- Optimized for production, uses the pre-built binary inbin/.Dockerfile.dev- Development version with Air for hot reload.
To run the application in development mode with hot reload:
# Use docker-compose.dev.yml
docker compose up -dTo run in production mode:
Change Dockerfile in docker-compose.yml to just Dockerfile
# Use docker-compose.yml
docker compose up -d- API:
http://localhost:8080 - PostgreSQL:
localhost:5432 - Redis:
localhost:6379
For local development with hot reload:
# Install Air for hot reload
go install [github.com/cosmtrek/air@v1.16.1](https://github.com/cosmtrek/air@v1.16.1)
# Run with Air
airMIT
- Building the HTTP Router: A core component of the Tickit API is its custom-built HTTP router. This decision was part of a detailed exploration into Go's
net/httpand routing principles. I wrote a 3-part blog series detailing the motivation, implementation details, challenges faced, and lessons learned from building this component: Building a Go HTTP Router (Part 1): Why & The Stdlib Showdown