{
	"name": "sendou.ink",
	"version": "3.0.0",
	"private": true,
	"packageManager": "pnpm@11.0.9",
	"sideEffects": false,
	"type": "module",
	"scripts": {
		"deploy": "pnpm install --frozen-lockfile && pnpm run build",
		"build": "react-router build",
		"dev": "cross-env DB_PATH=db.sqlite3 pnpm run migrate up && pnpm run setup && react-router dev --host",
		"dev:fast": "react-router dev --host",
		"dev:sentry": "NODE_OPTIONS='--import ./instrument.server.mjs' pnpm dev",
		"dev:prod": "cross-env DB_PATH=db-prod.sqlite3 VITE_PROD_MODE=true react-router dev --host",
		"start": "pnpm run migrate up && NODE_ENV=production NODE_OPTIONS='--import ./instrument.server.mjs' react-router-serve ./build/server/index.js",
		"migrate": "ley",
		"migrate:prod": "cross-env DB_PATH=db-prod.sqlite3 pnpm run migrate up",
		"check-translation-jsons": "node --experimental-strip-types scripts/check-translation-jsons.ts",
		"check-translation-jsons:no-write": "node --experimental-strip-types scripts/check-translation-jsons.ts --no-write",
		"check-articles": "vite-node scripts/check-articles.ts",
		"bench:db": "cross-env DB_PATH=db-prod.sqlite3 VITE_PROD_MODE=true vite-node scripts/benchmark-db.ts",
		"compute-luti-divs": "vite-node scripts/compute-luti-divs.ts",
		"refresh-prod-db": "node --experimental-strip-types scripts/refresh-prod-db.ts && pnpm run migrate:prod",
		"biome:check": "biome check --error-on-warnings .",
		"biome:fix": "biome check --error-on-warnings --write .",
		"biome:fix:unsafe": "biome check --error-on-warnings --write --unsafe .",
		"typecheck": "react-router typegen && tsc --noEmit",
		"typecheck:scripts": "tsc --noEmit -p scripts",
		"test:unit:browser": "cross-env VITE_SITE_DOMAIN=http://localhost:5173 BROWSER_HEADLESS=true vitest --silent=passed-only run",
		"test:browser:ui": "cross-env VITE_SITE_DOMAIN=http://localhost:5173 vitest --silent=passed-only --project browser",
		"test:unit:browser:ui": "cross-env VITE_SITE_DOMAIN=http://localhost:5173 vitest --silent=passed-only",
		"test:e2e": "playwright test",
		"test:e2e:flaky-detect": "playwright test --repeat-each=10 --max-failures=1",
		"test:e2e:generate-seeds": "cross-env DB_PATH=db-test.sqlite3 pnpm run migrate up && cross-env DB_PATH=db-test.sqlite3 vite-node scripts/generate-e2e-seed-dbs.ts",
		"check-test-db-migrations": "node --experimental-strip-types scripts/check-test-db-migrations.ts",
		"check-plural-collapse": "node --experimental-strip-types scripts/collapse-single-plural-keys.ts --check",
		"checks": "pnpm run biome:fix && pnpm run test:unit:browser && pnpm run check-translation-jsons && pnpm run check-plural-collapse && pnpm run typecheck && pnpm run knip && pnpm run check-test-db-migrations",
		"setup": "cross-env DB_PATH=db.sqlite3 vite-node ./scripts/setup.ts",
		"i18n:sync": "node --experimental-strip-types scripts/collapse-single-plural-keys.ts && i18next-locales-sync -e true -p en -s da de es-ES es-US fr-CA fr-EU he it ja ko nl pl pt-BR ru zh -l locales && pnpm run biome:fix",
		"knip": "knip"
	},
	"dependencies": {
		"@aws-sdk/client-s3": "3.1084.0",
		"@aws-sdk/lib-storage": "3.1084.0",
		"@date-fns/tz": "1.5.0",
		"@dnd-kit/core": "6.3.1",
		"@dnd-kit/modifiers": "9.0.0",
		"@dnd-kit/sortable": "10.0.0",
		"@dnd-kit/utilities": "3.2.2",
		"@epic-web/cachified": "5.6.3",
		"@faker-js/faker": "10.5.0",
		"@internationalized/date": "3.12.2",
		"@react-router/node": "8.2.0",
		"@react-router/serve": "8.1.0",
		"@remix-run/form-data-parser": "0.17.4",
		"@sentry/react-router": "10.64.0",
		"@tldraw/tldraw": "3.12.1",
		"@zumer/snapdom": "2.15.0",
		"better-sqlite3": "12.11.1",
		"chart.js": "4.5.1",
		"clsx": "2.1.1",
		"compressorjs": "1.3.0",
		"date-fns": "4.4.0",
		"edmonds-blossom-fixed": "1.0.1",
		"gray-matter": "4.0.3",
		"i18next": "26.3.6",
		"i18next-browser-languagedetector": "8.2.1",
		"i18next-http-backend": "4.0.0",
		"ics": "3.12.0",
		"isbot": "5.2.0",
		"jsoncrush": "1.1.8",
		"kysely": "0.29.0",
		"lucide-react": "1.24.0",
		"markdown-to-jsx": "9.8.2",
		"nanoid": "5.1.16",
		"neverthrow": "8.2.0",
		"node-cron": "4.6.0",
		"nprogress": "0.2.0",
		"openskill": "5.0.1",
		"p-limit": "7.3.0",
		"partysocket": "1.3.0",
		"qrcode.react": "4.2.0",
		"react": "19.2.7",
		"react-aria-components": "1.19.0",
		"react-chartjs-2": "5.3.1",
		"react-dom": "19.2.7",
		"react-error-boundary": "6.1.2",
		"react-flip-toolkit": "7.2.4",
		"react-i18next": "17.0.9",
		"react-router": "8.2.0",
		"react-use-draggable-scroll": "0.4.7",
		"remeda": "2.39.0",
		"remix-auth": "4.2.0",
		"remix-auth-oauth2": "3.4.1",
		"remix-i18next": "8.0.0",
		"slugify": "1.6.9",
		"swr": "2.4.2",
		"web-haptics": "0.0.6",
		"web-push": "3.6.7",
		"zod": "4.4.3"
	},
	"devDependencies": {
		"@babel/preset-typescript": "7.29.7",
		"@biomejs/biome": "2.5.3",
		"@playwright/test": "1.61.1",
		"@react-router/dev": "8.2.0",
		"@types/better-sqlite3": "7.6.13",
		"@types/node": "26.1.1",
		"@types/nprogress": "0.2.3",
		"@types/react": "19.2.17",
		"@types/react-dom": "19.2.3",
		"@types/web-push": "3.6.4",
		"@vitest/browser-playwright": "4.1.10",
		"@vitest/ui": "4.1.10",
		"babel-plugin-react-compiler": "19.1.0-rc.3",
		"cross-env": "10.1.0",
		"i18next-locales-sync": "2.1.1",
		"knip": "6.25.0",
		"ley": "0.8.1",
		"sql-formatter": "15.8.2",
		"typescript": "7.0.2",
		"vite": "8.1.4",
		"vite-node": "6.0.0",
		"vite-plugin-babel": "1.7.3",
		"vitest": "4.1.10",
		"vitest-browser-react": "2.2.0"
	}
}
