89b24d4c34
- Add tsconfig.json (server) + client/tsconfig.{json,app.json,node.json}
so typecheck and tsc -b actually work.
- Fix npm test to run Playwright (was running vitest on Playwright specs);
typecheck now covers both server and client.
- Mount routes before app.listen, add error handler, mount optional
@tonycodes/auth-express middleware when AUTH_SECRET is set.
- Add /api/trips (GET/POST/PATCH/DELETE) backed by an in-memory store
that gracefully degrades when DATABASE_URL is unset.
- Add prisma/seed.ts skeleton and server/types/express.d.ts for req.auth.
- Rewrite Grok prompt for combo-aware planning: charge+eat,
stay+destination-charging, eat+viewpoint, etc., with amenities,
cuisine, priceLevel, duration, day titles and trip highlights.
- Extend Stop schema + normalization to preserve all enrichment fields.
- New StopCard component renders combo pill, description, meta row
(charge / stop / battery / cuisine / £-level) and amenity icons;
map popups show the same enriched detail; timeline gains day titles
and a HIGHLIGHTS sidebar.
- Fix server TS errors (vehicle accepted as string | {name,rangeKm},
JSON parse results typed).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
60 lines
1.8 KiB
JSON
60 lines
1.8 KiB
JSON
{
|
|
"name": "tesla-roadtrip",
|
|
"version": "0.1.0",
|
|
"description": "AI-powered conversational road trip planner for Tesla owners. Chat with Grok on the left, live interactive map + itinerary on the right.",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "concurrently -n \"BACKEND,FRONTEND\" -c \"cyan,green\" \"npm:dev:server\" \"npm:dev:client\"",
|
|
"dev:server": "tsx watch server/index.ts",
|
|
"dev:client": "npm --prefix client run dev",
|
|
"build": "npm --prefix client run build && tsc -p tsconfig.json",
|
|
"start": "node dist/server/index.js",
|
|
"test": "playwright test",
|
|
"test:e2e": "playwright test",
|
|
"test:e2e:headed": "HEADED=1 playwright test --headed",
|
|
"typecheck": "tsc --noEmit && npm --prefix client run typecheck",
|
|
"lint": "eslint .",
|
|
"lint:fix": "eslint . --fix",
|
|
"db:generate": "prisma generate",
|
|
"db:migrate": "atlas migrate apply --env dev",
|
|
"db:seed": "tsx prisma/seed.ts",
|
|
"prepare": "husky || true"
|
|
},
|
|
"dependencies": {
|
|
"@prisma/client": "^7.4.0",
|
|
"@tonycodes/auth-express": "^1.4.0",
|
|
"cookie-parser": "^1.4.6",
|
|
"cors": "^2.8.5",
|
|
"dotenv": "^16.3.1",
|
|
"express": "^5.0.1",
|
|
"helmet": "^7.1.0",
|
|
"pino": "^10.3.1",
|
|
"pino-pretty": "^13.1.3",
|
|
"zod": "^3.22.4"
|
|
},
|
|
"devDependencies": {
|
|
"@playwright/test": "^1.60.0",
|
|
"@types/cookie-parser": "^1.4.6",
|
|
"@types/cors": "^2.8.17",
|
|
"@types/express": "^5.0.0",
|
|
"@types/node": "^20.10.0",
|
|
"@vitest/coverage-v8": "^1.6.0",
|
|
"concurrently": "^8.2.2",
|
|
"eslint": "^9.0.0",
|
|
"husky": "^9.0.0",
|
|
"lint-staged": "^15.0.0",
|
|
"prettier": "^3.2.0",
|
|
"prisma": "^7.4.0",
|
|
"tsx": "^4.6.2",
|
|
"typescript": "^5.3.2",
|
|
"vitest": "^1.6.0"
|
|
},
|
|
"lint-staged": {
|
|
"*.{ts,tsx}": [
|
|
"prettier --write",
|
|
"eslint --fix"
|
|
]
|
|
}
|
|
}
|