Security & Stability: - Add Next.js 16 proxy.ts for BetterAuth cookie-based auth protection - Add rate limiting for API routes (src/lib/rate-limit.ts) - Add Zod validation for chat API request bodies - Add session auth check to chat and diagnostics endpoints - Add security headers in next.config.ts (CSP, X-Frame-Options, etc.) - Add file upload validation and sanitization in storage.ts Core UX Components: - Add error boundaries (error.tsx, not-found.tsx, chat/error.tsx) - Add loading states (skeleton.tsx, spinner.tsx, loading.tsx files) - Add toast notifications with Sonner - Add form components (input.tsx, textarea.tsx, label.tsx) - Add database indexes for performance (schema.ts) - Enhance chat UX: timestamps, copy-to-clipboard, thinking indicator, error display, localStorage message persistence Polish & Accessibility: - Add Open Graph and Twitter card metadata - Add JSON-LD structured data for SEO - Add sitemap.ts, robots.ts, manifest.ts - Add skip-to-content link and ARIA labels in site-header - Enable profile page quick action buttons with dialogs - Update Next.js 15 references to Next.js 16 Developer Experience: - Add GitHub Actions CI workflow (lint, typecheck, build) - Add Prettier configuration (.prettierrc, .prettierignore) - Add .nvmrc pinning Node 20 - Add ESLint rules: import/order, react-hooks/exhaustive-deps - Add stricter TypeScript settings (exactOptionalPropertyTypes, noImplicitOverride) - Add interactive setup script (scripts/setup.ts) - Add session utility functions (src/lib/session.ts) All changes mirrored to create-agentic-app/template/ 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
72 lines
2.1 KiB
JSON
72 lines
2.1 KiB
JSON
{
|
|
"name": "agentic-coding-starter-kit",
|
|
"version": "1.1.2",
|
|
"scripts": {
|
|
"dev": "next dev --turbopack",
|
|
"build": "pnpm run db:migrate && next build",
|
|
"start": "next start",
|
|
"lint": "eslint .",
|
|
"typecheck": "tsc --noEmit",
|
|
"check": "pnpm lint && pnpm typecheck",
|
|
"format": "prettier --write .",
|
|
"format:check": "prettier --check .",
|
|
"setup": "npx tsx scripts/setup.ts",
|
|
"env:check": "node -e \"require('./src/lib/env.ts').checkEnv()\" || echo 'Run with tsx: npx tsx -e \"import { checkEnv } from './src/lib/env'; checkEnv();\"'",
|
|
"db:generate": "drizzle-kit generate",
|
|
"db:migrate": "drizzle-kit migrate",
|
|
"db:push": "drizzle-kit push",
|
|
"db:studio": "drizzle-kit studio",
|
|
"db:dev": "drizzle-kit push",
|
|
"db:reset": "drizzle-kit drop && drizzle-kit push"
|
|
},
|
|
"dependencies": {
|
|
"@ai-sdk/react": "^2.0.86",
|
|
"@openrouter/ai-sdk-provider": "^1.2.0",
|
|
"@radix-ui/react-avatar": "^1.1.10",
|
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
"@radix-ui/react-label": "^2.1.8",
|
|
"@radix-ui/react-slot": "^1.2.3",
|
|
"@vercel/blob": "^2.0.0",
|
|
"ai": "^5.0.86",
|
|
"better-auth": "^1.3.34",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"drizzle-orm": "^0.44.7",
|
|
"lucide-react": "^0.539.0",
|
|
"next": "16.0.3",
|
|
"next-themes": "^0.4.6",
|
|
"pg": "^8.16.3",
|
|
"postgres": "^3.4.7",
|
|
"react": "19.2.0",
|
|
"react-dom": "19.2.0",
|
|
"react-markdown": "^10.1.0",
|
|
"sonner": "^2.0.7",
|
|
"tailwind-merge": "^3.3.1",
|
|
"zod": "^4.1.12"
|
|
},
|
|
"devDependencies": {
|
|
"@tailwindcss/postcss": "^4.1.16",
|
|
"@types/node": "^20.19.24",
|
|
"@types/pg": "^8.15.6",
|
|
"@types/react": "19.2.5",
|
|
"@types/react-dom": "19.2.3",
|
|
"drizzle-kit": "^0.31.6",
|
|
"eslint": "^9.39.0",
|
|
"eslint-config-next": "16.0.3",
|
|
"prettier": "^3.4.2",
|
|
"prettier-plugin-tailwindcss": "^0.6.9",
|
|
"shadcn": "^3.5.0",
|
|
"tailwindcss": "^4.1.16",
|
|
"tsx": "^4.19.2",
|
|
"tw-animate-css": "^1.4.0",
|
|
"typescript": "^5.9.3"
|
|
},
|
|
"pnpm": {
|
|
"overrides": {
|
|
"@types/react": "19.2.5",
|
|
"@types/react-dom": "19.2.3"
|
|
}
|
|
}
|
|
}
|