A production-deployed SaaS platform serving multiple engineering institutions from a single codebase — placement automation, attendance, secure online examinations and on-premise AI résumé generation under one role-based access model.
Every engineering college runs the same four workflows every semester — enrolling students, tracking attendance, conducting internal assessments and running placement drives — and almost every college runs them on a disconnected mix of spreadsheets, WhatsApp groups, Google Forms and a partially-adopted ERP.
The consequence is not merely inconvenience. The same student record is re-keyed into four systems, eligibility for a drive is decided manually against a PDF of criteria, résumés arrive in a dozen formats, and accreditation reporting becomes an annual archaeology exercise.
This project delivers a single multi-tenant platform where one deployment serves many institutions, each isolated at the database level, each with its own roles, subscription plan and feature set — and adding a new college is data entry, not a code change.
This is not a prototype built for evaluation. It is a commercially deployed product, presented here as our major project.
The project spans distributed system design, applied cryptography, database isolation models, information retrieval and on-device language-model inference — implemented and operated, not simulated.
Institutions lack a single, access-controlled system of record for the student lifecycle. Placement, attendance and assessment data live in mutually inconsistent silos, eligibility and integrity decisions are made manually, and no existing product offers all three to multiple institutions from one isolated, subscription-governed deployment at a price Indian colleges can absorb.
Shared-database SaaS risks one college reading another's data. Most low-cost ERPs enforce tenancy only in application code, with no database-level backstop.
Assessment vendors charge per candidate. A 4,000-student college running four internals per year cannot sustain per-test pricing.
Monolithic ERPs fail as a unit — an identity outage takes down attendance, placement and reporting simultaneously.
The platform contributes directly to four of the United Nations 2030 Agenda goals [13].
Digital attendance and proctored internal assessment raise the integrity and traceability of academic evaluation. Institutions with limited IT budgets gain assessment infrastructure that previously required per-candidate licensing.
Automated eligibility matching, a shared off-campus opportunity feed and ATS-ready résumés measurably improve the rate at which graduates convert applications into employment, particularly for students without placement-cell access.
Resilient digital infrastructure for education: independently deployable services, local token verification so identity outages do not cascade, and edge-hosted assessment resilient to campus network conditions.
The off-campus feed is shared across every tenant, so students at smaller institutions see the same opportunities as those at well-connected ones. Self-hosted AI keeps résumé assistance free rather than paywalled.
Sustainability of the technical choices: language-model inference runs on a single self-hosted node rather than a metered cloud API, and the assessment tier runs on shared edge compute — both reducing recurring cost and per-request energy footprint relative to hosted-inference alternatives.
| System / Category | What it does well | Limitations observed | Placement + Exam? | Cost model |
|---|---|---|---|---|
| Campus ERP suites (Fedena, Camu, Academia) |
Broad academic modules; admissions, fees, timetable | Placement module is a thin CRUD list; no eligibility engine, no assessment, roles are fixed presets rather than composable permissions | Partial / No | Per-student annual |
| Placement portals (Superset, NAPS-type) |
Recruiter-facing drive workflow, applicant tracking | Single-institution tenancy; no attendance or internal assessment; résumé handling is upload-only, no generation; opportunity feed limited to on-campus drives | No exam | Per-institution licence |
| Assessment platforms (Mettl, Talview, HackerRank for Work) |
Mature proctoring, item banks, analytics | Priced per candidate per test — prohibitive for recurring internals; no academic record integration; identity is a separate silo requiring duplicate provisioning | Exam only | Per candidate |
| LMS + lockdown browser (Moodle + Safe Exam Browser) [15] |
Open-source, self-hostable, quiz engine is capable | Lockdown requires a client install on every machine; no placement domain at all; self-hosting burden falls on the institution's IT staff | Exam only | Free + ops cost |
| Spreadsheets + Forms (the de-facto baseline) |
Zero cost, zero training, universally available | No access control, no audit trail, no referential integrity, no proctoring; eligibility filtering is manual; data loss and version conflict are routine | No | Free |
| Résumé builders (generic online tools) |
Attractive templates, quick to use | Template-driven output is visually uniform; no institutional data source, so students re-enter everything; cloud LLM variants transmit personal data to third parties | N/A | Freemium |
Identified gap — no surveyed system provides multi-tenant isolation, composable permissions, automated eligibility, résumé generation and proctored assessment in one subscription-governed deployment. Institutions are forced to integrate three vendors or accept spreadsheets.
| Source | Contribution | How it is applied in this project |
|---|---|---|
| Sandhu et al., Role-Based Access Control Models, IEEE Computer, 1996 [2] | Formalises RBAC0–RBAC3: users → roles → permissions, with sessions and constraints | Adopted as the RBAC1 core. Extended with a page catalogue so permissions are data rows, letting a tenant admin define new roles at runtime |
| Guo et al., Native Multi-Tenancy Application Development, IEEE CEC/EEE, 2007 [6] | Isolation patterns for shared-schema SaaS and the security risk of application-only tenant filtering | Shared schema with a mandatory tenant_id predicate, backed by PostgreSQL Row-Level Security as an engine-level backstop |
| Jones et al., JSON Web Token, RFC 7519, 2015 [3] | Compact, signed, self-contained claim transport | RS256 access tokens verified locally by every service using the public key — removing the identity service from the request path |
| Biryukov et al., Argon2, IEEE EuroS&P, 2016 [4] | Memory-hard password hashing resistant to GPU and ASIC attack | Argon2id at 64 MiB / 3 iterations for every credential, replacing bcrypt-class defaults |
| Broder et al., Syntactic Clustering of the Web, 1997 [7] | k-shingling and resemblance for near-duplicate detection | Basis of the answer-similarity detector: 3-gram shingle sets compared by Jaccard resemblance across a cohort's descriptive answers |
| Schleimer et al., Winnowing, ACM SIGMOD, 2003 [8] | Local fingerprint selection giving bounded-guarantee document matching | Informs normalisation and windowing before comparison, so trivial whitespace or case edits do not defeat detection |
| Vaswani et al., Attention Is All You Need, 2017 [11] · Qwen3 Technical Report, 2025 [12] | Transformer architecture; small instruction-tuned models viable on commodity hardware | A 1.7 B-parameter model runs on the institution's own node, constrained to copy-editing student prose — no PII leaves the boundary |
| Shahrad et al., Serverless in the Wild, USENIX ATC, 2020 [17] | Characterises serverless workloads: bursty, short-lived, cold-start sensitive | Justifies placing the exam tier on edge workers — examination load is extremely bursty (one hour per semester) and would otherwise require idle provisioned capacity |
A modular multi-tenant platform composed of an identity service, a modular-monolith core service, an asynchronous worker, a self-hosted inference service and an edge-deployed assessment tier — federated by a single sign-on exchange and governed by one subscription model.
tenant_id; PostgreSQL RLS rejects any query that does notplacement.jobsAn incremental, local-first delivery model. Each phase is fully working on a developer machine before any infrastructure is provisioned, and each phase produces a demonstrable capability rather than a layer.
Every phase closes with a documented smoke-test script, a deployment pre-flight checklist and a written security review — all three are maintained artefacts in the repository, not one-off exercises.
auth_appcore_apptenant_idDatabase separation. Neither service can read the other's database — separate PostgreSQL roles, no cross-database joins. Cross-service data moves over authenticated internal HTTP only.
Failure isolation. core-service verifies tokens with a cached public key. If auth-service is down, existing sessions continue working; only new logins fail.
Internal surface. /internal/* endpoints are reachable only on the private overlay network and additionally require a shared internal secret header.
Client ──Bearer JWT──▶ core-service 1 verify RS256 signature with cached PUBLIC key (no network) 2 reject if redis:auth:revoked:{jti} exists 3 perms ← redis:auth:perms:{userId} (5-min TTL) 4 if miss or token.permission_hash ≠ perms.hash perms ← auth-service /internal/perms (rare) 5 require perms[pageCode] ∋ action 6 set tx-local app.org_id = token.tenant_id 7 execute query — RLS filters rows by tenant
tenant_id in application code| Control | Implementation |
|---|---|
| Password storage | Argon2id — 64 MiB memory, 3 iterations, parallelism 1 |
| Access token | JWT RS256, 15-minute lifetime, asymmetric keys; private key held only by auth-service |
| Refresh token | Opaque, hashed at rest, 7-day, rotating; grouped by family_id |
| Theft detection | Reuse of a revoked refresh token revokes the entire family and forces re-authentication |
| Second factor | TOTP (RFC 6238 [5]) with QR enrolment; mandatory for platform administrators |
| Brute force | Per-route rate limiting plus account lockout after 5 consecutive failures |
| Sensitive identifiers | Aadhaar / PAN stored encrypted, decrypted only on an explicitly permissioned reveal action, which is audited |
| Auditability | Append-only audit_logs capturing actor, action, before/after state and source IP; partitioned monthly |
| Transport & headers | TLS at the edge; HSTS, CSP, X-Frame-Options and related headers applied per response |
| Input handling | Schema validation on every request body; parameterised queries throughout |
| Outbound fetches | SSRF guard on all server-side external fetches — scheme, host and private-range checks before connect |
Threat model reference: controls were selected and reviewed against the OWASP Top 10 (2021) categories [16], with a written security audit retained in the repository.
// Input : student S, published drives D, tenant policy P // Output: ELIGIBLE[], NEAR_MISS[(job, reasons)] function resolveOpportunities(S, D, P): cls, dept ← lookupClassAndDepartment(S) H ← lowercase(S.skills ∪ S.projectTools ∪ S.internTools) ELIGIBLE ← [] ; NEAR ← [] for each job j in D where j.tenant = S.tenant: R ← [] // failed predicates e ← j.eligibility if e.min_cgpa and S.cgpa < e.min_cgpa : R ← R + "CGPA" if e.min_tenth and S.tenth < e.min_tenth : R ← R + "10th %" if e.min_twelfth and S.twelfth < e.min_twelfth: R ← R + "12th %" if e.max_backlogs ≠ ∅ and S.backlogs > e.max_backlogs : R ← R + "Active backlogs" if e.max_history_backlogs ≠ ∅ and S.histBacklogs > … : R ← R + "History of backlogs" if e.departments ≠ ∅ and dept ∉ e.departments : R ← R + "Branch" if e.semesters ≠ ∅ and cls.year ∉ e.semesters : R ← R + "Semester" if e.batches ≠ ∅ and S.batch ∉ e.batches : R ← R + "Batch" if e.gender ≠ ∅ and S.gender ∉ e.gender : R ← R + "Eligibility criteria" // required-skill predicate — set containment over the haystack M ← { s ∈ e.required_skills : s ∉ H } if M ≠ ∅ : R ← R + ("Missing skills: " + M) // institutional offer policy, evaluated after criteria if not offerPolicyAllows(S, j, P) : R ← R + "Placement policy" if R = ∅ : ELIGIBLE ← ELIGIBLE + j else : NEAR ← NEAR + (j, R) return sortByDeadline(ELIGIBLE), NEAR
Linear in the number of published drives; k is the constant number of scalar predicates and the skill test is O(1) amortised per skill using a hash set. The student profile and class/department lookup are fetched once, outside the loop.
Server-side enforcement: the identical predicate set re-runs inside the apply endpoint. Hiding a drive in the UI is a convenience; the API independently refuses an ineligible application.
Each target role (SDE, Data, Embedded, …) carries a keyword vector. Every project is scored against the selected role and only the top-N survive onto a one-page résumé; the rest remain in the profile.
rel(p, r) = |keywords(r) ∩ tokens(p.title ‖ p.desc ‖ p.tools)| scope(p) = bonus if p has a live link / repository projects ← sort(P, key = score, desc)[0 : N] N = 4 skills ← group(S, by = category) ATS keyword block summary ← template(branch, role, topSkills, |projects|, seed = hash(studentId)) structure rotates
Why relevance dominates substance: the 100× weight makes role fit lexicographically primary — a marginally richer but irrelevant project can never displace a relevant one. Substance only breaks ties within the same relevance band.
for each description d in projects ∪ internships: if words(d) > MAX_WORDS : continue // gate key ← sha256(studentId ‖ d) if cache[key] : bullets ← cache[key] ; continue bullets ← llm(prompt = COPY_EDITOR, context = {title, tools}, // never PII seed = studentId, // divergence n_predict = 80, think = false) if error or timeout or inventedFacts(bullets, d): bullets ← original(d) // graceful cache[key] ← bullets workers ← adapt(freeRAM, loadAvg) // 1 … 4
Name, e-mail, phone, USN, CGPA, dates, education
Skills and tool names — they are the ATS keywords
Any failure falls back to the original text, per item
The homogeneity result. Caching is keyed on hash(studentId ‖ text), so regenerating a résumé is instant, yet two students whose raw text is identical still receive different phrasing — the student identifier seeds the sampler. Bullet count scales to input length, which prevents the model padding a thin project into fabricated achievement.
Every event is posted to the attempt record on the edge worker. Signals are evidence for a human invigilator, never an automatic invalidation — the platform surfaces a ranked flag list, the institution decides.
// normalise away trivial evasion norm(s) = trim(collapseWhitespace(lowercase(s))) tokens(s) = { t ∈ split(norm(s), \W+) : |t| > 1 } shingles(t, k) = { t[i…i+k-1] : 0 ≤ i ≤ |t| − k } k = 3 // Jaccard resemblance (Broder et al., 1997) J(A, B) = |A ∩ B| / |A ∪ B| similarity(a, b): ta, tb ← tokens(a), tokens(b) if |ta| < k or |tb| < k : return J(ta, tb) // short answers return J(shingles(ta,k), shingles(tb,k)) // pairwise over the cohort, per descriptive question for each question q, for each pair (u, v) ∈ attempts(q): σ ← similarity(answer[u][q], answer[v][q]) if σ ≥ τ : flag(u, v, q, σ) τ ≈ 0.80
Bag-of-words alone scores two answers using the same vocabulary as identical. 3-grams require shared word order.
Below k tokens shingling is undefined, so the comparison degrades to token-set Jaccard.
O(m²·L) per question for m attempts; run asynchronously in the grading queue, never in the request path.
| Module | Capabilities implemented | Key engineering detail | Status |
|---|---|---|---|
| Identity & RBAC | Login, MFA enrol/verify, refresh rotation, password reset, e-mail verification, dynamic roles, page catalogue, permission matrix, tenant provisioning, super-admin console | Argon2id; RS256 key pair; family-based refresh revocation; Redis permission cache keyed by permission hash | Complete |
| Students | CRUD, CSV bulk import with account provisioning, projects / internships / achievements / certifications / languages, semester-wise SGPA, document vault, self-registration by college join code, record claim | Aadhaar & PAN encrypted at rest with an audited reveal action; import runs as a background job | Complete |
| Classes & Attendance | Departments, classes, enrolments, advisors; sessions; barcode scan via camera and USB serial scanner; manual marking; per-student history; class summaries | Unique constraint on (session, student) makes re-scan idempotent; attendance table partitioned monthly | Complete |
| Placement | Companies, drives, structured eligibility, rounds, applications, offers, offer policy, drive categories, visits, selections, student journey, prep resources, analytics | Eligibility engine with near-miss reasoning; policy enforced server-side at apply time | Complete |
| Off-campus feed | Cross-institution shared opportunity feed, per-college filters, relevance-ranked recommendations, scheduled auto-refresh, super-admin provider registry | Provider credentials encrypted; every outbound fetch passes an SSRF guard; provider identity hidden from end users | Complete |
| Résumé | Role-targeted generation, project curation, grouped skill blocks, ATS guidance, A4 preview, export to PDF / DOCX / LaTeX | Deterministic layout; header carries GitHub and LinkedIn links | Complete |
| resume-ai | Description and summary rewriting, per-student divergence, hash-keyed cache, load-adaptive worker pool, health build marker | Qwen3 1.7 B in non-thinking mode behind a bearer token; per-item graceful degradation | Complete |
| Assessment | Exam authoring, scheduling, runner, auto-grading queue, proctor event capture, similarity analysis, faculty and super-admin consoles, subscription gating | Edge workers; database reached over a private tunnel with connection pooling; per-college RLS with a tenant set per transaction | Complete |
| SSO federation | Eager provisioning of exam accounts, one-time-code login exchange, profile field sync, delete propagation, ghost-row relinking | Internal endpoints authenticated by shared secret over the private network | Complete |
| Reports & Notifications | Scheduled and on-demand exports, accreditation report, announcements, e-mail, web push, engagement tracking, audit and password-reset reports | BullMQ workers, queue-scoped instances, cron-driven trial lifecycle transitions | Complete |
/platform ├─ ARCHITECTURE.md authoritative spec ├─ services/ │ ├─ auth/ identity · RBAC · tenants │ │ ├─ src/{config,models,controllers, │ │ │ middleware,routes,services,utils} │ │ ├─ migrations/ seeders/ │ ├─ core/ modular monolith │ │ └─ src/modules/{students,classes,attendance, │ │ placement,reports,notifications,account,email} │ ├─ worker/ BullMQ consumers │ └─ resume-ai/ inference service ├─ web/ React 18 + Vite SPA ├─ login-portal/ shared SSO entry point ├─ exam portal/ │ ├─ public/ exam runner, proctor, integrity │ └─ workers/{admin,student} ├─ deploy/ infra/ scripts/ tests/ └─ .github/workflows/ CI/CD
Engineering discipline. Every feature ships with three mandatory artefacts — a page-catalogue entry, a default-role mapping and a permission guard on every route. No feature is exempt from access control, which is what keeps a dynamic permission model from developing holes over time.
| ID | Scenario | Input / precondition | Expected result | Type | Status |
|---|---|---|---|---|---|
| T01 | Valid authentication | Registered e-mail + correct password, MFA disabled | HTTP 200; RS256 access token (15 min) and rotating refresh token issued; login recorded | Functional | Pass |
| T02 | Account lockout | 5 consecutive incorrect passwords for one account | Account locked; 6th attempt rejected even with the correct password until lockout expires | Security | Pass |
| T03 | Refresh-token theft | Replay a refresh token that has already been rotated | Entire token family revoked; all sessions for that user invalidated; re-authentication forced | Security | Pass |
| T04 | Cross-tenant read | Valid token for College A; request a student record belonging to College B | HTTP 404 — RLS returns zero rows; no existence disclosure; attempt audited | Security | Pass |
| T05 | Permission revocation | Remove placement.jobs / edit from a role mid-session | Cached permission hash mismatches; permissions refetched; subsequent edit returns HTTP 403 without re-login | Functional | Pass |
| T06 | Eligibility filtering | Student CGPA 6.4; drive requires 7.0 minimum | Drive absent from the eligible list; near-miss view names "CGPA" as the failing predicate | Functional | Pass |
| T07 | Eligibility bypass attempt | POST directly to the apply endpoint for a drive the student fails | HTTP 403 — server re-evaluates all predicates independently of the UI | Security | Pass |
| T08 | Duplicate attendance scan | Scan the same barcode twice within one session | Single attendance record retained; second scan acknowledged as already marked, not duplicated | Functional | Pass |
| T09 | Bulk import | CSV of 500 student rows including 3 malformed and 2 duplicate rows | Valid rows imported with accounts provisioned; malformed rows reported with line numbers; no partial corruption | Functional | Pass |
| T10 | Résumé divergence | Two students submit byte-identical project descriptions | Both résumés generate; bullet phrasing differs — cache key includes the student identifier | Functional | Pass |
| T11 | Inference degradation | Stop the inference service, then generate a résumé | Résumé produced with original descriptions retained per item; no error surfaced to the student | Resilience | Pass |
| T12 | Identity-service outage | Stop auth-service with an unexpired access token in hand | Existing sessions keep working against core-service; only new logins fail | Resilience | Pass |
| T13 | Exam focus loss | Switch browser tabs three times mid-attempt | Three time-stamped focus-loss events recorded and shown in the invigilator's flag list | Functional | Pass |
| T14 | Answer collusion | Two attempts submit near-identical descriptive answers | Shingle Jaccard ≥ τ; pair flagged for review without auto-invalidating either attempt | Functional | Pass |
| T15 | Subscription gating | Free-trial college attempts a 6th examination | HTTP 403 trial_exhausted; existing data remains readable | Functional | Pass |
| T16 | SSRF guard | Configure a job-feed provider pointing at an internal address | Fetch refused before connect; private-range and scheme checks reject the target | Security | Pass |
Actor: Platform super administrator
Actor: Placement officer → Student
Actor: Student
Actor: Faculty → Student → Invigilator
UC-05 — Attendance. A proctor opens a session and scans identity cards by camera or USB scanner; repeat scans are idempotent, absentees are marked in bulk, and the session summary is available immediately to the class advisor.
| React 18 | Component model, SPA |
| Vite | Build tool, HMR |
| Zustand | Client state |
| Axios | HTTP with token refresh |
| Web APIs | MediaDevices, Web Serial, Push, Fullscreen |
| PostgreSQL 16 | Primary store, RLS, partitioning |
| Sequelize | ORM, migrations, seeders |
| PgBouncer | Connection pooling |
| Redis 7 | Cache, revocation, queue backend |
| BullMQ | Job queues and schedules |
| Node.js 20 LTS | Runtime |
| Express.js | HTTP framework |
| Joi | Request schema validation |
| Winston | Structured JSON logging |
| Helmet | Security response headers |
| express-rate-limit | Abuse throttling |
| argon2 | Argon2id hashing |
| jsonwebtoken | RS256 sign / verify |
| speakeasy + qrcode | TOTP second factor |
| Node crypto | Field-level encryption of identifiers |
| Ollama | Local model server |
| Qwen3 1.7 B | Instruction-tuned SLM, non-thinking mode |
| Custom scheduler | Load-adaptive worker pool, hash-keyed cache |
| Docker + Swarm | Containers and orchestration |
| Dokploy | Deployment control plane |
| Traefik | Ingress routing |
| Cloudflare | WAF, TLS, CDN, Workers, Pages, R2, KV, Queues, Tunnel |
| Resend | Transactional e-mail |
Git & GitHub · GitHub Actions CI/CD · Wrangler CLI · ESLint · Postman / curl smoke suites · pg_dump backup automation
Deployment footprint in perspective. The entire origin cluster for two institutions runs on a single mid-tier virtual machine. The cost driver in comparable commercial deployments is per-candidate assessment licensing, which this architecture removes entirely by executing the examination tier on shared edge compute and running language-model inference on hardware the institution already owns.
| FR-1 | Authenticate users and issue short-lived signed tokens with rotating refresh |
| FR-2 | Allow an administrator to define roles and page-level actions without deployment |
| FR-3 | Isolate every tenant's data in application code and at the database engine |
| FR-4 | Maintain student records with bulk import and document management |
| FR-5 | Record attendance by barcode scan and manual marking, idempotently |
| FR-6 | Evaluate drive eligibility per student and expose reasons for near-misses |
| FR-7 | Generate role-targeted, ATS-compatible résumés in multiple formats |
| FR-8 | Conduct proctored examinations and record integrity events per attempt |
| FR-9 | Federate a single identity across the placement and assessment platforms |
| FR-10 | Record every privileged action in an append-only audit log |
| Performance | Interactive API responses under 300 ms at the 95th percentile; résumé generation under 10 s including inference |
| Scalability | 20,000 students per tenant; examination load absorbed by the edge without provisioned capacity |
| Availability | Identity outage must not interrupt existing sessions; hourly off-site backups |
| Security | Reviewed against OWASP Top 10; no secret or endpoint compiled into source |
| Privacy | No personally identifiable data leaves the institutional boundary for inference |
| Usability | Responsive from 360 px; navigation reflects only permitted pages |
| Maintainability | Self-contained modules; idempotent migrations and seeds; portable configuration |
An honest security finding. A review of the assessment data layer found a managed-database configuration exposing tables to the anonymous role without row-level policies. It was identified, revoked and re-verified. Running real systems surfaces classes of defect that a coursework prototype never encounters.
The whole platform as intended: identity, attendance, placement and internal assessment for institutions of 2,000–20,000 students, priced per institution rather than per student.
A trust or university operating several campuses runs one deployment with one tenant per campus — consolidated oversight, complete data isolation between them.
Used standalone for drive management, eligibility automation, offer-policy enforcement and recruiter-facing analytics without adopting the academic modules.
Placement, attendance and outcome data already live in a normalised, audited store — NBA and NAAC collection becomes a query, not an annual reconstruction.
The assessment tier applies unchanged to onboarding and certification exams — cohort management, proctoring and grading are domain-independent.
Skilling missions and coaching institutes can track cohorts, assess them, and route candidates into the shared opportunity feed.
The shared off-campus feed deliberately crosses tenant boundaries: an opportunity found for one institution becomes visible to students at every institution on the platform. Students at colleges without established recruiter relationships gain the same visibility as those at well-connected ones — a structural reduction of an existing inequality, not an incidental benefit.
This project set out to replace the fragmented, manual and unauditable systems that Indian engineering institutions use to manage the student lifecycle, and to do so as one multi-tenant platform rather than another single-college application.
All nine objectives were met and verified. Tenancy is enforced in application code and independently by the database engine. Permissions are records rather than constants, so an institution defines its own roles without a deployment. Placement eligibility is computed rather than eyeballed, and is re-enforced on the server against direct API access. Résumés are generated in an ATS-safe layout, curated to the most role-relevant work, and differentiated by an on-premise model that never receives a single personally identifiable field. Assessment runs at the network edge with integrity signals recorded per attempt, at no marginal cost per candidate.
Two findings are worth carrying forward. First, a small honest model beats a large uncertain one when the task is bounded — constraining a 1.7 B model to copy-editing produced reliable output where asking it to exercise judgement did not, and we disabled the judgement path on the evidence. Second, operating a system teaches what building one cannot: the defects that mattered most — a database exposure, an orchestrator that silently served stale code — surfaced only because this platform carries real institutional data.
Phase 2, Review 1 status: all core modules are implemented, deployed and serving live institutions. Remaining work is measurement, hardening and scale validation rather than construction.
Beyond the review. The platform is commercially deployed and under active development. This presentation documents an operating system with real users, not a demonstration built for evaluation — and the engineering constraints that follow from that are what shaped every design decision described here.
Questions and suggestions are welcome.
Under the guidance of Prof. Beerappa Belasakarge, Assistant Professor, Dept. of CSE
BMS Institute of Technology & Management
Click any slide to jump to it · press Esc or O to close