Initial commit with translated description
This commit is contained in:
55
stack.md
Normal file
55
stack.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# Stack & Tooling — Frontend
|
||||
|
||||
## Recommended Stack
|
||||
|
||||
| Layer | Choice | Why |
|
||||
|-------|--------|-----|
|
||||
| Framework | Next.js 14+ | RSC, file routing, Vercel deploy |
|
||||
| Language | TypeScript | Catch errors early, better DX |
|
||||
| Styling | Tailwind CSS | Utility-first, design tokens built-in |
|
||||
| Components | shadcn/ui | Accessible, customizable, not a dependency |
|
||||
| Animation | Framer Motion | Declarative, performant |
|
||||
| Forms | React Hook Form + Zod | Type-safe validation |
|
||||
| State | Zustand or Jotai | Simple, no boilerplate |
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
src/
|
||||
├── app/ # Next.js App Router
|
||||
│ ├── layout.tsx
|
||||
│ ├── page.tsx
|
||||
│ └── [feature]/
|
||||
├── components/
|
||||
│ ├── ui/ # shadcn/ui components
|
||||
│ └── [feature]/
|
||||
├── lib/
|
||||
│ ├── utils.ts # cn(), formatters
|
||||
│ └── api.ts
|
||||
├── hooks/
|
||||
├── styles/
|
||||
│ └── globals.css
|
||||
└── config/
|
||||
└── site.ts
|
||||
```
|
||||
|
||||
## Essential Utils
|
||||
|
||||
```typescript
|
||||
// lib/utils.ts
|
||||
import { clsx, type ClassValue } from "clsx"
|
||||
import { twMerge } from "tailwind-merge"
|
||||
|
||||
export function cn(...inputs: ClassValue[]) {
|
||||
return twMerge(clsx(inputs))
|
||||
}
|
||||
```
|
||||
|
||||
## shadcn/ui Setup
|
||||
|
||||
```bash
|
||||
npx shadcn@latest init
|
||||
npx shadcn@latest add button card dialog
|
||||
```
|
||||
|
||||
Most used: Button, Card, Dialog, Accordion, Tabs, Sheet, NavigationMenu.
|
||||
Reference in New Issue
Block a user