A comprehensive full-stack web application for managing school operations including students, staff, classes, notices, and leave management. This project serves as a skill assessment platform for Frontend, Backend, and Blockchain developers.
skill-test/
โโโ frontend/ # React + TypeScript + Material-UI
โโโ backend/ # Node.js + Express + PostgreSQL
โโโ go-service/ # Golang microservice for PDF reports
โโโ seed_db/ # Database schema and seed data
โโโ README.md # This file
- Node.js (v16 or higher)
- PostgreSQL (v12 or higher)
- npm or yarn
cd backend
npm install
cp .env.example .env # Configure your environment variables
npm startcd frontend
npm install
npm run dev- Frontend: http://localhost:5173
- Backend API: http://localhost:5007
- Demo Credentials:
- Email:
admin@school-admin.com - Password:
3OU4zn3q6Zh9
- Email:
# Create PostgreSQL database
createdb school_mgmt
# Run database migrations
psql -d school_mgmt -f seed_db/tables.sql
psql -d school_mgmt -f seed_db/seed-db.sqlFix "Add New Notice" Page
- Location:
/app/notices/add - Issue: When clicking the 'Save' button, the 'description' field doesn't get saved
- Skills Tested: React, Form handling, State management, API integration
- Expected Fix: Ensure description field is properly bound and submitted
Complete CRUD Operations in Student Management
- Location:
/src/modules/students/students-controller.js - Issue: Implement missing CRUD operations for student management
- Skills Tested: Node.js, Express, PostgreSQL, API design, Error handling
- Expected Implementation: Full Create, Read, Update, Delete operations
Implement Certificate Verification System
- Objective: Add blockchain-based certificate verification for student achievements
- Skills Tested: Smart contracts, Web3 integration, Ethereum/Polygon
- Requirements:
- Create smart contract for certificate issuance and verification
- Integrate Web3 wallet connection in frontend
- Add certificate management in admin panel
- Implement IPFS for certificate metadata storage
Build PDF Report Generation Microservice via API Integration
- Objective: Create a standalone microservice in Go to generate PDF reports for students by consuming the existing Node.js backend API.
- Location: A new
go-service/directory at the root of the project. - Description: This service will connect to the existing Node.js backend's
/api/v1/students/:idendpoint to fetch student data, and then use the returned JSON to generate a downloadable PDF report. - Skills Tested: Golang, REST API consumption, JSON parsing, file generation, microservice integration.
- Requirements:
- Create a new endpoint
GET /api/v1/students/:id/reportin the Go service. - The Go service must not connect directly to the database; it must fetch data from the Node.js API.
- The developer must have the PostgreSQL database and the Node.js backend running to complete this task.
- Create a new endpoint
Containerize the Full Application Stack
- Objective: Create a multi-container setup to run the entire application stack (Frontend, Backend, Database) using Docker and Docker Compose.
- Location:
Dockerfilein thefrontendandbackenddirectories, and adocker-compose.ymlfile at the project root. - Description: The goal is to make the entire development environment reproducible and easy to launch with a single command. The candidate must ensure all services can communicate with each other inside the Docker network.
- Skills Tested: Docker, Docker Compose, container networking, database seeding in a container, environment variable management.
- Requirements:
- Write a
Dockerfilefor thefrontendservice. - Write a
Dockerfilefor thebackendservice. - Create a
docker-compose.ymlat the root to define and link thefrontend,backend, andpostgresservices. - The
postgresservice must be automatically seeded with the data from theseed_db/directory on its first run. - The entire application should be launchable with
docker-compose up.
- Write a
- Framework: React 18 + TypeScript
- UI Library: Material-UI (MUI) v6
- State Management: Redux Toolkit + RTK Query
- Form Handling: React Hook Form + Zod validation
- Build Tool: Vite
- Code Quality: ESLint, Prettier, Husky
- Runtime: Node.js
- Framework: Express.js
- Database: PostgreSQL
- Authentication: JWT + CSRF protection
- Password Hashing: Argon2
- Email Service: Resend API
- Validation: Zod
- Primary DB: PostgreSQL
- Schema: Comprehensive school management schema
- Features: Role-based access control, Leave management, Notice system
- Dashboard: User statistics, notices, birthday celebrations, leave requests
- User Management: Multi-role system (Admin, Student, Teacher, Custom roles)
- Academic Management: Classes, sections, students, class teachers
- Leave Management: Policy definition, request submission, approval workflow
- Notice System: Create, approve, and distribute notices
- Staff Management: Employee profiles, departments, role assignments
- Access Control: Granular permissions system
- JWT-based authentication with refresh tokens
- CSRF protection
- Role-based access control (RBAC)
- Password reset and email verification
- Secure cookie handling
- File Naming: kebab-case for consistency across OS
- Import Style: Absolute imports for cleaner code
- Code Formatting: Prettier with consistent configuration
- Git Hooks: Husky for pre-commit quality checks
frontend/src/
โโโ api/ # API configuration and base setup
โโโ assets/ # Static assets (images, styles)
โโโ components/ # Shared/reusable components
โโโ domains/ # Feature-based modules
โ โโโ auth/ # Authentication module
โ โโโ students/ # Student management
โ โโโ notices/ # Notice system
โ โโโ ...
โโโ hooks/ # Custom React hooks
โโโ routes/ # Application routing
โโโ store/ # Redux store configuration
โโโ theme/ # MUI theme customization
โโโ utils/ # Utility functions
backend/src/
โโโ config/ # Database and app configuration
โโโ middlewares/ # Express middlewares
โโโ modules/ # Feature-based API modules
โ โโโ auth/ # Authentication endpoints
โ โโโ students/ # Student CRUD operations
โ โโโ notices/ # Notice management
โ โโโ ...
โโโ routes/ # API route definitions
โโโ shared/ # Shared utilities and repositories
โโโ templates/ # Email templates
โโโ utils/ # Helper functions
- Navigate to the notices section
- Try to create a new notice with description
- Verify the description is saved correctly
- Test form validation and error handling
- Test all student CRUD endpoints using Postman/curl
- Verify proper error handling and validation
- Check database constraints and relationships
- Test authentication and authorization
- Set up local blockchain environment (Hardhat/Ganache)
- Deploy certificate smart contract
- Integrate Web3 wallet connection
- Test certificate issuance and verification flow
- Set up the PostgreSQL database using
seed_db/files. - Set up and run the Node.js backend by following its setup instructions.
- Run the Go service.
- Use a tool like
curlor Postman to make a GET request to the Go service's/api/v1/students/:id/reportendpoint. - Verify that the Go service correctly calls the Node.js backend and that a PDF file is successfully generated.
- Check the contents of the PDF for correctness.
- Ensure Docker and Docker Compose are installed on your machine.
- From the project root, run the command
docker-compose up --build. - Wait for all services to build and start.
- Access the frontend at
http://localhost:5173and verify the application is running. - Log in with the demo credentials to confirm that the frontend, backend, and database are all communicating correctly.
POST /api/v1/auth/login- User loginPOST /api/v1/auth/logout- User logoutGET /api/v1/auth/refresh- Refresh access token
GET /api/v1/students- List all studentsPOST /api/v1/students- Create new studentPUT /api/v1/students/:id- Update studentDELETE /api/v1/students/:id- Delete student
GET /api/v1/notices- List noticesPOST /api/v1/notices- Create noticePUT /api/v1/notices/:id- Update noticeDELETE /api/v1/notices/:id- Delete notice
GET /api/v1/students/:id/report- Generate and download a PDF report for a specific student.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
For questions and support:
- Create an issue in the repository
- Check existing documentation in
/frontend/README.mdand/backend/README.md - Review the database schema in
/seed_db/tables.sql
Happy Coding! ๐