A Next.js 14 (App Router) based Team Portal dashboard for viewing team registrations. Built with Tailwind CSS, React Query, Zod validation, and Zustand state management.
- View registered teams from
/api/teamendpoint - Search teams by name, university, or member details
- Responsive table layout with payment status indicators
- Type-safe runtime validation with Zod
- Optimized caching with React Query
- Framework: Next.js 14 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS + CSS Variables
- Data Fetching: React Query (@tanstack/react-query)
- Validation: Zod
- State: Zustand
- UI Components: Custom (shadcn/ui style)
npm installCopy .env.example to .env.local:
cp .env.example .env.localnpm run devVisit http://localhost:3000
npm run build
npm startsrc/
app/ # App router pages & layouts
layout.tsx # Root layout with providers
page.tsx # Homepage with navigation
team/page.tsx # Team directory page
components/team/ # Team-related UI components
Providers.tsx # React Query provider wrapper
TeamTable.tsx # Main data table
TeamRow.tsx # Individual team row
TeamFilters.tsx # Search & filter controls
lib/ # Core logic & data
api/ # API client & fetch functions
models/team.ts # Zod schemas & TypeScript types
hooks/ # React Query hooks
state/ # Zustand stores
utils/ # Helper functions
styles/ # Global CSS with design tokens
Consumes team data from NEXT_PUBLIC_API_BASE/team with structure:
{
_id: string;
teamName: string;
university: string;
payment?: { slip: string };
members: Array<{
_id: string;
name: string;
email: string;
phone: string;
createdAt: string;
}>;
createdAt: string;
__v?: number;
}npm run dev– Start development servernpm run build– Build production bundlenpm run start– Start production servernpm run lint– Run ESLint
- Filters: University dropdown, date range picker
- Team Details: Drawer/modal with full member info + payment slip view
- Stats Dashboard: Team count, university breakdown, payment status charts
- Export: CSV/PDF export functionality
- Virtualization: Handle large datasets with
@tanstack/react-virtual - Auth: Proxy route with authentication if required
- Tests: Jest + RTL component tests, Playwright E2E
- TypeScript errors will resolve after
npm install - Tailwind classes are validated during build process
- React Query provides automatic caching & background refetch
- Search filters teams, universities, and member names/emails
- Payment status badge shows "Paid" (green) or "Pending" (amber)
Internal / Proprietary