AcademiX is a dynamic full‑stack student dashboard built with Node.js Express Flask React and MongoDB enhanced by Python and dlib-powered facial recognition Cloudinary media storage Nodemailer for secure password recovery and styled with Tailwind CSS. It seamlessly integrates RESTful and GraphQL APIs features live weather updates and syncs class reminders with Google Calendar. Students can track attendance across over five subjects monitor coding performance from three platforms and securely store academic documents—all within one intelligent and responsive portal. This well-structured dashboard exemplifies modern best practices in e-learning platforms and dashboard design.
Technologies used in the project:
| Node.js | Express.js | React.js |
| MongoDB | Flask | Cloudinary |
| Google Calendar API | Python | dlib |
| Tailwind CSS | Nodemailer | RESTful APIs |
| GraphQL APIs |
1. Clone Repository
git clone https://github.com/gitsubh7/AcademiX.git
2. Enter into the Directory
cd AcademiX
3. Enter Backend
cd Backend
4. Install Backend Dependencies
npm install
5. Enter Frontend
cd ..
cd Frontend
6. Install Frontend Dependencies
npm install
7. Setup Environment Variables ( create same .env in ML folder and Backend Folder)
Refer in the next section
8. Launch Backend
cd ..
cd Backend
npm run dev
9. Launch Frontend
cd ..
cd Frontend
npm run dev
10. Setup ML Server
cd ..
pip install -r requirements.txt
python face_recog.py
🌍 Frontend URL
https://academixportal.vercel.app
http://localhost:3001
The backend server uses the following environment variables, which should be configured in a .env file at the root of the project:
MONGODB_URI– MongoDB connection string (use your own MongoDB Atlas URI or local URI)
PORT– Main backend server port (e.g., 3000)PORT2– Additional port (e.g., for testing/microservices)CORS_ORIGIN– Allowed origin for CORS requests (*for public, or restrict to frontend URL)FRONTEND_ORIGIN– Frontend application origin (used in cookies/CORS)
ACCESS_TOKEN_SECRET– Secret key for generating JWT access tokensREFRESH_TOKEN_SECRET– Secret key for generating JWT refresh tokensACCESS_TOKEN_EXPIRY– Expiry duration for access tokens (e.g.,15m)REFRESH_TOKEN_EXPIRY– Expiry duration for refresh tokens (e.g.,7d)JWT– Additional JWT secret (used for fallback or legacy purposes)
CLOUDINARY_CLOUD_NAME– Cloudinary cloud nameCLOUDINARY_API_KEY– API key for CloudinaryCLOUDINARY_API_SECRET– API secret for Cloudinary
EMAIL– Sender Gmail address (used via Nodemailer)PASSWORD– App password or SMTP password for the email account
GOOGLE_API_KEY– Google Cloud API KeyGOOGLE_CLIENT_ID– OAuth2 client ID from Google Cloud ConsoleGOOGLE_CLIENT_SECRET– OAuth2 client secretGOOGLE_REDIRECT_URI– OAuth2 redirect URI (must match Google Cloud Console setting)
⚠️ Important: Never commit your.envfile to version control (e.g., GitHub). Always add it to your.gitignore.
http://localhost:3000/api/v1https://academixportal.vercel.app/api/v1
-
POST /student/register
Register a new student (with profile image upload usingimage_urlfield). -
POST /student/login
Login student and receive JWT token. -
POST /student/logout
Logout the student (requires JWT).
-
GET /student/getStudent
Get the currently logged-in student's profile. -
POST /student/updateStudent
Update student profile data. -
POST /student/updateProfileImage
Update profile image (requires image file viaimage_urlfield). -
POST /student/changePassword
Change password for authenticated user.
-
POST /student/requestPasswordReset
Request password reset (OTP/email-based). -
POST /student/passwordReset
Complete password reset using OTP/token.
-
POST /student/addCourse
Add a new course to the student's profile. -
POST /student/editCourse
Edit an existing course. -
DELETE /student/removeCourse
Remove a course from the profile.
-
POST /student/markAbsent
Mark the student as absent. -
POST /student/markPresent
Mark the student as present. -
GET /student/getAttendance
Retrieve attendance history and summary.
-
POST /student/uploadDocument
Upload a document file (requireslocalDocumentfield). -
GET /student/getAllDocuments
Get all uploaded documents for the student. -
DELETE /student/deleteDocument/:id
Delete a document by its ID.
-
GET /student/google
Start Google OAuth2 login flow. -
GET /student/google/redirect
Handle OAuth2 redirect, save tokens. -
POST /student/addClass
Add a class event to Google Calendar.
-
GET /student/github/:username
Get public GitHub profile data. -
GET /student/codeforces/:username(JWT required)
Get Codeforces user data. -
GET /student/leetcode/:username(JWT required)
Get LeetCode user profile data.
-
GET /student/codeForcesRankings
Global Codeforces leaderboard. -
GET /student/leetcodeRankingsC
LeetCode contest-based rankings. -
GET /student/leetcodeRankingsQ
LeetCode problem-solved-based rankings.
-
GET /weather/patna
Get real-time weather details for Patna. -
GET /weather/bihta
Get real-time weather details for Bihta.
The frontend of AcademiX is deployed using Vercel and connects to the backend hosted on Render.
🔗 Live Site:
👉 https://academixportal.vercel.app/
You can explore all major features in the live version including Google Calendar integration, document storage, attendance tracking, and coding profile visualization.
AcademiX uses Vite + React for the frontend. When deploying on Vercel, make sure to:
✅ Add the following environment variable in Vercel (Project → Settings → Environment Variables):
| Variable | Value |
|---|---|
| VITE_BACKEND_URL | https://academix-c70l.onrender.com |
✅ Create a vercel.json file in your /Frontend directory to enable proper client-side routing:
📁 Frontend/vercel.json:
{
"rewrites": [
{ "source": "/(.*)", "destination": "/" }
]
}






