{ "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": "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": "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", "@vercel/og": "^0.6.5", "clsx": "^2.1.1", "dotenv": "^16.6.1", "framer-motion": "^12.24.10", "gray-matter": "^4.0.3", "lucide-react": "^0.542.0", "next": "^15.5.7", "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", "react-responsive-masonry": "^2.7.1", "redis": "^5.8.2", "tailwind-merge": "^2.6.0" }, "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/react-responsive-masonry": "^2.6.0", "@types/react-syntax-highlighter": "^15.5.11", "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", "prisma": "^5.22.0", "tailwindcss": "^3.4.17", "ts-jest": "^29.2.5", "ts-node": "^10.9.2", "tsx": "^4.20.5", "typescript": "5.9.3", "whatwg-fetch": "^3.6.20" } }