Files
portfolio/package.json
denshooter c00fe6b06c
All checks were successful
Gitea CI / test-build (push) Successful in 12m5s
Production Deployment (Zero Downtime) / deploy-production (push) Successful in 14m37s
perf: optimize Lighthouse scores to 100
Performance:
- Lazy-load ShaderGradientBackground via dynamic import (reduces initial JS ~250KB)
- Disable ShaderGradient animations (animate=off) to reduce CPU/GPU load
- Remove opacity:0 animations from Hero LCP elements for instant paint
- Add browserslist targeting modern browsers (eliminates ~13KB polyfills)

Accessibility:
- Fix color contrast: text-stone-400 → text-stone-600 dark:text-stone-400 on light backgrounds
- Fix text-liquid-mint → text-emerald-700/600 for readable text/accent dots
- Fix quote text contrast on dark status box (text-stone-700 → text-stone-300)
- Fix Online badge contrast (emerald-600 → emerald-700)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-02 14:53:32 +01:00

132 lines
4.5 KiB
JSON

{
"name": "portfolio",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "node scripts/dev-minimal.js",
"dev:simple": "node scripts/dev-simple.js",
"dev:next": "next dev",
"db:setup": "node scripts/setup-database.js",
"db:seed": "tsx -r dotenv/config prisma/seed.ts dotenv_config_path=.env.local",
"build": "next build",
"start": "next start",
"lint": "cross-env NODE_ENV=development eslint .",
"lint:fix": "eslint . --fix",
"pre-push": "./scripts/pre-push.sh",
"pre-push:full": "./scripts/pre-push-full.sh",
"pre-push:quick": "./scripts/pre-push-quick.sh",
"test:all": "npm run test && npm run test:e2e",
"buildAnalyze": "cross-env ANALYZE=true next build",
"test": "cross-env NODE_ENV=test jest",
"test:production": "NODE_ENV=production jest --config jest.config.production.ts",
"test:watch": "jest --watch",
"test:coverage": "jest --coverage",
"test:e2e": "playwright test",
"test:e2e:ui": "playwright test --ui",
"test:e2e:headed": "playwright test --headed",
"test:e2e:debug": "playwright test --debug",
"test:critical": "playwright test e2e/critical-paths.spec.ts",
"test:hydration": "playwright test e2e/hydration.spec.ts",
"test:email": "playwright test e2e/email.spec.ts",
"test:performance": "playwright test e2e/performance.spec.ts",
"test:accessibility": "playwright test e2e/accessibility.spec.ts",
"db:generate": "prisma generate",
"db:push": "prisma db push",
"db:studio": "prisma studio",
"db:reset": "prisma db push --force-reset",
"docker:build": "docker build -t portfolio-app .",
"docker:run": "docker run -p 3000:3000 portfolio-app",
"docker:compose": "docker compose -f docker-compose.production.yml up -d",
"docker:down": "docker compose -f docker-compose.production.yml down",
"docker:dev": "docker compose -f docker-compose.dev.minimal.yml up -d",
"docker:dev:down": "docker compose -f docker-compose.dev.minimal.yml down",
"deploy": "./scripts/deploy.sh",
"auto-deploy": "./scripts/auto-deploy.sh",
"quick-deploy": "./scripts/quick-deploy.sh",
"gitea-deploy": "./scripts/gitea-deploy.sh",
"setup-gitea-runner": "./scripts/setup-gitea-runner.sh",
"monitor": "./scripts/monitor.sh",
"health": "curl -f http://localhost:3000/api/health"
},
"prisma": {
"seed": "tsx prisma/seed.ts"
},
"dependencies": {
"@next/bundle-analyzer": "^15.1.7",
"@prisma/client": "^5.22.0",
"@react-three/fiber": "^9.5.0",
"@sentry/nextjs": "^10.36.0",
"@shadergradient/react": "^2.4.20",
"@swc/helpers": "^0.5.19",
"@tiptap/extension-color": "^3.15.3",
"@tiptap/extension-highlight": "^3.15.3",
"@tiptap/extension-link": "^3.15.3",
"@tiptap/extension-text-style": "^3.15.3",
"@tiptap/extension-underline": "^3.15.3",
"@tiptap/html": "^3.15.3",
"@tiptap/react": "^3.15.3",
"@tiptap/starter-kit": "^3.15.3",
"@vercel/og": "^0.6.5",
"clsx": "^2.1.1",
"dotenv": "^16.6.1",
"framer-motion": "^12.24.10",
"lucide-react": "^0.542.0",
"next": "^15.5.7",
"next-intl": "^4.7.0",
"next-themes": "^0.4.6",
"node-cache": "^5.1.2",
"node-fetch": "^2.7.0",
"nodemailer": "^7.0.11",
"react": "^19.2.3",
"react-dom": "^19.2.3",
"react-icons": "^5.5.0",
"react-markdown": "^10.1.0",
"redis": "^5.8.2",
"sanitize-html": "^2.17.0",
"tailwind-merge": "^2.6.0",
"three": "^0.183.1"
},
"browserslist": [
"last 2 Chrome versions",
"last 2 Firefox versions",
"last 2 Safari versions",
"last 2 Edge versions"
],
"devDependencies": {
"@eslint/eslintrc": "^3",
"@playwright/test": "^1.57.0",
"@testing-library/dom": "^10.4.0",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^16.2.0",
"@types/jest": "^29.5.14",
"@types/node": "^20.10.0",
"@types/node-fetch": "^2.6.13",
"@types/nodemailer": "^6.4.17",
"@types/react": "^19",
"@types/react-dom": "^19",
"@types/sanitize-html": "^2.16.0",
"autoprefixer": "^10.4.24",
"cross-env": "^7.0.3",
"eslint": "^9",
"eslint-config-next": "^15.5.7",
"jest": "^29.7.0",
"jest-environment-jsdom": "^29.7.0",
"nodemailer-mock": "^2.0.9",
"playwright": "^1.57.0",
"postcss": "^8.5.6",
"prisma": "^5.22.0",
"tailwindcss": "^3.4.17",
"ts-jest": "^29.4.6",
"ts-node": "^10.9.2",
"tsx": "^4.20.5",
"typescript": "5.9.3",
"whatwg-fetch": "^3.6.20"
},
"browserslist": [
"chrome >= 100",
"firefox >= 100",
"safari >= 15",
"edge >= 100"
]
}