A modern, responsive todo management application built with Next.js 15, TypeScript, and Tailwind CSS.
- π Todo Management: Create, read, update, and delete todos
- π·οΈ Status Tracking: Track todos as TODO, IN_PROGRESS, or DONE
- π₯ Assignment: Assign todos to team members
- π Due Dates: Set and track due dates for todos
- π¨ Modern UI: Clean, responsive interface with Tailwind CSS
- β‘ Fast Performance: Built with Next.js 15 and React 19
- Framework: Next.js 15.5.4
- Language: TypeScript
- Styling: Tailwind CSS v4
- State Management: React hooks
- API Integration: Fetch API with custom client
- Node.js 18+
- npm or yarn
- Backend API running on port 5069 (or configured port)
- Clone the repository and navigate to the app directory:
cd todo-app- Install dependencies:
npm install- Configure environment variables:
cp .env.example .env.localEdit .env.local and set your API URL:
NEXT_PUBLIC_API_URL=http://localhost:5069/api
Run the development server:
npm run devThe app will be available at http://localhost:3000
- Build the application:
npm run build- Start the production server:
npm startFrom the parent directory:
docker-compose up todo-appdocker build -t todo-app .
docker run -p 3000:3000 -e NEXT_PUBLIC_API_URL=http://your-api:8080 todo-appThis app includes a GitHub Actions workflow that automatically builds and publishes Docker images to GitHub Container Registry (ghcr.io).
Images are automatically built and pushed when:
- Code is pushed to the
mainormasterbranch - Manually triggered via GitHub Actions UI
- Pull requests are created (build only, no push)
Images are available at:
ghcr.io/YOUR_GITHUB_USERNAME/todo-app:TAG
Available tags:
latest- Latest build from main branchmain/master- Branch-specific tagsYYYYMMDD-HHmmss- Timestamp tagssha-xxxxxx- Commit SHA tags- Custom tags when manually triggered
- Pull the image:
docker pull ghcr.io/YOUR_GITHUB_USERNAME/todo-app:latest- Run the container:
docker run -d \
-p 3000:3000 \
-e NEXT_PUBLIC_API_URL=http://your-api:8080 \
ghcr.io/YOUR_GITHUB_USERNAME/todo-app:latestYou can manually trigger the workflow from the Actions tab with:
- Custom image tag
- Platform selection (amd64, arm64, or both)
The workflow includes:
- Trivy vulnerability scanning
- Results uploaded to GitHub Security tab
- Multi-platform builds (linux/amd64, linux/arm64)
todo-app/
βββ app/ # Next.js app directory
β βββ page.tsx # Home page with todo list
β βββ layout.tsx # Root layout
β βββ globals.css # Global styles
β βββ todos/
β βββ [id]/
β βββ page.tsx # Todo detail page
βββ components/ # React components
β βββ TodoList.tsx # Todo list container
β βββ TodoItem.tsx # Individual todo item
β βββ TodoDetails.tsx # Todo detail view
β βββ AddTodo.tsx # Add todo form
βββ lib/ # Utilities and API
β βββ api.ts # API client
β βββ config.ts # Configuration
β βββ utils.ts # Helper functions
βββ public/ # Static assets
The app expects these API endpoints:
GET /todos- List all todosGET /todos/:id- Get todo by IDPOST /todos- Create new todoPUT /todos/:id- Update todoDELETE /todos/:id- Delete todo
interface Todo {
id: number | string;
name: string;
description: string;
status: 'TODO' | 'IN_PROGRESS' | 'DONE';
date: string; // Due date (YYYY-MM-DD)
assignee: string;
creator: string;
}- Click the expand arrow for additional fields
- Name is required, description and assignee are optional
- Todos are created with TODO status by default
- Click checkbox to toggle between TODO and DONE
- Use the detail view to set IN_PROGRESS status
- Status badges show current state with color coding
- Click on any todo to view full details
- Edit mode allows updating all fields
- Delete todos from list or detail view
| Variable | Description | Default |
|---|---|---|
NEXT_PUBLIC_API_URL |
Backend API URL | http://localhost:5000 |
npm run dev- Start development server with Turbopacknpm run build- Build for productionnpm start- Start production server
Ensure the backend API has CORS configured to allow requests from http://localhost:3000 (or your production domain).
- Check that the API is running
- Verify the
NEXT_PUBLIC_API_URLis correct - Check browser console for detailed error messages
The app expects dates in YYYY-MM-DD format from the API and displays them in a localized format.
To learn more about Next.js, take a look at the following resources:
- Next.js Documentation - learn about Next.js features and API.
- Learn Next.js - an interactive Next.js tutorial.
The easiest way to deploy your Next.js app is to use the Vercel Platform from the creators of Next.js.
Check out our Next.js deployment documentation for more details.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is part of the Todo application suite.