From 2b9a1adafdae5f984b783534133b4179ad52050f Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 6 Apr 2026 14:49:43 +0200 Subject: [PATCH] feat(web-next): add Next.js 15 app shell with tRPC endpoint --- apps/web-next/next.config.mjs | 6 ++++++ apps/web-next/package.json | 15 +++++++++---- .../web-next/src/app/api/trpc/[trpc]/route.ts | 12 +++++++++++ apps/web-next/src/app/layout.tsx | 21 +++++++++++++++++++ apps/web-next/src/app/page.tsx | 8 +++++++ apps/web-next/src/app/providers.tsx | 7 +++++++ pnpm-lock.yaml | 21 +++++++++++++++++++ 7 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 apps/web-next/next.config.mjs create mode 100644 apps/web-next/src/app/api/trpc/[trpc]/route.ts create mode 100644 apps/web-next/src/app/layout.tsx create mode 100644 apps/web-next/src/app/page.tsx create mode 100644 apps/web-next/src/app/providers.tsx diff --git a/apps/web-next/next.config.mjs b/apps/web-next/next.config.mjs new file mode 100644 index 0000000..55b1bb9 --- /dev/null +++ b/apps/web-next/next.config.mjs @@ -0,0 +1,6 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + transpilePackages: ["@repo/api", "@repo/api-client", "@repo/core", "@repo/ui"], +}; + +export default nextConfig; diff --git a/apps/web-next/package.json b/apps/web-next/package.json index 58cee36..ee3b90f 100644 --- a/apps/web-next/package.json +++ b/apps/web-next/package.json @@ -4,17 +4,24 @@ "version": "0.0.0", "type": "module", "scripts": { - "build": "echo 'placeholder'", - "dev": "echo 'placeholder'", + "build": "next build", + "dev": "next dev --port 3000", "lint": "eslint .", "typecheck": "tsc --noEmit" }, "dependencies": { + "@repo/api": "workspace:*", "@repo/api-client": "workspace:*", - "@repo/ui": "workspace:*" + "@repo/ui": "workspace:*", + "next": "^15.3.0", + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { "@repo/eslint-config": "workspace:*", - "@repo/typescript-config": "workspace:*" + "@repo/typescript-config": "workspace:*", + "@types/node": "^22.0.0", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0" } } diff --git a/apps/web-next/src/app/api/trpc/[trpc]/route.ts b/apps/web-next/src/app/api/trpc/[trpc]/route.ts new file mode 100644 index 0000000..376b8c3 --- /dev/null +++ b/apps/web-next/src/app/api/trpc/[trpc]/route.ts @@ -0,0 +1,12 @@ +import { fetchRequestHandler } from "@trpc/server/adapters/fetch"; +import { appRouter } from "@repo/api"; + +const handler = (req: Request) => + fetchRequestHandler({ + endpoint: "/api/trpc", + req, + router: appRouter, + createContext: () => ({}), + }); + +export { handler as GET, handler as POST }; diff --git a/apps/web-next/src/app/layout.tsx b/apps/web-next/src/app/layout.tsx new file mode 100644 index 0000000..623df37 --- /dev/null +++ b/apps/web-next/src/app/layout.tsx @@ -0,0 +1,21 @@ +import type { Metadata } from "next"; +import { Providers } from "./providers"; + +export const metadata: Metadata = { + title: "Template — Next.js", + description: "Clean Architecture Monorepo Template", +}; + +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + + + {children} + + + ); +} diff --git a/apps/web-next/src/app/page.tsx b/apps/web-next/src/app/page.tsx new file mode 100644 index 0000000..83af98d --- /dev/null +++ b/apps/web-next/src/app/page.tsx @@ -0,0 +1,8 @@ +export default function Home() { + return ( +
+

Template — Next.js

+

Clean Architecture Monorepo Template

+
+ ); +} diff --git a/apps/web-next/src/app/providers.tsx b/apps/web-next/src/app/providers.tsx new file mode 100644 index 0000000..c81e7bd --- /dev/null +++ b/apps/web-next/src/app/providers.tsx @@ -0,0 +1,7 @@ +"use client"; + +import { ApiProvider } from "@repo/api-client"; + +export function Providers({ children }: { children: React.ReactNode }) { + return {children}; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d25a14f..283bd7f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -76,12 +76,24 @@ importers: apps/web-next: dependencies: + '@repo/api': + specifier: workspace:* + version: link:../../packages/api '@repo/api-client': specifier: workspace:* version: link:../../packages/api-client '@repo/ui': specifier: workspace:* version: link:../../packages/ui + next: + specifier: ^15.3.0 + version: 15.5.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.77.4) + react: + specifier: ^19.0.0 + version: 19.2.4 + react-dom: + specifier: ^19.0.0 + version: 19.2.4(react@19.2.4) devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -89,6 +101,15 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:../../packages/typescript-config + '@types/node': + specifier: ^22.0.0 + version: 22.19.17 + '@types/react': + specifier: ^19.0.0 + version: 19.2.14 + '@types/react-dom': + specifier: ^19.0.0 + version: 19.2.3(@types/react@19.2.14) apps/web-tanstack: dependencies: