{
  "name": "bill-tracker",
  "version": "0.40.0",
  "description": "Monthly bill tracking system",
  "main": "server.cts",
  "engines": {
    "node": ">=22.18.0"
  },
  "scripts": {
    "dev:api": "node --watch server.cts",
    "dev:ui": "vite",
    "dev": "concurrently \"npm run dev:api\" \"npm run dev:ui\"",
    "build": "vite build",
    "check:server": "find server.cts db middleware routes services utils workers \\( -name '*.js' -o -name '*.mts' -o -name '*.cts' -o -name '*.ts' \\) -print0 | xargs -0 -n1 node --check",
    "typecheck:server": "tsc --noEmit -p tsconfig.server.json",
    "lint": "eslint .",
    "format": "prettier --write client routes services middleware db workers utils setup scripts tests e2e types server.cts \"*.{json,md,mjs}\"",
    "format:check": "prettier --check client routes services middleware db workers utils setup scripts tests e2e types server.cts \"*.{json,md,mjs}\"",
    "typecheck": "tsc --noEmit -p tsconfig.json",
    "check": "npm run check:server && npm run build",
    "test": "node --test tests/*.test.js",
    "test:client": "vitest run",
    "test:all": "npm run test && npm run test:client",
    "test:e2e": "node e2e/setup/prepare-db.js && playwright test --project=chromium-desktop --project=chromium-mobile",
    "test:e2e:ui": "node e2e/setup/prepare-db.js && playwright test --ui",
    "test:e2e:update": "node e2e/setup/prepare-db.js && playwright test --project=chromium-desktop --project=chromium-mobile --update-snapshots",
    "test:e2e:probe": "node e2e/setup/prepare-db.js && playwright test --project=probe",
    "smoke:prod": "bash scripts/prod-smoke.sh",
    "knip": "knip",
    "ci": "npm run format:check && npm run lint && npm run typecheck && npm run typecheck:server && npm run check:server && npm run test:all && npm run build",
    "prepare": "lefthook install",
    "start": "node server.cts"
  },
  "dependencies": {
    "@radix-ui/react-alert-dialog": "^1.1.2",
    "@radix-ui/react-checkbox": "^1.1.2",
    "@radix-ui/react-collapsible": "^1.1.12",
    "@radix-ui/react-dialog": "^1.1.2",
    "@radix-ui/react-dropdown-menu": "^2.1.2",
    "@radix-ui/react-label": "^2.1.0",
    "@radix-ui/react-select": "^2.1.2",
    "@radix-ui/react-slot": "^1.1.0",
    "@radix-ui/react-switch": "^1.1.1",
    "@radix-ui/react-tabs": "^1.1.1",
    "@radix-ui/react-tooltip": "^1.1.3",
    "@simplewebauthn/browser": "^13.0.0",
    "@simplewebauthn/server": "^13.0.0",
    "@tanstack/react-query": "^5.100.9",
    "@tanstack/react-query-devtools": "^5.100.9",
    "@tanstack/react-virtual": "^3.14.2",
    "bcryptjs": "^2.4.3",
    "better-sqlite3": "^12.9.0",
    "class-variance-authority": "^0.7.0",
    "clsx": "^2.1.1",
    "cookie-parser": "^1.4.6",
    "cors": "^2.8.5",
    "express": "^5.2.1",
    "express-rate-limit": "^8.4.1",
    "framer-motion": "^12.40.0",
    "lucide-react": "^0.456.0",
    "node-cron": "^4.2.1",
    "nodemailer": "^8.0.9",
    "openid-client": "^5.7.1",
    "otplib": "^13.4.1",
    "qrcode": "^1.5.4",
    "react": "^19.2.7",
    "react-dom": "^19.2.7",
    "react-router-dom": "^6.26.2",
    "sonner": "^1.7.1",
    "tailwind-merge": "^2.5.4",
    "tailwindcss-animate": "^1.0.7",
    "xlsx": "^0.18.5"
  },
  "devDependencies": {
    "@axe-core/playwright": "^4.10.1",
    "@eslint/js": "^9.39.4",
    "@playwright/test": "^1.50.1",
    "@testing-library/react": "^16.3.2",
    "@types/node": "^26.1.0",
    "@types/react": "^19.2.17",
    "@types/react-dom": "^19.2.3",
    "@vitejs/plugin-react": "^4.3.3",
    "autoprefixer": "^10.4.20",
    "babel-plugin-react-compiler": "^1.0.0",
    "concurrently": "^9.1.0",
    "eslint": "^9.39.4",
    "eslint-plugin-react-hooks": "^5.2.0",
    "eslint-plugin-react-refresh": "^0.4.26",
    "globals": "^17.7.0",
    "jsdom": "^29.1.1",
    "knip": "^6.24.0",
    "lefthook": "^2.1.9",
    "postcss": "^8.4.47",
    "prettier": "3.9.4",
    "tailwindcss": "^3.4.14",
    "typescript": "^6.0.3",
    "typescript-eslint": "^8.62.1",
    "vite": "^5.4.10",
    "vite-plugin-pwa": "^1.3.0",
    "vitest": "^4.1.8"
  },
  "directories": {
    "doc": "docs"
  },
  "repository": {
    "type": "git",
    "url": "ssh://forgejo/null/BillTracker.git"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "type": "commonjs"
}
