Digilibrary
Digital Library & e-Repository Management System for Brit College of Engineering & Technology (BCET) — one PHP + MySQL core, three role-based experiences, wrapped in a zero-reload AJAX UI with a Firebase mirror and SMTP mail engine.
A college library, reborn online
BCET needed one place where every eBook, PDF, journal and request lives — managed by admins, trusted by staff, and readable by students on any phone.
The problem
- Books & PDFs scattered across drives, CDs and paper registers.
- Students could only read inside the physical library, in library hours.
- No role control — everyone shared one password, or none.
- Book requests & notices travelled by paper and phone calls.
The solution
- One admin panel to upload, categorise and host every eBook / PDF.
- Student login with an online reader — stream, favourite, request.
- Permission badges per staff member, enforced server-side.
- AJAX everywhere: search, tables, mail and settings never reload the page.
Project facts
- Client
- BCET
- Role
- Full-stack · design → deploy
- Author
- developersazzad
- Stack
- PHP · JS/AJAX · MySQL · Firebase · SMTP
- Database
- 8 core tables
- Delivery
- 6 weeks, solo
One system, three doors
Every login lands in a different world, powered by the same AJAX core. Permissions are stored per user and re-checked on every single API call.
Admin
Owns everything: uploads books & PDFs, creates students and staff, assigns rights, sends mail, tunes SMTP and re-skins the whole panel.
Staff
A staff account only sees what the admin badges it with. Rights toggle live from the staff table — no redeploy, no reload.
Student
Logs in, browses the shelf, streams books in the browser, hearts favourites, and fires book requests straight to the admin's panel.
Everything the panel actually does
Switch between the three surfaces. Every button below exists in the shipped product — the screenshots are real.
- eBook / PDF pipelineCover + PDF upload with author, publisher, year, category; host-state and file-size tracked per book.
- Zero-reload CRUDEdit, activate, delete on every table row via fetch() — DataTables with server-side search, export to Copy / Excel / PDF.
- Students & staff desksCreate accounts, watch activity trails, mail any student or staff member from the row itself.
- Permission engineBadge-style rights per staff (create_student, edit_book, mail_student…) toggled live and enforced in PHP.
- SMTP control panelHost, port, mail, app-password saved from the dashboard; last-update stamp shows the live config.
- Theme engineLight / colour / dark / gradient skins for sidebar & header, plus transparent bg-image styles.
- Role-aware loginOne login form, three destinations. Sessions are guarded on every endpoint.
- Online readerPDFs stream in chunks over HTTP Range requests — the book opens in seconds, not minutes.
- Favourite shelfHeart any book; the favourite counter on the student dashboard updates instantly.
- Book requestMissing title? One AJAX call files the request and alerts admin + staff.
- Mail the adminDirect SMTP-backed channel from the student dashboard.
- Activity trailEvery read, request and login is logged — visible to admin per student.
- Server-side tablesDataTables wired to PHP: search, paging and sorting query MySQL directly — no client bloat.
- Firebase mirrorUploads sync to Firebase Storage and auth tokens verify client sessions — cloud backup out of the box.
- SMTP queueApprovals, requests and admin notices are templated mails sent through the configured relay.
- Live countersTotal PDFs, students, staff, categories, online students and today's open books — polled over AJAX.
- Hardened uploadsMIME + size validation, hashed passwords, CSRF-safe posts, permission re-checks server-side.
- Mobile-first skinEvery table, card and reader reflows from 360 px up; touch targets ≥ 44 px.
How a click becomes a row, a file, a mail
Plain PHP endpoints behind a fetch()-driven front end, MySQL as the source of truth, Firebase as the cloud mirror, SMTP as the voice of the system.
Client fires fetch()
Forms serialize to JSON / FormData; tables send search + page params. Nothing ever reloads.
PHP validates & guards
Session role + permission badge checked on every endpoint before a single query runs.
MySQL writes, Firebase mirrors
Book rows land in MySQL; PDFs sync to Firebase Storage; activity log appended.
UI patches + mail queues
JSON response patches the DOM, toast confirms, and SMTP mails the humans who care.
Nine screens, one story
Drag the coverflow, tap a card to open it full-size. Loaded live over AJAX from data/project.json.
◂ drag / scroll · tap to zoom ▸
What fought back, and lost
Launch day, in numbers
Counters below are hydrated by the same AJAX call that powers this page's gallery.
- Zero full-page reloads across admin CRUD — every create, edit, toggle and mail is a fetch() round-trip.
- One codebase, three experiences — admin, staff and student surfaces share the same guarded API.
- Re-skinnable without code — BCET switches sidebar/header skins from Settings, not from a repo.
- Reading without walls — students read from any phone, any hour; requests reach admin instantly.