A Next.js application displaying cryptocurrency prices, built with Prisma 7 and PostgreSQL.
- Framework: Next.js 16 (App Router, Turbopack)
- Language: TypeScript 5.9 (ESM)
- Database: PostgreSQL 17 with Prisma 7 + pg adapter
- Styling: Tailwind CSS 4 (CSS-first configuration)
- Runtime: Node.js 22 LTS
- Package Manager: pnpm
- Node.js 22+ (
nvm useormise install) - pnpm (
corepack enable pnpm) - Docker (for PostgreSQL)
# Install dependencies (runs prisma generate automatically)
pnpm install
# Start PostgreSQL
docker compose up -d postgres
# Set up environment
cp .env.example .env
# Run migrations
pnpm db:migrate
# Start development server
pnpm devThe app will be available at http://localhost:3000.
| Command | Description |
|---|---|
pnpm dev |
Start development server with Turbopack |
pnpm build |
Build for production |
pnpm start |
Start production server |
pnpm db:migrate |
Run database migrations |
pnpm db:push |
Push schema changes (no migration) |
pnpm db:studio |
Open Prisma Studio GUI |
├── app/ # Next.js App Router
│ ├── layout.tsx # Root layout with fonts
│ ├── page.tsx # Home page with currency table
│ └── globals.css # Tailwind @theme configuration
├── components/ # React components
│ ├── table.tsx # Currency table (Server Component)
│ └── table-placeholder.tsx # Loading skeleton
├── lib/
│ └── prisma.ts # Prisma client with pg adapter
├── prisma/
│ ├── schema.prisma # Database schema
│ ├── generated/ # Generated Prisma client (gitignored)
│ └── migrations/ # SQL migrations
├── prisma.config.ts # Prisma configuration
├── docker-compose.yaml # PostgreSQL + Next.js services
└── Dockerfile # Production container (you need to create this)
| Variable | Description |
|---|---|
POSTGRES_PRISMA_URL |
PostgreSQL connection string |
Example: postgres://postgres:postgres@localhost:5432/currencies?schema=public
model currencies {
id Int @id @default(autoincrement())
name String
code String @unique
icon String
price Decimal @db.Decimal(15, 5)
createdAt DateTime @default(now())
}This project uses Prisma 7's driver adapter architecture with node-postgres for connection pooling. The client is generated to prisma/generated/ and configured in prisma.config.ts.
# Start PostgreSQL only
docker compose up -d postgres
# Start full stack (requires Dockerfile)
docker compose up -d