This commit is contained in:
oneao committed 2026-06-24 14:07:17 +08:00
1 parent 056cd4970f
commit 513a991b57
3 files changed
+1328 -2279

No files matched your search

+38 -38
View File
@@ -32,7 +32,7 @@ Allapp main shell
│ ├── Add record │ ├── Add record
│ └── Analysis │ └── Analysis
└── Clothes matching └── Clothes matching
└── Planned/listed, route not implemented yet └── Configured in pages.ts, route not implemented yet
``` ```
Important naming note: Important naming note:
@@ -45,8 +45,8 @@ Important naming note:
Tech stack: Tech stack:
- Go - Go 1.25
- Fiber v3 - Fiber v3.1
- pgx PostgreSQL client - pgx PostgreSQL client
- JWT - JWT
- Viper config - Viper config
@@ -123,8 +123,8 @@ Validation notes:
Tech stack: Tech stack:
- Expo 55 - Expo 56
- React Native 0.83 - React Native 0.85
- React 19 - React 19
- Expo Router - Expo Router
- Zustand - Zustand
@@ -189,7 +189,7 @@ Startup flow:
├── no local token -> /auth/login ├── no local token -> /auth/login
├── token exists but user check fails -> /auth/login ├── token exists but user check fails -> /auth/login
├── token exists but no family -> /family/entry ├── token exists but no family -> /family/entry
└── token exists and family exists -> /(tabs)/home └── token exists and family exists -> /home
``` ```
## Frontend Route Structure ## Frontend Route Structure
@@ -201,23 +201,25 @@ src/app
├── _layout.tsx ├── _layout.tsx
├── index.tsx ├── index.tsx
├── +not-found.tsx ├── +not-found.tsx
├── auth ├── (main)/
│ └── login.tsx │ ├── (tabs)/
├── (tabs) │ │ ├── _layout.tsx
│ ├── _layout.tsx │ │ ├── home/index.tsx
│ ├── home/index.tsx │ │ ├── chat/index.tsx
│ ├── chat/index.tsx │ │ └── my/index.tsx
│ ├── my/index.tsx │ ├── activities/
│ └── star/index.tsx │ │ └── index.tsx
├── tools │ ├── auth/
│ └── index.tsx │ │ └── login.tsx
├── family │ ├── family/
│ ├── entry.tsx │ │ ├── entry.tsx
│ ├── settings.tsx │ │ ├── settings.tsx
│ ├── user.tsx │ │ ├── user.tsx
│ └── member/[id].tsx │ │ └── member/[id].tsx
└── finance │ └── tools/
├── (tabs) │ └── index.tsx
└── finance/
├── (tabs)/
│ ├── _layout.tsx │ ├── _layout.tsx
│ ├── home/index.tsx │ ├── home/index.tsx
│ └── analysis/index.tsx │ └── analysis/index.tsx
@@ -233,7 +235,7 @@ Effective routes:
/home main home /home main home
/chat chat/image picker demo /chat chat/image picker demo
/my profile tab /my profile tab
/star placeholder page, not currently in tab config /activities family activity feed
/tools app/module list /tools app/module list
/family/entry create or join family /family/entry create or join family
/family/settings family settings /family/settings family settings
@@ -245,7 +247,7 @@ Effective routes:
/finance/sub test page /finance/sub test page
``` ```
Main tab config in `src/app/(tabs)/_layout.tsx`: Main tab config in `src/app/(main)/(tabs)/_layout.tsx`:
```text ```text
/home 首页 /home 首页
@@ -266,15 +268,14 @@ Finance module tab config in `src/app/finance/(tabs)/_layout.tsx`:
Layout behavior: Layout behavior:
- Root `_layout.tsx` renders a global Stack with no headers. - Root `_layout.tsx` renders a global Stack with no headers.
- `(tabs)/_layout.tsx` uses `AppLayout`, which renders `Slot`, top `Navbar`, and bottom `Tabbar`. - `(main)/(tabs)/_layout.tsx` uses `AppLayout`, which renders `Slot`, top `Navbar`, and bottom `Tabbar`.
- `finance/(tabs)/_layout.tsx` uses `ModuleLayout`, a module-level shell with its own top bar and tabbar. - `finance/(tabs)/_layout.tsx` uses `ModuleLayout`, a module-level shell with its own top bar and tabbar.
- `ModuleLayout` close action returns to `/(tabs)/home`. - `ModuleLayout` close action returns to `/(main)/(tabs)/home`.
Current route mismatches: Current route mismatches:
- Main tab points to `/space`, but no `/space` file exists. - Main tab points to `/space`, but no `/space` file exists.
- `src/app/(tabs)/star/index.tsx` exists but is not in the tab config. - `/tools` is inside `(main)` group, wrapped by root layout only.
- `/tools` is outside `(tabs)`, so it is not wrapped by `AppLayout`; decide whether this is intentional.
- `/finance/add` is outside `finance/(tabs)`, but the finance tabbar points to it. This can be intentional for a modal/subpage style add screen. - `/finance/add` is outside `finance/(tabs)`, but the finance tabbar points to it. This can be intentional for a modal/subpage style add screen.
## Feature Status ## Feature Status
@@ -292,12 +293,14 @@ Implemented or mostly implemented:
- Avatar upload to S3/RustFS - Avatar upload to S3/RustFS
- QQ/WeChat account binding - QQ/WeChat account binding
- App/module list page - App/module list page
- Family activity feed (`/activities`)
Partially implemented: Partially implemented:
- Finance module shell - Finance module shell
- Finance category loading - Finance category loading
- Finance add-record form UI - Finance add-record form UI (save not implemented)
- Finance record list on `/finance/home` (placeholder)
- Finance analysis placeholder/demo page - Finance analysis placeholder/demo page
Not yet complete: Not yet complete:
@@ -305,7 +308,7 @@ Not yet complete:
- Saving a finance record from `/finance/add` - Saving a finance record from `/finance/add`
- Finance record list on `/finance/home` - Finance record list on `/finance/home`
- Finance analysis real data - Finance analysis real data
- Clothes matching app route - Clothes matching app route (`/clothes/home` configured but route not implemented)
- `/space` main-tab page - `/space` main-tab page
## Database: allapp ## Database: allapp
@@ -412,16 +415,12 @@ Those are not the right runtime for WSL. Prefer WSL `fnm`.
Frontend: Frontend:
- `pnpm exec tsc --noEmit` currently fails. - `pnpm exec tsc --noEmit` may have type errors.
- `tsconfig.json` includes `**/*.ts` and `**/*.tsx`, pulling in `example`. - Generated iconfont components may have `react-native-svg` prop type incompatibilities.
- `tsconfig.json` has a suspicious extra include entry: `src/app/auth/login_2`.
- Generated iconfont components have `react-native-svg` prop type incompatibilities.
- `src/app/finance/(tabs)/analysis/index.tsx` has `Surface variant="2"` type mismatch.
Backend: Backend:
- `go` was not available in the earlier command environment, so `go test ./...` could not be rerun there. - Go 1.25 with Fiber v3.1 should compile without issues.
- Prior context noted a possible unique ID package compile issue around `fmt.Println(message)` vs `fmt.Println(message...)`.
## Important Current Risks ## Important Current Risks
@@ -430,6 +429,7 @@ Backend:
- Frontend business logic often trusts local/user-provided family and user IDs. - Frontend business logic often trusts local/user-provided family and user IDs.
- Main tab route `/space` is missing. - Main tab route `/space` is missing.
- Some pages are placeholders or demos. - Some pages are placeholders or demos.
- Database credentials are exposed in `db.local.yml` (should not be committed to version control).
## Development Conventions ## Development Conventions
+31 -34
View File
@@ -14,54 +14,51 @@
}, },
"dependencies": { "dependencies": {
"@alova/adapter-axios": "^2.0.18", "@alova/adapter-axios": "^2.0.18",
"@expo/vector-icons": "^15.1.1",
"@gorhom/bottom-sheet": "^5.2.9", "@gorhom/bottom-sheet": "^5.2.9",
"@legendapp/list": "^2.0.19", "@legendapp/list": "^2.0.19",
"@react-native-async-storage/async-storage": "^2.2.0", "@react-native-async-storage/async-storage": "^2.2.0",
"@react-navigation/bottom-tabs": "^7.15.5",
"@react-navigation/elements": "^2.9.10",
"@react-navigation/native": "^7.1.33",
"@yz1311/react-native-wheel-picker": "^0.4.5",
"alova": "^3.5.1", "alova": "^3.5.1",
"axios": "^1.15.0", "axios": "^1.15.0",
"dayjs": "^1.11.20", "dayjs": "^1.11.20",
"expo": "~55.0.15", "expo": "~56.0.12",
"expo-blur": "~55.0.14", "expo-blur": "~56.0.3",
"expo-build-properties": "~55.0.13", "expo-build-properties": "~56.0.19",
"expo-clipboard": "~55.0.13", "expo-clipboard": "~56.0.4",
"expo-constants": "~55.0.14", "expo-constants": "~56.0.18",
"expo-device": "~55.0.15", "expo-device": "~56.0.4",
"expo-document-picker": "~55.0.13", "expo-document-picker": "~56.0.4",
"expo-font": "~55.0.6", "expo-font": "~56.0.7",
"expo-glass-effect": "~55.0.10", "expo-glass-effect": "~56.0.4",
"expo-image": "~55.0.8", "expo-image": "~56.0.11",
"expo-linear-gradient": "~55.0.13", "expo-linear-gradient": "~56.0.4",
"expo-linking": "~55.0.13", "expo-linking": "~56.0.14",
"expo-qq": "^0.1.8", "expo-qq": "^0.1.8",
"expo-router": "~55.0.12", "expo-router": "~56.2.11",
"expo-splash-screen": "~55.0.18", "expo-splash-screen": "~56.0.10",
"expo-status-bar": "~55.0.5", "expo-status-bar": "~56.0.4",
"expo-symbols": "~55.0.7", "expo-symbols": "~56.0.6",
"expo-system-ui": "~55.0.15", "expo-system-ui": "~56.0.5",
"expo-web-browser": "~55.0.14", "expo-web-browser": "~56.0.5",
"expo-wechat": "^0.2.6", "expo-wechat": "^0.2.6",
"heroui-native": "^1.0.1", "heroui-native": "^1.0.1",
"lucide-react-native": "^1.8.0", "lucide-react-native": "^1.8.0",
"react": "19.2.0", "react": "19.2.3",
"react-dom": "19.2.0", "react-dom": "19.2.3",
"react-native": "0.83.4", "react-native": "0.85.3",
"react-native-dates-picker": "^0.2.4", "react-native-dates-picker": "^0.2.4",
"react-native-gesture-handler": "~2.30.0", "react-native-gesture-handler": "~2.31.2",
"react-native-image-crop-picker": "^0.51.1", "react-native-image-crop-picker": "^0.51.1",
"react-native-keyboard-controller": "1.20.7", "react-native-keyboard-controller": "1.21.6",
"react-native-reanimated": "4.2.1", "react-native-reanimated": "4.3.1",
"react-native-safe-area-context": "~5.6.2", "react-native-safe-area-context": "~5.7.0",
"react-native-screens": "~4.23.0", "react-native-screens": "~4.25.2",
"react-native-shadow-2": "^7.1.2", "react-native-shadow-2": "^7.1.2",
"react-native-sortables": "^1.9.4", "react-native-sortables": "^1.9.4",
"react-native-svg": "15.15.3", "react-native-svg": "15.15.4",
"react-native-ui-datepicker": "^3.1.3", "react-native-ui-datepicker": "^3.1.3",
"react-native-web": "~0.21.0", "react-native-web": "~0.21.0",
"react-native-worklets": "0.7.2", "react-native-worklets": "0.8.3",
"sonner-native": "^0.24.0", "sonner-native": "^0.24.0",
"tailwind-merge": "^3.5.0", "tailwind-merge": "^3.5.0",
"tailwind-variants": "^3.2.2", "tailwind-variants": "^3.2.2",
@@ -71,10 +68,10 @@
}, },
"devDependencies": { "devDependencies": {
"@types/react": "~19.2.2", "@types/react": "~19.2.2",
"babel-preset-expo": "^55.0.16", "babel-preset-expo": "^56.0.15",
"oxfmt": "^0.44.0", "oxfmt": "^0.44.0",
"oxlint": "^1.59.0", "oxlint": "^1.59.0",
"react-native-iconfont-cli": "^2.2.4", "react-native-iconfont-cli": "^2.2.4",
"typescript": "~5.9.2" "typescript": "~6.0.3"
} }
} }
+1259 -2207
View File
File diff suppressed because it is too large. Load diff