PUDUcherry Cancer Patient Management Dashboard
A modern healthcare platform built for ASHA workers, nurses, and doctors to manage cancer patient data efficiently β part of a national study led by JIPMER and sponsored by ICMR.
π View Live Demo β
- About PuduCan
- Core Features
- Screenshots
- Tech Stack
- Getting Started
- Project Structure
- How It Works
- Development
- Contributing
- Contributors
- License
The same form is used for all staff types β field labels change based on role.
PuduCan is a healthcare management system designed to streamline cancer patient tracking and care coordination across hospitals in Puducherry. It enables ASHA workers, nurses, and doctors to:
- β Manage patient records securely
- β Track disease progression and treatment
- β Generate detailed patient reports
- β Collaborate across roles with role-based access
- β Import/export patient data efficiently
This platform is part of a national research initiative to improve cancer care delivery and patient outcomes.
Different user roles have tailored dashboards and permissions:
- Admin: Full system access, manage users and hospitals
- Doctor: View and update patient treatment plans
- Nurse: Track patient vitals and progress
- ASHA Worker: Community-level patient monitoring
- Add, view, update, and delete patient records
- Detailed patient forms with data validation
- Real-time updates across all users via Firebase
- Soft delete with recovery option
- π Search & Filter: Find patients by name, ID, status, etc.
- π Pagination: Navigate large datasets efficiently
- π Data Export: Export to CSV or Excel for reports
- π€ Data Import: Bulk upload patient data with validation
- Instant updates when patient data changes
- Live notification of user actions
- Multi-user safe operations
- Add and manage hospitals
- Create accounts for doctors, nurses, and ASHA workers
- Assign roles and permissions
| Dark Theme | Light Theme |
|---|---|
![]() |
![]() |
| Disease Report | Add Doctor/Nurse/ASHA |
|---|---|
![]() |
![]() |
| Add Hospital | Recover Patient |
|---|---|
![]() |
![]() |
| Doctor View | Nurse View | ASHA Mobile View |
|---|---|---|
![]() |
![]() |
![]() |
| Add Patient | Delete Patient |
|---|---|
![]() |
![]() |
- Framework: Next.js 15 - React framework with SSR/SSG
- Styling: Tailwind CSS - Utility-first CSS
- UI Components: shadcn/ui + Radix UI
- State Management: Zustand - Lightweight & intuitive
- Database: Firebase Firestore - Real-time NoSQL DB
- Authentication: Firebase Auth - Secure user management
- Data Fetching: TanStack Query - Intelligent caching & sync
- Form Management: React Hook Form - Performance-focused
- Schema Validation: Zod - Type-safe validation
- Testing: Vitest + React Testing Library
- Linting: ESLint - Code quality
- Formatting: Prettier - Consistent code style
- Git Hooks: Husky - Enforce quality before commits
Ensure you have the following installed:
- Node.js (v18 or higher)
- npm or yarn
- Git account for version control
-
Clone the repository
git clone https://github.com/lourduradjou/puducan-jipmer.git cd puducan-jipmer -
Install dependencies
npm install
-
Set up environment variables Create a
.env.localfile in the root directory:NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_auth_domain NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_storage_bucket NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_sender_id NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id
-
Run the development server
npm run dev
Open http://localhost:3000 in your browser
-
Build for production
npm run build npm start
The assets/ folder contains a sample Excel file showing the correct format for importing patient data.
puducan-jipmer/
βββ app/ # Next.js app directory
β βββ api/ # API routes
β βββ (auth)/ # Authentication pages
β βββ (dashboard)/ # Dashboard pages
β βββ layout.tsx # Root layout
βββ components/ # Reusable React components
β βββ table/ # Table components
β βββ forms/ # Form components
β βββ dialogs/ # Modal dialogs
β βββ shared/ # Common components
βββ lib/ # Utility functions & configs
β βββ firebase.ts # Firebase initialization
β βββ hooks/ # Custom React hooks
β βββ utils/ # Helper functions
βββ styles/ # Global CSS & Tailwind
βββ public/ # Static assets
βββ assets/ # Sample data files
βββ tests/ # Test files
- User signs up/logs in via Firebase Authentication
- Role assigned by admin determines dashboard access
- User navigated to role-specific dashboard
- ASHA Worker β Identifies patients in community
- Nurse β Records vitals and clinical observations
- Doctor β Reviews and prescribes treatment
- Admin β Oversees all activities and generates reports
- All data changes instantly sync via Firebase Firestore
- TanStack Query caches results and invalidates when needed
- Components automatically re-render with latest data
The codebase is designed to be modular, maintainable, and scalable following modern software engineering principles.
- Reusable Components: UI broken into small, single-responsibility components, making code easier to understand, test, and maintain.
- Generic Components: Created reusable components like
GenericTableandGenericDialog, reducing code duplication across the application.
- Encapsulated Logic: Custom hooks encapsulate and reuse logic for common tasks:
useAuth: Manages user authentication state and provides user information to componentsuseTableData: Fetches and manages data table operations including pagination, searching, and filtering- More hooks available for specific domain logic
- ESLint and Prettier: Enforce consistent code style and catch potential errors early, ensuring clean and readable code.
- Husky Pre-commit Hooks: Automatically run linting and tests before each commit, preventing errors from entering the codebase.
# Run all tests
npm run test
# Watch mode
npm run test:watch
# Coverage report
npm run test:coverageThe application is built with performance as a top priority, utilizing modern web technologies and best practices for a fast, responsive user experience.
- Automatic Code Splitting: JavaScript bundles are split into smaller chunks β users only download code needed for their page, reducing initial load time.
- Image Optimization: The
next/imagecomponent automatically optimizes images, serving modern formats like WebP and resizing for different devices. - Static Site Generation (SSG): Pages without real-time data (About, Contact) are pre-rendered at build time for instant loading.
- Incremental Static Regeneration (ISR): Hybrid approach allowing static pages to update without full rebuilds.
- Server-Side State Management: TanStack Query (React Query) manages asynchronous data from Firestore with robust caching that reduces redundant API calls.
staleTime&cacheTime: Queries serve cached data while re-fetching in the background, keeping UI responsive.cacheTimekeeps data cached even when unused.- Query Invalidation: When data updates (e.g., patient record edited), relevant queries are invalidated to trigger re-fetch and update UI with latest information.
- Zustand for Global State: Lightweight global state management without the complexity of larger libraries, sharing state across components seamlessly.
localStoragefor Form Data: Form state is cached to prevent data loss during entry β reload the page and restore progress.
| Level | Technology | Purpose |
|---|---|---|
| Bundle | Next.js Code Splitting | Reduce initial JS download |
| Assets | Image Optimization | Serve optimal image formats |
| API Calls | TanStack Query | Cache Firestore responses |
| State | Zustand | Share state across components |
| Local Data | localStorage | Persist form progress |
We welcome contributions from developers of all experience levels! Your work directly impacts cancer patient care across India.
Look for issues labeled good first issue β these are:
- β Well-scoped and clearly documented
- β Beginner-friendly
- β Don't require deep codebase knowledge
Check out v1.1 related issues here:
-
Fork the repository and create your feature branch
git checkout -b feature/your-feature-name
-
Make your changes with descriptive commits
git commit -m "feat: add new patient filter" -
Push to your fork and create a Pull Request
git push origin feature/your-feature-name
-
Describe your changes clearly in the PR description
For detailed guidelines, see CONTRIBUTING.md and ARCHITECTURE.md.
This project is licensed under the Apache License 2.0 β see the LICENSE file for details.
You are free to use, modify, and distribute this project, provided you include the original license and copyright notice.
- Issues & Bug Reports: GitHub Issues
- Discussions: GitHub Discussions
- Contact Maintainers: Open an issue labeled
question
Made with β€οΈ for cancer patients and healthcare workers across India
β If this project helped you, please consider giving it a star!











