A production-grade REST API built to master Go, Docker, and modern backend development practices.
TaskFlow is a robust task management API designed to demonstrate Clean Architecture principles in Go. It features secure authentication, containerized environments, and a comprehensive testing suite.
This is a learning project. It documents my journey from "Hello World" to a production-ready backend structure.
- Clean Architecture: Strict separation of concerns (Handlers → Services → Repositories).
- Secure Auth: JWT implementation with Bcrypt password hashing.
- Containerization: Optimized Multi-stage Docker builds for Dev and Prod.
- Quality Assurance: Unit & Integration tests with high coverage + Race detection.
- Developer Experience: Hot-reloading (Air), Swagger docs
I have documented the technical details and my learning process in the docs/ folder:
- Architecture & Design - Breakdowns of the Clean Architecture layers and folder structure.
- API Reference - Endpoints, Request/Response examples, and Auth flow diagrams.
- Development Guide - Setup instructions, testing commands, and troubleshooting.
- What I Learned - A log of challenges faced and concepts mastered (Go routines, Interfaces, Docker networking).
The easiest way to run the project is with Docker Compose.
- Docker & Docker Compose
# 1. Clone the repo
git clone https://github.com/joshua-sajeev/taskflow.git
cd taskflow
# 2. Setup Environment (Important!)
cp .env.example .env
# Open .env and set a secure JWT_SECRET
# 3. Start the App
docker-compose up --buildThe API will be available at http://localhost:8080.
Visit the Swagger UI to interact with the API: http://localhost:8080/swagger/index.html
| Category | Technology | Usage |
|---|---|---|
| Language | Go (Golang) | Core logic |
| Framework | Gin | HTTP Routing & Middleware |
| Database | MySQL 8.0 | Persistent storage |
| ORM | GORM | Data access & Migrations |
| DevOps | Docker | Containerization & Compose |
| Testing | Testify | Assertions & Mocks |
| Docs | Swagger | API Documentation |
This project is open for code review! If you see a non-idiomatic Go pattern or a security flaw, please open an issue.