Skip to content

Kiruthiyan/aharamm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Aharam — Tuition Management System

Overview

Aharam is a full-stack tuition center management platform for running day-to-day academic operations: student records, attendance, marks, timetables, notices, and reporting. It pairs a Next.js admin and student portal with a Spring Boot API secured with JWT (HttpOnly cookies) and PostgreSQL persistence.

Problem statement: Small and mid-sized tuition centers often rely on spreadsheets and ad hoc messaging. Aharam centralizes student lifecycle data, attendance, and performance in one place so staff can work faster and parents and students get clearer visibility.

Features

  • Authentication & roles — Login by email, username, or student ID; JWT sessions; password reset via OTP; SUPER_ADMIN, STAFF, and STUDENT roles.
  • Student lifecycle — Registration, search, profile updates, archive/deactivate, and structured student detail views.
  • Attendance — Manual marking, QR/session flows, batch and per-student history.
  • Marks & grading — Exams, bulk mark entry, analytics, and configurable grade rules.
  • Timetable — Staff CRUD for slots plus public read-only timetable endpoints by grade.
  • Reporting & PDFs — Dashboard statistics, report summaries, top performers, and student progress PDFs.
  • Notifications — Notice board and push token registration for outbound alerts (provider-dependent).

Tech Stack

Layer Technologies
Frontend Next.js (App Router), React, TypeScript, Tailwind CSS, Axios
Backend Java 17, Spring Boot 3, Spring Security, Spring Data JPA
Database PostgreSQL, Flyway migrations
Auth JWT (HS512), HttpOnly Authorization cookie, role-based access

Architecture

aharam/
├── backend/                 # Spring Boot API (port 8081 by default)
│   ├── src/main/java/       # Controllers, services, security, domain
│   └── src/main/resources/  # application-*.yml, db/migration (Flyway)
├── frontend/                # Next.js UI (port 3000)
│   ├── app/                 # Routes (admin, student, public marketing pages)
│   ├── components/          # Layout, navbar, shared UI
│   ├── lib/                 # API client, i18n, helpers
│   └── scripts/             # capture-readme-screenshots.mjs (optional)
└── assets/screenshots/      # README screenshots (login, dashboard, students)

The frontend calls the API via NEXT_PUBLIC_API_URL (defaults to http://127.0.0.1:8081/api). The backend issues the JWT as an HttpOnly cookie named Authorization (Bearer <token>).

Screenshots

Home Login Student management
Login Dashboard Students

To regenerate images locally (requires Next.js dev on port 3000 and Microsoft Edge on Windows, or adjust the script to use bundled Chromium):

cd frontend
npm install
npm run dev
# other terminal:
npm run screenshots:readme

Setup

Prerequisites

  • Java 17+, Maven 3.9+
  • Node.js 18+
  • PostgreSQL (create a database and user; default dev config expects a reachable instance)

Backend

cd backend
copy .env.example .env
# Set SPRING_DATASOURCE_* and APP_JWT_SECRET (64+ bytes in production)
mvn clean install
mvn spring-boot:run

API base URL: http://127.0.0.1:8081/api (see server.port in application-dev.yml).

Frontend

cd frontend
npm install
# Optional: frontend\.env.local → NEXT_PUBLIC_API_URL=http://127.0.0.1:8081/api
npm run dev

Open http://localhost:3000.

Demo / live link

Add your deployed URL here after hosting (e.g. Vercel + managed PostgreSQL + Spring on a VPS or container). Example: https://your-app.example.com.

API Endpoints

Base path: /api (all routes below are prefixed with /api).

Area Methods Path pattern
Auth POST /auth/login, /auth/signup, /auth/logout, /auth/change-password, /auth/forgot-password, /auth/verify-otp, /auth/reset-password
Admin GET /admin/ping
Dashboard GET /dashboard/stats
Students GET, POST, PUT, DELETE /students, /students/register, /students/query, /students/archived, /students/{id}, …
Attendance GET, POST /attendance/mark, /attendance/mark-manual, /attendance/scan, /attendance/end-session, /attendance/batch/{batch}, /attendance/student/{studentId}
Marks GET, POST /marks/exams/create, /marks/exams/batch/{batch}, /marks/bulk-save, /marks/student/{studentId}, /marks/analytics/{examId}
Reports GET /reports/summary, /reports/top-performers
Timetable (staff) GET, POST, PUT, DELETE /timetable, /timetable/grade/{grade}, /timetable/today/{grade}, /timetable/{id}
Timetable (public) GET /public/timetable, /public/timetable/grade/{grade}, /public/timetable/today/{grade}
Staff GET, POST, DELETE /staff, /admin/staff, /staff/send-verification-code, /staff/verify-email-code, /staff/register, /staff/{id}
Notifications GET, POST /notifications, /notifications/token, /notifications/send
Student portal GET /student-dashboard/profile, /student-dashboard/attendance, /student-dashboard/marks, /student-dashboard/progress-report/pdf

Use your OpenAPI or controller package (com.aharam.tuition.controller) as the source of truth for the full contract.

Challenges / Learnings

  • Security — HttpOnly JWT cookies reduce XSS token theft; pairing with strict CORS and SameSite policies matters for production.
  • Schema evolution — Flyway migrations keep PostgreSQL changes repeatable across environments.
  • Split UI — Clear separation between marketing pages, staff console, and student portal keeps navigation and RBAC maintainable.

Future Improvements

  • Hosted demo with CI deploy previews
  • Optional SMS/WhatsApp providers behind interfaces already present in the codebase
  • Deeper analytics (retention, batch comparisons)

Author / Contribution

Kiruthiyan — design, backend, frontend, and documentation.

For team projects, add co-authors and a short note per contributor (e.g. “API & DB”, “UI/UX”, “DevOps”).

About

Tamil-first tuition management system with role-based access and full-stack modular architecture.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages