From cdd854bd7019e6dff78529a5f47c412165375e05 Mon Sep 17 00:00:00 2001 From: echo Date: Thu, 11 Dec 2025 23:25:50 +0100 Subject: [PATCH] current status OK --- apps/admin/data/fitai.db | Bin 151552 -> 151552 bytes apps/mobile/package-lock.json | 393 ++++++++++++++++++++++------------ apps/mobile/package.json | 10 +- apps/mobile/src/config/api.ts | 2 +- nextstepts0210.md | 53 +++++ package-lock.json | 7 +- projectManagment.md | 0 7 files changed, 320 insertions(+), 145 deletions(-) create mode 100644 nextstepts0210.md create mode 100644 projectManagment.md diff --git a/apps/admin/data/fitai.db b/apps/admin/data/fitai.db index 4a83ea74fe60d565b3a398c1de5aea428b588421..fff9a94753848c2d49c19b49f2f02c806af83c06 100755 GIT binary patch delta 1673 zcmb7^Z)h839LMi2&EMYLZ!T#YT}zWT!47=>}v4rYViC%E-G4a519JrV|%%v6EYTdCcb*}02+?6`zdxmU*ONPm-qqpb@m$c^XvQ-Zj?P* zkBUL|jS0^TEn1c)rtCbzim4+aX%f=&x{hpO5Yi;6y$9>N=o&9rMX4sRZv4|ZWjCxMZMK*7W z_?Sd8QYs^-1xdxZaQ)uh5YwRdFn>Y7wZnbtf!lvhk|?`E@ela#_)q!w_?P%Ye2m-R zzU9_jD)v5m1Ac%8T!bP#596Fe%YMwRI5bCEv(4Phh6;V@OsmvT`&z2v8(?RqsQBX)wJ%FiyHT=Qc@S4-OXbDmi*~tqx>U4d#?q-% zr)TFD7wma!ZobeXiQO;@JQes<@JZC;H}^wWc(rjH%bw=4Yz_4(4`tX+S*1RC#8wB|mD*|KClZcBG#kJ6g1@ zxus&OB0C;*igE`ioRLHU<1I!w-9ZzGs delta 667 zcmY+BPiPZC6o+SLv)OF2Grx6>g(@LU+CUGD*{s&I{y`B0p@&}T!CRw+6rrG^n0jf! zV+ETmG$-vIJStdL3}Op<^bim##)3i!6fgE51r<_CCy{~!^A6w4oA-nFE&9fyZ!Di+ zeT0yVD2Sq!;eyh)HvK$#+`y)|AcN@OH-6zKexQx-_=?RSWj&+8dfH}2KI@*I5?yJp znajrGW`pn&U*^Zm24cL;-?C&d;25UoSTBOc`8PJ4{8WDYtm}$%^3?cPP@TLxt=g>Q z>95l2V^$Kg&oM8t5%Zp|_6JKF^HjY4@$~nZV5IdKE0<_!*oH<>!gV~teN5m2jzYsO zw$a2#yu(YZqJkV!V%8R4U}{n+&fGq8!!4KdwnRsIbf-M_@Ii5Q){+QPCzptIsc_So z8=bl5j+zq1q|PW?_&?t0Jst)|B+?}cOQcB@l1P<^nrhN09wrDgT34bHL|S_nN8&6& z_&(p_ulW;xi(labti!&rH6|91Z>Xb+Ib6jcyUY?|c{`>MajmwVRr>2oS!KQ*gg)(I z#Zf|0mG~t3Axw$yrL1b*w`dVz5oGH_HQk{Z@%wMMK2)Hs$Uj|8p-bzj+7*hng`%7g TH6ethgvzeSN>5i!o1~osf|Rx= diff --git a/apps/mobile/package-lock.json b/apps/mobile/package-lock.json index 99b42d8..a7bec03 100644 --- a/apps/mobile/package-lock.json +++ b/apps/mobile/package-lock.json @@ -8,7 +8,7 @@ "name": "@fitai/mobile", "version": "1.0.0", "dependencies": { - "@clerk/clerk-expo": "^2.18.3", + "@clerk/clerk-expo": "^2.19.11", "@expo/vector-icons": "^15.0.0", "@hookform/resolvers": "^3.3.0", "@react-native-async-storage/async-storage": "^2.2.0", @@ -19,11 +19,11 @@ "ajv-keywords": "^5.1.0", "axios": "^1.6.0", "expo": "~54.0.23", - "expo-auth-session": "^7.0.8", + "expo-auth-session": "^7.0.10", "expo-barcode-scanner": "^13.0.1", "expo-camera": "~17.0.9", "expo-constants": "^18.0.10", - "expo-crypto": "^15.0.7", + "expo-crypto": "^15.0.8", "expo-font": "~14.0.9", "expo-haptics": "^15.0.7", "expo-linear-gradient": "~15.0.7", @@ -32,9 +32,9 @@ "expo-router": "~6.0.14", "expo-secure-store": "~15.0.7", "expo-status-bar": "^3.0.8", - "expo-web-browser": "^15.0.9", + "expo-web-browser": "^15.0.10", "react": "19.1.0", - "react-dom": "19.1.0", + "react-dom": "^19.1.0", "react-hook-form": "^7.47.0", "react-native": "0.81.5", "react-native-safe-area-context": "~5.6.0", @@ -1563,15 +1563,15 @@ "license": "MIT" }, "node_modules/@clerk/clerk-expo": { - "version": "2.18.3", - "resolved": "https://registry.npmjs.org/@clerk/clerk-expo/-/clerk-expo-2.18.3.tgz", - "integrity": "sha512-lxlDiartLPhVjQiz88biCYa8+ZAv3dOOS0KXQnYn6M79UrO6cCcSO+o3QwEKMvwhiCEp0BcH7wnypU/GOXoB1Q==", + "version": "2.19.11", + "resolved": "https://registry.npmjs.org/@clerk/clerk-expo/-/clerk-expo-2.19.11.tgz", + "integrity": "sha512-zwCPDJm/WKe91rMGPequVKgGGWmUR/2OIR0IBqXg0hLaUFjEdce0hoB0QSVdc8TweC8djy+5vKVZIfQ2Tg6Vpg==", "license": "MIT", "dependencies": { - "@clerk/clerk-js": "^5.105.1", - "@clerk/clerk-react": "^5.53.8", - "@clerk/shared": "^3.31.1", - "@clerk/types": "^4.97.2", + "@clerk/clerk-js": "^5.114.1", + "@clerk/clerk-react": "^5.58.1", + "@clerk/shared": "^3.39.0", + "@clerk/types": "^4.101.6", "base-64": "^1.0.0", "react-native-url-polyfill": "2.0.0", "tslib": "2.8.1" @@ -1610,14 +1610,14 @@ } }, "node_modules/@clerk/clerk-js": { - "version": "5.105.1", - "resolved": "https://registry.npmjs.org/@clerk/clerk-js/-/clerk-js-5.105.1.tgz", - "integrity": "sha512-3ObGAARYsDjN4KS/FmCYvHL4FJtWjUdlDinUX1p1tPkFopPypiK9yhU+HSadpFTseLecc5TBnvuotJAAkQ2gGQ==", + "version": "5.114.1", + "resolved": "https://registry.npmjs.org/@clerk/clerk-js/-/clerk-js-5.114.1.tgz", + "integrity": "sha512-l3A9UZKWOI7rCz/P9o2bS4hSTRLzPqr9eAPxhBFsfUsGgzlxQjVeyRQ2XgOXfvwsgekmulVHzlbvGZidT7JF6A==", "license": "MIT", "dependencies": { "@base-org/account": "2.0.1", - "@clerk/localizations": "^3.27.0", - "@clerk/shared": "^3.31.1", + "@clerk/localizations": "^3.30.1", + "@clerk/shared": "^3.39.0", "@coinbase/wallet-sdk": "4.3.0", "@emotion/cache": "11.11.0", "@emotion/react": "11.11.1", @@ -1637,8 +1637,7 @@ "dequal": "2.0.3", "input-otp": "1.4.2", "qrcode.react": "4.2.0", - "regenerator-runtime": "0.14.1", - "swr": "2.3.4" + "regenerator-runtime": "0.14.1" }, "engines": { "node": ">=18.17.0" @@ -1665,12 +1664,12 @@ "license": "MIT" }, "node_modules/@clerk/clerk-react": { - "version": "5.53.8", - "resolved": "https://registry.npmjs.org/@clerk/clerk-react/-/clerk-react-5.53.8.tgz", - "integrity": "sha512-TOiYk31rQUL9JOKZr/fhajf+fQCHicy1J4Rxq7vqtjHseJsnIBjzTigjOap/w8PrDAF28O6dbPC5CA0Tp7Md8w==", + "version": "5.58.1", + "resolved": "https://registry.npmjs.org/@clerk/clerk-react/-/clerk-react-5.58.1.tgz", + "integrity": "sha512-jN6mfuqwZakm99CKRQlTahMZEa8qLOpr3Z4lG6XtyJfIcyADleOdRxuOXYoN9sV8ZhNfDDAs+eKjUeusIzPpbg==", "license": "MIT", "dependencies": { - "@clerk/shared": "^3.31.1", + "@clerk/shared": "^3.39.0", "tslib": "2.8.1" }, "engines": { @@ -1682,21 +1681,21 @@ } }, "node_modules/@clerk/localizations": { - "version": "3.27.0", - "resolved": "https://registry.npmjs.org/@clerk/localizations/-/localizations-3.27.0.tgz", - "integrity": "sha512-XQrzOtON32dXlTHEUwL0utTro6MePSM1gljCjRcY6RKh36I2BcuuG2XVu6K2HIvBL+Ef+nWF8+aU4+zc14nVcQ==", + "version": "3.30.1", + "resolved": "https://registry.npmjs.org/@clerk/localizations/-/localizations-3.30.1.tgz", + "integrity": "sha512-CHatnmQsGggsBMOO3k82oEh9E7j8Xs/vjFtx+hwGwM/qcJ6CEPmP69QKeRBfAXY5PcJinAuyYmFEqMEFvbyjSw==", "license": "MIT", "dependencies": { - "@clerk/types": "^4.97.2" + "@clerk/types": "^4.101.6" }, "engines": { "node": ">=18.17.0" } }, "node_modules/@clerk/shared": { - "version": "3.31.1", - "resolved": "https://registry.npmjs.org/@clerk/shared/-/shared-3.31.1.tgz", - "integrity": "sha512-mqxZqlzLJYJxA+ryLzhwFR0eO73teAvRd+wvA8bLUZLYvCRFvaiHsB9dEvbo9Z5bMYdq3NPwnx2uljMuu/tiQw==", + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/@clerk/shared/-/shared-3.39.0.tgz", + "integrity": "sha512-9kqqXGMPAdMQ7SXo5ZwUhbzbLLQeLp/1jdb8FQS5qlhmL0S0bAYKcyDjcmMB8xZPXNc7vZJRT72QHsGSlUAJxw==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -1724,12 +1723,12 @@ } }, "node_modules/@clerk/types": { - "version": "4.97.2", - "resolved": "https://registry.npmjs.org/@clerk/types/-/types-4.97.2.tgz", - "integrity": "sha512-xnJq3xzpmuuDnNnWuUMKJLPPkaEaLDM0kiv2Hm0gKIcL1+1P3VaGf2vL9roIhmhLswB2PUwtVvZKBmGjT5yOVw==", + "version": "4.101.6", + "resolved": "https://registry.npmjs.org/@clerk/types/-/types-4.101.6.tgz", + "integrity": "sha512-Ah6R65loy5Aq1jBpWo3x01IOlYJfgVn4LVAkSXKVQDtehn8w1bT2uJ7BTa2zH72A8F4K2HivkmMQa+v/37tLFA==", "license": "MIT", "dependencies": { - "@clerk/shared": "^3.31.1" + "@clerk/shared": "^3.39.0" }, "engines": { "node": ">=18.17.0" @@ -2154,40 +2153,40 @@ } }, "node_modules/@expo/config": { - "version": "12.0.10", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.10.tgz", - "integrity": "sha512-lJMof5Nqakq1DxGYlghYB/ogSBjmv4Fxn1ovyDmcjlRsQdFCXgu06gEUogkhPtc9wBt9WlTTfqENln5HHyLW6w==", + "version": "12.0.12", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.12.tgz", + "integrity": "sha512-X2MW86+ulLpMGvdgfvpl2EOBAKUlwvnvoPwdaZeeyWufGopn1nTUeh4C9gMsplDaP1kXv9sLXVhOoUoX6g9PvQ==", "license": "MIT", "dependencies": { "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~54.0.2", - "@expo/config-types": "^54.0.8", - "@expo/json-file": "^10.0.7", + "@expo/config-plugins": "~54.0.3", + "@expo/config-types": "^54.0.10", + "@expo/json-file": "^10.0.8", "deepmerge": "^4.3.1", "getenv": "^2.0.0", - "glob": "^10.4.2", + "glob": "^13.0.0", "require-from-string": "^2.0.2", "resolve-from": "^5.0.0", "resolve-workspace-root": "^2.0.0", "semver": "^7.6.0", "slugify": "^1.3.4", - "sucrase": "3.35.0" + "sucrase": "~3.35.1" } }, "node_modules/@expo/config-plugins": { - "version": "54.0.2", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-54.0.2.tgz", - "integrity": "sha512-jD4qxFcURQUVsUFGMcbo63a/AnviK8WUGard+yrdQE3ZrB/aurn68SlApjirQQLEizhjI5Ar2ufqflOBlNpyPg==", + "version": "54.0.3", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-54.0.3.tgz", + "integrity": "sha512-tBIUZIxLQfCu5jmqTO+UOeeDUGIB0BbK6xTMkPRObAXRQeTLPPfokZRCo818d2owd+Bcmq1wBaDz0VY3g+glfw==", "license": "MIT", "dependencies": { - "@expo/config-types": "^54.0.8", + "@expo/config-types": "^54.0.9", "@expo/json-file": "~10.0.7", "@expo/plist": "^0.4.7", "@expo/sdk-runtime-versions": "^1.0.0", "chalk": "^4.1.2", "debug": "^4.3.5", "getenv": "^2.0.0", - "glob": "^10.4.2", + "glob": "^13.0.0", "resolve-from": "^5.0.0", "semver": "^7.5.4", "slash": "^3.0.0", @@ -2197,20 +2196,57 @@ } }, "node_modules/@expo/config-plugins/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", + "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "license": "BlueOak-1.0.0", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", + "minimatch": "^10.1.1", "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "path-scurry": "^2.0.0" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/config-plugins/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@expo/config-plugins/node_modules/minimatch": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/config-plugins/node_modules/path-scurry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -2229,9 +2265,9 @@ } }, "node_modules/@expo/config-types": { - "version": "54.0.8", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-54.0.8.tgz", - "integrity": "sha512-lyIn/x/Yz0SgHL7IGWtgTLg6TJWC9vL7489++0hzCHZ4iGjVcfZmPTUfiragZ3HycFFj899qN0jlhl49IHa94A==", + "version": "54.0.10", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-54.0.10.tgz", + "integrity": "sha512-/J16SC2an1LdtCZ67xhSkGXpALYUVUNyZws7v+PVsFZxClYehDSoKLqyRaGkpHlYrCc08bS0RF5E0JV6g50psA==", "license": "MIT" }, "node_modules/@expo/config/node_modules/@babel/code-frame": { @@ -2244,20 +2280,57 @@ } }, "node_modules/@expo/config/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", + "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "license": "BlueOak-1.0.0", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", + "minimatch": "^10.1.1", "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "path-scurry": "^2.0.0" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/config/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@expo/config/node_modules/minimatch": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/config/node_modules/path-scurry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -2337,9 +2410,9 @@ } }, "node_modules/@expo/env": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@expo/env/-/env-2.0.7.tgz", - "integrity": "sha512-BNETbLEohk3HQ2LxwwezpG8pq+h7Fs7/vAMP3eAtFT1BCpprLYoBBFZH7gW4aqGfqOcVP4Lc91j014verrYNGg==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-2.0.8.tgz", + "integrity": "sha512-5VQD6GT8HIMRaSaB5JFtOXuvfDVU80YtZIuUT/GDhUF782usIXY13Tn3IdDz1Tm/lqA9qnRZQ1BF4t7LlvdJPA==", "license": "MIT", "dependencies": { "chalk": "^4.0.0", @@ -2434,9 +2507,9 @@ } }, "node_modules/@expo/json-file": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.7.tgz", - "integrity": "sha512-z2OTC0XNO6riZu98EjdNHC05l51ySeTto6GP7oSQrCvQgG9ARBwD1YvMQaVZ9wU7p/4LzSf1O7tckL3B45fPpw==", + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.8.tgz", + "integrity": "sha512-9LOTh1PgKizD1VXfGQ88LtDH0lRwq9lsTb4aichWTWSWqy3Ugfkhfm3BhzBIkJJfQQ5iJu3m/BoRlEIjoCGcnQ==", "license": "MIT", "dependencies": { "@babel/code-frame": "~7.10.4", @@ -2879,6 +2952,27 @@ "integrity": "sha512-F0YfUDjvT+Mtt/R4xdl2X0EYCHMMiJqNLdxHD++jDT5ydEFIyqbCHh51Qx2E211dgZprPKhV7sHmnXKpLuvc5g==", "license": "MIT" }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -5022,9 +5116,9 @@ "license": "MIT" }, "node_modules/abitype": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.1.1.tgz", - "integrity": "sha512-Loe5/6tAgsBukY95eGaPSDmQHIjRZYQq8PB1MpsNccDIK8WiV+Uw6WzaIXipvaxTEL2yEB0OpEaQv3gs8pkS9Q==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.2.2.tgz", + "integrity": "sha512-4DOIMWscIB3j8hboLAUjLZCE8TMLdgecBpHFumfU4PdO/C1SBCVx4Nu1wPYXaL2iK8B0Jk3tiwnDLCpUtm3fZg==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/wevm" @@ -7163,9 +7257,9 @@ } }, "node_modules/expo-application": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-7.0.7.tgz", - "integrity": "sha512-Jt1/qqnoDUbZ+bK91+dHaZ1vrPDtRBOltRa681EeedkisqguuEeUx4UHqwVyDK2oHWsK6lO3ojetoA4h8OmNcg==", + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/expo-application/-/expo-application-7.0.8.tgz", + "integrity": "sha512-qFGyxk7VJbrNOQWBbE09XUuGuvkOgFS9QfToaK2FdagM2aQ+x3CvGV2DuVgl/l4ZxPgIf3b/MNh9xHpwSwn74Q==", "license": "MIT", "peerDependencies": { "expo": "*" @@ -7187,16 +7281,16 @@ } }, "node_modules/expo-auth-session": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/expo-auth-session/-/expo-auth-session-7.0.9.tgz", - "integrity": "sha512-mPSwaRWOJYas160lXi5P/7BkLy0xbh+er+IMmAYHqf2+iz2WWs9W/4lMAklQVJG2mCyOZi24XrkffvB2izCa1g==", + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/expo-auth-session/-/expo-auth-session-7.0.10.tgz", + "integrity": "sha512-XDnKkudvhHSKkZfJ+KkodM+anQcrxB71i+h0kKabdLa5YDXTQ81aC38KRc3TMqmnBDHAu0NpfbzEVd9WDFY3Qg==", "license": "MIT", "dependencies": { - "expo-application": "~7.0.7", - "expo-constants": "~18.0.10", - "expo-crypto": "~15.0.7", - "expo-linking": "~8.0.9", - "expo-web-browser": "~15.0.9", + "expo-application": "~7.0.8", + "expo-constants": "~18.0.11", + "expo-crypto": "~15.0.8", + "expo-linking": "~8.0.10", + "expo-web-browser": "~15.0.10", "invariant": "^2.2.4" }, "peerDependencies": { @@ -7237,13 +7331,13 @@ } }, "node_modules/expo-constants": { - "version": "18.0.10", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-18.0.10.tgz", - "integrity": "sha512-Rhtv+X974k0Cahmvx6p7ER5+pNhBC0XbP1lRviL2J1Xl4sT2FBaIuIxF/0I0CbhOsySf0ksqc5caFweAy9Ewiw==", + "version": "18.0.11", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-18.0.11.tgz", + "integrity": "sha512-xnfrfZ7lHjb+03skhmDSYeFF7OU2K3Xn/lAeP+7RhkV2xp2f5RCKtOUYajCnYeZesvMrsUxOsbGOP2JXSOH3NA==", "license": "MIT", "dependencies": { - "@expo/config": "~12.0.10", - "@expo/env": "~2.0.7" + "@expo/config": "~12.0.11", + "@expo/env": "~2.0.8" }, "peerDependencies": { "expo": "*", @@ -7251,9 +7345,9 @@ } }, "node_modules/expo-crypto": { - "version": "15.0.7", - "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-15.0.7.tgz", - "integrity": "sha512-FUo41TwwGT2e5rA45PsjezI868Ch3M6wbCZsmqTWdF/hr+HyPcrp1L//dsh/hsrsyrQdpY/U96Lu71/wXePJeg==", + "version": "15.0.8", + "resolved": "https://registry.npmjs.org/expo-crypto/-/expo-crypto-15.0.8.tgz", + "integrity": "sha512-aF7A914TB66WIlTJvl5J6/itejfY78O7dq3ibvFltL9vnTALJ/7LYHvLT4fwmx9yUNS6ekLBtDGWivFWnj2Fcw==", "license": "MIT", "dependencies": { "base64-js": "^1.3.0" @@ -7316,12 +7410,12 @@ } }, "node_modules/expo-linking": { - "version": "8.0.9", - "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-8.0.9.tgz", - "integrity": "sha512-a0UHhlVyfwIbn8b1PSFPoFiIDJeps2iEq109hVH3CHd0CMKuRxFfNio9Axe2BjXhiJCYWR4OV1iIyzY/GjiVkQ==", + "version": "8.0.10", + "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-8.0.10.tgz", + "integrity": "sha512-0EKtn4Sk6OYmb/5ZqK8riO0k1Ic+wyT3xExbmDvUYhT7p/cKqlVUExMuOIAt3Cx3KUUU1WCgGmdd493W/D5XjA==", "license": "MIT", "dependencies": { - "expo-constants": "~18.0.10", + "expo-constants": "~18.0.11", "invariant": "^2.2.4" }, "peerDependencies": { @@ -7462,9 +7556,9 @@ } }, "node_modules/expo-secure-store": { - "version": "15.0.7", - "resolved": "https://registry.npmjs.org/expo-secure-store/-/expo-secure-store-15.0.7.tgz", - "integrity": "sha512-9q7+G1Zxr5P6J5NRIlm86KulvmYwc6UnQlYPjQLDu1drDnerz6AT6l884dPu29HgtDTn4rR0heYeeGFhMKM7/Q==", + "version": "15.0.8", + "resolved": "https://registry.npmjs.org/expo-secure-store/-/expo-secure-store-15.0.8.tgz", + "integrity": "sha512-lHnzvRajBu4u+P99+0GEMijQMFCOYpWRO4dWsXSuMt77+THPIGjzNvVKrGSl6mMrLsfVaKL8BpwYZLGlgA+zAw==", "license": "MIT", "peerDependencies": { "expo": "*" @@ -7493,9 +7587,9 @@ } }, "node_modules/expo-web-browser": { - "version": "15.0.9", - "resolved": "https://registry.npmjs.org/expo-web-browser/-/expo-web-browser-15.0.9.tgz", - "integrity": "sha512-Dj8kNFO+oXsxqCDNlUT/GhOrJnm10kAElH++3RplLydogFm5jTzXYWDEeNIDmV+F+BzGYs+sIhxiBf7RyaxXZg==", + "version": "15.0.10", + "resolved": "https://registry.npmjs.org/expo-web-browser/-/expo-web-browser-15.0.10.tgz", + "integrity": "sha512-fvDhW4bhmXAeWFNFiInmsGCK83PAqAcQaFyp/3pE/jbdKmFKoRCWr46uZGIfN4msLK/OODhaQ/+US7GSJNDHJg==", "license": "MIT", "peerDependencies": { "expo": "*", @@ -7641,6 +7735,23 @@ "asap": "~2.0.3" } }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -12786,17 +12897,17 @@ "license": "MIT" }, "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", - "glob": "^10.3.10", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", "ts-interface-checker": "^0.1.9" }, "bin": { @@ -12816,26 +12927,6 @@ "node": ">= 6" } }, - "node_modules/sucrase/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -13036,6 +13127,34 @@ "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", "license": "MIT" }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -13429,9 +13548,9 @@ } }, "node_modules/viem": { - "version": "2.38.6", - "resolved": "https://registry.npmjs.org/viem/-/viem-2.38.6.tgz", - "integrity": "sha512-aqO6P52LPXRjdnP6rl5Buab65sYa4cZ6Cpn+k4OLOzVJhGIK8onTVoKMFMT04YjDfyDICa/DZyV9HmvLDgcjkw==", + "version": "2.41.2", + "resolved": "https://registry.npmjs.org/viem/-/viem-2.41.2.tgz", + "integrity": "sha512-LYliajglBe1FU6+EH9mSWozp+gRA/QcHfxeD9Odf83AdH5fwUS7DroH4gHvlv6Sshqi1uXrYFA2B/EOczxd15g==", "funding": [ { "type": "github", diff --git a/apps/mobile/package.json b/apps/mobile/package.json index b485e96..49a7fea 100644 --- a/apps/mobile/package.json +++ b/apps/mobile/package.json @@ -14,7 +14,7 @@ "test": "jest" }, "dependencies": { - "@clerk/clerk-expo": "^2.18.3", + "@clerk/clerk-expo": "^2.19.11", "@expo/vector-icons": "^15.0.0", "@hookform/resolvers": "^3.3.0", "@react-native-async-storage/async-storage": "^2.2.0", @@ -25,11 +25,11 @@ "ajv-keywords": "^5.1.0", "axios": "^1.6.0", "expo": "~54.0.23", - "expo-auth-session": "^7.0.8", + "expo-auth-session": "^7.0.10", "expo-barcode-scanner": "^13.0.1", "expo-camera": "~17.0.9", "expo-constants": "^18.0.10", - "expo-crypto": "^15.0.7", + "expo-crypto": "^15.0.8", "expo-font": "~14.0.9", "expo-haptics": "^15.0.7", "expo-linear-gradient": "~15.0.7", @@ -38,9 +38,9 @@ "expo-router": "~6.0.14", "expo-secure-store": "~15.0.7", "expo-status-bar": "^3.0.8", - "expo-web-browser": "^15.0.9", + "expo-web-browser": "^15.0.10", "react": "19.1.0", - "react-dom": "19.1.0", + "react-dom": "^19.1.0", "react-hook-form": "^7.47.0", "react-native": "0.81.5", "react-native-safe-area-context": "~5.6.0", diff --git a/apps/mobile/src/config/api.ts b/apps/mobile/src/config/api.ts index e1e0487..62fc10d 100644 --- a/apps/mobile/src/config/api.ts +++ b/apps/mobile/src/config/api.ts @@ -1,5 +1,5 @@ export const API_BASE_URL = __DEV__ - ? 'https://8679109544e4.ngrok-free.app' + ? 'https://5e424f097c8b.ngrok-free.app' : 'https://your-production-url.com' export const API_ENDPOINTS = { diff --git a/nextstepts0210.md b/nextstepts0210.md new file mode 100644 index 0000000..cd2d258 --- /dev/null +++ b/nextstepts0210.md @@ -0,0 +1,53 @@ +# Analysis and Next Steps + +## Current State Analysis + +### Architecture +- **Monorepo Structure**: The project is well-structured as a monorepo with `apps/admin` (Next.js), `apps/mobile` (Expo), and shared packages (`database`, `shared`). +- **Database Inconsistency**: There is a significant architectural inconsistency in database access. + - `packages/database` defines a Drizzle ORM schema and exports a Drizzle instance. + - `apps/admin` implements a custom `SQLiteDatabase` class (`src/lib/database/sqlite.ts`) that uses `better-sqlite3` directly with raw SQL queries and manual object mapping. + - This leads to code duplication, potential schema drift (if Drizzle schema changes but raw SQL doesn't), and loss of Drizzle's type safety and convenience features. + +### Code Quality +- **Type Safety**: + - `UserManagement.tsx` defines local interfaces (e.g., `User`) that duplicate the schema definitions. + - Shared types should be utilized from `@fitai/shared` or `@fitai/database`. +- **Configuration**: + - `apps/mobile/src/config/api.ts` contains hardcoded URLs (e.g., ngrok) which is brittle for development and production. + - API routes in `apps/admin` contain `console.log` statements that should be removed or replaced with a proper logging solution. +- **Error Handling**: + - Basic error handling exists in API routes, but could be standardized (e.g., custom error classes, consistent error response format). + +### Testing +- **Missing Tests**: While `jest` is configured in `apps/admin`, there are no actual test files in `src`. The critical business logic in `src/lib/database` and API routes is currently untested. + +## Suggested Next Steps + +### 1. Unify Database Access (High Priority) +Refactor `apps/admin` to use the Drizzle ORM instance from `@fitai/database` instead of the custom `SQLiteDatabase` class. +- **Benefits**: Removes ~800 lines of raw SQL code, ensures type safety, reduces maintenance burden, and leverages Drizzle's features. +- **Action**: Replace `src/lib/database/sqlite.ts` methods with Drizzle queries using the schema from `@fitai/database`. + +### 2. Implement Testing Strategy (High Priority) +Start adding tests for critical paths. +- **Unit Tests**: Add Jest tests for the database logic (if keeping the custom class temporarily) or the service layer. +- **Integration Tests**: Test API routes (`/api/attendance/*`, `/api/users`) to ensure they handle requests correctly. +- **Action**: Create `__tests__` directories in `apps/admin/src` and add initial tests for attendance flows. + +### 3. Improve Configuration Management (Medium Priority) +- **Mobile**: Use environment variables (e.g., `EXPO_PUBLIC_API_URL`) for the API base URL in the mobile app instead of hardcoding. +- **Admin**: Ensure all secrets and config values are strictly in `.env` files. + +### 4. Enhance Type Safety (Medium Priority) +- **Shared Types**: Move the `User` interface and other shared entities from `UserManagement.tsx` to `@fitai/shared` or use the inferred types from Drizzle schema in `@fitai/database`. +- **Action**: Refactor components to import types from the shared package. + +### 5. Cleanup and Standardization (Low Priority) +- Remove `console.log` from production code. +- Standardize API error responses. + +## Immediate Action Items +1. **Create a reproduction test case** for the current attendance flow to ensure no regressions during refactoring. +2. **Refactor one module** (e.g., Attendance) to use Drizzle ORM as a proof of concept for the migration. +3. **Extract types** from `UserManagement.tsx` to `@fitai/shared`. diff --git a/package-lock.json b/package-lock.json index 7615add..2ff2428 100644 --- a/package-lock.json +++ b/package-lock.json @@ -991,6 +991,7 @@ "integrity": "sha512-6m1I5RmHBGTnUGS113G04DMu3CpSdxCAU/UvtjNWL4Nuf3MW9tQhiJqRlHzChIkhy6kZSAQmc+I1bcGjE3yNKg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.46.3", "@typescript-eslint/types": "8.46.3", @@ -1196,6 +1197,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1628,6 +1630,7 @@ "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -2792,8 +2795,7 @@ "version": "0.27.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/semver": { "version": "7.7.3", @@ -3132,6 +3134,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/projectManagment.md b/projectManagment.md new file mode 100644 index 0000000..e69de29