metatron-open-seo/package.json
Ben Senescu f7ccdfee38 feat: add backlink search history (#90)
* feat: add backlink search history

Save recent backlink searches so users can quickly rerun previous lookups instead of starting from an empty state each time. Also widen the keyword research empty state layout to better use the available space.

* update dev tools

* update recent search navigation across SEO pages

* refine search layouts and recent search navigation

* simplify recent search resets and history storage

* save

* fix recent search hydration mismatch

* fix ci lint issues
2026-04-08 14:09:02 -04:00

106 lines
3.8 KiB
JSON

{
"name": "open-seo",
"private": true,
"sideEffects": false,
"version": "0.0.4",
"type": "module",
"scripts": {
"dev": "AUTH_MODE=local_noauth vite dev",
"dev:agents": "mkdir -p .logs && portless run vite dev 2>&1 | tee .logs/dev-server.log",
"dev:agents:force": "mkdir -p .logs && portless --force run vite dev 2>&1 | tee .logs/dev-server.log",
"build": "vite build && tsc --noEmit",
"lint": "oxlint . --type-aware",
"lint:fix": "oxlint . --type-aware --fix",
"preview": "npm run build && vite preview --port 3001",
"deploy": "npm run db:migrate:prod && npm run build && wrangler deploy",
"cf-typegen": "wrangler types",
"types:check": "tsc --noEmit",
"format:check": "prettier --check .",
"format:write": "prettier . --write",
"auth:generate": "pnpm dlx auth@latest generate --config ./cli-auth.ts --adapter drizzle --dialect sqlite --output ./src/db/better-auth-schema.ts",
"db:generate": "drizzle-kit generate",
"db:migrate:local": "wrangler d1 migrations apply DB --local",
"db:migrate:prod": "wrangler d1 migrations apply DB --remote",
"knip": "knip",
"release:notes": "node scripts/release-notes.mjs",
"test": "vitest run",
"test:watch": "vitest",
"test:ci": "vitest run --reporter=dot",
"billing:backlinks": "tsx scripts/backlinks-cost-profile.ts",
"ci:check": "prettier --check . && knip && tsc --noEmit && oxlint . --type-aware"
},
"cloudflare": {
"bindings": {
"AUTH_MODE": {
"description": "Set to `cloudflare_access` for secured deployments behind Cloudflare Access, or `local_noauth` for trusted local self-host mode only."
},
"TEAM_DOMAIN": {
"description": "Cloudflare Access team domain (for example `https://your-team.cloudflareaccess.com`) used to validate `cf-access-jwt-assertion` JWTs."
},
"POLICY_AUD": {
"description": "Cloudflare Access Application Audience (AUD) tag for this Worker route/domain."
},
"DATAFORSEO_API_KEY": {
"description": "Base64-encoded `login:password` for DataForSEO API access."
}
}
},
"dependencies": {
"@every-app/sdk": "^0.1.14",
"@tanstack/query-core": "^5.90.9",
"@tanstack/react-form": "^1.25.0",
"@tanstack/react-query": "^5.90.9",
"@tanstack/react-router": "^1.168.10",
"@tanstack/react-router-devtools": "^1.166.11",
"@tanstack/react-start": "^1.167.16",
"@tanstack/react-table": "^8.21.3",
"autumn-js": "^1.1.7",
"better-auth": "^1.5.5",
"cheerio": "^1.2.0",
"cloudflare": "^5.2.0",
"daisyui": "^5.5.5",
"dataforseo-client": "^2.0.19",
"drizzle-orm": "^0.44.4",
"fast-xml-parser": "^5.4.1",
"jose": "^6.0.12",
"lucide-react": "^0.542.0",
"papaparse": "^5.5.3",
"posthog-js": "^1.363.5",
"posthog-node": "^5.28.5",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"recharts": "^3.7.0",
"remeda": "^2.33.6",
"robots-parser": "^3.0.1",
"sonner": "^2.0.7",
"tailwindcss": "^4.1.16",
"tldts": "^7.0.25",
"zod": "^4.1.12"
},
"devDependencies": {
"@cloudflare/vite-plugin": "^1.13.18",
"@cloudflare/workers-types": "^4.20251014.0",
"@libsql/client": "^0.15.15",
"@tailwindcss/vite": "^4.1.11",
"@tanstack/devtools-vite": "^0.6.0",
"@tanstack/react-devtools": "^0.10.1",
"@types/node": "^22.18.13",
"@types/papaparse": "^5.5.2",
"@types/react": "^19.0.8",
"@types/react-dom": "^19.0.3",
"@vitejs/plugin-react": "^4.6.0",
"drizzle-kit": "^0.31.4",
"knip": "^5.66.4",
"oxlint": "^1.50.0",
"oxlint-tsgolint": "^0.15.0",
"portless": "^0.5.2",
"prettier": "^3.6.2",
"tsx": "^4.21.0",
"typescript": "^5.9.3",
"vite": "^7.1.2",
"vite-tsconfig-paths": "^5.1.4",
"vitest": "^3.2.4",
"wrangler": "^4.45.3"
}
}