- Migrate to Tailwind CSS v4 with @theme, @layer, @plugin syntax - Upgrade to Next.js 16.1, React 19.2, TypeScript 5.9.3 - Add 8 technology landing pages (Next.js, React, TypeScript, Tailwind CSS, Claude AI, Python, n8n, KI-Agenten) - Expand SEO keywords across all locales (de/en/sr) for home, layout, cities, services - Add tech-specific keywords to all 22 city pages - Add FAQ schema + seoKeywords to service detail pages - Add CollectionPage JSON-LD to blog listing - Fix city page: dynamic region, BASE_URL canonicals, x-default hreflang - Rewrite terms page with full German AGB, English and Serbian translations - Remove dead crypto import and unused CSRF middleware (Edge Runtime fix) - Remove crawlDelay from robots.ts - Update sitemap with technology pages (~198 indexed URLs) - Remove deprecated tailwind.config.js Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
70 lines
2.1 KiB
JSON
70 lines
2.1 KiB
JSON
{
|
|
"name": "portfolio",
|
|
"private": true,
|
|
"version": "1.0.0",
|
|
"scripts": {
|
|
"dev": "next dev",
|
|
"build": "next build",
|
|
"start": "next start",
|
|
"lint": "next lint --strict",
|
|
"build:images": "node scripts/optimize-images.js",
|
|
"generate:images": "node scripts/generate-blog-images.mjs",
|
|
"generate:images:dry": "node scripts/generate-blog-images.mjs --dry-run",
|
|
"generate:sitemap": "node scripts/generate-sitemap.js",
|
|
"generate:icons": "node scripts/generate-icons.mjs",
|
|
"generate:github": "node scripts/generate-github-readme.js",
|
|
"download:fonts": "node scripts/download-fonts.mjs",
|
|
"convert:translations": "node scripts/convert-translations.js",
|
|
"test": "vitest",
|
|
"test:coverage": "vitest run --coverage"
|
|
},
|
|
"dependencies": {
|
|
"@mdx-js/loader": "^3.1.0",
|
|
"@mdx-js/mdx": "^3.1.0",
|
|
"@mdx-js/react": "^3.1.0",
|
|
"@next-safe/middleware": "^0.10.0",
|
|
"@next/mdx": "^16.1.0",
|
|
"@supabase/ssr": "^0.8.0",
|
|
"@supabase/supabase-js": "^2.39.7",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"framer-motion": "^11.18.2",
|
|
"gray-matter": "^4.0.3",
|
|
"lucide-react": "^0.475.0",
|
|
"next": "^16.1.0",
|
|
"next-intl": "^4.7.2",
|
|
"next-mdx-remote": "^5.0.0",
|
|
"openai": "^4.77.0",
|
|
"pg": "^8.13.1",
|
|
"react": "^19.2.0",
|
|
"react-dom": "^19.2.0",
|
|
"react-ga4": "^2.1.0",
|
|
"react-intersection-observer": "^9.8.1",
|
|
"tailwind-merge": "^3.0.1",
|
|
"tailwindcss-animate": "^1.0.7",
|
|
"web-vitals": "^5.1.0"
|
|
},
|
|
"devDependencies": {
|
|
"@playwright/test": "^1.58.0",
|
|
"@tailwindcss/forms": "^0.5.11",
|
|
"@tailwindcss/postcss": "^4.1.0",
|
|
"@testing-library/jest-dom": "^6.0.0",
|
|
"@testing-library/react": "^16.1.0",
|
|
"@types/mdx": "^2.0.13",
|
|
"@types/node": "^22.0.0",
|
|
"@types/pg": "^8.11.10",
|
|
"@types/react": "^19.2.0",
|
|
"@types/react-dom": "^19.2.0",
|
|
"@vitest/coverage-v8": "1.6.1",
|
|
"eslint": "^9.9.1",
|
|
"eslint-config-next": "^16.1.0",
|
|
"jsdom": "^23.2.0",
|
|
"playwright-lighthouse": "^4.0.0",
|
|
"postcss": "^8.4.35",
|
|
"sharp": "^0.34.3",
|
|
"tailwindcss": "^4.1.0",
|
|
"typescript": "5.9.3",
|
|
"vitest": "^1.3.1"
|
|
}
|
|
}
|