A large-scale education consultancy platform built with React + TypeScript (frontend) and Node.js + Prisma (backend), featuring four interconnected portals: a public website, a partner portal, a student portal, and an admin panel. Developed over 6 months as a Full Stack Developer, personally responsible for approximately 60% of the total codebase — spanning UI implementation, API integration, state management, role-based access control, real-time chat, and complex multi-step workflows. Live at https://campustransfer.com
Built CampusTransfer — a full-featured education consultancy platform — from scratch over 6 months as a Full Stack Developer (60% contribution). Delivered four production portals (public website, partner, student, admin) with JWT authentication, role-based permissions, RTK Query-powered API layer, real-time chat, multi-step onboarding, application tracking pipeline, invoice/payment management, and a full CMS. Tech stack: React, TypeScript, Redux Toolkit, Ant Design, Node.js, Prisma ORM, PostgreSQL.
| Item | Detail |
|---|---|
| Live Website | https://campustransfer.com |
| Duration | 6 months |
| Role | Full Stack Developer |
| Contribution | ~60% of total codebase |
| Frontend Stack | React 18, TypeScript, Redux Toolkit (RTK Query), Ant Design, Tailwind CSS, React Router |
| Backend Stack | Node.js, Express, Prisma ORM, PostgreSQL |
| Other Tools | TinyMCE (rich text), Socket.io (chat), JWT (auth), Cloudinary (media) |
Three separate auth flows share a unified backend but are isolated by role and portal.
- JWT-based authentication — short-lived access token stored in Redux state (
auth.token); refresh token stored in HTTP-only cookie. - Automatic token refresh — a custom RTK Query
baseQueryWithRefreshTokenwrapper intercepts every 401 response, attempts a silent refresh via/auth/refresh-token, then retries the original request. If refresh also fails, the user is logged out automatically. - Role-based access control (RBAC) — Admin employees carry a
designationwith apermissionsarray ({ module, actions[] }). Every protected page checkscanView,canCreate,canEdit,canDeleteagainst the current user's permission set before rendering actions. - Client metadata headers — every API request includes
X-Client-Details(IP address, user agent, browser URL, timestamp) for audit logging.
| Portal | Login Entry | State Shape | Roles |
|---|---|---|---|
| Admin | /admin/login |
{ user, token } — user includes designation + permissions |
Super Admin, Admin, Employee |
| Partner | /partner/login |
{ user, token } — user includes partner profile + team role |
Partner Owner, Team Member |
| Student | /student/login |
{ user, token } — user includes student profile |
Student |
POST /auth/login— credential login, returns access token + sets refresh cookiePOST /auth/register— new account creationPOST /auth/refresh-token— silent token renewalPOST /auth/forgot-password— sends reset emailPOST /auth/reset-password— token-based password resetPOST /auth/set-password-by-invitation— invited employees/team members set their passwordGET /auth/me— fetch current authenticated user profile
Live: https://campustransfer.com
The public-facing marketing and information site, fully CMS-driven from the Admin Panel.
- Homepage — hero banner, featured destinations, hot offers, testimonials, partner logos, call-to-action sections — all editable from admin
- Course Search & Filter — search by keyword, country, city, university, subject/course, study level, duration, fee range, intake month/year; paginated results with sorting
- Study Destinations — country pages with study levels, documents required, visa info, and associated universities
- University Profiles — overview, gallery, video gallery, courses offered, documents required
- Partner Institutions — directory of partner universities and colleges
- News & Articles — categorized news feed and long-form guide articles
- Events — upcoming education fairs and webinars with speaker profiles
- Jobs — career listings board
- FAQs — categorized frequently asked questions
- Contact — inquiry form with country-specific contact routing
- Gallery — photo and video gallery sections
Partners (education agencies/consultancies) manage their students, applications, team, and commissions.
- Basic company information
- Business documents upload
- Contract agreement (digital signature)
- Bank account details
- Review & submit — triggers admin approval workflow
- Overview stats: total students, active applications, pending tasks, commission earned
- Recent activity feed
- Same search/filter engine as the public website
- Saved searches and shortlisted courses
- Hot Offers — featured courses with special incentives highlighted by admin
- Add and manage student profiles
- Full student profile: general info, education history, background, document uploads
- Link students to applications
- Submit applications on behalf of students to universities
- Track application status through pipeline stages
- Upload supporting documents per application
- Add notes and comments to applications
- Invite team members by email (email invitation with set-password flow)
- Assign roles within the partner organization
- Manage active/inactive team members
- Admin-assigned tasks visible to partner
- Status tracking and completion
- View commission invoices generated by admin
- Track payment status (pending, paid)
- Bank account management for commission disbursement
- Direct messaging with CampusTransfer advisors
- Conversation history, unread message count
- File/document sharing in chat
- System-wide announcements from admin displayed in portal
- Partner company profile, logo, contact details
- Contract documents view
Students manage their own profile, explore courses, track applications, and communicate directly.
- Multi-section profile: personal/general information, education history, background, uploaded documents
- Profile completion percentage indicator
- Documents: passport, transcripts, language certificates, etc.
- Full search and filter: country, city, university, course, study level, duration, fee, intake
- Shortlist/save courses of interest
- View all submitted applications (submitted by student or partner on their behalf)
- Real-time status updates through application stages
- Document checklist per application
- Schedule and view consultation meetings with advisors
- Referral program: share referral link, track referred users and rewards
- Chat with CampusTransfer advisors
- Message history and notifications
- In-app notification centre for application updates, announcements, messages
- Admin broadcasts displayed in student portal
The central control system for CampusTransfer staff. Role-based, with each employee seeing only the modules their designation permits.
- Employees — create, edit, deactivate employees; assign designations
- Designations — create custom roles with granular module-level permissions (per module: can view, create, edit, delete)
- Invitation Flow — invite employees by email; they set their own password on first login
Full CRM-style application management:
- Submitted — new applications from partners/students
- Document Review — checking completeness of uploaded documents
- Processing — application forwarded to university
- Conditional Offer — conditional offer letter received
- Unconditional Offer — unconditional offer letter issued
- Enrolled — student confirmed enrollment
- Rejected / Withdrawn — closed applications
Each application has: student info, course details, partner info, document list, notes thread, status history log.
- Review and approve/reject partner onboarding applications (5-step review)
- View partner contracts, documents, bank accounts
- Reset/reopen onboarding for corrections
- View all active partners, their teams, students, applications
- Admin Tasks — tasks assigned between admin employees; status: In Progress → Submitted → Completed/Cancelled
- Partner Tasks — tasks assigned to partners; visible in partner portal
- Priority levels: Low, Medium, High, Urgent
- Board view filtered by status and priority
- Rich text completion notes with review/reassign workflow
All public website content managed from admin:
- Homepage — hero, sections, featured content
- Countries / Study Destinations — add/edit countries with study levels, documents, info pages
- Cities — manage cities linked to countries
- Universities — full university profiles, galleries, video galleries, course listings, documents
- Courses / Subjects — course catalog
- Study Levels — Diploma, Bachelor, Master, PhD, etc.
- Partner Institutions — logos and listings on website
- Fee Ranges — configurable fee brackets for search filters
- News — categories + articles
- Guides — categorized long-form content
- Events — event listings with speakers
- Jobs — job board listings
- FAQs — categorized Q&A
- Gallery — photo gallery categories and sections
- Video Gallery — video categories and uploads
- Announcements — broadcast messages to partner/student portals
- Hot Offers — featured course promotions
- Generate commission invoices for partners
- Track invoice status (pending / paid)
- Payment records and history
- Centralized file/image manager with folder organization
- Used across all CMS modules for image/document selection
- Application statistics by stage, partner, country, period
- Student and partner growth metrics
- Admin staff chat with partners and students
- Unread message counts, conversation management
- Advisor assignment per partner/student
- System-wide configuration
- Contact country routing
- Platform settings
- Monorepo structure — 4 separate apps (
admin.campustransfer,partner.campustransfer,student.campustransfer,server.campustransfer) in one workspace - Shared API layer — all frontends use RTK Query with automatic token refresh; a single
baseApiinstance per app withinjectEndpoints()for modular API slices (55 feature slices in admin, 22 in partner, 19 in student) - Type safety — strict TypeScript throughout; Prisma-generated types shared to frontend contracts
- Permission-aware UI — every admin action button, form, and route guard checks runtime permissions from the JWT payload; no hardcoded role checks
- Real-time — Socket.io for chat across all three portals with unread badge counts
- Optimistic updates — RTK Query cache invalidation keeps lists and detail views in sync after mutations without full page reloads