A modern, production-ready web application for the Centre for Peace Praxis at CHRIST (Deemed to be University), refactored from a legacy multi-page HTML/CSS website into a high-performance Next.js application using React 19, TypeScript, and Tailwind CSS v4.
The Centre for Peace Praxis is an academic and community hub established on August 16, 2023, at CHRIST (Deemed to be University). Its main purpose is to build communities of hope, healing, and resilience through peace literacy, psychosocial support, intercultural dialogue, and ecological well-being.
This application serves as:
/workshops/[slug]) generating media-rich activity logs, panelist bios, key takeaways, and gallery lightboxes.| Layer | Technology | Description |
|---|---|---|
| Frontend Core | Next.js 16.2.7 (App Router) | React Framework with Server/Client component routing |
| Language | TypeScript ^5.0 | Strong static typing for robust application flow |
| Styling Engine | Tailwind CSS ^4.0 | Utility-first styling with modern PostCSS nesting and variables |
| Icons Library | Lucide React | Visual iconography for menus, badges, and status elements |
| Content State | LocalStorage API | Handles client-side CMS adjustments and mock session management |
| Build Tooling | Turbopack / Next CLI | Modern, fast developer builds and compilations |
The project is built on Next.js App Router guidelines with a strict separation of components, static constants, page routes, and TypeScript type interfaces.
graph TD
A[Public Visitor] -->|Routes| B[App Router Pages]
B -->|Displays| C[Reusable Components]
B -->|Reads Data| D[Constants Layer]
E[Admin User] -->|Logs In| F[Login Route]
F -->|Redirects| G[CMS Dashboard]
G -->|Modifies State| H[Browser LocalStorage]
H -->|Hydrates| B
page.tsx and dashboard/page.tsx to read from the LocalStorage cache. If empty, the system automatically imports and caches default content schemas.admin / admin credentials client-side and sets an authentication token inside the browser session.CPP/
├── archive/ # Archive of legacy HTML/CSS pages
├── public/ # Static assets directory
│ └── assets/ # Speaker photos, posters, and logos
└── src/
├── app/ # App Router paths & routes
│ ├── about/ # About Page route
│ ├── community/ # Faculty, Student, and Alumni listings
│ │ ├── alumni/
│ │ ├── faculties/
│ │ └── students/
│ ├── dashboard/ # Admin CMS Site Builder Dashboard
│ ├── directors-note/ # Director's Note page
│ ├── gallery/ # Gallery & Lightbox component page
│ ├── login/ # Administrator portal access page
│ ├── workshops/ # Dynamic activity directories & reports
│ │ ├── [slug]/
│ │ └── page.tsx
│ ├── globals.css # Tailwind CSS v4 variables & custom animations
│ ├── layout.tsx # Document wrapper, fonts, and meta headers
│ └── page.tsx # Main public homepage (hydrated CMS)
├── components/ # Modular React component library
│ ├── layout/ # Global layout elements (Header, Footer)
│ └── ui/ # Reusable atom elements (Button, Card, Modal, Toast)
├── constants/ # Structured database-like raw data
│ ├── community.ts # Faculty and student web developer records
│ ├── gallery.ts # Lightbox assets and alt attributes
│ └── workshops.ts # Structured Activity entries, speakers, and takeaways
└── types/ # Shared TypeScript interfaces
└── index.ts
Make sure you have Node.js (version 18.x or above) and npm installed.
cd CPP
npm install
To run the Next.js development server:
npm run dev
Open http://localhost:3000 with your browser to view the application in action.
To compile a highly optimized, production-ready static export bundle:
npm run build
This compiles TypeScript, checks for lint rules, bundles resources, and saves the output in the .next/ directory.
To preview the production build locally:
npm run start
This project does not require an active backend database or external cloud client services, so no .env files are required. All configuration, layouts, and edits persist locally within browser storage.
In the absence of a SQL/NoSQL engine, state schema is defined as flat JSON keys in src/app/page.tsx.
| Key | Data Type | Default Value | Description |
| — | — | — | — |
| heroTitle | string | “Centre for Peace Praxis” | Main welcome heading |
| heroDesc | string | “Building communities of hope…” | Supporting mission statement |
| stat1Value | string | “20+” | Completed activities count |
| stat1Label | string | “Activities Conducted” | Activity counter label |
| whyTitle | string | “Why Centre for Peace Praxis?” | Section subtitle |
/dashboard by logging in with admin / admin. Has write access to edit page content, layout properties, and verify styles under a live desktop/mobile preview simulator.^1.17.0): Supplies modern, vector icon templates used in lists, tabs, buttons, and alert modules.16.2.7): Asserts best practices, prevents common Next.js bugs, and checks code style during compilation.^4): Powers postprocessing styles to enable custom design themes using modern variables inside globals.css.Cormorant Garamond, Montserrat, Open Sans) preloaded via Next.js configurations to eliminate layout shifts (CLS).@theme layers, preventing redundant stylesheet parsing.<img> elements are used to dynamically support image-swaps on static local structures, bypassing Next.js <Image> loader requirements to maintain fast client-side rendering.This project is licensed under the terms of CHRIST (Deemed to be University). All rights reserved.