mirror of
https://github.com/chillpadclub/bedolaga-cabinet.git
synced 2026-07-28 09:33:46 +00:00
Phase 0: Remove ~920 lines of dead code (ThemeBentoPicker, PromoDiscountBadge, AdminLayout, SettingsSidebar, MovingGradient, EmptyState, miniapp API, unused types/functions/transitions/skeleton helpers). Fix API barrel file (add 20 missing exports). Phase 1: Add ErrorBoundary (app/page/widget levels), centralize constants, add axios timeout, fix staleTime:0 in React Query. Phase 2: Consolidate hexToHsl, extract email validation, fix duplicate code. Phase 3: Fix auth race condition (await checkAdminStatus), memoize useCurrency, add WebSocket message validation. Phase 4: Extract useBranding, useFeatureFlags, useScrollRestoration from AppShell. Phase 5: Remove all eslint-disable react-hooks/exhaustive-deps (14 total), simplify logger, remove deprecated hooks (useBackButton, useTelegramDnd, useTelegramWebApp). Dependencies: React 19, react-router 7, zustand 5, i18next 25, react-i18next 16, eslint-plugin-react-refresh 0.5. Remove unused @lottiefiles/dotlottie-react. Convert vite manualChunks to function-based approach for react-router v7 compat. Lint: Fix logger.ts no-unused-expressions, fix react-refresh/only-export-components in 6 Radix primitive files (const re-exports → direct re-exports), fix WebSocketProvider exhaustive-deps. Result: 0 errors, 0 warnings. Add CLAUDE.md to .gitignore.
86 lines
2.5 KiB
JSON
86 lines
2.5 KiB
JSON
{
|
|
"name": "cabinet-frontend",
|
|
"private": true,
|
|
"version": "1.7.0",
|
|
"description": "Remnawave Bedolaga Web App",
|
|
"license": "AGPL-3.0",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "tsc && vite build",
|
|
"lint": "eslint .",
|
|
"lint:fix": "eslint . --fix",
|
|
"format": "prettier --write \"src/**/*.{ts,tsx,css,json}\"",
|
|
"format:check": "prettier --check \"src/**/*.{ts,tsx,css,json}\"",
|
|
"type-check": "tsc --noEmit",
|
|
"preview": "vite preview",
|
|
"prepare": "husky"
|
|
},
|
|
"dependencies": {
|
|
"@dnd-kit/core": "^6.3.1",
|
|
"@dnd-kit/sortable": "^10.0.0",
|
|
"@dnd-kit/utilities": "^3.2.2",
|
|
"@kastov/cryptohapp": "^1.1.2",
|
|
"@radix-ui/react-alert-dialog": "^1.1.15",
|
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
"@radix-ui/react-popover": "^1.1.15",
|
|
"@radix-ui/react-select": "^2.2.6",
|
|
"@radix-ui/react-slot": "^1.2.4",
|
|
"@radix-ui/react-switch": "^1.2.6",
|
|
"@radix-ui/react-tabs": "^1.1.13",
|
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
"@radix-ui/react-visually-hidden": "^1.2.4",
|
|
"@tanstack/react-query": "^5.8.0",
|
|
"@telegram-apps/sdk-react": "^3.3.9",
|
|
"autoprefixer": "^10.4.24",
|
|
"axios": "^1.6.0",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"cmdk": "^1.1.1",
|
|
"dompurify": "^3.3.1",
|
|
"framer-motion": "^12.29.2",
|
|
"i18next": "^25.8.4",
|
|
"i18next-browser-languagedetector": "^8.2.0",
|
|
"jsencrypt": "^3.5.4",
|
|
"ogl": "^1.0.11",
|
|
"react": "^19.2.4",
|
|
"react-dom": "^19.2.4",
|
|
"react-i18next": "^16.5.4",
|
|
"react-router": "^7.13.0",
|
|
"tailwind-merge": "^3.4.0",
|
|
"zustand": "^5.0.11"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "^9.39.2",
|
|
"@types/dompurify": "^3.0.5",
|
|
"@types/node": "^25.2.1",
|
|
"@types/react": "^19.2.13",
|
|
"@types/react-dom": "^19.2.3",
|
|
"@vitejs/plugin-react": "^5.1.2",
|
|
"eslint": "^9.39.2",
|
|
"eslint-config-prettier": "^10.1.8",
|
|
"eslint-plugin-react-hooks": "^7.0.1",
|
|
"eslint-plugin-react-refresh": "^0.5.0",
|
|
"globals": "^17.1.0",
|
|
"husky": "^9.1.7",
|
|
"lint-staged": "^16.2.7",
|
|
"postcss": "^8.4.31",
|
|
"prettier": "^3.8.1",
|
|
"prettier-plugin-tailwindcss": "^0.7.2",
|
|
"tailwindcss": "^3.4.19",
|
|
"typescript": "^5.2.2",
|
|
"typescript-eslint": "^8.54.0",
|
|
"vite": "^7.3.1"
|
|
},
|
|
"lint-staged": {
|
|
"*.{ts,tsx}": [
|
|
"eslint --fix",
|
|
"prettier --write"
|
|
],
|
|
"*.{css,json}": [
|
|
"prettier --write"
|
|
]
|
|
}
|
|
}
|