XORO is a premium, feature-rich Kanban-style task management application built with React, Node.js, Express, and PostgreSQL. This application delivers an exceptional user experience with professional-grade features including dark mode, real-time search, focus mode, keyboard shortcuts, and advanced responsive design. XORO demonstrates modern frontend development capabilities with SaaS-level UI/UX polish.
- React 18 - Modern UI library with hooks
- Vite - Lightning-fast build tool and dev server
- Tailwind CSS - Utility-first CSS framework with dark mode
- @dnd-kit - Modern drag & drop library with accessibility
- react-hot-toast - Beautiful toast notifications
- Axios - HTTP client with interceptors
- Lucide React - Professional icon library
- Node.js - Runtime environment
- Express.js - Web framework
- Prisma - ORM for database management
- PostgreSQL - Relational database
- Zod - Schema validation
- ✅ Create, update, and delete tasks with inline editing
- ✅ Drag & drop tasks between columns with smooth animations
- ✅ Task descriptions (optional) with character limits
- ✅ Three status columns: Todo, In Progress, Done
- ✅ Optimistic UI updates for instant feedback
- ✅ Data persistence with PostgreSQL backend
- ✅ Dark Mode Toggle with localStorage persistence
- ✅ Real-time Search & Filter across task titles and descriptions
- ✅ Focus Mode - Hide Done column for productivity
- ✅ Sorting Options - By creation date, last updated, or default
- ✅ Column Task Counters with animated indicators
- ✅ Skeleton Loaders with shimmer animation
- ✅ Hover Effects & Smooth Animations throughout
- ✅ Professional Toast Notifications for all actions
- ✅ Custom Logo & Favicon with brand consistency
- ✅ Keyboard Shortcuts:
Ctrl+K/Cmd+K- Open searchCtrl+N/Cmd+N- New taskEnter- Save/SubmitEsc- Close/Cancel
- ✅ Inline Task Editing - Click title to edit
- ✅ Auto-focus Management for better workflow
- ✅ Responsive Design - Mobile-first approach
- ✅ Fully Responsive Header with hamburger menu
- ✅ Touch-Friendly Interface with proper tap targets
- ✅ Mobile-Optimized Search with compact layout
- ✅ Adaptive Layout for all screen sizes
- ✅ Professional Mobile Menu with slide-in animation
- ✅ Error Handling with user-friendly messages
- ✅ Loading States with skeleton loaders
- ✅ Accessibility Features with ARIA labels
- ✅ Performance Optimizations with lazy loading
- ✅ Clean Code Architecture with separation of concerns
- ✅ Environment Configuration for production deployment
- ✅ Modern Design System with consistent spacing
- ✅ Smooth Transitions and micro-interactions
- ✅ Status Color Indicators for visual hierarchy
- ✅ Professional Typography and text hierarchy
- ✅ Glass Morphism Effects with backdrop blur
- ✅ Custom Animations with CSS keyframes
Before you begin, ensure you have the following installed:
- Node.js (v18 or higher)
- PostgreSQL (v14 or higher)
- npm or yarn
-
Install dependencies:
# Backend cd backend npm install # Frontend cd ../frontend npm install
-
Setup database:
- Create a PostgreSQL database named
kanban_db - Update
backend/.envwith your database connection string
- Create a PostgreSQL database named
-
Run migrations:
cd backend npx prisma generate npx prisma migrate dev --name init -
Start all services:
# From project root start.batThis will open separate windows for backend and frontend servers.
git clone <repository-url>
cd "XORO - Kanban Task Manager"- Create a PostgreSQL database:
CREATE DATABASE kanban_db;- Update the database connection string in
backend/.env:
DATABASE_URL="postgresql://username:password@localhost:5432/kanban_db?schema=public"cd backend
npm install
npx prisma generate
npx prisma migrate dev --name init
npm run devThe backend server will run on http://localhost:3001
Open a new terminal:
cd frontend
npm install
npm run devThe frontend will run on http://localhost:5173
- Create a Task: Click the "New Task" button in the header
- Edit a Task: Click the edit icon on a task card or click the task title
- Move a Task: Drag and drop a task card to a different column
- Delete a Task: Click the delete icon on a task card
XORO - Kanban Task Manager/
├── backend/
│ ├── src/
│ │ ├── config/
│ │ │ └── database.js # Prisma client configuration
│ │ ├── controllers/
│ │ │ └── taskController.js # Task CRUD operations
│ │ ├── middleware/
│ │ │ ├── errorHandler.js # Centralized error handling
│ │ │ └── notFound.js # 404 handler
│ │ ├── routes/
│ │ │ └── taskRoutes.js # API route definitions
│ │ ├── validators/
│ │ │ └── taskValidator.js # Zod validation schemas
│ │ └── server.js # Express server setup
│ ├── prisma/
│ │ └── schema.prisma # Database schema
│ └── package.json
├── frontend/
│ ├── src/
│ │ ├── components/
│ │ │ ├── AddTaskModal.jsx # Task creation modal
│ │ │ ├── ErrorBoundary.jsx # Error boundary component
│ │ │ ├── Header.jsx # App header
│ │ │ ├── KanbanColumn.jsx # Column component
│ │ │ ├── SkeletonLoader.jsx # Loading skeleton
│ │ │ └── TaskCard.jsx # Individual task card
│ │ ├── services/
│ │ │ └── api.js # API service layer
│ │ ├── App.jsx # Main app component
│ │ ├── main.jsx # React entry point
│ │ └── index.css # Global styles
│ └── package.json
├── start.bat # Windows startup script
├── start.sh # Linux/Mac startup script
└── README.md
GET /api/tasks- Get all tasksGET /api/tasks/:id- Get task by IDPOST /api/tasks- Create a new taskPUT /api/tasks/:id- Update a taskDELETE /api/tasks/:id- Delete a task
Create Task:
POST /api/tasks
{
"title": "Complete project documentation",
"description": "Write comprehensive README",
"status": "TODO"
}Update Task:
PUT /api/tasks/:id
{
"title": "Updated title",
"status": "IN_PROGRESS"
}model Task {
id String @id @default(uuid())
title String
description String?
status TaskStatus @default(TODO)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([status])
}
enum TaskStatus {
TODO
IN_PROGRESS
DONE
}- Reason: @dnd-kit is actively maintained, has better TypeScript support, and works well with React 18's concurrent features. It's also more performant and accessible.
- Reason: Zod provides runtime type safety, excellent error messages, and integrates seamlessly with TypeScript. It's more flexible than express-validator for complex validation scenarios.
- Reason: Prisma offers type-safe database access, excellent developer experience, and automatic migrations. The Prisma Client provides IntelliSense and compile-time error checking.
- Reason: Provides instant feedback to users, making the app feel more responsive. Errors are handled gracefully with rollback via toast notifications.
- Reason: Reduces friction in task management. Users can quickly edit tasks without opening a modal, improving workflow efficiency.
- Reason: Following Basco-inspired design principles ensures the application looks professional and modern. The minimalist approach with generous whitespace and subtle animations creates a calm, confident user experience.
- Create Tasks: Add multiple tasks with different statuses
- Drag & Drop: Move tasks between columns
- Edit Tasks: Click task titles or edit icons to modify tasks
- Delete Tasks: Remove tasks and verify they're deleted
- Refresh Test: Refresh the page - all data should persist
- Error Handling: Try creating a task without a title (should show validation error)
XORO is live and ready to use!
- 🚀 Production URL: https://xoro-rho.vercel.app (reload if app doesn't load at first time)😊
- 📱 Fully Responsive - Works on desktop, tablet, and mobile
- 🎨 Premium Features - Dark mode, search, focus mode, keyboard shortcuts
- ⚡ Instant Demo - No login required, start managing tasks immediately
- Visit https://xoro-rho.vercel.app
- Try Dark Mode - Click the moon/sun icon in the header
- Test Search - Press
Ctrl+Kor click the search icon - Create Tasks - Click "New Task" or press
Ctrl+N - Drag & Drop - Move tasks between columns
- Mobile Test - Resize browser to see responsive design
Deployment link = https://xoro-rho.vercel.app/ (if app doesn't opens on 1st time try again as vercel takes time to naturally connect with backend in railway)
-
Set environment variables:
DATABASE_URLPORTFRONTEND_URL
-
Run migrations:
npx prisma migrate deploy-
Set environment variable:
VITE_API_URL(your backend URL)
-
Build:
npm run buildPORT=3001
DATABASE_URL="postgresql://user:password@localhost:5432/kanban_db?schema=public"
FRONTEND_URL=http://localhost:5173VITE_API_URL=http://localhost:3001/api- Ensure PostgreSQL is running
- Verify DATABASE_URL in backend/.env is correct
- Run
npx prisma migrate devto create tables
- Check FRONTEND_URL in backend/.env matches your frontend URL
- Ensure backend server is running
- Change PORT in backend/.env
- Update VITE_API_URL in frontend/.env accordingly
- Check browser console for errors
- Verify backend server is running
- Check API connection in Network tab
- Ensure all dependencies are installed
This project is built for a technical evaluation/hackathon.
Built as a full-stack demonstration project showcasing modern web development practices by Ahad Dangarvawala.
Note: This application is production-ready and demonstrates best practices in full-stack development, including proper error handling, validation, and user experience considerations.