Open Source · Tech Stack

# What this case file is built with.

Every framework, library, and tool this site runs on, grouped by what it's for. Versions track `package.json` as of the last update.

## Framework & Runtime

### TanStack Start

1.168.32

React SSR meta-framework: file-based routing, server functions, server routes.

### React

19.2.8

UI library. React Compiler is enabled -- most manual useMemo/useCallback were removed.

### React Compiler

1.0.0

Automatic memoization, wired in via @rolldown/plugin-babel since Vite 8’s React plugin is Rolldown-based, not Babel-based.

### Vite

8.1.5

Build tool and dev server, Rolldown-powered bundler under the hood.

### TypeScript

7.0.2

Static typing across the whole app -- strict mode, no \`any\`.

### Bun

1.3.14

Package manager and local dev runtime (the deployed app runs on Cloudflare Workers’ own runtime, not Bun).

## TanStack Libraries

### TanStack Router

1.170.18

File-based routing, type-safe navigation and search params.

### TanStack Query

5.101.4

Data fetching and caching, warmed server-side on every route loader.

### TanStack DB

0.1.94

Reactive live queries (useLiveQuery) over a collection synced from the Query cache -- powers instant search filtering.

### TanStack Table

8.21.3

Column definitions and pagination for the reports table.

### TanStack Virtual

3.14.8

Row virtualization -- only visible table rows are mounted in the DOM.

### TanStack Form

1.33.2

The "Report a Scammer" submission form, with per-field Zod validators.

### TanStack Store

0.11.0

Shared search/pagination filter state across the table and URL.

### TanStack Pacer

0.22.1

Debounces the search input before it hits the live query.

## Cloudflare & Storage

### Cloudflare Workers

—

The deploy target -- every route (pages, server functions, and server routes like sitemap.xml/og.png) runs as one Worker.

### Cloudflare D1

—

SQLite database holding every scammer report -- the only external dependency this app has.

### @cloudflare/vite-plugin

1.47.0

Runs a real Workers runtime (via Miniflare) inside Vite's dev server and build pipeline.

### Wrangler

4.114.0

Cloudflare CLI -- local D1 migrations, deploy, type generation.

## Styling & Design

### Tailwind CSS

4.3.3

Utility-first CSS -- almost all styling is Tailwind composition, not custom classes.

### clsx + tailwind-merge

2.1.1 / 3.6.0

Back the cn() helper (src/lib/cn.ts) for conditional/overriding class names.

### Google Fonts

—

Special Elite (display/typewriter), Source Serif 4 (body), IBM Plex Mono (data/labels) -- also self-hosted as TTFs for the OG image renderer.

### @tailwindcss/typography

0.5.20

The \`prose\` plugin, styling the rendered Markdown case files served to agents.

## Forms, Validation & Data

### Zod

4.4.3

Schema validation on the report submission form, client and server.

### libphonenumber-js

1.13.9

Validates phone numbers and derives each report’s ISO country code from its calling code.

### Faker.js

10.5.0

Generates the local seed dataset (scripts/seed.ts) -- a dev-only dependency.

## OG Image Generation

### takumi-js

2.4.2

Rust engine (native on Bun, WebAssembly on Workers) that renders every page’s og:image from JSX, on request, per page.

## MCP & Markdown

### @modelcontextprotocol/sdk

1.29.0

Powers the remote MCP server at /mcp -- the same buildTools() list backs both this and the in-browser MCP tools.

### unified (rehype-parse + rehype-remark + remark-gfm + remark-stringify)

11.0.5 / 9.0.1 / 10.0.1 / 4.0.1 / 11.0.0

Converts every page's rendered HTML into its Markdown twin (the URL plus ".md") in the Worker entry, so the twin always says exactly what the page says and reporter-submitted text is escaped correctly.

## Tooling & Quality

### Biome

2.5.5

Lint + format in one tool -- no ESLint, no Prettier.

### Vitest + Testing Library

4.1.10

Unit/component tests, run against a dedicated Vitest-only Vite config.

## Frequently asked questions

### Why TanStack Start instead of Next.js?

TanStack Start gives full-stack React (SSR, server functions, and server routes) built directly on TanStack Router, which this project already used for its type-safe routing -- one router, not two competing ones.

### Why Cloudflare Workers and D1 instead of a traditional server and database?

The entire site -- pages, server functions, and server routes like sitemap.xml and og.png -- runs as one Worker at the edge, with D1 (SQLite) as the only external dependency. No servers to provision or scale.

### Is this project open source?

Yes -- the full source, including this stack list, is at github.com/sky-flux/scammercasefile.

### How are the page preview images (og:image) generated?

By takumi-js, a Rust rendering engine that runs natively on Bun and as WebAssembly on Cloudflare Workers, producing each page's image from JSX on request.

## Been targeted by a scammer?

File a report with the number, name, and what happened — it's published immediately and warns the next person who searches.

[Report a scammer](https://scammercasefile.com/report)
