Key numbers

  • 100+
    Students on the system
  • 1
    School in production
  • RFID
    Card check-in

Overview

Built for the school I grew up in

In June 2026 I started building a school management system for the kindergarten school where I studied and grew up. It is in production there today: one school, more than 100 students, used every day.

Part of it is an IoT attendance system. Each student taps or punches an RFID card, and their photo appears on a monitor. The web application is built with Next.js, Express and PostgreSQL, and there is an Android app written in Kotlin.

Product tour

A walk through School + RFID

Screens from the principal portal the school uses every day.

  1. 01Sign in

    One portal for the whole school

    Staff, parents and students all sign in through the same portal with an email or phone number, and each lands in their own view. Paying tuition fees doesn't need an account: the Pay fees tab is open to anyone.

    The portal's sign-in page: the school crest, a list of what the portal covers (attendance and results, fees and wallet, SMS alerts), and a sign-in form with email or phone and password, next to a Pay fees tab.
  2. 02Principal portal

    The principal's dashboard

    The principal signs in to the numbers that matter for the day: active students, fees collected this month, today's attendance and outstanding dues, then recent activity and the current term at a glance (academic year, active sections, next holiday and upcoming exam). The portal switches between English and Bangla and has a dark mode.

    The principal dashboard: cards for total students, fees collected this month, attendance today and outstanding dues; a recent activity feed; a This term panel with academic year, active sections, next holiday and upcoming exam; an English and Bangla switch and a dark mode toggle.
  3. 03Students

    Every student, by class and section

    The student list filters by year, class and section, and searches by name, admission number or phone. Students are added one at a time or bulk imported, and each one has their RFID card setup, an edit form and their admission form a click away.

    The student list with year, class and section filters, a search, Bulk import and Add student buttons, and rows with roll, admission number, class, status and actions for RFID setup, edit and admission form. Student names, photos and guardian details are blurred.
  4. 04Grade submission

    Marks by term, submitted by the class teacher

    Teachers enter marks for their assigned sections, term by term (1st term, 2nd term and final), with a Submit button and a status for each term. Only a section's class teacher can submit its grades.

    Grade submission for Class 7, section A in academic year 2026: 1st term, 2nd term and final columns, each with a Submit grades button marked Not submitted. Student names are blurred.
  5. 05Grade entry

    Drafts that stay out of results

    Marks go into a sheet with every subject out of 100 and a running count of marks entered. A sheet can be saved as a draft, and draft marks stay out of the results until the whole sheet is submitted.

    1st term grades for Class 7 A, marked Draft: Bangla 1st, Bangla 2nd, general math, drawing and GK, and computer, each out of 100, with Save as draft and Submit all grades. Student names are blurred.
  6. 06Teachers

    Shift heads with the right permissions

    The principal appoints a shift head who oversees every section of that shift, either view only (students, attendance and results) or view and edit (they can also mark attendance and enter marks). It can be changed or removed at any time.

    Assign shift head: choose a shift and a teacher, pick View only or View and edit, and see the current heads for the Morning and Day shifts. The teacher's name and phone are blurred.
  7. 07Attendance

    Attendance that takes itself

    Students swipe their card on the RFID box I built at the gate, and the register updates on its own with the punch time.

    • A card swipe marks the student present and texts their guardians.
    • When the attendance window closes, a cron job marks everyone who hasn't punched as absent and texts their guardians.
    • If the principal allows late arrivals, a student who comes after the window is marked late instead, and the guardians get a late-arrival SMS.
    • Teachers can still mark or correct the register by hand.
    Daily attendance for Class 2 A: each student marked Present, Absent, Late or Leave, with notes such as Gate punch at 10:43 am (Main gate) or Marked automatically. Student names are blurred.
  8. 08Gate devices

    More than one gate, each with its own key

    A school can run several RFID readers, one per gate. Each device has its own key: a new key takes effect immediately, and disabling a device refuses its scans without touching any student's card.

    Gate devices: add a device by location, and the Main gate reader shown as Active with New key and Disable actions.
  9. 09TV display

    A welcome on the screen at the gate

    When a student swipes their card, their photo appears on a TV at the gate. The display app runs on any Android TV or TV box and links to the school with a 6-digit code or a QR scan; unlinking a TV stops it immediately.

    TV display: link a TV by typing the code it shows or scanning its QR code, and the linked Main gate TV with its device and link date, plus Rename and Unlink.
  10. 10Attendance settings

    Every shift, its own rules

    For each shift the principal sets when a gate punch counts as present, when it still counts as late, and whether guardians get a text for an absence or a late arrival. Punches outside those hours record nothing, and a gate that was off never marks a class absent.

    Attendance settings for the Morning and Day shifts: present from, present until and late until times, with options to text guardians when a child is marked absent or arrives late.
  11. 11Accounts

    Payments and collections

    Every payment lands in a bank-style transaction history, split by bKash and cash, with a daily collection chart for the last 30 days and a search by student or ID.

    Payments and collections: totals collected via bKash and via cash, transaction count, a daily collection panel for the last 30 days, and a transactions list filtered by method.
  12. 12Scholarships

    Scholarships and waivers

    Merit, need, sibling and staff scholarships for enrolled students, with each student's base tuition, scholarship and net tuition side by side. A waiver can be monthly or a one-time waiver.

    Scholarships and waivers: filters by year, class and section, and a table with admission number, class, base tuition, scholarship, net tuition and an Adjust button. Student names are blurred.
  13. 13Scholarship editor

    Percent or flat, this year or every year

    Adjusting a scholarship sets no waiver, a percentage or a flat amount, the type (if a student has more than one, merit wins over need, then sibling, then staff), and whether it applies to this academic year only or keeps applying every year until it's changed.

    Adjust scholarship for a Class 1 student: No waiver, Percent or Flat BDT; scholarship type Merit; discount percent 10; applies to this academic year only or this year onward; applies from October 2026. The student's name is blurred.
  14. 14Student wallets

    Every student's balance and dues

    Each enrolled student has a wallet showing what they owe. Staff record payments, waive dues or charge an exam fee from the same row, and monthly payments can be readjusted for everyone.

    Student wallets: students on the page, how many have an outstanding due and the total due, and rows with each balance and Record payment, Waive and Charge exam fee actions. Student names are blurred.
  15. 15Academics

    Academic years

    The school's timeline is a list of academic years, with one marked as the current active year.

    Academic years: create a new year by identifier, and 2026 listed as the current active year.
  16. 16Academics

    Classes, sections and shifts

    Classes and their sections are tied to the academic year. When a new year is created, the previous year's setup carries forward, and the principal can customise it. Each class has a code and a default shift, a section can be pinned to another shift, and teachers are assigned per class.

    Classes and sections for 2026: Morning and Day shifts, and classes from Play to Class 4 with code, shift and sections, plus Assign teacher, Manage sections and Edit.
  17. 17Academic schema

    Subjects and exam weights for each class

    Each class gets its own subjects and its own exam weightage: tick the exams the class sits (model tests, 1st term, 2nd term, final), and the ticked weights must total 100%. An exam at 0% still shows its marks without touching the GPA. When the final results are published and a new academic year starts, the schema carries forward.

    Academic schema for Class 2 in 2026: eleven subjects from Bangla 1st to Extra marks, and exam weightage with 1st term 30%, 2nd term 30% and final 40%, totalling 100%.
  18. 18Class capacity

    A seat limit for every section

    The principal sets the maximum number of students per section for each academic year, beside how many are enrolled now. Saving applies the limit to every section of the class.

    Class capacity for 2026: each class with its sections, enrolled capacity and a maximum per section with a Save button.
  19. 19Fee structure

    Fees and an automatic absence penalty

    One page sets the money side of each academic year: a school-wide penalty charged automatically for every day a student is absent, and the fees for every class.

    Fee structure for 2026: a global absence penalty rule charged per absent day, and class fees with monthly, admission and session charges.
  20. 20Class fees

    Monthly, admission and session fees in one table

    Every class's monthly fee, admission fee and session charge sit in one table and apply to all its sections. The session charge, not the admission fee, is what a student pays when promoted to the next class.

    Class fees from Play to Class 7: monthly fee, admission fee and session charge for each class, with the current settings summarised on the right.
  21. 21Exam schedules

    Exam dates and routines, shared with parents

    For each class and exam, the principal sets the date, time slot and room for every subject, then declares and publishes the routine, which parents can see on the parent portal. An exam fee can optionally be billed to every active student in the class.

    Exam schedules and routines for the Class 2 1st term: optional exam fee billing, and a routine with date, time slot and room for each subject, plus Declare and publish routine and Print routine.
  22. 22Printable routine

    A routine ready to print in one click

    Print routine turns the timetable into a clean printable page under the school's letterhead, with each subject's code, full marks and pass marks.

    A printable exam timetable for the Class 2 1st term under the school letterhead, listing each subject with its code, full and pass marks, date, time slot and room. The school's address and phone are blurred.
  23. 23Admit cards

    Admit cards for one student or the whole section

    Admit cards are generated automatically for every exam. The class teacher or principal can print one student's card or tick several and export them as one PDF, one card per A4 page, and parents print theirs from the parent portal. Unpaid exam fees are flagged here, while the fee lock applies only on the parent portal.

    Admit cards for Class 2 section A: exam tabs from Model test I to Final, and a student roster with a Generate button per student and Export selected as PDF. Student names are blurred.
  24. 24Admit card

    The card itself

    Each admit card carries the school's letterhead, the student's photo, roll, admission number, student ID, class, session and exam, the exam schedule once it's declared, and signature lines for the class teacher, the controller of examinations and the principal.

    A generated admit card for the 1st term, Class 2 A, session 2026, with signature lines for the class teacher, controller of examinations and principal. The student's photo, name and IDs and the school's address are blurred.
  25. 25Notices

    Announcements for the whole school

    The principal publishes notices for each academic year, and they appear on the parent and teacher portals too.

    The notices page for academic year 2026 with a New notice button, and the full sidebar including Applications, SMS alerts, Notices, Timetable, Calendar and Settings.
  26. 26New notice

    Write once, choose who sees it

    A notice has a title, a message and an audience, from the whole school down, and goes out with one click on Publish.

    The new notice form: title, message, an audience set to Whole school, and Publish and Cancel buttons.

