53 lines
1.7 KiB
Markdown
53 lines
1.7 KiB
Markdown
# VaultDrop
|
|
|
|
## Project Status
|
|
|
|
Project initialized — `webui/` (React Native) and `backend/` (Go) have scaffolding in place.
|
|
|
|
## Architecture
|
|
|
|
- **Backend**: Go, Gin HTTP framework, SQLite + FTS5, Tesseract OCR (system call)
|
|
- **Frontend**: React Native (Expo SDK 57), React Navigation, TanStack Query, react-native-image-picker
|
|
|
|
## Key Commands
|
|
|
|
```bash
|
|
# Backend
|
|
cd backend && go run cmd/server/main.go
|
|
|
|
# Frontend
|
|
cd webui && npx expo start
|
|
|
|
# Typecheck frontend
|
|
cd webui && npx tsc --noEmit
|
|
```
|
|
|
|
## Backend Structure
|
|
|
|
- Entry point: `backend/cmd/server/main.go`
|
|
- Internal packages: `handlers/`, `models/`, `repository/`, `service/`, `ocr/`
|
|
- Response helpers: `pkg/api/response.go`
|
|
- File uploads stored in `backend/uploads/`
|
|
- Standard JSON response envelope: `{ "data": ..., "meta": { "page": ..., "total": ... } }`
|
|
- Error format: `{ "error": { "code": "...", "message": "..." } }`
|
|
- OCR language: `fra+eng`
|
|
- Handlers are stub implementations (return not-implemented errors)
|
|
|
|
## Frontend Structure
|
|
|
|
- Entry point: `webui/App.tsx` (React Navigation + TanStack Query providers)
|
|
- Screens: `app/index.tsx` (home), `app/upload.tsx`, `app/scan.tsx`, `app/search.tsx`
|
|
- Components: `components/FileCard.tsx`, `TagChip.tsx`, `UploadProgress.tsx`
|
|
- Hooks: `hooks/useFiles.ts`, `hooks/useSearch.ts`, `hooks/useUpload.ts`
|
|
- API client: `api/client.ts`, types: `types/index.ts`, constants: `constants/api.ts`
|
|
- No business logic on the client — all heavy processing server-side
|
|
- API base URL configured via `EXPO_PUBLIC_API_BASE_URL` env var
|
|
|
|
## Non-Goals (V1)
|
|
|
|
Collaborative/multi-user, plugin system, complex offline sync, public sharing.
|
|
|
|
## References
|
|
|
|
- `README.md` — full spec, API endpoints, data flow, folder structure, iteration roadmap
|