4.1 KiB
CODEBUDDY.md This file provides guidance to CodeBuddy when working with code in this repository.
Commands
| Command | Description |
|---|---|
npm run dev |
Start dev server with Turbopack (fast refresh) |
npm run build |
Production build |
npm run start |
Run production server |
npm run lint |
ESLint check |
npm run type-check |
TypeScript type checking without emit |
npm run format |
Format code with Prettier |
Architecture
Tech Stack
- Framework: Next.js 15 with App Router, React 19
- State: Zustand for client state
- Styling: Tailwind CSS with HSL CSS variables (dark mode by default)
- UI Components: Custom components built on Radix UI primitives + class-variance-authority
- Animations: Framer Motion
- Form Validation: Zod
- Media Processing: Sharp (images), FFmpeg (video/audio)
- Internationalization: i18n store + server helpers (cookie/Accept-Language detection)
Directory Structure
src/
├── app/ # Next.js App Router
│ ├── (auth)/ # Auth routes group
│ ├── (dashboard)/ # Dashboard routes with Sidebar layout
│ │ └── tools/ # Tool pages (image/audio/video/texture-atlas)
│ ├── api/ # API routes
│ │ ├── upload/ # File upload endpoint
│ │ └── process/ # Processing endpoints per tool type
│ ├── globals.css # Global styles with CSS variables
│ └── layout.tsx # Root layout (Header + Footer + SEO)
├── components/
│ ├── layout/ # Header, Footer, Sidebar, LanguageSwitcher
│ ├── seo/ # StructuredData
│ ├── tools/ # Tool components (FileUploader, ConfigPanel, ResultPreview...)
│ │ └── atlas/ # Texture-atlas specific panels
│ └── ui/ # Base UI primitives (button, card, dialog, etc.)
├── hooks/ # Custom hooks (e.g., atlas worker bridge)
├── lib/ # API clients, i18n, atlas algorithms, image processing
├── locales/ # i18n resources
├── store/ # Zustand stores (upload/atlas/auth)
└── types/ # Shared TypeScript types
Key Patterns
Route Groups: Uses (auth) and (dashboard) route groups. Dashboard routes share a layout with Sidebar.
Tool Pages Pattern: Tools (audio-compress, image-compress, video-frames) share a common UI flow:
FileUploaderfor drag-drop inputConfigPanelfor tool-specific settingsProgressBarfor processing statusResultPreviewfor outputs- State managed via
useUploadStore
Texture Atlas Tool: /tools/texture-atlas uses a three-panel layout (file list, canvas preview, config panel) with Web Worker processing for packing and preview.
API Routes: app/api/ routes run on Node.js. Upload and processing endpoints validate input and return JSON. Production processing is intended to use Sharp/FFmpeg.
State Management: Zustand stores in store/ directory.
uploadStore: file queue and processing progressatlasStore: texture-atlas state (sprites, configs, results, preview)authStore: user state placeholder
Internationalization: useI18nStore + useSafeTranslation to avoid SSR/CSR hydration mismatch; server uses cookie/Accept-Language to set locale.
Styling: Uses cn() from lib/utils.ts for Tailwind class merging. Theme colors are CSS variables in globals.css.
Type Definitions: Shared types live in types/index.ts (uploads, processing configs, atlas models, API responses).
Service & Processing Logic
lib/api.ts: API client wrappers (upload/process/download/quota)lib/atlas-packer.ts+lib/atlas-worker.ts: browser-side packing algorithmshooks/useAtlasWorker.ts: Web Worker bridge for atlas packinglib/image-processor.ts: Sharp-based image compression pipelinelib/file-storage.ts: temp storage, validation, cleanup, downloads