🎨 Premium UI with dark/light mode
💎 Glassmorphism, neon glows & smooth animations
⚡ Cyberpunk-themed loading screen
🔤 Scroll-triggered font cycling on hero
📅 Dynamic events listing from database
👥 Team member profiles with priority ordering
📩 Contact form with email validation
📱 Fully responsive (mobile-first)
🔑 JWT-secured admin authentication
📅 Create / Edit / Delete events with image gallery
👥 Manage team members with photo uploads
📩 View & manage contact messages (read/unread)
📊 Registration analytics with charts
📥 Export registrations to Excel
📄 Generate PDF receipts
🖼️ Cloudinary-powered gallery management
📝 Event Registration System
📋 Multi-step registration form (6 steps)
💰 UPI payment with screenshot verification
🏨 Optional accommodation booking
🛡️ 13-point server-side validation
🚫 Anti-spam honeypot + rate limiting
🔢 Auto-generated registration IDs
📲 Telegram Bot — real-time registration alerts with inline Confirm/Reject buttons
📧 Brevo Email — automated confirmation emails with PDF receipts attached
☁️ Cloudinary — image upload, storage & CDN
📊 Recharts — dashboard analytics
🎉 Confetti — celebration effects
ieee-sps-website/
│
├── src/ # Frontend source
│ ├── components/ # 12 custom components
│ │ ├── Navbar.tsx # Glassmorphism nav with scroll spy
│ │ ├── HeroSection.tsx # Full-screen hero with font cycling
│ │ ├── AboutSection.tsx # Mission, vision & highlights
│ │ ├── StatsSection.tsx # Chapter impact statistics
│ │ ├── EventsSection.tsx # Events list from API
│ │ ├── TeamSection.tsx # Team grid from API
│ │ ├── ContactSection.tsx # Contact form
│ │ ├── Footer.tsx # Socials with neon glow
│ │ ├── LoadingScreen.tsx # Cyberpunk loading animation
│ │ ├── ThemeToggle.tsx # Dark/light mode
│ │ └── ui/ # 49 shadcn/ui components
│ │
│ ├── pages/ # 10 page components
│ │ ├── Home.tsx # Landing page
│ │ ├── AdminLogin.tsx # Admin auth
│ │ ├── Dashboard.tsx # Admin control panel (75KB)
│ │ ├── ArduinoDays.tsx # Arduino Days 2026 event page
│ │ ├── Register.tsx # Multi-step registration (71KB)
│ │ ├── EventDetails.tsx # Single event + gallery
│ │ ├── TeamDetails.tsx # Member profile
│ │ └── NotFound.tsx # 404 page
│ │
│ ├── hooks/ # Custom React hooks
│ └── lib/ # Utilities
│
├── backend/ # Backend source
│ ├── server.js # Express entry point
│ ├── config/
│ │ └── cloudinary.js # Cloudinary setup
│ ├── middleware/
│ │ └── verifyToken.js # JWT auth middleware
│ ├── models/ # 6 Mongoose schemas
│ │ ├── admin.js
│ │ ├── event.js
│ │ ├── team.js
│ │ ├── contact.js
│ │ ├── registration.js
│ │ └── counter.js
│ ├── routes/ # 7 API route modules
│ │ ├── adminRoutes.js
│ │ ├── eventRoutes.js
│ │ ├── teamRoutes.js
│ │ ├── contactRoutes.js
│ │ ├── registrationRoutes.js # 924 lines — full reg flow
│ │ ├── uploadRoutes.js
│ │ └── galleryRoutes.js
│ ├── controllers/
│ │ └── galleryController.js
│ └── utils/
│ ├── mailer.js # Brevo email sender
│ └── receiptTemplate.js # HTML email template
│
└── public/ # Static assets & logos
git clone https://github.com/Sanjaykumar9441/ieee-sps-website.git
cd ieee-sps-website
Opens at http://localhost:5173
Create a .env file inside the backend/ folder:
MONGO_URI = your_mongodb_connection_string
PORT = 5000
JWT_SECRET = your_jwt_secret_key
CLOUDINARY_CLOUD_NAME = your_cloud_name
CLOUDINARY_API_KEY = your_api_key
CLOUDINARY_API_SECRET = your_api_secret
BREVO_API_KEY = your_brevo_api_key
TELEGRAM_BOT_TOKEN = your_telegram_bot_token
TELEGRAM_CHAT_ID = your_telegram_chat_id
Start the server:
Runs at http://localhost:5000
🔐 Admin
Method
Endpoint
Auth
Description
POST
/admin/login
❌
Login → returns JWT (1 day expiry)
📅 Events
Method
Endpoint
Auth
Description
GET
/events
❌
Get all events
GET
/events/:id
❌
Get single event
POST
/events
✅
Create event (+ image upload)
PUT
/events/:id
✅
Update event
DELETE
/events/:id
✅
Delete event
👥 Team
Method
Endpoint
Auth
Description
GET
/team
❌
Get all members (sorted by priority)
GET
/team/:id
❌
Get single member
POST
/team
✅
Add member (+ photo upload)
PUT
/team/:id
✅
Update member
DELETE
/team/:id
✅
Delete member
📩 Contact
Method
Endpoint
Auth
Description
POST
/contact
❌
Submit message
GET
/contact
✅
Get all messages
DELETE
/contact/:id
✅
Delete message
📝 Registration
Method
Endpoint
Auth
Description
GET
/api/registrations
✅
Get all registrations
GET
/api/check-team
❌
Check duplicate team name
POST
/api/register
❌
Submit registration (rate-limited)
PUT
/api/confirm/:id
✅
Confirm → Telegram + Email
DELETE
/api/:id
✅
Reject/delete registration
POST
/api/send-confirmation-email
❌
Send email with PDF receipt
POST
/api/telegram-webhook
❌
Telegram bot callbacks
📤 Upload & Gallery
Method
Endpoint
Auth
Description
POST
/api/upload
❌
Upload image to Cloudinary (5MB max)
GET
/api/gallery/:day
❌
Get gallery images by day
Admin → email, password (bcrypt hashed)
Event → title, description, date, location, status, images[]
Team → name, role, department, email, phone, photo, priority
Contact → name, email, message, read, createdAt
Registration → eventType, teamName, teamSize, teamMembers[], payment{}, status
Counter → name, seq
Script
Command
Description
Dev
npm run dev
Start Vite dev server
Build
npm run build
Production build
Preview
npm run preview
Preview production build
Lint
npm run lint
Run ESLint
Test
npm run test
Run Vitest tests
Metric
Value
Total custom code
~8,200 lines
Frontend components
12 custom + 49 shadcn/ui
Pages
10
API endpoints
20+
Database models
6
External integrations
7
Chitturi Sanjay Kumar
IEEE SPS Vice Chair · Aditya University
IEEE Signal Processing Society · Student Branch Chapter
Aditya University, Surampalem, Andhra Pradesh
⚡ Advancing signal processing research, fostering innovation, and building a globally connected technical community.