A high-performance, real-time Agile Project Management platform built with Next.js 15 App Router & TypeScript.
Designed to optimize workflows with interactive Kanban boards, sprint tracking, real-time team communication, and automated burndown charts.
- π Overview
- π Tech Stack
- π§ Key Technical Challenges & Solutions
- β¨ Core Features
- π Architecture & Folder Structure
- πΈ Screenshots & UI Walkthrough
- π Getting Started
- π Performance Optimization
- π― Learnings & Reflections
- π¨βπ» Contact Author
SprintSOS is a modern project management tool designed to model Jira & Trello workflows. It serves as a playground to demonstrate production-grade frontend architecture, emphasizing type-safety, efficient caching, state management, and seamless real-time synchronization.
| Domain | Technology | Key Highlights |
|---|---|---|
| Core | Next.js 15 (App Router) & TypeScript | Hybrid Server/Client component structure, route groups, strict type checking. |
| State & Caching | TanStack Query v5 & Redux Toolkit | Caching, deduplication of server requests + predictable UI state management. |
| Styling | TailwindCSS & Shadcn/UI | Tailwind variables + accessible headless radix-ui primitives for high fidelity UI. |
| Realtime | Socket.io-client | Persistent websocket channels for messaging & state synchronizations. |
| Forms | React Hook Form + Zod | Type-safe form validation and state management. |
| HTTP Client | Axios | Dynamic interceptors with retry queuing mechanism on authentication expiration. |
- Problem: Handling expired access tokens smoothly without interrupting the user experience or firing duplicate token-refresh API requests when multiple component requests fail simultaneously.
- Solution: Built a custom Axios interceptor with a token refresh queue. When an API call returns status
410(Token Expired), the interceptor locks subsequent requests inside arefreshTokenPromisequeue. Once refreshed successfully, queued requests are automatically retried with the new credentials. If refresh fails, it dispatches a global Redux logout action (logoutUserAPI()) to securely wipe session states.
- Problem: Waiting for the server to confirm task movement on the Kanban board causes a sluggish user experience (latency lag).
- Solution: Implemented Optimistic UI Updates using TanStack Query's
onMutate. When a user moves a task:- The query cache is immediately mutated to reflect the new column.
- The previous cache is saved as a fallback checkpoint.
- If the server fails to update the task, the transaction rolls back seamlessly to the saved checkpoint, and a toast error is triggered.
- Problem: Managing WebSocket instances globally in Next.js 15 client-side without memory leaks or redundant connections on route changes.
- Solution: Created a React Context-based
SocketProvider. It initiates a single connection on root mount, binds cleanup actions on unmount, and exposes reactive helpers (useSocket()) to handle real-time chat, typing indicators, and system-wide notifications dynamically.
- Middleware Protected Routes: Route guards redirecting unauthorized requests to
/loginand authenticated users away from public pages. - Secure Sessions: JWT token processing integrated directly into secure HTTP-only cookie wrappers.
- RBAC: Role-based access control (Owner, Member) governing project actions.
- Project Workspaces: Dedicated spaces to manage resources, track performance, and invite members.
- Sprint Management: Sprint creation, target metrics, goal tracking, and velocity analysis.
- Kanban Board: Column-based board supporting instant task categorization, priority ratings, and point estimations.
- Real-time Chat: Instant chat per project workspace featuring typing status indicators and media previews.
- Analytics & Burndown Charts: Custom visual reporting powered by Recharts to plot velocity trends and sprint burndowns.
This project follows a clean Feature-Folder and Layer-Separated Architecture:
src/
βββ app/ # Next.js pages & layout system
β βββ (auth)/ # Auth routes group (login, register)
β βββ (dashboard)/ # Dashboard routes group (projects, boards, chat)
βββ components/ # Reusable UI & Layout Components
β βββ auth/ # Auth-related UI modules
β βββ ui/ # Base UI components (Shadcn/UI primitives)
β βββ ChatView.tsx # Live chat component interface
βββ lib/ # Shared core business logic
β βββ features/ # Redux slices (state management)
β βββ queries/ # TanStack query wrapper hooks (cache keys)
β βββ services/ # Pure Axios API services
β βββ types/ # Common TypeScript definitions
β βββ axios.ts # Interceptor-wrapped Axios instance
βββ middleware.ts # Route protection middleware- Decoupled Queries & Services: Axios endpoints are declared in
services/. React Query hooks are declared inqueries/, keeping components clean of raw HTTP concerns.
git clone https://github.com/MinhThuan1807/Task-Project-Management-Tool.git
cd Task-Project-Management-Toolpnpm install
# or
npm installCreate a .env.local file in the root directory:
NEXT_PUBLIC_API_URL=http://localhost:5000
NEXT_PUBLIC_SOCKET_IO_URL=http://localhost:5000pnpm dev
# open http://localhost:3000- Selective Server Rendering (SSR): Critical metadata is server-fetched, while dynamic interactive modules hydrate dynamically.
- Query Cache Synchronization:
staleTimeis set to2 minutesacross modules to prevent double-fetching on navigate-back triggers. - Debounced Input handlers: Input validations are throttled/debounced to minimize layout re-calculations.
- Experienced building production-ready project modules using standard enterprise design systems.
- Mastered client-server synchronization patterns utilizing React-Query and custom server-state mutations.
- Configured connection states and fallback states during server websocket dropouts.
- Understand how to structure route groups efficiently to implement robust cookie authentication.
Minh ThuαΊn (Jake Nguyen)
Frontend Developer (Next.js / TypeScript)
- π§ Email: nguyenthuan05.work@gmail.com
- πΌ LinkedIn: Thuan Nguyen
- π GitHub: @MinhThuan1807
β If you find this project useful, please consider giving it a star!




