{ "name": "linkat", "type": "module", "private": true, "packageManager": "pnpm@10.30.1+sha512.3590e550d5384caa39bd5c7c739f72270234b2f6059e13018f975c313b1eb9fefcc09714048765d4d9efe961382c312e624572c0420762bdc5d5940cdf9be73a", "engines": { "node": ">=22.0.0" }, "scripts": { "_eslint": "eslint --cache --cache-location ./node_modules/.cache/eslint", "all": "run-s typecheck format test", "build": "run-p -s build:*", "build:remix": "react-router build", "build:server": "node ./scripts/build-server.js", "dev": "./scripts/dev.sh | pino-pretty", "dev-atproto": "./scripts/dev-atproto.sh", "e2e": "playwright test", "format": "pnpm _eslint --fix && prettier . --write", "lint": "pnpm _eslint && prettier . --check", "postinstall": "./scripts/postinstall.sh", "prepare": "husky", "setup-dev": "./scripts/setup-dev.sh", "start": "NODE_ENV=production node ./dist/server.js", "start:local": "NODE_ENV=development E2E=1 node --env-file .env ./dist/server.js", "test": "vitest run", "typecheck": "react-router typegen && tsc" }, "dependencies": { "@atproto/api": "0.19.0", "@atproto/did": "0.3.0", "@atproto/identity": "0.4.12", "@atproto/jwk-jose": "0.1.11", "@atproto/lexicon": "0.6.1", "@atproto/oauth-client-node": "0.3.17", "@atproto/repo": "0.8.12", "@atproto/syntax": "0.4.3", "@atproto/xrpc": "0.7.7", "@atproto/xrpc-server": "0.10.14", "@conform-to/react": "1.17.1", "@conform-to/zod": "1.17.1", "@emoji-mart/data": "1.2.1", "@emoji-mart/react": "1.1.1", "@heroicons/react": "2.2.0", "@prisma/client": "6.19.2", "@react-router/express": "^7.12.0", "@react-router/fs-routes": "7.12.0", "@react-router/node": "^7.12.0", "@resvg/resvg-js": "2.6.2", "@skyware/jetstream": "0.2.5", "@t3-oss/env-core": "0.13.10", "clsx": "2.1.1", "emoji-mart": "5.6.0", "emoji-regex": "10.6.0", "express": "5.2.1", "i18next": "25.8.13", "i18next-browser-languagedetector": "8.2.1", "isbot": "5.1.35", "jotai": "2.18.0", "lru-cache": "11.2.6", "markdown-it": "14.1.1", "markdown-it-link-attributes": "4.0.1", "pino": "10.3.1", "pino-http": "11.0.0", "pino-pretty": "13.1.3", "prisma": "6.19.2", "react": "19.2.4", "react-dom": "19.2.4", "react-github-btn": "1.4.0", "react-i18next": "16.5.4", "react-movable": "3.4.1", "react-router": "^7.12.0", "remix-i18next": "7.4.2", "remix-utils": "9.0.1", "satori": "0.19.2", "tailwind-merge": "3.5.0", "ws": "8.19.0", "zod": "4.3.6", "zod-validation-error": "5.0.0" }, "devDependencies": { "@atproto/lex-cli": "0.9.8", "@mkizka/eslint-config": "8.0.0", "@mkizka/eslint-plugin-aaa": "1.0.2", "@playwright/test": "1.57.0", "@quramy/prisma-fabbrica": "2.3.3", "@react-router/dev": "7.12.0", "@tailwindcss/typography": "0.5.19", "@types/express": "5.0.6", "@types/markdown-it": "14.1.2", "@types/markdown-it-link-attributes": "3.0.5", "@types/node": "24.10.13", "@types/react": "19.2.14", "@types/react-dom": "19.2.3", "@types/umami": "2.10.1", "@types/ws": "8.18.1", "@vitest/coverage-v8": "3.2.4", "autoprefixer": "10.4.24", "daisyui": "4.12.24", "esbuild": "0.27.3", "eslint": "9.39.3", "giget": "2.0.0", "husky": "9.1.7", "lint-staged": "16.2.7", "msw": "2.12.10", "npm-run-all2": "8.0.4", "postcss": "8.5.6", "prettier": "3.8.1", "prettier-plugin-pkg": "0.21.2", "tailwindcss": "3.4.19", "tailwindcss-animate": "1.0.7", "tsx": "4.21.0", "typescript": "5.9.3", "vite": "7.3.1", "vite-tsconfig-paths": "6.1.1", "vitest": "3.2.4", "vitest-environment-vprisma": "1.3.0", "vitest-mock-extended": "3.1.0", "wait-on": "9.0.4" }, "sideEffects": false, "lint-staged": { "*.{js,mjs,ts,tsx}": "eslint --cache --cache-location ./node_modules/.cache/eslint --fix", "*": "prettier --ignore-unknown --write" }, "prettier": { "plugins": [ "prettier-plugin-pkg" ] } }