- Project Overview
- System Requirements
- Features
- System Architecture
- Tech Stack
- Database Schema
- Installation Guide
- Configuration
- Usage Guide
- API Documentation
- Deployment
- Security Considerations
- Testing
- Maintenance
- Contribution Guidelines
- License
This project is a Next.js-based CLUB WEBSITE designed to manage events, users, and future features of the DEBUG OIST Club. It utilizes Clerk Authentication, MongoDB, and shadcn/UI for a modern UI experience. The dashboard supports CRUD operations for events, user management, and email notifications via external services like SendGrid or Mailgun.
- CPU: Dual-core processor, 2.0 GHz or higher
- RAM: 4GB minimum, 8GB recommended
- Storage: 1GB of free disk space
- Internet: Broadband connection
- Node.js: v18.0.0 or higher
- npm/yarn/pnpm: Latest stable version
- MongoDB: v4.4 or higher (local or Atlas)
- Web Browser: Chrome (latest), Firefox (latest), Safari (latest), Edge (latest)
- Operating System: Windows 10/11, macOS 10.15+, or Linux
- Secure login and registration via Clerk
- Role-based access control (Admin, Member)
- User profile management
- Admin Features:
- Create, read, update, delete events
- View event registrations
- Export event data
- Send notifications to registered users
- Member Features:
- View upcoming and past events
- Register for events
- Cancel registration
- Admin Features:
- View all members
- Assign/modify roles
- Manage member status
- Member Features:
- View and edit own profile
- Track participation in events
- Responsive admin interface
- Analytics and reporting
- User activity monitoring
- Blog/Announcements module
- Resource library
- Discussion forum
The application follows a modern Next.js architecture with:
- Frontend: Server and client components
- Backend: API routes and Server Actions
- Authentication: External service (Clerk)
- Database: MongoDB connection
- File Storage: Cloudinary integration
-
Frontend:
- Next.js 14 (App Router)
- React 18
- Tailwind CSS
- shadcn/UI components
- Aceternity UI effects
- Zod (form validation)
- React Hook Form
-
Backend:
- Next.js API Routes
- Server Actions
- Mongoose ODM
-
Authentication:
- Clerk authentication
-
Database:
- MongoDB
-
Storage:
- Cloudinary (image uploads)
-
Email Service:
- SendGrid/Mailgun integration
-
State Management:
- React hooks (local state)
- Context API (global state)
The application uses MongoDB with the following main collections:
Managed by Clerk with additional profile data in MongoDB
- id: ObjectId (primary key)
- title: String (required)
- description: String (required)
- date: Date (required)
- time: String
- location: String
- imageUrl: String
- capacity: Number
- registrations: Array of user references
- status: String (upcoming, ongoing, completed, cancelled)
- createdAt: Date
- updatedAt: Date
- id: ObjectId (primary key)
- eventId: ObjectId (reference to Events)
- userId: String (reference to Clerk user)
- status: String (registered, attended, cancelled)
- registeredAt: Date
- Install Node.js (v18+) and npm/yarn/pnpm
- Install MongoDB locally or set up MongoDB Atlas account
- Register for Clerk authentication
- Set up Cloudinary account for image uploads
git clone https://github.com/AryanKumarOfficial/DebugOIST.git
cd DebugOIST
Using yarn:
yarn install
Using npm:
npm install
Using pnpm:
pnpm install
Create a .env.local
file based on .env.example
:
cp .env.example .env.local
Edit .env.local
with your specific credentials:
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key
CLERK_SECRET_KEY=your_clerk_secret_key
MONGO_URI=your_mongodb_connection_string
NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME=your_cloudinary_cloud_name
CLOUDINARY_API=your_cloudinary_api_key
CLOUDINARY_SECRET=your_cloudinary_api_secret
Using yarn:
yarn dev
Using npm:
npm run dev
Using pnpm:
pnpm dev
Access the website at http://localhost:3000
- Create an account at clerk.dev
- Set up an application and copy API keys
- Configure sign-in/sign-up methods as needed
- Local installation: Start MongoDB service
- Atlas: Create cluster and database
- Configure connection string in
.env.local
- Create an account at cloudinary.com
- Retrieve API credentials
- Configure in
.env.local
- Access
/dashboard
after logging in with admin credentials - Navigate through sidebar menu for different management features:
- Events management
- User management
- Settings
- Create events via "Add New Event" button
- Fill in event details including images
- Publish or save as draft
- Manage registrations for each event
- Users can sign up through the authentication system
- Admins can manage users through the dashboard
- Users can update their profiles
GET /api/events
- List all eventsPOST /api/events
- Create a new eventGET /api/events/:id
- Get event detailsPATCH /api/events/:id
- Update eventDELETE /api/events/:id
- Delete event
GET /api/registrations
- List all registrationsPOST /api/registrations
- Create registrationGET /api/registrations/:id
- Get registration detailsPATCH /api/registrations/:id
- Update registrationDELETE /api/registrations/:id
- Cancel registration
- Managed through Clerk with custom endpoints for additional functionality
- Connect your GitHub repository to Vercel
- Configure environment variables in Vercel dashboard
- Deploy with a single click:
vercel deploy
- Environment Variables: Store sensitive credentials securely
- Authentication: Implement proper authentication flows via Clerk
- Role-Based Access Control (RBAC): Restrict dashboard access to admins
- API Security: Validate input and implement rate limiting
- Data Validation: Use Zod for schema validation
- Regular Updates: Keep dependencies up to date
- Unit Tests: Component testing with React Testing Library
- Integration Tests: API route testing
- End-to-End Tests: Full application testing with Cypress
- Accessibility Testing: Ensure compliance with a11y standards
- Dependency Updates: Regular package updates via
yarn upgrade
ornpm update
- Performance Monitoring: Use Vercel Analytics
- Error Tracking: Implement error logging and monitoring
- Backup Strategy: Regular database backups
- Fork the repository.
- Create a new feature branch:
git checkout -b feature/your-feature-name
. - Commit your changes: Follow conventional commit messages.
- Push the branch:
git push origin feature/your-feature-name
. - Create a Pull Request: Provide clear description of changes.
- Follow TypeScript best practices
- Use ESLint and Prettier for code formatting
- Write meaningful commit messages
- Document new features
This project is MIT Licensed. Feel free to use and modify it for your needs.
🚀 Built with Next.js, MongoDB & Clerk Authentication.