This monorepo contains a full-stack TypeScript application inspired by the modern NIX stack architecture but customized for Remix, Hono.js, Drizzle ORM, Bun, TurboRepo, Biome, and shadcn/ui, following best practices.
monorepo/
├── apps/
│ ├── web/ # Remix frontend with shadcn/ui
│ └── api/ # Hono.js backend
├── packages/
│ ├── ui/ # Shared shadcn/ui components
│ ├── db/ # Drizzle ORM setup
│ └── types/ # Shared schemas and types (Zod)
├── bun.lockb
├── biome.json
├── turbo.json
└── package.json
- Bun (v1.x or higher)
- Node.js v18+ (recommended)
bun install
Start development with TurboRepo (runs both frontend and backend concurrently):
bun run dev
Frontend runs at: http://localhost:3000
Backend API at: http://localhost:3001
Located at apps/web
Run individually:
cd apps/web
bun run dev
Located at apps/api
bun run dev
Shared UI components following official shadcn/ui monorepo guide.
Location: packages/ui
Usage:
import { Button } from "@workspace/ui";
export default function Component() {
return <Button>Click me</Button>;
Drizzle ORM and migrations management.
Location: packages/db
- Create migration:
bunx drizzle-kit generate
Shared Zod schemas and types for full-stack type safety.
Location: packages/types
Example:
import { createUserSchema } from "@workspace/types";
Lint:
bun run lint
Format code:
bun run format
- Development:
bun run dev
- Build:
bun run build
- Frontend: Remix, React, shadcn/ui, TailwindCSS
- Backend: Hono.js, Drizzle ORM, PostgreSQL
- Tooling: Bun, TurboRepo, Biome
- Missing module: run
bun install --force
- Vite issues: clear cache with
rm -rf apps/web/node_modules/.vite
- PostCSS issues: Use CommonJS exports (
module.exports
) in.cjs
files.
- Remix: Vercel, Cloudflare Pages, Netlify
- Hono: Cloudflare Workers, Docker, Vercel
- Lint:
bun run lint
- Format:
bun run format
Maintainer — maintainer@postmed.com Theerakarn M. — contact@theerakarnm.dev