Source: https://seerepo.com/r/fosrl/pangolin/built
Markdown source: https://seerepo.com/r/fosrl/pangolin/built.md
Description: pangolin is a TypeScript repo built with React, Next.js, and Express. It stores its data in SQLite and reaches it with Drizzle.

# What is pangolin built with?

pangolin is a TypeScript repo built with React, Next.js, and Express. It stores its data in SQLite, reaches it with Drizzle, signs people in with simplewebauthn, helmet, and jsonwebtoken, takes payments with Stripe, stores files in AWS S3, measures its use with PostHog, makes its content with js-yaml, react-email, yaml, qrcode.react, and nodemailer, validates its data with Zod, zod-validation-error, and @hookform/resolvers, deploys with winston and winston-daily-rotate-file, and uses lru-cache, Postgres, and Redis. It has 349,039 written lines, with 24 test files.

Read on November 4, 2026, at commit aaec7f4.

Repository: https://github.com/fosrl/pangolin

## Frontend

### The base

- **[React](https://seerepo.com/uses/react)**: 476 files · [in package.json](https://github.com/fosrl/pangolin/blob/aaec7f44c47eee61649e581405154419b8ad6982/package.json)
- **[Next.js](https://seerepo.com/uses/nextjs)**: 333 files · [in package.json](https://github.com/fosrl/pangolin/blob/aaec7f44c47eee61649e581405154419b8ad6982/package.json)

### Styles

- **[Tailwind CSS](https://seerepo.com/uses/tailwind-css)**
- **[class-variance-authority](https://seerepo.com/uses/class-variance-authority)**: 11 files
- **next-themes**: 9 files
- **github.com/charmbracelet/lipgloss**: 1 file
- **[tailwind-merge](https://seerepo.com/uses/tailwind-merge)**: 1 file

### Interface

- **[React Hook Form](https://seerepo.com/uses/react-hook-form)**: 110 files
- **@tanstack/react-table**: 56 files
- **[Radix UI](https://seerepo.com/uses/radix-ui)**: 22 files
- **input-otp**: 7 files
- **@monaco-editor/react**: 3 files
- **[recharts](https://seerepo.com/uses/recharts)**: 3 files
- **canvas-confetti**: 2 files
- **[cmdk](https://seerepo.com/uses/cmdk)**: 2 files
- **D3**: 1 file
- **Headless UI**: 1 file
- **nextjs-toploader**: 1 file
- **react-day-picker**: 1 file
- **vaul**: 1 file
- **[xterm](https://seerepo.com/uses/xterm)**: 1 file

### Icons

- **[Lucide](https://seerepo.com/uses/lucide)**: 266 files
- **@radix-ui/react-icons**: 8 files
- **react-icons**: 6 files

## Backend

### The base

- **[Express](https://seerepo.com/uses/express)**: 528 files · [in package.json](https://github.com/fosrl/pangolin/blob/aaec7f44c47eee61649e581405154419b8ad6982/package.json)

### Data

- **[SQLite](https://seerepo.com/uses/sqlite)**: 39 files · [server/db/sqlite/driver.ts, line 2](https://github.com/fosrl/pangolin/blob/aaec7f44c47eee61649e581405154419b8ad6982/server/db/sqlite/driver.ts#L2)
- **lru-cache**: 1 file
- **[Postgres](https://seerepo.com/uses/postgres)**: 1 file · [server/db/pg/poolConfig.ts, line 2](https://github.com/fosrl/pangolin/blob/aaec7f44c47eee61649e581405154419b8ad6982/server/db/pg/poolConfig.ts#L2)
- **[Redis](https://seerepo.com/uses/redis)**: 1 file · [server/private/lib/redis.ts, line 14](https://github.com/fosrl/pangolin/blob/aaec7f44c47eee61649e581405154419b8ad6982/server/private/lib/redis.ts#L14)

### Data access

- **Drizzle**: 633 files

### Sign-in

- **simplewebauthn**: 5 files
- **helmet**: 4 files
- **jsonwebtoken**: 2 files

### Services

- **[Stripe](https://seerepo.com/uses/stripe)**: 11 files · [server/lib/billing/getLineItems.ts, line 1](https://github.com/fosrl/pangolin/blob/aaec7f44c47eee61649e581405154419b8ad6982/server/lib/billing/getLineItems.ts#L1)
- **[AWS S3](https://seerepo.com/uses/aws-s3)**: 1 file · [server/lib/s3.ts, line 1](https://github.com/fosrl/pangolin/blob/aaec7f44c47eee61649e581405154419b8ad6982/server/lib/s3.ts#L1)
- **[PostHog](https://seerepo.com/uses/posthog)**: 1 file · [server/lib/telemetry.ts, line 1](https://github.com/fosrl/pangolin/blob/aaec7f44c47eee61649e581405154419b8ad6982/server/lib/telemetry.ts#L1)

## Support

### Content

- **[js-yaml](https://seerepo.com/uses/js-yaml)**: 32 files
- **react-email**: 17 files
- **[yaml](https://seerepo.com/uses/yaml)**: 6 files
- **qrcode.react**: 4 files
- **nodemailer**: 1 file

### Validation

- **[Zod](https://seerepo.com/uses/zod)**: 554 files
- **zod-validation-error**: 430 files
- **[@hookform/resolvers](https://seerepo.com/uses/hookform-resolvers)**: 91 files

### Deploy

- **winston**: 3 files
- **winston-daily-rotate-file**: 1 file

### Tools

- **yargs**: 14 files
- **@tanstack/react-query-devtools**: 1 file
- **esbuild**: 1 file
- **esbuild-node-externals**: 1 file

### Other

- **next-intl**: 471 files
- **Axios**: 172 files
- **[TanStack](https://seerepo.com/uses/tanstack)**: 97 files
- **use-debounce**: 36 files
- **moment**: 20 files
- **SemVer**: 13 files
- **express-rate-limit**: 7 files
- **cors**: 5 files
- **uuid**: 5 files
- **cookie-parser**: 3 files
- **ws**: 3 files
- **gopkg.in/yaml.v3**: 2 files
- **@novnc/novnc**: 1 file
- **clsx**: 1 file
- **crypto-js**: 1 file
- **golang.org/x/term**: 1 file
- **jmespath**: 1 file

## Other repos with a similar stack

- [Significant-Gravitas/AutoGPT](https://seerepo.com/r/Significant-Gravitas/AutoGPT/built): React, Next.js, Postgres, Redis, Stripe, PostHog, Tailwind CSS, class-variance-authority, next-themes, tailwind-merge, React Hook Form, Radix UI, recharts, canvas-confetti, cmdk, react-day-picker, vaul, Zod, @hookform/resolvers · [Compare](https://seerepo.com/compare/fosrl/pangolin/vs/Significant-Gravitas/AutoGPT)
- [supabase/supabase](https://seerepo.com/r/supabase/supabase/built): React, Next.js, Stripe, PostHog, Tailwind CSS, class-variance-authority, next-themes, React Hook Form, Radix UI, input-otp, recharts, cmdk, react-day-picker, vaul, Lucide, js-yaml, Zod, @hookform/resolvers · [Compare](https://seerepo.com/compare/fosrl/pangolin/vs/supabase/supabase)
- [infiniflow/ragflow](https://seerepo.com/r/infiniflow/ragflow/built): React, Postgres, Redis, AWS S3, Tailwind CSS, class-variance-authority, next-themes, tailwind-merge, React Hook Form, Radix UI, @monaco-editor/react, recharts, cmdk, D3, react-day-picker, Lucide, Zod, @hookform/resolvers · [Compare](https://seerepo.com/compare/fosrl/pangolin/vs/infiniflow/ragflow)
- [shadcn-ui/ui](https://seerepo.com/r/shadcn-ui/ui/built): React, Next.js, lru-cache, Tailwind CSS, class-variance-authority, next-themes, React Hook Form, Radix UI, recharts, cmdk, react-day-picker, vaul, Lucide, Zod · [Compare](https://seerepo.com/compare/fosrl/pangolin/vs/shadcn-ui/ui)
- [paperclipai/paperclip](https://seerepo.com/r/paperclipai/paperclip/built): React, Express, Postgres, AWS S3, Tailwind CSS, class-variance-authority, tailwind-merge, Radix UI, cmdk, xterm, Lucide, Drizzle, yaml, Zod · [Compare](https://seerepo.com/compare/fosrl/pangolin/vs/paperclipai/paperclip)
- [langgenius/dify](https://seerepo.com/r/langgenius/dify/built): React, Next.js, SQLite, Postgres, Redis, Tailwind CSS, class-variance-authority, next-themes, @monaco-editor/react, js-yaml, yaml, qrcode.react, Zod · [Compare](https://seerepo.com/compare/fosrl/pangolin/vs/langgenius/dify)

## Frequently asked questions

### What language is pangolin written in?

pangolin is written in TypeScript, with 349,039 written lines.

### What framework does pangolin use?

pangolin is built with React, Next.js, and Express.

The proof: [in package.json](https://github.com/fosrl/pangolin/blob/aaec7f44c47eee61649e581405154419b8ad6982/package.json)

### What database does pangolin use?

pangolin stores its data in SQLite and reaches it with Drizzle.

The proof: [server/db/sqlite/driver.ts, line 2](https://github.com/fosrl/pangolin/blob/aaec7f44c47eee61649e581405154419b8ad6982/server/db/sqlite/driver.ts#L2)

### What does pangolin sign people in with?

pangolin signs people in with simplewebauthn, helmet, and jsonwebtoken.

### What does pangolin take payments with?

pangolin takes payments with Stripe.

The proof: [server/lib/billing/getLineItems.ts, line 1](https://github.com/fosrl/pangolin/blob/aaec7f44c47eee61649e581405154419b8ad6982/server/lib/billing/getLineItems.ts#L1)

### What services does pangolin use?

pangolin stores files in AWS S3, measures its use with PostHog, and uses lru-cache, Postgres, and Redis.

The proof: [server/lib/s3.ts, line 1](https://github.com/fosrl/pangolin/blob/aaec7f44c47eee61649e581405154419b8ad6982/server/lib/s3.ts#L1)

### Does pangolin have tests?

Yes. pangolin has 24 test files.

### Which repos have a stack like pangolin's?

The ones that share most of its stack: Significant-Gravitas/AutoGPT, supabase/supabase, and infiniflow/ragflow.

## What is your repo built with?

Any public repo, with no account: https://seerepo.com/r/owner/repo/built, with the owner and name it has on GitHub.
