ICCN Research Ecosystem: Research Platform & CMS
A research platform for ICCN featuring a public portal and a CMS admin panel, built with a strict layered backend architecture supporting both internal CMS users and SSO-authenticated researchers.

Understanding the Context
Overview
The Problem
ICCN needed a unified platform where researchers could access and manage research-related content through SSO, while internal admins needed a secure CMS to manage publications, funding data, and site content.
The Purpose
This project aims to build a research ecosystem with a public-facing portal and an admin panel, supporting two distinct user types, CMS admins and SSO researchers. The platform is further supported by an AI pipeline that evaluates submitted research applications and scrapes external sources for up-to-date funding opportunities.
My Contributions
Responsibilities
Designed and built backend APIs using Next.js with a layered architecture
Implemented dual authentication flows: internal JWT for CMS users and Keycloak OAuth2 Authorization Code with PKCE for SSO researchers
Built supporting content APIs for professors, testimonials, FAQs, journals, and institutions, along with an S3-based file upload system
Developed core research application APIs, including CRUD, rate limiting, and team member handling
Implemented CMS overview metrics, and page settings architecture for site-wide configuration
Technologies Used
Tech Stack
📱 Frontend
⚙️ Backend
🤖 AI/ML
🛠️ Tools
Core Functionality
Features
Dual Authentication System
Supports two distinct user types. CMS admins via email/password with internal JWTs, and SSO researchers via Keycloak OAuth2 PKCE flow with JWKS token verification.
Research Application Management
Provides full CRUD for research applications with status management, rate limiting, team member handling, and category validation.
CMS Admin Panel
Powers a dedicated admin panel for managing professors, journals, funding data, testimonials, and site-wide page settings.
AI-Powered Research Evaluation & Funding Discovery
Integrates with an AI pipeline, built by a separate AI Engineer team, that automatically evaluates submitted research applications and scrapes external sources to surface up-to-date funding opportunities.
Visual Design
UI Showcase
Interface design and user experience highlights

Research proposal submission page to submit research applications.
Technical Journey
Challenges
Supporting two fundamentally different user types, within a single authentication system.
Implemented separate JWT issuance paths for each user type, with a unified /api/auth/cms/me endpoint that differentiates SSO researchers (merging data from an external dashboard API) from CMS users.
Handling repetitive page-level settings without duplicating repository logic.
Built a generic PageSettingRepository as a singleton factory using a fixed ID per page, reducing repeated boilerplate across settings modules.
Keeping list-style array fields consistent during updates.
Adopted an atomic replace pattern, deleting old entries and inserting new ones within a single transaction rather than performing partial updates.
Supporting both UUID-based and slug-based lookups on the same detail routes.
Implemented an isUuid() helper to dynamically determine the lookup strategy, allowing a single route to serve both CMS and public use cases.
Results & Achievements
Impact
Measurable outcomes and project success metrics
Delivered a multi-phase backend system spanning authentication, core research APIs, and supporting content modules
Successfully integrated Keycloak SSO alongside a separate internal CMS authentication system
Next Steps
Future Plans
Add automated testing coverage for repository and service layers
Implement caching for frequently accessed public endpoints such as stats and journals
Expand rate limiting to cover additional high-traffic endpoints
Introduce audit logging for CMS admin actions
Optimize overview metrics queries further as data volume grows