Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

84 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

MaVi Linking πŸš€

MaVi Linking is a next-generation, AI-Powered Developer Intelligence Platform. It aggregates your developer footprint across multiple coding platforms (GitHub, LeetCode, Codeforces), leverages AI (Gemini / OpenAI) to generate deep technical insights, and produces a personalized "Developer DNA" profile with comparative global rankings β€” all in one sleek, glassmorphic dashboard.

Built for Students, Recruiters, and Educators alike, MaVi Linking provides role-specific dashboards so every stakeholder gets exactly the intelligence they need.


🌟 Key Features

🧠 AI-Powered Intelligence

  • Uses Google Gemini / OpenAI LLMs to analyze problem-solving patterns, coding consistency, and technical stack depth.
  • Generates a unique Developer DNA profile and dimensioned performance scores (Development, Problem Solving, Knowledge).

πŸ”— Cross-Platform Aggregation

  • GitHub β€” Public repositories, language breakdown, contribution activity, and star counts.
  • LeetCode β€” Contest ratings, problem breakdown (Easy / Medium / Hard), badges, recent submissions, and AI-driven insights via the Alfa API.
  • Codeforces & StackOverflow β€” Platform slots ready for linking and data sync.

πŸ‘₯ Multi-Role Dashboards

Role Dashboard Highlights
Student / User Personal analytics, account linking, AI insights, project portfolio, compatibility checker
Recruiter Talent search & filtering, candidate comparison, bookmarking, AI-verified technical profiles
Teacher / Educator Student roster management, industry-readiness reports, department leaderboards

πŸ† Global Ranking & Gamification

  • Computes an overall score from Development, Problem Solving, and Knowledge metrics.
  • Places users in tiers β€” Bronze β†’ Silver β†’ Gold β†’ Platinum β†’ Elite Developer.
  • Global and department-scoped leaderboards.

πŸ“Š Interactive Data Visualization

  • Modern glassmorphic UI with Recharts β€” Problem Breakdown charts, Growth timelines, Skill Radars, and Activity Feeds.
  • Smooth Framer Motion animations throughout.

🌍 Public Identity & QR Codes

  • Share your aggregated developer profile via a public /u/:username link.
  • Auto-generated QR codes for embedding on resumes and portfolios.
  • SEO / OpenGraph metadata endpoint for rich link previews.

🀝 Team Compatibility & Collaboration

  • Upgraded Picker β€” Search developers by name/username via a debounced, autocomplete dropdown showing avatars, university, and performance scores.
  • Matches students with projects, teams, or roles using an AI-analyzed multi-dimensional compatibility engine (skills, coding behavior, personality, work styles).

πŸ’Ό Candidate Availability & Placement Management

  • Placement Tracking β€” Tracks candidate placement lifecycle (Available for Hiring, Under Review, Interview Scheduled, Offer Received, Offer Accepted, Placed / Hired).
  • Transparency-First Search β€” Placed candidates remain discoverable in recruiter searches but display clear badge indications (e.g. Placed @ Company).
  • Recruiter Kanban Pipeline β€” Visual board for recruiters to manage applicants, schedule interviews (online/offline/hybrid), offer details (CTC, joining date), and handle workflow transitions.
  • Availability Toggles β€” Granular student settings (e.g., Open to Opportunities, Internship vs Full-Time, Hide Profile).

⚑ Real-Time Notification Center

  • Dynamic Alerts β€” Real-time in-app notifications (via Socket.io and DB storage) for students regarding interview scheduling, pipeline starts, and offer releases.
  • Portal-based navigation header dropdown with unread badges, individual, and batch read actions.

πŸ› Recent Bug Fixes

  • Overlay Stacking / Z-Index Fix β€” Fixed the notification center dropdown painting behind active dashboard elements due to layout stacking contexts. Re-implemented the overlay using ReactDOM.createPortal targeting document.body.
  • Compatibility Upsert Query Inference β€” Fixed a MongoDB driver crash (path 'userIds' is matched twice) when generating team compatibility records with array filter query operators. Resolved by decoupling check and write operations into explicit findOne and write calls.

πŸ› οΈ Technology Stack

Frontend

Category Technology
Core React 19 (Vite 8)
Routing React Router DOM v7
State React Context API
Styling Vanilla CSS (glassmorphic design system)
Animations Framer Motion
Charts Recharts
Icons Lucide React
HTTP Axios
Real-Time Socket.IO Client
Utilities clsx

Backend

