Skip to content

Repository files navigation

InterviewKit

Recommended reading: Head First Design Patterns — a beginner-friendly, easy-going walkthrough of design patterns. Highly recommended for successful completion of this exercise.

Table of Contents

Tech Stack

Layer Technologies
Monorepo pnpm workspaces, Turborepo
Backend Hono, ClickHouse, Redis, dbmate migrations
CLI Commander.js, Consola
Frontend React, Vite, TanStack Router & Query, shadcn/ui, Tailwind CSS
Language TypeScript, linted by oxlint

Prerequisites

  • Node 24+, see .nvmrc.

  • Docker, for ClickHouse and Redis.

  • dbmate, a standalone binary rather than an npm package:

    brew install dbmate

Setup

docker compose up -d     # ClickHouse and Redis
pnpm install
pnpm db:migrate          # creates the schema
pnpm dev                 # API on :3001, web on :3000

Then, in a second terminal:

pnpm cli health

Stop the containers with docker compose down, or docker compose down -v to drop the data as well.

Scripts

Command Description
pnpm dev API and web app, both with hot reload
pnpm typecheck Type-checks every package
pnpm lint oxlint
pnpm build Production bundle of the web app
pnpm cli <args> Runs the CLI inside demo/
pnpm db:migrate Applies pending migrations
pnpm db:status Applied and pending migrations

Layout

interviewkit/
├── apps/
│   ├── api/        Hono backend, port 3001
│   ├── cli/        the `lng` command
│   └── web/        React + Vite app, port 3000
├── packages/
│   ├── config/          ports and connection strings
│   └── plugin-contract/ the interface file format plugins implement
├── demo/           sample project; the CLI runs here
├── db/migrations/  dbmate migrations
└── docker-compose.yml

Notes

There is no build step. Node runs TypeScript directly, so relative imports carry their extension: import { api } from './index.ts'.

Workspace packages export source. @task/config resolves to packages/config/src/index.ts, and nothing needs building before anything else runs.

db/schema.sql is generated by dbmate. Change the schema with a migration (dbmate new <name>), not by editing the dump.

The API's routes are a single chained expression whose type is exported as ApiType, which hc<ApiType>() turns into a typed client. See apps/cli/src/commands/health.ts.

Learning Resources

Monorepo & tooling

Backend

CLI

Frontend

About

No description, website, or topics provided.

Resources

Stars

9 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages