A production-grade, full-stack Projects & Tasks management platform demonstrating real-world engineering practices, clean architecture, and DevOps workflows.
ProdFlow is a cloud-ready application that enables users to manage projects and tasks efficiently. It showcases:
- Clean Backend Architecture: FastAPI with clear separation of concerns (routers, services, models, schemas)
- Modern Frontend: Next.js 14 with TypeScript and Tailwind CSS
- Production Practices: Docker containerization, CI/CD pipelines, database migrations
- Type Safety: Strong typing throughout the stack
- Testing: Unit tests for core backend functionality
┌─────────────────────────────────────────────────────────────┐
│ Frontend │
│ Next.js 14 + TypeScript + Tailwind CSS │
│ - Login/Register Pages │
│ - Dashboard (Projects List) │
│ - Project Detail (Tasks CRUD) │
└──────────────────────┬──────────────────────────────────────┘
│ HTTP/REST
│
┌──────────────────────▼──────────────────────────────────────┐
│ Backend │
│ FastAPI + SQLAlchemy + Alembic │
│ - Authentication (JWT) │
│ - Projects CRUD │
│ - Tasks CRUD │
└──────────────────────┬──────────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────────┐
│ PostgreSQL │
│ - Users Table │
│ - Projects Table │
│ - Tasks Table │
└─────────────────────────────────────────────────────────────┘
- Next.js 14 (App Router)
- TypeScript
- Tailwind CSS
- Axios (HTTP client)
- FastAPI (Python 3.11)
- SQLAlchemy (ORM)
- Alembic (Migrations)
- JWT (Authentication)
- Pydantic (Data validation)
- PostgreSQL 15
- Docker + docker-compose
- GitHub Actions (CI/CD)
- Ruff (Linting)
- MyPy (Type checking)
- Pytest (Testing)
- User registration with email and password
- JWT-based authentication
- Protected API routes
- Secure password hashing (bcrypt)
- Create, read, update, delete projects
- User-specific project ownership
- Project descriptions
- Create, read, update, delete tasks within projects
- Task status:
todo,in_progress,done - Task assignment to users
- Task descriptions
POST /api/v1/auth/register- Register a new userPOST /api/v1/auth/login- Login and get access token
GET /api/v1/projects- Get all user's projectsPOST /api/v1/projects- Create a new projectGET /api/v1/projects/{id}- Get project by IDPUT /api/v1/projects/{id}- Update a projectDELETE /api/v1/projects/{id}- Delete a project
GET /api/v1/projects/{project_id}/tasks- Get all tasks for a projectPOST /api/v1/projects/{project_id}/tasks- Create a new taskGET /api/v1/projects/{project_id}/tasks/{task_id}- Get task by IDPUT /api/v1/projects/{project_id}/tasks/{task_id}- Update a taskDELETE /api/v1/projects/{project_id}/tasks/{task_id}- Delete a task
GET /health- Health check endpoint
- Python 3.11+
- Node.js 20+
- PostgreSQL 15+ (or use Docker)
- Docker & Docker Compose (optional)
-
Clone the repository
git clone <repository-url> cd ProdFlow
-
Set up environment variables
cp backend/.env.example backend/.env cp frontend/.env.example frontend/.env
Edit
.envfiles with your configuration. -
Start all services
docker-compose up --build
This will start:
- PostgreSQL on port 5432
- Backend API on port 8000
- Frontend on port 3000
-
Access the application
- Frontend: http://localhost:3000
- Backend API: http://localhost:8000
- API Docs: http://localhost:8000/docs
-
Create virtual environment
cd backend python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
-
Install dependencies
pip install -r requirements.txt
-
Set up PostgreSQL database
createdb prodflow
-
Configure environment
cp .env.example .env # Edit .env with your database URL -
Run migrations
alembic upgrade head
-
Start the server
uvicorn app.main:app --reload
-
Install dependencies
cd frontend npm install -
Configure environment
cp .env.example .env # Edit .env with your API URL -
Start development server
npm run dev
cd backend
alembic revision --autogenerate -m "Description of changes"alembic upgrade headalembic downgrade -1cd backend
pytest -vcd frontend
npm run lint
npm run type-checkGitHub Actions workflows are configured for:
- Runs on push/PR to
mainordevelopbranches - Checks: Ruff linting, MyPy type checking, Pytest tests
- Location:
.github/workflows/backend-ci.yml
- Runs on push/PR to
mainordevelopbranches - Checks: ESLint, TypeScript type checking, Build
- Location:
.github/workflows/frontend-ci.yml
ProdFlow/
├── backend/
│ ├── app/
│ │ ├── api/
│ │ │ └── v1/
│ │ │ ├── endpoints/ # API route handlers
│ │ │ └── dependencies.py
│ │ ├── core/ # Core configuration
│ │ ├── models/ # SQLAlchemy models
│ │ ├── schemas/ # Pydantic schemas
│ │ ├── services/ # Business logic
│ │ └── main.py # FastAPI app
│ ├── alembic/ # Database migrations
│ ├── tests/ # Unit tests
│ ├── Dockerfile
│ ├── requirements.txt
│ └── .env.example
├── frontend/
│ ├── app/ # Next.js app directory
│ │ ├── dashboard/ # Dashboard page
│ │ ├── login/ # Login page
│ │ ├── register/ # Register page
│ │ └── projects/ # Project detail pages
│ ├── lib/ # Utilities
│ │ ├── api.ts # API client
│ │ └── auth.tsx # Auth context
│ ├── Dockerfile
│ ├── package.json
│ └── .env.example
├── .github/
│ └── workflows/ # CI/CD workflows
├── docker-compose.yml
└── README.md
DATABASE_URL=postgresql://user:password@localhost:5432/prodflow
SECRET_KEY=your-secret-key-change-in-production
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30
CORS_ORIGINS=["http://localhost:3000"]NEXT_PUBLIC_API_URL=http://localhost:8000- Add application monitoring (e.g., Prometheus, Grafana)
- Implement structured logging
- Add distributed tracing
- Set up error tracking (e.g., Sentry)
- Implement rate limiting
- Add input validation and sanitization
- Set up secrets management (e.g., AWS Secrets Manager, HashiCorp Vault)
- Implement refresh tokens
- Add password strength requirements
- Enable HTTPS in production
- Kubernetes deployment manifests
- Terraform/IaC for cloud infrastructure
- Staging and production environments
- Database backup and recovery procedures
- CDN for static assets
- Real-time updates (WebSockets)
- File attachments for tasks
- Project templates
- Task comments and activity logs
- User roles and permissions
- Project sharing and collaboration
- Search and filtering
- Export/import functionality
- Integration tests
- End-to-end tests (Playwright/Cypress)
- Load testing
- Security testing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is open source and available under the MIT License.
For questions or suggestions, please open an issue in the repository.