Back to Projects

NRK Infotech

2025

Next.js
TypeScript
Tailwind CSS
Express
MongoDB
TipTap
SendGrid
Cloudinary

Ed-tech marketing and student portal for Data Science, AI, and full-stack programs. Next.js 16 frontend with city×course SEO landing pages, multi-channel lead capture, TipTap blog, and JWT student auth — backed by Express 5 + MongoDB API and a separate admin CMS.

Overview

NRK Infotech is a production ed-tech platform for bridging the industry gap in Data Science, AI, and full-stack careers. The public site drives course discovery and lead generation; enrolled students access a protected portal for profile and (planned) LMS features.

The work spans three apps: nrkinfotech (marketing + student frontend), nrk-admin (blog CMS and user management), and nrk-backendExpress 5 + Mongoose on MongoDB. Auth is JWT in httpOnly cookies; transactional email via SendGrid.

Public experience

The homepage combines hero CTAs, course highlights, testimonials, and lead forms wired to the backend API.

Course landing pages — four programs (Data Science, Data Analytics, Digital Marketing, Full Stack) rendered from static component trees with curriculum, fees, faculty, and callback requests. SEO pages at /{course}-{city} cover 11 cities (Bangalore, Hyderabad, Chennai, etc.) with per-course metadata and sitemap generation.

Lead capture — unified submitLead plus dedicated flows for admission, workshops, campus drives, free demos, request-a-call banners, and course-specific forms (MERN, digital marketing). Submissions notify admins and auto-reply to applicants via SendGrid.

Blog — published posts fetched from GET /api/blogs/public; TipTap JSON rendered client-side with a custom renderer.

Student portal

Students sign up and sign in via server actions that proxy /api/users. Features include email verification, optional login OTP, forgot/reset password, profile photo upload to Cloudinary, and password change.

Protected routes (/profile, /settings, /my-courses, /my-purchases, /certificates) are guarded client-side by AuthWrapper. Admin sessions are intentionally cleared on the public frontend — staff use the separate admin app.

LMS pages (my-courses, certificates, purchases) are UI shells today; the backend already defines Course, Module, Lesson, Enrollment, and Certificate Mongoose models for a future rollout.

Admin & content

Blog and user administration live in nrk-admin (separate Next.js app), not on the public site.

Blog workflow — authors create drafts with featured images (Cloudinary upload); statuses flow through draftsubmittedunder_reviewneeds_revision / rejectedpublished / archived. Admins review, request revisions, approve, or archive via dedicated API endpoints.

User management — admins list, create, update, and delete users with role assignment (admin, faculty_*, staff_*, student, alumni) and OTP/email-confirmed flags.

Backend API

The nrk-backend service exposes REST endpoints on port 3001:

  • /api/users — sign-up, sign-in, OTP verify/resend, logout, forgot/reset password, email verify, me, profile update, password change
  • /api/blogs — CRUD, public list/slug, admin review workflow, view counts
  • /api/admin — paginated user CRUD (admin-only)
  • /api/leads & /api/forms/* — admission, workshop, request-call, digital-marketing, MERN-stack (email-only; not persisted to MongoDB)

Security — Helmet, CORS whitelist (localhost + production domains), rate limiting, bcrypt passwords, JWT cookies. 17 Mongoose models include full LMS (courses, enrollments, payments, assessments, projects) and placements (jobs, interviews) schemas ready for future API routes.

Technical notes

Frontend uses Next.js 16 App Router with server actions forwarding the jwt cookie to the API. TanStack React Query wraps client data; Radix UI + shadcn-style components for forms and dialogs. Framer Motion, Embla, and Keen Slider power marketing animations.

Analytics: GTM, GA4, and Google Ads tags in root layout. No Next.js middleware — protected routes redirect client-side. Env split: NEXT_PUBLIC_BACKEND_URL for most actions; blog metadata also references NEXT_PUBLIC_API_URL.