One connected ecosystem for a student's entire university journey β from day one to placement, and beyond.
- Problem Statement
- Our Solution
- System Architecture
- How the Journey Connects
- AI Layer
- Tech Stack
- Project Structure
- Features
- Getting Started
- Environment Variables
A student walks onto campus and, from day one, is on their own to figure out what actually matters.
Academics happen in one place. Clubs and activities happen in another. Projects, certifications, mentorship, and placement preparation are treated as separate things.
Then final year arrives, and students are expected to turn years of disconnected activity into a rΓ©sumΓ©.
Result: students feel lost and disconnected β treating "doing well academically" and "preparing for placement" as two different jobs, when they were always one.
It's not just students who are in the dark:
- Organizations have little visibility into what students are actually doing or building until placement season makes it urgent.
- Recruiters are handed a rΓ©sumΓ© and have to take it on faith β without a verified picture of the person behind it.
- Faculty see students through individual academic or mentorship interactions instead of one continuous journey.
RyuZen connects the student's entire university journey into one system.
Every meaningful activity can contribute to a larger record of growth β connecting campus participation, academics, skills, portfolio development, and placement readiness.
| Stage | What happens |
|---|---|
| Academics | Assessments, attendance, submissions, and mentorship are tracked |
| Campus Life | Activities, clubs, events, badges, certificates, and points build participation history |
| Portfolio | Projects, experience, education, certifications, and achievements form a career profile |
| Skills | Skills can be identified from actual evidence rather than existing only as self-declared claims |
| Career | Resume analysis, coding profiles, mock interviews, recommendations, and career scoring support preparation |
| Placements | Companies, drives, eligibility, applications, interviews, and outcomes are connected end-to-end |
By the time a student is job-hunting, their profile should be a record of what they actually did β not just what they wrote on a rΓ©sumΓ©.
RyuZen is organized as a layered platform where role-based portals connect to domain-driven backend services, real-time communication, AI providers, and persistent storage.
flowchart TB
%% ================= USERS =================
subgraph USERS["USERS Β· ROLE-BASED ACCESS"]
direction LR
ST["π¨βπ Student"]
FA["π©βπ« Faculty"]
OA["π’ Organization Admin"]
PA["π Placement Admin"]
RE["πΌ Recruiter"]
AL["π Alumni"]
SA["βοΈ Super Admin"]
end
%% ================= FRONTEND =================
subgraph FE["FRONTEND Β· React 19 + TypeScript"]
direction LR
PORTAL["Role-Based Portals"]
ROUTER["React Router"]
QUERY["TanStack Query"]
SOCKETC["Socket.IO Client"]
PORTAL --> ROUTER
ROUTER --> QUERY
ROUTER --> SOCKETC
end
%% ================= BACKEND =================
subgraph BE["BACKEND Β· Node.js + Express + TypeScript"]
direction TB
API["REST API<br/>/api/v1"]
AUTH["Authentication & Authorization<br/>JWT + Role-Based Access"]
subgraph DOMAINS["DOMAIN MODULES Β· Business Logic"]
direction LR
ID["Identity"]
AC["Academic"]
CAMP["Campus"]
CAR["Career"]
PLC["Placements"]
COM["Communication"]
ORG["Organizations"]
AI["AI"]
PLAT["Platform"]
end
RT["Socket.IO<br/>Real-Time Communication"]
AIF["AI Provider Factory"]
API --> AUTH
AUTH --> DOMAINS
API --> RT
DOMAINS --> AIF
end
%% ================= DATA =================
subgraph DATA["DATA LAYER"]
direction LR
DB[("MongoDB<br/>+ Mongoose")]
FILES["Document Storage<br/>Resumes Β· Certificates Β· Files"]
end
%% ================= EXTERNAL =================
subgraph EXT["EXTERNAL SERVICES"]
direction LR
GEM["Gemini"]
OLL["Ollama"]
MAIL["Email Service"]
JOBS["Scheduled Jobs"]
end
%% ================= FLOW =================
ST & FA & OA & PA & RE & AL & SA --> PORTAL
QUERY -->|"HTTPS Β· REST"| API
SOCKETC <-->|"WebSocket"| RT
AIF --> GEM
AIF --> OLL
DOMAINS -->|"Repositories / Models"| DB
CAR --> FILES
PLC --> FILES
PLAT --> MAIL
PLAT --> JOBS
%% ================= STYLES =================
classDef user fill:#f4efff,stroke:#7655c7,stroke-width:1.5px,color:#17133b
classDef frontend fill:#edf6ff,stroke:#3b82c4,stroke-width:1.5px,color:#102a43
classDef backend fill:#f7f1ff,stroke:#7655c7,stroke-width:1.5px,color:#24143f
classDef domain fill:#ffffff,stroke:#b49bdd,stroke-width:1px,color:#24143f
classDef data fill:#eefaf6,stroke:#37a889,stroke-width:1.5px,color:#123b32
classDef external fill:#fff5f5,stroke:#d97b7b,stroke-width:1.5px,color:#4a2020
class ST,FA,OA,PA,RE,AL,SA user
class PORTAL,ROUTER,QUERY,SOCKETC frontend
class API,AUTH,RT,AIF backend
class ID,AC,CAMP,CAR,PLC,COM,ORG,AI,PLAT domain
class DB,FILES data
class GEM,OLL,MAIL,JOBS external
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β USERS / PORTALS β
β Student Β· Faculty Β· Org Admin Β· Placement Β· Recruiter Β· Alumni β
β Β· Super Admin β
βββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FRONTEND Β· React + TypeScript β
β Role-Based Portals Β· Router Β· TanStack Query Β· Socket.IO β
βββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββ
β
REST / WebSocket
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β BACKEND Β· Node.js + Express β
β β
β API Layer Authentication & Authorization β
β β β
β ββββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ β
β βIdentityβAcademicβ Campus β Career βPlacementβComm. β AI β β
β ββββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββ β
β β
β Socket.IO AI Provider Factory β
βββββββββββββββββ¬βββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββ
β β
βΌ βΌ
βββββββββββββββββββ ββββββββββββββββββββββ
β MongoDB β β Gemini / Ollama β
β + Mongoose β β AI Providers β
βββββββββββββββββββ ββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββ
β File Storage β
β Resumes / Certs β
βββββββββββββββββββ
- Role-based portals keep each user experience focused on the responsibilities of that role.
- Domain-based backend modules keep academic, career, placement, communication, and other business logic separated.
- REST + Socket.IO combines reliable resource APIs with real-time communication.
- AI Provider Factory keeps AI integration independent from a single model provider.
- Repository-based persistence keeps business logic separated from MongoDB/Mongoose.
RyuZen is built around one core idea:
An action should not disappear after it happens.
For example:
Student participates in an activity
β
Work is submitted
β
Faculty reviews
β
Points / achievement
β
Evidence is stored
β
Skills are identified
β
Career profile grows
β
AI identifies next steps
β
Placement readiness
The same principle connects academics, campus participation, projects, certifications, coding profiles, mentorship, and placements.
RyuZen uses AI to interpret the student's journey, while platform records remain the source of truth.
AI Provider
β
ββββββββββ΄βββββββββ
βΌ βΌ
Gemini Ollama
Cloud Local
The provider is configurable, allowing hosted Gemini models or local Ollama models.
- Career Score β summarizes career-readiness signals from the platform
- AI Chat β provides assistance using available student context
- Resume Review β evaluates the student's career profile
- Mock Interviews β generates interview questions and evaluates responses
- Recommendations β suggests relevant next steps based on identified gaps
- Skill Extraction β identifies skills from evidence such as projects and activities
AI interprets the journey. It does not invent the journey.
| Technology | Purpose |
|---|---|
| React 19 | UI framework |
| TypeScript | Type safety |
| Vite | Build tool |
| Tailwind CSS v4 | Styling |
| React Router v7 | Role-based routing |
| TanStack Query | Server state and caching |
| React Hook Form + Zod | Forms and validation |
| Axios | HTTP client |
| GSAP | Landing-page animation |
| Radix UI | Accessible UI primitives |
| Technology | Purpose |
|---|---|
| Node.js | Runtime |
| Express | REST API |
| TypeScript | Type-safe backend |
| Mongoose | MongoDB ODM |
| Zod | Request validation |
| JWT | Access + refresh authentication |
| bcryptjs | Password hashing |
| Multer | File uploads |
| Socket.IO | Real-time communication |
| Helmet + rate limiting | API security |
| Nodemailer | Transactional email |
| node-cron | Scheduled jobs |
| Vitest | Testing |
| Technology | Purpose |
|---|---|
| MongoDB | Primary data store |
| Gemini / Ollama | Swappable AI providers |
| Local / S3-compatible storage | Document and certificate storage |
| Docker Compose | Local multi-service setup |
RyuZen/
βββ apps/
β βββ frontend-v2/
β β βββ src/
β β β βββ app/ # Pages and routing
β β β βββ domains/ # Shared types, services, hooks
β β β βββ portals/ # Role-based portals
β β β β βββ student/
β β β β βββ faculty/
β β β β βββ org-admin/
β β β β βββ placement-admin/
β β β β βββ recruiter/
β β β β βββ alumni/
β β β β βββ super-admin/
β β β βββ shared/ # Shared UI and utilities
β β βββ public/
β β
β βββ backend/
β βββ src/
β β βββ domains/ # Business domains
β β β βββ academic/
β β β βββ ai/
β β β βββ campus/
β β β βββ career/
β β β βββ communication/
β β β βββ community/
β β β βββ identity/
β β β βββ organizations/
β β β βββ placements/
β β β βββ platform/
β β βββ shared/ # Cross-cutting infrastructure
β β βββ config/
β β βββ app.ts
β βββ seed/ # Demo data
β
βββ docker-compose.yml
βββ render.yaml
Each backend domain follows:
<domain>/
βββ domain/ # Entities, rules, interfaces
βββ application/ # Use cases, DTOs, containers
βββ infrastructure/ # Mongoose, repositories, mappers
βββ presentation/ # Routes, controllers, validators
- Unified student dashboard
- Academic and campus activity tracking
- Verified points and achievements
- Portfolio and project management
- Skills and certifications
- Career score and recommendations
- Resume builder and review
- Coding-profile verification
- AI chat and mock interviews
- Activities and submissions
- Faculty review and point awards
- Hash-chained point ledger
- Mentorship
- Attendance with rotating verification codes
- Optional location verification
- Timed MCQ assessments
- Clubs and events
- Badges and certificates
- Leaderboards
- Projects, experience, education, and certifications
- Placement drives and eligibility rules
- Company and recruiter management
- Job applications
- Interview rounds and outcomes
- Placement analytics
- Direct messaging
- Real-time Socket.IO communication
- Connections and connection requests
- Campus news
- Notifications
- Role-based portals
- Fine-grained permissions
- Organization and department dashboards
- Audit logs
- Alumni verification
- Platform analytics
- Node.js 20+
- pnpm
- MongoDB
- Gemini API key, or Ollama for local AI
git clone https://github.com/GaliAkshatha/RyuZen.git
cd RyuZenpnpm installcd apps/backend
cp .env.example .envConfigure MongoDB, authentication, AI, email, and storage variables.
cd apps/backend
pnpm devcd apps/frontend-v2
pnpm devSet the frontend API URL to:
VITE_API_BASE_URL=http://localhost:5000/api/v1docker compose up --buildPORT=5000
NODE_ENV=development
MONGODB_URI=
JWT_SECRET=
JWT_EXPIRES_IN=7d
REFRESH_TOKEN_EXPIRES_IN=30d
AI_PROVIDER=gemini
GEMINI_API_KEY=
GEMINI_MODEL=
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=
FRONTEND_URL=http://localhost:5173
STORAGE_PROVIDER=local
SMTP_HOST=
SMTP_PORT=
SMTP_USER=
SMTP_PASSWORD=
EMAIL_FROM=VITE_API_BASE_URL=http://localhost:5000/api/v1Built by Akshatha
