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 generate
reference 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 -d
To 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/[email protected]](https://github.com/cosmtrek/[email protected])
# Run with Air
air
MIT
- 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/http
and 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