From 0a9f93fc92e236a450ce9c7699bc5accf0807a5d Mon Sep 17 00:00:00 2001 From: Vercel Date: Thu, 23 Jul 2026 13:14:10 +0000 Subject: [PATCH] Install Vercel Web Analytics ## Vercel Web Analytics Installation Successfully installed and configured Vercel Web Analytics for this TanStack Start project. ### Changes Made #### 1. Installed Package - Added `@vercel/analytics` version 2.0.1 to project dependencies - Updated `package.json` and `package-lock.json` accordingly #### 2. Configured Analytics Component - Modified `src/routes/__root.tsx` to integrate Vercel Analytics: - Added import: `import { Analytics } from "@vercel/analytics/react";` - Inserted `` component in the `RootShell` component's `` section - Placed after `` to ensure proper loading order ### Framework-Specific Implementation This project uses TanStack Start, which is a React-based framework. Following the official Vercel documentation, I used the React variant of the Analytics package (`@vercel/analytics/react`) and added it to the root layout component. The Analytics component was placed in the `RootShell` component, which renders the HTML shell for the entire application, ensuring analytics tracking is active on all pages. ### Build Verification - Successfully built the project with `npm run build` - Build completed without errors - Analytics package correctly bundled in both client and SSR environments ### Next Steps To enable analytics in your Vercel dashboard: 1. Deploy this application to Vercel 2. Navigate to your project's Analytics section in the Vercel dashboard 3. Click the "Enable" button to activate Web Analytics 4. After deployment, analytics data will begin appearing in your dashboard ### Files Modified - `package.json` - Added @vercel/analytics dependency - `package-lock.json` - Updated with new dependency resolution - `src/routes/__root.tsx` - Added Analytics component import and usage Co-authored-by: Vercel --- package-lock.json | 88 +++- package.json | 1 + src/components/CtaSection.tsx | 4 +- src/components/Footer.tsx | 49 +- src/components/Header.tsx | 11 +- src/components/pages/BlogPage.tsx | 36 +- src/components/pages/BlogPostPage.tsx | 15 +- src/components/pages/ContactPage.tsx | 31 +- src/components/pages/HomePage.tsx | 11 +- src/components/pages/PortfolioPage.tsx | 47 +- src/components/pages/ServiceDetailPage.tsx | 131 ++++- src/components/pages/ServicesPage.tsx | 5 +- src/lib/content.ts | 169 ++++++- src/lib/i18n.ts | 57 ++- src/lib/service-extras.ts | 537 +++++++++++++++++---- src/routes/$lang.about.tsx | 6 +- src/routes/$lang.blog.index.tsx | 6 +- src/routes/$lang.contact.tsx | 6 +- src/routes/$lang.index.tsx | 9 +- src/routes/$lang.portfolio.tsx | 6 +- src/routes/$lang.services.$slug.tsx | 14 +- src/routes/$lang.services.index.tsx | 11 +- src/routes/README.md | 20 +- src/routes/__root.tsx | 29 +- src/routes/about.tsx | 14 +- src/routes/blog.index.tsx | 14 +- src/routes/contact.tsx | 14 +- src/routes/index.tsx | 3 +- src/routes/portfolio.tsx | 14 +- src/routes/services.$slug.tsx | 7 +- src/routes/services.index.tsx | 14 +- src/styles.css | 14 +- vercel.json | 2 +- 33 files changed, 1088 insertions(+), 307 deletions(-) diff --git a/package-lock.json b/package-lock.json index be86d3e..0795130 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,6 +38,7 @@ "@tanstack/react-router": "^1.168.25", "@tanstack/react-start": "^1.167.50", "@tanstack/router-plugin": "^1.167.28", + "@vercel/analytics": "^2.0.1", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", @@ -411,6 +412,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -427,6 +429,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -443,6 +446,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -459,6 +463,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -475,6 +480,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -491,6 +497,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -507,6 +514,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -523,6 +531,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -539,6 +548,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -555,6 +565,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -571,6 +582,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -587,6 +599,7 @@ "cpu": [ "loong64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -603,6 +616,7 @@ "cpu": [ "mips64el" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -619,6 +633,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -635,6 +650,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -651,6 +667,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -667,6 +684,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -683,6 +701,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -699,6 +718,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -715,6 +735,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -731,6 +752,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -747,6 +769,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -763,6 +786,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -779,6 +803,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -795,6 +820,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -811,6 +837,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2628,6 +2655,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2644,6 +2672,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2660,6 +2689,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2676,6 +2706,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2692,6 +2723,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2708,6 +2740,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2724,6 +2757,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2740,6 +2774,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2756,6 +2791,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2772,6 +2808,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2788,6 +2825,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2804,6 +2842,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2820,6 +2859,7 @@ "cpu": [ "wasm32" ], + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -2838,6 +2878,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2854,6 +2895,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4673,6 +4715,48 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@vercel/analytics": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@vercel/analytics/-/analytics-2.0.1.tgz", + "integrity": "sha512-MTQG6V9qQrt1tsDeF+2Uoo5aPjqbVPys1xvnIftXSJYG2SrwXRHnqEvVoYID7BTruDz4lCd2Z7rM1BdkUehk2g==", + "license": "MIT", + "peerDependencies": { + "@remix-run/react": "^2", + "@sveltejs/kit": "^1 || ^2", + "next": ">= 13", + "nuxt": ">= 3", + "react": "^18 || ^19 || ^19.0.0-rc", + "svelte": ">= 4", + "vue": "^3", + "vue-router": "^4" + }, + "peerDependenciesMeta": { + "@remix-run/react": { + "optional": true + }, + "@sveltejs/kit": { + "optional": true + }, + "next": { + "optional": true + }, + "nuxt": { + "optional": true + }, + "react": { + "optional": true + }, + "svelte": { + "optional": true + }, + "vue": { + "optional": true + }, + "vue-router": { + "optional": true + } + } + }, "node_modules/@vitejs/plugin-react": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.2.0.tgz", @@ -6989,8 +7073,10 @@ "version": "11.5.2", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", - "extraneous": true, + "dev": true, "license": "BlueOak-1.0.0", + "optional": true, + "peer": true, "engines": { "node": "20 || >=22" } diff --git a/package.json b/package.json index 55a2e4d..c1e418c 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "@tanstack/react-router": "^1.168.25", "@tanstack/react-start": "^1.167.50", "@tanstack/router-plugin": "^1.167.28", + "@vercel/analytics": "^2.0.1", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", diff --git a/src/components/CtaSection.tsx b/src/components/CtaSection.tsx index b69365e..db34f92 100644 --- a/src/components/CtaSection.tsx +++ b/src/components/CtaSection.tsx @@ -11,9 +11,7 @@ export function CtaSection({ locale }: { locale: Locale }) { {t(locale, "cta.title.2")}
{t(locale, "cta.title.3")} -

- {t(locale, "cta.subtitle")} -

+

{t(locale, "cta.subtitle")}

- + APARTNER.

@@ -22,10 +19,26 @@ export function Footer({ locale }: { locale: Locale }) { {t(locale, "footer.nav")}

    -
  • {t(locale, "nav.services")}
  • -
  • {t(locale, "nav.portfolio")}
  • -
  • {t(locale, "nav.blog")}
  • -
  • {t(locale, "nav.about")}
  • +
  • + + {t(locale, "nav.services")} + +
  • +
  • + + {t(locale, "nav.portfolio")} + +
  • +
  • + + {t(locale, "nav.blog")} + +
  • +
  • + + {t(locale, "nav.about")} + +
@@ -33,8 +46,16 @@ export function Footer({ locale }: { locale: Locale }) { {t(locale, "footer.contact")}
@@ -45,8 +66,12 @@ export function Footer({ locale }: { locale: Locale }) { © {year} APARTNER.PRO — {t(locale, "footer.rights")}

diff --git a/src/components/Header.tsx b/src/components/Header.tsx index 8af5413..70f76fd 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -31,10 +31,7 @@ export function Header({ locale }: Props) {