Category Technology
Core Node.js & Express.js
Database MongoDB & Mongoose
Auth JWT (jsonwebtoken) & bcryptjs
Validation express-validator
Security Helmet, CORS, express-rate-limit
AI @google/generative-ai (Gemini) & openai
Caching node-cache
Real-Time Socket.IO
PDF PDFKit
QR qrcode
Logging Morgan
Dev Nodemon

πŸš€ Getting Started

Prerequisites

  • Node.js v16 or higher
  • MongoDB (local instance or MongoDB Atlas)
  • AI API Key β€” Google Gemini API Key and/or OpenAI API Key

1. Clone the Repository

git clone https://github.com/Mayur51015/Mavi-Linking.git
cd Mavi-Linking

2. Backend Setup

cd server
npm install

Create a .env file in the server/ directory:

PORT=5000
NODE_ENV=development
MONGODB_URI=your_mongodb_connection_string
JWT_SECRET=your_super_secret_jwt_key
CLIENT_URL=http://localhost:5173

# AI APIs (provide at least one)
GEMINI_API_KEY=your_gemini_api_key
OPENAI_API_KEY=your_openai_api_key

Start the backend:

npm run dev

3. Frontend Setup

Open a new terminal:

cd client
npm install

Create a .env file in the client/ directory (optional β€” defaults to localhost):

VITE_API_URL=http://localhost:5000/api

Start the frontend:

npm run dev

The app will be available at http://localhost:5173.


πŸ” Environment Variables

Backend (server/.env)

