A modern event aggregation platform built with Next.js 15, TypeScript, Tailwind CSS, and Supabase. Features granular permission-based RBAC, server-side rendering, and a clean component architecture.
- Framework: Next.js 15 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- Backend & Auth: Supabase
- Forms: React Hook Form + Yup
- Package Manager: pnpm
- Event aggregation and management
- Role-based access control (RBAC) with granular permissions
- Secure authentication via Supabase Auth
- Responsive UI with Tailwind CSS
- Form validation with React Hook Form + Yup
- Toast notifications
- Node.js >= 22.0.0
- pnpm >= 10.0.0
- Docker (optional)
git clone <repository-url>
cd tikoom
pnpm installcp .env.example .env.localFill in your Supabase credentials:
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_keypnpm devOpen http://localhost:4000 to view the app.
# Reset database and apply all migrations + seed
pnpm supabase db reset| Command | Description |
|---|---|
pnpm dev |
Start development server on port 4000 |
pnpm build |
Build for production |
pnpm start |
Start production server |
pnpm lint |
Run ESLint |
# Build image
docker build -t tikoom .
# Run container
docker run -p 8080:8080 tikoomsrc/
├── app/ # Next.js App Router
├── components/ # UI components (Atomic Design)
├── hooks/ # Feature-specific custom hooks
├── interfaces/ # TypeScript interfaces
├── services/ # API calls & Supabase config
├── types/ # Global type declarations
└── utils/ # Utility functions
supabase/
├── migrations/ # Database schema migrations
└── seed.sql # Development seed data
This project implements granular permission-based access control:
- Roles: Flexible definitions stored in
public.roles - Permissions: Enum-based (
public.app_permission) - Assignment:
public.user_roleslinks users to roles - Enforcement: Row Level Security (RLS) policies via
authorize()function
Default roles: super_admin, admin, user