A comprehensive event management platform for FPT University, enabling administrators to manage events, speakers, and venues, while allowing students to register for events, receive QR-coded tickets, and check in seamlessly.
- Role-Based Access Control: Admin, Staff, and Student roles with appropriate permissions
- Event Management: Create, edit, and manage university events with categories
- Speaker & Venue Management: Maintain databases of speakers and venues
- Student Registration: Browse and register for events with capacity management
- QR Code Tickets: Automatic QR code generation for event tickets
- Check-in System: Staff can scan QR codes to check in attendees
- Real-time Validation: Duplicate check-in prevention and event status verification
- Reporting Dashboard: Analytics and statistics for event attendance (Coming Soon)
- Frontend: Next.js 14 (App Router), React, TypeScript, Tailwind CSS
- Backend: Next.js API Routes
- Database: PostgreSQL with Prisma ORM
- Authentication: NextAuth.js v5
- UI Components: Radix UI, shadcn/ui
- QR Codes: qrcode.react
- Node.js 18+ and npm
- PostgreSQL database running locally or remotely
npm installCreate a .env file in the root directory:
DATABASE_URL="postgresql://user:password@localhost:5432/fpt_events?schema=public"
NEXTAUTH_URL="http://localhost:3000"
NEXTAUTH_SECRET="your-super-secret-key-change-this"Replace the DATABASE_URL with your PostgreSQL connection string.
Run Prisma migrations:
npx prisma migrate dev --name initSeed the database with sample data:
npx prisma db seedThis will create:
- Admin account:
admin@fpt.edu.vn/admin123 - Staff account:
staff@fpt.edu.vn/staff123 - Student account:
student@fpt.edu.vn/student123 - Sample speakers, venues, and events
npm run devOpen http://localhost:3000 to view the application.
- Email:
admin@fpt.edu.vn - Password:
admin123 - Permissions: Full access to all features
- Email:
staff@fpt.edu.vn - Password:
staff123 - Permissions: Event check-in access
- Email:
student@fpt.edu.vn - Password:
student123 - Permissions: Browse events, register, view tickets
- Browse Events: View all published events on the Events page
- Register: Click on an event and click "Register Now"
- View Ticket: Access your QR code ticket from "My Registrations"
- Check-in: Show your QR code at the event entrance
- Check-in Attendees: Navigate to the Check-in page
- Scan QR Codes: Use the manual entry field (camera integration requires HTTPS)
- View Recent Check-ins: Monitor real-time check-in activity
- Manage Events: Create, edit, or cancel events
- Manage Speakers: Add and update speaker information
- Manage Venues: Maintain venue database
- View Analytics: Access reports and statistics (Coming Soon)
src/
├── app/
│ ├── (dashboard)/ # Protected dashboard routes
│ │ ├── events/ # Event pages
│ │ ├── registrations/ # Registration & ticket pages
│ │ ├── checkin/ # Check-in scanner
│ │ └── layout.tsx # Dashboard layout with navbar
│ ├── api/ # API routes
│ │ ├── auth/ # NextAuth endpoints
│ │ ├── events/ # Event CRUD
│ │ ├── registrations/ # Registration endpoints
│ │ └── checkin/ # Check-in endpoint
│ ├── login/ # Login page
│ └── layout.tsx # Root layout
├── components/ # Reusable components
│ ├── ui/ # shadcn/ui components
│ ├── EventCard.tsx
│ ├── Navbar.tsx
│ └── ...
├── lib/
│ ├── auth.ts # NextAuth configuration
│ ├── prisma.ts # Prisma client
│ └── utils.ts # Utility functions
└── types/ # TypeScript type definitions
prisma/
├── schema.prisma # Database schema
└── seed.ts # Seed script
GET /api/events- List events (with filters)GET /api/events/[id]- Get event detailsPOST /api/events- Create event (Admin)PUT /api/events/[id]- Update event (Admin)DELETE /api/events/[id]- Cancel event (Admin)
GET /api/registrations- Get user's registrationsPOST /api/registrations- Register for event
POST /api/checkin- Check in with QR code (Staff/Admin)
- User: Authentication and role management
- Event: Event details with status and capacity
- Speaker: Speaker information
- Venue: Venue information with facilities
- Registration: Event registrations with QR codes
- CheckIn: Check-in records
npm run dev # Start development server
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLint
npm run type-check # TypeScript type checking
npx prisma studio # Open Prisma Studio (database GUI)- Camera-based QR scanner
- Email notifications for tickets
- Analytics dashboard
- Event feedback collection
- Calendar integration
- Mobile app
This project is for educational purposes as part of FPT University coursework.