feat: comprehensive boilerplate improvements

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>
This commit is contained in:
Leon van Zyl
2025-11-30 14:46:15 +02:00
parent 1121258238
commit a3a151c67a
125 changed files with 5088 additions and 493 deletions

View File

@@ -2,11 +2,16 @@
"name": "agentic-coding-starter-kit",
"version": "1.1.2",
"scripts": {
"dev": "next dev",
"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",
@@ -15,12 +20,12 @@
"db:reset": "drizzle-kit drop && drizzle-kit push"
},
"dependencies": {
"@ai-sdk/openai": "^2.0.60",
"@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",
@@ -36,6 +41,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"
},
@@ -48,8 +54,11 @@
"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"
},