A modern, production-grade React + TypeScript frontend for student attendance and management system
This is the web frontend for Notified, a comprehensive student management system originally built as a JavaFX desktop application. This modernized version brings all the features to the web with an improved UI/UX, responsive design, and a scalable architecture.
Notified Frontend is a complete rewrite of the original JavaFX application (Java-Project-IM/notified) using modern web technologies. It provides a clean, intuitive interface for managing:
- Student Records - CRUD operations, bulk email, guardian management
- Subject/Course Management - Organize classes, sections, year levels
- Attendance & Activity Logs - Track records with filtering and search
- Role-Based Access - Superadmin, Admin, and Staff permissions
- Dashboard Analytics - Real-time statistics and insights
- React 18 - UI library with hooks and modern patterns
- TypeScript - Type-safe development
- Vite - Lightning-fast build tool and dev server
- React Router v6 - Client-side routing with protected routes
- TailwindCSS - Utility-first CSS framework
- ShadCN/UI - High-quality, accessible component primitives
- Framer Motion - Smooth animations and transitions
- Lucide React - Beautiful, consistent icons
- Neumorphic Design - Soft shadows and modern aesthetics
- Zustand - Lightweight state management
- TanStack Query (React Query) - Server state management
- Axios - HTTP client with interceptors
- ESLint - Linting and code standards
- Prettier - Code formatting
- Husky - Git hooks for pre-commit checks
notified-frontend/
βββ public/ # Static assets
βββ src/
β βββ components/ # Reusable UI components
β β βββ ui/ # Base UI components (Button, Card, Input, etc.)
β β βββ ProtectedRoute.tsx
β βββ layouts/ # Layout components
β β βββ MainLayout.tsx
β βββ pages/ # Page components
β β βββ LandingPage.tsx
β β βββ LoginPage.tsx
β β βββ SignupPage.tsx
β β βββ DashboardPage.tsx
β β βββ StudentsPage.tsx
β β βββ SubjectsPage.tsx
β β βββ RecordsPage.tsx
β βββ services/ # API service layer
β β βββ api.ts # Axios instance & interceptors
β β βββ auth.service.ts
β β βββ student.service.ts
β β βββ subject.service.ts
β β βββ record.service.ts
β β βββ attendance.service.ts
β β βββ notification.service.ts
β β βββ user.service.ts
β βββ store/ # Zustand stores
β β βββ authStore.ts
β β βββ toastStore.ts
β βββ types/ # TypeScript type definitions
β β βββ index.ts
β βββ utils/ # Utility functions
β β βββ constants.ts
β βββ lib/ # Shared libraries
β β βββ utils.ts
β βββ App.tsx # Main app component
β βββ main.tsx # Application entry point
β βββ index.css # Global styles
βββ .env.example # Environment variables template
βββ .eslintrc.cjs # ESLint configuration
βββ .prettierrc # Prettier configuration
βββ package.json
βββ tailwind.config.js
βββ tsconfig.json
βββ vite.config.ts
βββ README.md
- Node.js 18+ (Download)
- npm or yarn or pnpm
- A running backend API (Express + MongoDB recommended)
-
Clone the repository
git clone https://github.com/Java-Project-IM/notified-frontend.git cd notified-frontend -
Install dependencies
npm install # or yarn install # or pnpm install
-
Set up environment variables
cp .env.example .env
Edit
.envand configure:VITE_API_BASE_URL=http://localhost:5000/api/v1 VITE_APP_NAME=Notified VITE_APP_VERSION=1.0.0
β οΈ Important: The backend API uses/api/v1/prefix for all routes. Make sure yourVITE_API_BASE_URLincludes/api/v1at the end. -
Run the development server
npm run dev
The app will be available at http://localhost:5173
npm run buildThe optimized production build will be in the dist/ folder.
npm run previewCreate a .env file in the root directory:
| Variable | Description | Default |
|---|---|---|
VITE_API_BASE_URL |
Backend API endpoint | http://localhost:3000/api |
VITE_APP_NAME |
Application name | Notified |
VITE_APP_VERSION |
App version | 1.0.0 |
- Hero section with call-to-action
- Feature showcase
- Responsive design
- Login - Email/password with validation
- Signup - New user registration
- Protected Routes - Auto-redirect if not authenticated
- Session Management - Persistent auth with Zustand
- Real-time statistics cards
- Total students, subjects, and records
- Today's activity count
- Quick action buttons
- Greeting with user's name
- View all students in a searchable table
- Add new students with auto-generated student numbers
- Edit existing student information
- Delete students with confirmation
- Send bulk emails to selected students
- Guardian information management
- List all subjects with filtering
- Create new subjects (code, name, section, year level)
- Update subject details
- Delete subjects
- View enrolled students per subject
- View attendance and activity records
- Filter by date range
- Search by student name/number
- Record types: Attendance, Enrollment, Withdrawal, Grade Update
- Detailed timestamps and metadata
Based on the original JavaFX app with modern enhancements:
- Primary:
#2196F3(Blue) - Primary actions, links - Secondary:
#21CBF3(Cyan) - Accents, gradients - Success: Green tones
- Warning: Yellow/Orange tones
- Error: Red tones
- Neutral: Grays for text and backgrounds
- Neumorphic Shadows - Soft, elevated card designs
- Smooth Transitions - Framer Motion animations
- Responsive Grid - Mobile-first approach
- Accessible - ARIA labels, keyboard navigation
The frontend expects a REST API with the following endpoints:
POST /api/auth/login - User login
POST /api/auth/signup - User registration
POST /api/auth/logout - User logout
GET /api/auth/me - Get current user
GET /api/students - Get all students
GET /api/students/:id - Get student by ID
POST /api/students - Create student
PUT /api/students/:id - Update student
DELETE /api/students/:id - Delete student
POST /api/students/email - Send bulk email
GET /api/subjects - Get all subjects
GET /api/subjects/:id - Get subject by ID
POST /api/subjects - Create subject
PUT /api/subjects/:id - Update subject
DELETE /api/subjects/:id - Delete subject
GET /api/records - Get all records
GET /api/records/:id - Get record by ID
POST /api/records - Create record
GET /api/records/stats - Get dashboard statistics
All endpoints expect Authorization: Bearer <token> header for authenticated requests.
npm run lintnpm run formatnpm run build # TypeScript compilation happens during build- Push code to GitHub
- Import project in Vercel dashboard
- Set environment variables
- Deploy!
npm run build
# Upload dist/ folder to NetlifyFROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=0 /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]The application supports three user roles:
| Role | Permissions |
|---|---|
| Superadmin | Full access to all features, user management |
| Admin | Manage students, subjects, records (no user admin) |
| Staff | View-only access to students and records |
Roles are enforced on the frontend via protected routes and on the backend via API middleware.
- JWT-based authentication
- HTTP-only cookies (if configured on backend)
- Auto token refresh
- Protected route guards
- XSS protection via React's JSX escaping
- CSRF protection (backend responsibility)
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Use TypeScript for all new files
- Follow ESLint and Prettier rules
- Write meaningful commit messages
- Add comments for complex logic
| Script | Description |
|---|---|
npm run dev |
Start development server with HMR |
npm run build |
Build for production |
npm run preview |
Preview production build locally |
npm run lint |
Run ESLint |
npm run lint:fix |
Fix ESLint errors |
npm run format |
Format code with Prettier |
npm run format:check |
Check code formatting |
# Change port in vite.config.ts or use:
npm run dev -- --port 5174npm install # Reinstall dependencies
rm -rf node_modules package-lock.json
npm installnpx tsc --noEmit # Check for type errors- Ensure Node.js version is 18+
- Clear cache:
rm -rf node_modules/.vite - Check environment variables
This project is licensed under the MIT License - see the LICENSE file for details.
- Original JavaFX app by the Notif1ed Development Team
- UI components inspired by ShadCN/UI
- Icons by Lucide
- Built with β€οΈ using modern web technologies
For issues, questions, or contributions:
- Open an issue on GitHub
- Contact: [your-email@example.com]
- Documentation: [Link to docs]
Built by senior front-end architects with 30 years of combined experience in modernizing legacy applications π