- Install openai 6.32.0 (npm package, listed in dependencies) - Create src/lib/ai/extract-text.ts — pdfjs-dist legacy build server-side text extraction - extractPdfText(filePath) returning PageText[] with page, text, width, height - GlobalWorkerOptions.workerSrc = '' for Node.js fake-worker mode - Text per page capped at 2000 chars for GPT-4o-mini context limit - Create src/lib/ai/field-placement.ts — GPT-4o-mini structured output + coord conversion - aiCoordsToPagePdfSpace() converts AI top-left pct coords to PDF bottom-left points - classifyFieldsWithAI() uses manual json_schema (NOT zodResponseFormat — broken with Zod v4) - Standard field sizes: checkbox=24x24pt, others=144x36pt - textFillData keyed by field UUID (not label) per Phase 12.1 design - All 3 unit tests pass (GREEN phase confirmed)
64 lines
1.7 KiB
JSON
64 lines
1.7 KiB
JSON
{
|
|
"name": "teressa-copeland-homes",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"scripts": {
|
|
"dev": "next dev",
|
|
"build": "next build",
|
|
"start": "next start",
|
|
"lint": "eslint",
|
|
"db:generate": "drizzle-kit generate",
|
|
"db:migrate": "drizzle-kit migrate",
|
|
"db:seed": "tsx scripts/seed.ts",
|
|
"seed:forms": "DOTENV_CONFIG_PATH=.env.local npx tsx scripts/seed-forms.ts",
|
|
"db:studio": "drizzle-kit studio",
|
|
"scrape:forms": "DOTENV_CONFIG_PATH=.env.local npx tsx scripts/scrape-skyslope-forms.ts"
|
|
},
|
|
"dependencies": {
|
|
"@cantoo/pdf-lib": "^2.6.3",
|
|
"@dnd-kit/core": "^6.3.1",
|
|
"@dnd-kit/utilities": "^3.2.2",
|
|
"@react-email/components": "^1.0.10",
|
|
"@react-email/render": "^2.0.4",
|
|
"@vercel/blob": "^2.3.1",
|
|
"adm-zip": "^0.5.16",
|
|
"bcryptjs": "^3.0.3",
|
|
"drizzle-orm": "^0.45.1",
|
|
"lucide-react": "^0.577.0",
|
|
"next": "16.2.0",
|
|
"next-auth": "5.0.0-beta.30",
|
|
"nodemailer": "^7.0.13",
|
|
"openai": "^6.32.0",
|
|
"postgres": "^3.4.8",
|
|
"react": "19.2.4",
|
|
"react-dom": "19.2.4",
|
|
"react-pdf": "^10.4.1",
|
|
"signature_pad": "^5.1.3",
|
|
"zod": "^4.3.6"
|
|
},
|
|
"jest": {
|
|
"preset": "ts-jest",
|
|
"testEnvironment": "node"
|
|
},
|
|
"devDependencies": {
|
|
"@tailwindcss/postcss": "^4",
|
|
"@types/adm-zip": "^0.5.8",
|
|
"@types/bcryptjs": "^2.4.6",
|
|
"@types/jest": "^30.0.0",
|
|
"@types/node": "^20",
|
|
"@types/nodemailer": "^7.0.11",
|
|
"@types/react": "^19",
|
|
"@types/react-dom": "^19",
|
|
"dotenv": "^17.3.1",
|
|
"drizzle-kit": "^0.31.10",
|
|
"eslint": "^9",
|
|
"eslint-config-next": "16.2.0",
|
|
"jest": "^29.7.0",
|
|
"playwright": "^1.58.2",
|
|
"tailwindcss": "^4",
|
|
"ts-jest": "^29.4.6",
|
|
"tsx": "^4.21.0",
|
|
"typescript": "^5"
|
|
}
|
|
}
|