# What Joel Saji builds with

> The stack behind joelcsaji.com, checkable in its repo: TanStack Start, React, TypeScript, Tailwind CSS, Cloudflare Workers, Bun, Vitest, and Playwright.

Canonical: https://www.joelcsaji.com/uses

Every entry below can be checked against the site's repository.

## Toolchain

[Bun](https://bun.sh) runs nearly everything: scripts, tests, and the production build. The code is TypeScript throughout, with Biome for formatting and linting and tsc for the type pass. I work between a Mac and a Windows machine through WSL, and the toolchain behaves the same on both.

## The framework

This site is a [TanStack Start](https://tanstack.com/start) app: React 19 server-rendered per request on [Cloudflare Workers](https://workers.cloudflare.com), with TanStack Router for routing and server functions for anything that must not ship to the browser. Styling is [Tailwind CSS v4](https://tailwindcss.com) on top of a small token layer, and the pages you are reading are plain Markdown rendered with remark and rehype.

## Type

The type is [Inter Tight](https://rsms.me/inter/) for display and body, with [Geist Mono](https://vercel.com/geist/introduction) for labels and code. Both are self-hosted, so no font provider sees your visits.

## Testing and quality

[Vitest](https://vitest.dev) covers units and server logic. [Playwright](https://playwright.dev) drives a browser smoke suite that runs before every push, with axe-core accessibility scans along the way. Performance is measured with [Lighthouse](https://developer.chrome.com/docs/lighthouse) against a local copy of the production Worker, not the live edge, so the numbers reflect the code and not the network.

## Shipping

Cloudflare Workers Builds deploys on every push to main, and [wrangler](https://developers.cloudflare.com/workers/wrangler/) is the CLI for the rest. If a build ever fails, the recovery path is a single command from a laptop.

## What I am deliberately not using

No CSS-in-JS runtime, no client-side data-fetching library, and no styled component library: a few unstyled Radix primitives handle dialogs and focus, and the site owns every style. Dependencies have to earn their place in the lockfile.

## Changes

This page changes when the stack does.
