惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
有赞技术团队
有赞技术团队
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
U
Unit 42
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Recent Announcements
Recent Announcements
Y
Y Combinator Blog
Vercel News
Vercel News
Martin Fowler
Martin Fowler
V
V2EX
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
LangChain Blog
云风的 BLOG
云风的 BLOG
H
Hackread – Cybersecurity News, Data Breaches, AI and More
aimingoo的专栏
aimingoo的专栏
G
Google Developers Blog
The GitHub Blog
The GitHub Blog
N
Netflix TechBlog - Medium
Google DeepMind News
Google DeepMind News
雷峰网
雷峰网
阮一峰的网络日志
阮一峰的网络日志
F
Fortinet All Blogs

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
# I Built a Full Stack Academic Management System for My ...
Suman Kumar Singh · 2026-06-15 · via DEV Community
Cover image for # I Built a Full Stack Academic Management System for My College — Here's How

Suman Kumar Singh

I Built a Full Stack Academic Management System

for My College — Here's How

For my B.Tech final year project, me and my team
built Student Sphere — a complete academic
management system that connects Students, Faculty,
and Administrators on one platform.

🌐 Live Website: https://studentsphere0.netlify.app


The Problem We Were Solving

Our college (like most colleges in India) was
managing everything manually:

  • 📋 Attendance → Paper registers
  • 📝 Marks → Excel sheets
  • 📢 Notices → Physical board
  • 📁 Assignments → Physical handouts
  • 📊 Reports → Manual entry

We thought — why not build a system that
digitalizes all of this?

So we did. 💪


What We Built

Student Sphere has 3 role-based dashboards:

👨‍🎓 Student Dashboard

  • View attendance percentage with eligibility status
  • Check marks and grade card (A+ to F)
  • Download study notes uploaded by faculty
  • Submit assignments and lab reports digitally
  • View notices targeted to their semester

👩‍🏫 Faculty Dashboard

  • Update attendance and marks (bulk or individual)
  • Upload notes, assignments, lab reports
  • Set due dates and control submission windows
  • Post notices to specific semesters or all students
  • View all student submissions

🛡️ Admin Dashboard

  • Approve or reject new registrations
  • Manage all students and faculty accounts
  • Bulk promote entire semesters with undo
  • View system-wide statistics
  • Manage all notices

Tech Stack

Frontend

  • HTML5, CSS3, Vanilla JavaScript
  • Zero frameworks — no React, no Vue, no Bootstrap
  • Single CSS file (~2400 lines) for all 7 pages
  • Dark and Light theme toggle
  • Fully responsive — mobile to 4K

Backend

  • Node.js + Express.js v5
  • JWT authentication (7 day expiry)
  • bcrypt password hashing (12 salt rounds)
  • REST API with 30+ endpoints
  • Role-based access control middleware

Database

  • MongoDB Atlas (cloud hosted)
  • Mongoose ODM
  • 3 collections: Users, Data, Notices

Deployment

  • Frontend → Netlify (auto deploy from GitHub)
  • Backend → Render (auto deploy from GitHub)
  • Database → MongoDB Atlas free tier

Mobile

  • Android app built with Android Studio (Java)
  • WebView wrapper
  • APK available on GitHub Releases

The Interesting Technical Challenges

Challenge 1 — Faculty Page Was Taking 25 Seconds to Load

When the faculty dashboard loaded, it was making
46 separate API calls — one for each student.

Each call: 300ms × 46 students = 14+ seconds

The Fix:

I added a bulk endpoint on the backend:

Javascript
router.post('/bulk', protect(), async (req, res) => {
const { emails } = req.body;
const dataArr = await Data.find({
email: { $in: emails }
});
const result = {};
dataArr.forEach(d => { result[d.email] = d; });
res.json(result);
});

One MongoDB $in query instead of 46 individual
queries. Load time dropped from 25 seconds to
2-3 seconds.


Challenge 2 — Role Based Single Page Application

Without React

All three dashboards are single HTML files with
multiple hidden sections. Clicking sidebar items
runs this:

javascript
function switchSec(id) {
document.querySelectorAll('.section')
.forEach(s => s.classList.remove('active'));
document.getElementById('sec-' + id)
.classList.add('active');
}

No React. No router. Just vanilla JavaScript.
Feels like an SPA — no page reloads.


Challenge 3 — Mobile Tables

On mobile, HTML tables require horizontal scrolling
which is terrible UX. I converted all tables to
card layout at 640px using only CSS:

css
@media (max-width: 640px) {
.table-wrap thead tr { display: none; }
.table-wrap tbody tr {
display: block;
border: 1px solid var(--border2);
border-radius: 8px;
margin-bottom: 12px;
padding: 14px;
}
.table-wrap tbody td {
display: flex;
justify-content: space-between;
padding: 6px 0;
border-bottom: 1px solid var(--border);
}
.table-wrap tbody td[data-label]::before {
content: attr(data-label);
font-size: 0.71rem;
font-weight: 700;
color: var(--muted);
text-transform: uppercase;
}
}

Zero horizontal scrolling. Everything fits
perfectly on mobile.


Challenge 4 — JWT Auth Without Framework

javascript
// Middleware
const protect = (role) => async (req, res, next) => {
const token = req.headers.authorization?.split(' ')[1];
if (!token)
return res.status(401).json({ msg: 'No token' });

const decoded = jwt.verify(token, process.env.JWT_SECRET);
const user = await User.findById(decoded.id);

if (!user.isApproved)
return res.status(403).json({
code: 'PENDING_APPROVAL'
});

if (role && user.role !== role)
return res.status(403).json({ msg: 'Forbidden' });

req.user = user;
next();
};

Every protected route passes through this
middleware before any data is returned.


Project Structure

Frontend/
├── index.html
├── login.html
├── register.html
├── student.html
├── faculty.html
├── admin.html
├── about-dev.html
├── css/
│ └── style.css
└── js/
├── utils.js
├── auth.js
├── api.js
├── main.js
├── student.js
├── faculty.js
└── admin.js

Backend/
├── server.js
├── middleware/auth.js
├── models/
│ ├── User.js
│ ├── Data.js
│ └── Notice.js
└── routes/
├── auth.js
├── users.js
├── data.js
└── notices.js




---

## The Team

Built by 5 B.Tech students from
**Ramgovind Institute of Technology, Koderma**
under the guidance of **Mr. Ajay Kumar Dangi** 
(H.O.D, CSE Department)

| Name | Role |
|---|---|
| Suman Kumar Singh | Full Stack Developer |
| Abhinav Anand | UI / UX Designer |
| Aman Kumar Vikarn | Backend Developer |
| Sachin Mandal | Database Management |
| Suman Das | Testing & QA |

---

## Links

🌐 Live Website: https://studentsphere0.netlify.app

💻 Frontend GitHub: 
https://github.com/sumankumarsinghrajput/studentsphere-frontend

🔧 Backend GitHub: 
https://github.com/sumankumarsinghrajput/studentsphere-backend

📱 Android APK: Available on GitHub Releases

---

## What I Learned

- Building a complete full stack app from scratch 
  without any frontend framework teaches you how 
  things actually work under the hood
- Performance optimization matters more than 
  features — 25 second load time kills UX no 
  matter how good the features are
- Database schema design decisions made early 
  affect everything later
- Deployment is not just uploading files — 
  CORS, environment variables, security headers, 
  sitemap, robots.txt — all matter

---

If you have any questions about the tech stack, 
implementation, or challenges we faced — 
drop them in the comments below! 👇

Happy to help anyone building something similar.

\#webdev \#javascript \#nodejs \#mongodb 
\#fullstack \#opensource \#beginners

---