I've built incredibly complex tables for clients in the past, but never had the chance to publish them or plan one myself from scratch and make all the decisions. This is my playground to build the table I've always wanted to create, while also practicing a product mindset - building iteratively based on real usage rather than over-engineering upfront.
Starting simple and adding features as I think of them or get annoyed by limitations.
- 📊 Advanced Data Table with sorting, filtering, and pagination
- 🔍 Multi-level Filtering (status, owner, date ranges, budget)
- 📱 Responsive Design that works on all screen sizes
- 🎨 Modern UI with Tailwind CSS and shadcn/ui components
- 📋 Project Management with tasks, budgets, and status tracking
- 💾 Database Integration with SQLite and Prisma ORM (only for dev, mock db in prod)
- ✏️ Live Editing - modify projects directly in the UI
- 🔄 Real-time Updates with automatic table refresh
- 🌓 Dark/Light Theme with system preference detection
- 🌍 Multi-language Support (EN/ES) with next-intl
- Frontend: Next.js 14, React 18, TypeScript
- Styling: Tailwind CSS, shadcn/ui components
- Table: TanStack React Table v8
- Database: SQLite with Prisma ORM
- API: Next.js API Routes with full CRUD operations
- State Management: React hooks and local state
- Internationalization: next-intl
The application uses SQLite with the following models:
id- Unique identifiername- Project namestatus- Project status (idea, active, paused, completed, cancelled)startDate/endDate- Project timelineowner- Project ownerbudgetCurrent/budgetSpent- Budget trackingtasks- Related tasks (one-to-many)
id- Unique identifiertitle- Task titlestatus- Task status (todo, in-progress, blocked, completed)assignee- Task assigneedueDate- Task due dateweight- Task priority weightcategory- Task categoryprojectId- Foreign key to project
GET /api/projects- Fetch all projects with tasksPOST /api/projects- Create new projectGET /api/projects/[id]- Get single projectPUT /api/projects/[id]- Update projectDELETE /api/projects/[id]- Delete project
- Node.js 18+
- npm or yarn
- Clone the repository
git clone <repository-url>
cd complex-data-table- Install dependencies
npm install- Set up the database
# Generate Prisma client
npx prisma generate
# Run database migrations
npx prisma migrate dev --name init
# Seed the database with sample data
npm run seed- Start the development server
npm run dev- Open your browser Navigate to http://localhost:3000
# View database in Prisma Studio
npx prisma studio
# Reset database and reseed
npx prisma migrate reset
# Generate new migration after schema changes
npx prisma migrate dev --name migration-name├── src/
│ ├── app/
│ │ ├── api/projects/ # API routes for CRUD operations
│ │ ├── globals.css # Global styles
│ │ ├── layout.tsx # Root layout
│ │ └── page.tsx # Home page
│ ├── components/
│ │ ├── ui/ # shadcn/ui components
│ │ ├── Table.tsx # Main data table component
│ │ ├── TableColumns.tsx # Column definitions
│ │ ├── TableFilters.tsx # Filter components
│ │ └── ProjectEditor.tsx # Project editing modal
│ ├── data/
│ │ └── projects.ts # Database service functions
│ ├── lib/
│ │ ├── prisma.ts # Prisma client instance
│ │ └── utils.ts # Utility functions
│ ├── types/
│ │ └── project.ts # TypeScript interfaces
│ └── utils/
│ └── filters.ts # Filtering logic
├── prisma/
│ ├── schema.prisma # Database schema
│ ├── seed.ts # Database seeding script
│ └── seed-data.ts # Sample project data
└── dev.db # SQLite database file
Live Demo: https://next-complex-table.vercel.app/
- GitHub Actions: Runs linting and build checks on every push/PR
- Vercel: Auto-deploys to production on main branch pushes
- Preview Deployments: Every PR gets its own preview URL
- Make changes locally
- Push to main branch
- GitHub Actions validates code (lint, build)
- Vercel automatically deploys to production
- Live site updates in ~2 minutes
- ✅ Phase 1: Basic Next.js setup with TypeScript and Tailwind CSS
- ✅ Phase 2: Implemented TanStack React Table with sorting and pagination
- ✅ Phase 3: Added comprehensive filtering system (status, owner, dates, budget)
- ✅ Phase 4: Enhanced UI with shadcn/ui components and responsive design
- ✅ Phase 5: Integrated task management with nested data display
- ✅ Phase 6: Added dark/light theme system with persistence
- ✅ Phase 7: Implemented multi-language support (EN/ES) with next-intl
- ✅ Phase 8: Added SQLite database with Prisma ORM for data persistence
- ✅ Phase 9: Implemented full CRUD API with Next.js API routes
- ✅ Phase 10: Built live editing interface with modal forms and real-time updates