What it does

What the system does

  • RFID attendance that runs itself

    Students swipe a card at the gate, their photo appears on the TV and guardians get an SMS. A cron job marks the rest absent when the window closes, and late arrivals are marked late, each with an SMS home.

  • Grades by term

    Marks for each subject, term by term, saved as drafts and submitted only by the class teacher, so nothing half-finished reaches the results.

  • Exams, routines and admit cards

    Per-class subjects and exam weights, published exam routines that print in one click, and admit cards generated automatically, printed singly or in bulk, or by parents from their portal.

  • Parent and teacher portals

    Notices, exam routines and admit cards reach parents and teachers through their own portals.

  • Fees, wallets and scholarships

    Monthly, admission and session fees per class with an automatic absence penalty, bKash and cash collections in one history, a wallet with dues for every student, and merit, need, sibling and staff scholarships as one-time or monthly waivers.

  • School management on the web

    One portal for students and grade submission, teachers, attendance (with gate devices and a TV display), results and accounts, built on Next.js, Express and PostgreSQL.

  • Principal dashboard

    Active students, fees collected this month, today's attendance and outstanding dues at a glance, with the current term's calendar.

  • English and Bangla

    The whole portal switches between English and Bangla, and has a dark mode.

  • Android app in Kotlin

    An Android app, written in Kotlin, alongside the web application.

My role

What I built

  1. The web application

    Built the school management web app with Next.js, Express and PostgreSQL.

  2. RFID attendance

    Built the RFID box for the gate and the attendance automation behind it: card swipes, the photo on the TV, cron-based absent and late marking, and SMS to guardians.

  3. The Android app

    Wrote the Android app in Kotlin.

  4. In production

    The system is live at the school, which uses it every day.

Stack

Stack

Web
  • Next.js
  • Express
  • PostgreSQL
Mobile
  • Kotlin
  • Android
Hardware
  • IoT / RFID

Questions?

Want the details behind this build?

I'm happy to walk through the architecture, the trade-offs and the code. Email me or find me on LinkedIn.