Variable Description
PORT API port (default: 5000)
NODE_ENV development or production
MONGODB_URI MongoDB connection string
JWT_SECRET Secret key for signing JWTs
CLIENT_URL Frontend URL for CORS (e.g. http://localhost:5173)
GEMINI_API_KEY Google Gemini API key
OPENAI_API_KEY OpenAI API key (fallback)

Frontend (client/.env)

Variable Description
VITE_API_URL Backend API base URL

πŸ“‘ API Endpoints

The backend exposes a modular REST API with role-based access control:

Prefix Description Auth
/api/auth Registration, login, profile updates, /me Public / JWT
/api/platforms GitHub account linking & data sync JWT
/api/leetcode LeetCode analytics sync & retrieval JWT
/api/scores Ranking, gamification scores, leaderboard JWT
/api/projects Portfolio project CRUD JWT
/api/portfolio Public portfolio data Public
/api/ai AI insight generation (Developer DNA) JWT
/api/recruiter Talent search, bookmarks, candidate analytics JWT (Recruiter)
/api/teacher Student management, readiness reports JWT (Teacher)
/api/education University & department data JWT
/api/compatibility Skill-based compatibility matching JWT
/api/verification Platform verification tokens JWT
/api/public/u/:username Public profile aggregation Public
/api/public/qr/:username QR code generation Public
/api/public/meta/:username SEO / OpenGraph metadata Public
/api/health API health check Public

πŸ“ Project Structure

Mavi-Linking/
β”œβ”€β”€ client/                       # React Frontend (Vite)
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ api/                  # Axios instance & interceptors
β”‚   β”‚   β”œβ”€β”€ assets/               # Static assets (logos, images)
β”‚   β”‚   β”œβ”€β”€ components/           # Reusable UI widgets
β”‚   β”‚   β”‚   β”œβ”€β”€ leetcode/         #   └─ LeetCode-specific components
β”‚   β”‚   β”‚   β”œβ”€β”€ DNACard.jsx       #   └─ Developer DNA display
β”‚   β”‚   β”‚   β”œβ”€β”€ SkillRadar.jsx    #   └─ Radar chart component
β”‚   β”‚   β”‚   β”œβ”€β”€ GrowthChart.jsx   #   └─ Growth timeline
β”‚   β”‚   β”‚   β”œβ”€β”€ LeaderboardWidget.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ QRModal.jsx       #   └─ QR code modal
β”‚   β”‚   β”‚   └── ReportGenerator.jsx
β”‚   β”‚   β”œβ”€β”€ context/              # React Context (AuthContext)
β”‚   β”‚   β”œβ”€β”€ layouts/              # Role-specific shell layouts
β”‚   β”‚   β”‚   β”œβ”€β”€ UserLayout.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ RecruiterLayout.jsx
β”‚   β”‚   β”‚   └── TeacherLayout.jsx
β”‚   β”‚   β”œβ”€β”€ pages/                # Full-page views
β”‚   β”‚   β”‚   β”œβ”€β”€ recruiter/        #   └─ Recruiter dashboard pages
β”‚   β”‚   β”‚   β”œβ”€β”€ teacher/          #   └─ Teacher dashboard pages
β”‚   β”‚   β”‚   β”œβ”€β”€ Dashboard.jsx     #   └─ Student dashboard
β”‚   β”‚   β”‚   β”œβ”€β”€ Home.jsx          #   └─ Landing page
β”‚   β”‚   β”‚   β”œβ”€β”€ Login.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Register.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ PublicIdentity.jsx
β”‚   β”‚   β”‚   └── ...
β”‚   β”‚   β”œβ”€β”€ routes/               # ProtectedRoute (role-aware)
β”‚   β”‚   β”œβ”€β”€ App.jsx               # Top-level routing
β”‚   β”‚   β”œβ”€β”€ index.css             # Global design system
β”‚   β”‚   └── main.jsx              # Vite entry point
β”‚   └── package.json
β”‚
β”œβ”€β”€ server/                       # Node/Express Backend
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ config/               # DB connection & Socket.IO setup
β”‚   β”‚   β”œβ”€β”€ controllers/          # Route handlers
β”‚   β”‚   β”‚   β”œβ”€β”€ authController.js
β”‚   β”‚   β”‚   β”œβ”€β”€ aiController.js
β”‚   β”‚   β”‚   β”œβ”€β”€ leetcodeController.js
β”‚   β”‚   β”‚   β”œβ”€β”€ recruiterController.js
β”‚   β”‚   β”‚   β”œβ”€β”€ teacherController.js
β”‚   β”‚   β”‚   β”œβ”€β”€ scoreController.js
β”‚   β”‚   β”‚   β”œβ”€β”€ compatibilityController.js
β”‚   β”‚   β”‚   └── ...
β”‚   β”‚   β”œβ”€β”€ middleware/           # Auth, role-guard, validation, error handling
β”‚   β”‚   β”‚   β”œβ”€β”€ auth.js
β”‚   β”‚   β”‚   β”œβ”€β”€ roleMiddleware.js
β”‚   β”‚   β”‚   β”œβ”€β”€ validate.js
β”‚   β”‚   β”‚   └── errorHandler.js
β”‚   β”‚   β”œβ”€β”€ models/               # Mongoose schemas
β”‚   β”‚   β”‚   β”œβ”€β”€ User.js           #   └─ Multi-role user model
β”‚   β”‚   β”‚   β”œβ”€β”€ DNA.js
β”‚   β”‚   β”‚   β”œβ”€β”€ LeetCodeAnalytics.js
β”‚   β”‚   β”‚   β”œβ”€β”€ Ranking.js
β”‚   β”‚   β”‚   β”œβ”€β”€ Project.js
β”‚   β”‚   β”‚   β”œβ”€β”€ Compatibility.js
β”‚   β”‚   β”‚   └── ...
β”‚   β”‚   β”œβ”€β”€ routes/               # Express route definitions
β”‚   β”‚   β”œβ”€β”€ services/             # Business logic & external API integrations
β”‚   β”‚   β”‚   β”œβ”€β”€ aiAnalyzer.js
β”‚   β”‚   β”‚   β”œβ”€β”€ leetcodeService.js
β”‚   β”‚   β”‚   β”œβ”€β”€ recruiterService.js
β”‚   β”‚   β”‚   β”œβ”€β”€ teacherService.js
β”‚   β”‚   β”‚   β”œβ”€β”€ compatibilityService.js
β”‚   β”‚   β”‚   └── ...
β”‚   β”‚   └── server.js             # Express app entry point
β”‚   └── package.json
β”‚
β”œβ”€β”€ README.md
└── TODO.md

🚒 Deployment

Backend (Render / Railway / Heroku)

  1. Ensure your MongoDB Atlas cluster allows external connections (0.0.0.0/0).
  2. Push the server/ code and link it to your hosting provider.
  3. Add all production environment variables from .env.
  4. Set the Start Command to npm start (runs node src/server.js).

Frontend (Vercel / Netlify)

  1. Link your frontend repo to Vercel or Netlify.
  2. Set Build Command to npm run build and Output Directory to dist.
  3. Add VITE_API_URL pointing to your deployed backend (e.g. https://your-api.onrender.com/api).
  4. Deploy!

🀝 Contributing

We welcome contributions!

Please read our Contributing Guide before claiming an issue.

Issue assignment is generally first-come, first-served. Please wait for maintainer confirmation before starting work.

Contributions, issues, and feature requests are welcome!
Feel free to check the issues page.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“ License

This project is licensed under the ISC License.


Built with ❀️ by MaVi

About

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages