feat: migrate from Next.js Pages Router to App Router with Payload CMS

Complete architectural overhaul migrating from Directus+tRPC to Payload CMS with Next.js App Router. This represents a fundamental shift in how the application is structured and how data is managed.

Major changes:
- Migrated from Pages Router (src/pages/) to App Router (src/app/)
- Replaced Directus CMS with Payload CMS as the content management system
- Removed tRPC in favor of Payload's built-in API routes
- Added PostgreSQL database via Docker Compose for local development
- Implemented separate route groups for frontend and Payload admin
- Updated all API routes to App Router conventions
- Added Payload collections for Projects, Technologies, Links, Media, and Users
- Configured ESLint for new project structure

Infrastructure:
- Added docker-compose.yml for PostgreSQL database
- Updated environment variables for Payload CMS configuration
- Integrated @payloadcms/next for seamless Next.js integration
- Added GraphQL API and playground routes

Dependencies:
- Upgraded React from 18.2.0 to 19.2.0
- Upgraded Next.js to 15.5.6
- Added Payload CMS 3.x packages (@payloadcms/db-postgres, @payloadcms/next, etc.)
- Removed Directus SDK and tRPC packages
- Updated Sharp to 0.34.x
- Migrated to @tanstack/react-query v5
This commit is contained in:
2025-10-26 00:58:10 -05:00
parent 6c043630df
commit 0dcf6f93ba
56 changed files with 6539 additions and 1616 deletions
+24 -20
View File
@@ -2,54 +2,57 @@
"name": "xevion.dev",
"version": "0.1.0",
"private": true,
"type": "module",
"scripts": {
"preinstall": "npx only-allow pnpm",
"build": "next build",
"dev": "next dev --turbopack",
"lint": "next lint",
"lint": "eslint .",
"start": "next start"
},
"dependencies": {
"@directus/sdk": "^18.0.3",
"@floating-ui/react": "^0.27.16",
"@headlessui/react": "^2.2.0",
"@kodingdotninja/use-tailwind-breakpoint": "^1.0.0",
"@next/eslint-plugin-next": "^15.1.1",
"@octokit/core": "^6.1.2",
"@payloadcms/db-postgres": "^3.61.1",
"@payloadcms/next": "^3.61.1",
"@payloadcms/payload-cloud": "^3.61.1",
"@payloadcms/richtext-lexical": "^3.61.1",
"@plaiceholder/next": "^3.0.0",
"@tailwindcss/typography": "^0.5.8",
"@tanstack/react-query": "^4.16.0",
"@tippyjs/react": "^4.2.6",
"@trpc/client": "^10.0.0",
"@trpc/next": "^10.0.0",
"@trpc/react-query": "^10.0.0",
"@trpc/server": "^10.0.0",
"@vercel/analytics": "^0.1.6",
"@tanstack/react-query": "^5.90",
"@vercel/analytics": "^1.5.0",
"clsx": "^2.1.1",
"cssnano": "^7.0.6",
"next": "^15.1.1",
"graphql": "^16.11.0",
"next": "^15.5.6",
"p5i": "^0.6.0",
"payload": "^3.61.1",
"plaiceholder": "^3.0.0",
"prettier": "^3.4.2",
"react": "18.2.0",
"react-dom": "18.2.0",
"react": "19.2.0",
"react-dom": "19.2.0",
"react-icons": "^4.10.1",
"react-markdown": "^9.0.1",
"react-wrap-balancer": "^0.4.0",
"react-wrap-balancer": "^1",
"sass": "^1.56.2",
"sharp": "^0.32.1",
"superjson": "1.9.1",
"sharp": "^0.34",
"superjson": "^2.2",
"tailwind-merge": "^2.6.0",
"usehooks-ts": "^3.1.0",
"usehooks-ts": "^3.1.1",
"zod": "^3.24.1"
},
"devDependencies": {
"@eslint/eslintrc": "^3",
"@eslint/eslintrc": "^3.3.1",
"@eslint/js": "^9.38.0",
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
"autoprefixer": "^10.4.7",
"eslint": "^9",
"eslint-config-next": "15.1.1",
"eslint": "^9.17.0",
"eslint-config-next": "^15.1.1",
"postcss": "^8",
"prettier-plugin-tailwindcss": "^0.6.9",
"tailwindcss": "^3.4.1",
@@ -57,5 +60,6 @@
},
"ct3aMetadata": {
"initVersion": "6.11.3"
}
},
"packageManager": "pnpm@9.15.1+sha512.1acb565e6193efbebda772702950469150cf12bcc764262e7587e71d19dc98a423dff9536e57ea44c49bdf790ff694e83c27be5faa23d67e0c033b583be4bfcf"
}