This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
DSKP Explorer is a React-based SPA for browsing the Malaysian secondary school English language curriculum (KSSM - Kurikulum Standard Sekolah Menengah). It provides an interactive interface to explore curriculum standards, skills, syllabus content, and performance metrics.
- Framework: React 19.2 + TypeScript 5.9
- Build Tool: Vite 7.2
- Styling: Tailwind CSS 4.1 (CSS-based config, no tailwind.config.js)
- Icons: lucide-react
- Path Aliases:
@/maps to./src/
# Development
npm run dev # Start Vite dev server
# Build
npm run build # TypeScript compile + Vite build
npm run preview # Preview production build locally
# Lint
npm run lint # ESLint check- Static curriculum data is loaded from
/curriculum.jsonat runtime viafetch() - The
useCurriculum()hook insrc/hooks/useCurriculum.tsmanages data fetching and exposes transformation utilities - View components receive data through props and do not fetch directly
- Simple client-side view switching in
App.tsxusing React state (no React Router) - Five views:
overview,forms,skills,syllabus,performance Navigation.tsxhandles view switching via theonViewChangecallback
- Curriculum types defined in
src/types/curriculum.ts - Key types:
CurriculumData,FormData,ContentStandard,SkillType,SyllabusContent - Strict TypeScript mode is enabled
- Tailwind CSS v4 uses CSS-based configuration in
src/index.cssvia@theme - Custom color palette with lime accent (
#c8ff3d) - Custom pastel color classes:
bg-pastel-lime,bg-pastel-blue, etc. - Grid background pattern via
.grid-bgclass - Component classes:
.bento-card,.pill-btn,.card-hover
src/
├── main.tsx # Entry point
├── App.tsx # Root component with view routing
├── types/curriculum.ts # TypeScript interfaces
├── hooks/useCurriculum.ts # Data fetching & transformation hooks
├── lib/utils.ts # Utility functions (cn, clipboard)
├── components/ # View components and UI
│ ├── Navigation.tsx
│ ├── OverviewView.tsx
│ ├── FormsView.tsx
│ ├── SkillsView.tsx
│ ├── SyllabusView.tsx
│ ├── PerformanceView.tsx
│ └── ui/ # shadcn/ui components
└── index.css # Tailwind imports + custom styles
Uses flat config (eslint.config.js) with:
@eslint/jsrecommended rulestypescript-eslintrecommended ruleseslint-plugin-react-hooks(flat config)eslint-plugin-react-refresh(Vite config)- Ignores
dist/directory
- No testing framework is currently configured
- shadcn/ui is configured but minimally used
- The app uses React 19 with strict TypeScript checking