INDEPENDENTSHIPPED
Developer Assessment Platform logo

Developer Assessment Platform

Independently built platform for practicing and assessing developer skills

INDEPENDENT PRODUCT · 2026

Built independently, not for a client — a self-directed product to sharpen developer interview prep and to design a full multi-app architecture end-to-end with no external requirements.

3

Apps

PostgreSQL

Database

Drizzle

ORM

JWT + Argon2id

Auth

4

Question Types

localStorage

Client State

Monorepo

Architecture

REST

API Style

Render

Hosting

Overview

Developer Assessment Platform is an independently conceived and built product, not client work — it exists because I wanted a proper practice ground for developer interview prep and a self-contained excuse to design a full multi-app architecture from a blank page, with no requirements handed to me. The system is an npm-workspaces monorepo split into three apps and three shared packages: a candidate-facing Next.js 14 (App Router) app for taking quizzes, a separate Next.js 14 admin console for managing content, and a Fastify + TypeScript REST API sitting in front of PostgreSQL, with Drizzle ORM providing a typed schema and lightweight migrations and Zod validating every request. The core architectural decision was to treat Postgres purely as a content store — subjects, topics, questions, question options, admin accounts, and a couple of global settings — and nothing else. There is no assessments table, no attempts table, no bookmarks table, and no per-visitor identity anywhere in the database. The public API (`/api/v1/subjects`, `/api/v1/questions`, ...) is entirely unauthenticated and read-only content, returning question pools with their correct answers and explanations embedded, because grading is designed to happen entirely client-side. Quiz generation, grading, scoring, and weak-area analysis all live in a single client-side module (`quizEngine.ts`) in the candidate app, with everything — the generated assessment, full attempt history capped at the 50 most recent runs, computed weak-area breakdowns, and bookmarks — persisted in the browser's localStorage rather than a server-side session. The admin console has its own authentication path: JWT sessions carried in an HttpOnly, Secure cookie set on login, verified independently on every admin route by a `requireAdmin` Fastify preHandler rather than being enforced only by hiding pages in the frontend, and admin passwords hashed with Argon2id. The UI system across both frontends is deliberately strict black-and-white — no color, just typography, hairline borders, and a code-editor-inspired accent language of monospace tags and line-numbered code blocks — with dark mode as the default and light mode a single toggle away. The whole system is designed around a clear trade-off: candidates get a completely frictionless, account-free way to practice, at the cost of no cross-device sync and no admin-side visibility into candidate activity, since none of that data ever reaches the server.

Engineering Challenges

Designing a schema-and-API split where Postgres holds only content and every piece of candidate activity — assessments, grading, history, bookmarks — lives entirely client-side instead of in server-tracked tables

Building a client-side quiz engine responsible for assessment generation, grading, scoring, and weak-area computation, with no server-held attempt state to fall back on

Structuring an npm-workspaces monorepo cleanly across two Next.js 14 frontends, a Fastify API, and shared database/validation/types packages

Enforcing admin authorization independently at the API layer via a requireAdmin preHandler on every admin route, rather than relying on frontend route-hiding

Deciding, deliberately, to expose isCorrect and explanation in the public question API since grading happens client-side and there is no server-held attempt to protect — and documenting that trade-off rather than treating it as an oversight

Keeping a strict two-color (black and white) design system visually rich and legible across two separate frontends without introducing any accent colors

Outcomes

✓

Shipped a working three-app system: candidate app, admin console, and API, deployed and publicly accessible

✓

Validated a fully stateless public API design with zero candidate accounts, sessions, or server-side tracking

✓

Built a reusable client-side quiz engine handling generation, grading, scoring, and weak-area analysis

✓

Implemented admin authentication and authorization enforced independently at the API layer

✓

Established a typed, schema-as-code database layer with Drizzle ORM and lightweight migrations

✓

Deployed the Fastify API and PostgreSQL database to production on Render, serving both frontends live

✓

Produced a self-directed portfolio piece demonstrating full end-to-end architectural ownership, from database schema to UI design system, without external requirements

Media Gallery

VIEW SOURCE ↗← ALL PROJECTS