← Back to Portfolio

Nizam Academic Portal

Product Lead / Full-Stack Developer

The Challenge

A school management PWA for Directors, Teachers, and Students, covering enrolment, attendance, grading, and AI-assisted analytics.

The Engineering Win

Passwords are SHA-256 hashed with a per-deployment salt and a live migration path. Sessions persist across a CacheService and Firestore dual layer so cache eviction never silently logs users out. AI usage quotas are enforced server-side and post-success only, so a failed request never burns a user's daily limit.

Password hashing with live migration for legacy plaintext entries

function verifyPassword(inputPassword, storedValue) {
  const salt = PropertiesService.getScriptProperties()
    .getProperty("PASSWORD_SALT");

  const hashedInput = Utilities.computeDigest(
    Utilities.DigestAlgorithm.SHA_256,
    inputPassword + salt
  ).map(b => (b < 0 ? b + 256 : b).toString(16).padStart(2, "0")).join("");

  if (hashedInput === storedValue) return true;

  // Migration path: if the stored value was never hashed,
  // accept a plaintext match once, then upgrade it immediately.
  if (inputPassword === storedValue) {
    upgradeToHashedPassword(inputPassword);
    return true;
  }

  return false;
}

See It In Use

Academic Portal secure login

Academic Portal secure login

Director control panel

Director control panel

Student control panel

Student control panel

Generated termly result slip

Generated termly result slip

Fee status view for a student

Fee status view for a student

Fee setup and management panel

Fee setup and management panel

Quantifiable Result

100% paperless operations for Directors, Teachers, and Students in active production use.

Full Capabilities

  • Geofenced attendance with a configurable radius
  • Automated daily absence digest emailed to parents and guardians
  • Assignment posting and retrieval by class
  • Digital ID card generation for students and staff
  • AI-assisted analytics via Gemini
  • Resumable term archiving that survives execution timeouts
  • OTP-based password reset

Tech Stack

Google Apps ScriptFirebase FirestoreChart.jsGemini API