Case study · 2024 — 2026 · Live · 150+ students

QuickLabs Pro

The study-resource platform my university actually needed — verified lab solutions, in-browser previews, and 150+ student users.

Role

Solo designer, developer & operator

Type

Product · Learning platform

Year

2024 — 2026

Links

React 19TypeScriptViteTailwind 4 · shadcn/uiTanStack QueryNode.js · ExpressPostgreSQL
QuickLabs Pro home — verified labs for university students
01 / 04

QuickLabs Pro home — verified labs for university students

Overview

Every semester, the same ritual: lab manuals due, solutions scattered across WhatsApp groups in blurry photos, seniors' PDFs lost forever. QuickLabs started as 'Study Buddy' my cheeky fix for that and grew into a real platform where students share verified lab solutions and study material, scoped to their university, branch, batch, and semester.

Version one served 150+ authenticated students at my university. The Pro rebuild re-architected everything: TypeScript end to end, PostgreSQL with raw SQL, in-browser document preview, and a proper social layer.

150+

Student users on v1

21K

Lines of TypeScript

15

PostgreSQL tables

10×75MB

Files per upload

The problem

University study material has a discovery problem and a trust problem. The files exist in someone's drive, some group chat, some senior's laptop but finding the right solution for your batch's version of the lab, and knowing it's correct, is pure luck.

I wanted uploads organised by the academic hierarchy students actually live in (university branch batch semester), previewable without downloading mystery files, and rated by the peers who used them. And yes it began as a joke about 'leaking' assignment solutions for my own convenience. The university's students profited; so did my transcript.

What I built

A full platform around documents, subjects, and the students themselves:

Materials

2 kinds

Informational docs and lab solutions — multi-file uploads, per-attachment management, zip downloads

In-browser preview

4 formats

PDF, DOCX, PPTX, and images render in the browser — no download roulette

Academic scoping

4 levels

University → branch → batch year → semester filtering on every list

Social layer

Peer ratings, student bookmarks, enquiry threads with voting, leaderboard

Fair-use quotas

Daily

Per-student upload/download limits with race-proof accounting

Engineering highlights

Race-proof daily quotas

Quota accounting uses Postgres advisory transaction locks plus SELECT … FOR UPDATE, so parallel downloads can't slip past the daily limit — the kind of correctness usually skipped in student projects.

One handler, two audiences

Router factories instantiate the same endpoints under /admin and /students with different role guards — no duplicated controllers, no drift between the two scopes.

Streaming zip downloads

Multi-file documents stream as a zip built on the fly with archiver — slugified, de-duplicated names, no temp files, correct Content-Disposition even for Unicode filenames.

Database as last line of defence

Postgres triggers enforce the 10-files-per-document cap, partial unique indexes guarantee one main file per document, and CHECK constraints stop self-ratings — invariants hold even if app code slips.

Technical challenges

01

Office formats in the browser

PDF is easy; DOCX and PPTX aren't. Wiring mammoth, docx-preview, and a PPTX renderer behind one preview hook — with graceful fallbacks per format — took more iteration than any backend feature.

02

Raw SQL by choice

No ORM: a WithDatabase higher-order function injects a pooled client into every controller and guarantees release. Writing the SQL by hand made the data model tighter and the slow queries obvious.

03

Operating a real user base

150+ students meant real support: quota disputes, upload failures on hostel Wi-Fi, takedown requests. Running the platform taught as much as building it.

Outcome

QuickLabs became the unofficial material hub for my batch 150+ students authenticated through Google and used verified lab solutions instead of chasing files through chat history.

The Pro rebuild is my reference codebase for doing full-stack TypeScript properly: typed end to end, invariants in the database, and a UI (Tailwind 4 + shadcn) that finally looks like the product it always wanted to be.

What's next

SuperDesk AI doubt-solverMore universitiesMobile PWA polish