VaultDrop — Application de Gestion de Fichiers V1
Vision
Application mobile tout-en-un permettant de centraliser, organiser et retrouver ses documents. Upload depuis l'appareil, scan caméra avec OCR, tagging et recherche rapide. Le back-end Go assure le traitement asynchrone (OCR, indexing) et la persistence. Le front React Native reste léger : il affiche, interagit et met en cache.
Scope V1
On livre un produit fonctionnel utilisable au quotidien, pas un framework. V1 = gestion de fichiers avec scan OCR intégré. Pas de mode collaboratif, pas de plugins, pas de partage avancé.
Non-Goals (V1)
- Mode collaboratif / multi-utilisateur
- Système de plugins
- Synchronisation offline complexe
- Plateforme de partage publique
Vue d'Ensemble Architecture
┌─────────────────────┐ ┌─────────────────────┐
│ React Native App │ ────> │ API Go Backend │
│ (Expo managed) │ HTTPS │ (REST) │
│ - Upload │ │ - Upload fichiers │
│ - Caméra / Scan │ │ - OCR async │
│ - Tags / Recherche│ │ - Index/search │
│ - Affichage │ │ - Persistance │
└─────────────────────┘ └─────────────────────┘
Le mobile ne contient pas de logique métier. Tout traitement lourd (OCR, extraction de texte, indexation) est géré côté back-end.
Fonctionnalités Attendues
Upload de fichiers
- Sélection depuis la galerie appareil
- Upload par drag-and-drop interne
- Support des formats : PDF, images (JPG, PNG)
- Feedback visuel pendant l'envoi (progress)
- Retry automatique en cas d'échec réseau
Scan Documents (Caméra)
- Prise de photo depuis l'app
- Recadrage et orientation automatique
- Envoi direct vers le back-end pour OCR
- Retour du texte extrait affiché à l'utilisateur
Tagging
- Ajout de tags manuels sur chaque fichier
- Suggestion de tags basée sur le contenu OCR
- Filtrage par tag dans la liste
Recherche
- Recherche full-text sur le contenu OCR
- Recherche par nom de fichier
- Filtres combinés (tag + texte)
Listing
- Liste des fichiers uploadés avec aperçu
- Tri par date, nom, tag
- Pagination côté serveur
Partage (Optionnel, Phase Later)
- Génération de lien temporaire
- Pas prioritaire en V1
Exigences UX
- UI claire et épurée, minimaliste
- Temps de réponse < 2s pour les actions principales
- Feedback immédiat sur toutes les interactions
- Pas d'écran de chargement > 3s sans spinner
- Mode offline minimal : liste des fichiers déjà chargée visible même sans réseau
Attentes API REST (Back-end Go)
Endpoints
| Méthode | Path | Description |
|---|---|---|
| GET | /api/v1/files | Liste des fichiers (pagination) |
| POST | /api/v1/files/upload | Upload d'un fichier |
| GET | /api/v1/files/:id | Détail d'un fichier |
| DELETE | /api/v1/files/:id | Suppression d'un fichier |
| GET | /api/v1/files/search?q= | Recherche full-text |
| POST | /api/v1/files/:id/tags | Ajout de tags |
| GET | /api/v1/files/:id/tags | Tags d'un fichier |
| POST | /api/v1/ocr/jobs | Soumettre un job OCR |
| GET | /api/v1/ocr/jobs/:id | Statut d'un job OCR |
| GET | /api/v1/health | Health check |
Format de réponse standard
{
"data": { ... },
"meta": {
"page": 1,
"total": 42
}
}
Erreurs
{
"error": {
"code": "FILE_TOO_LARGE",
"message": "Fichier dépasse la limite de 50 Mo"
}
}
Flux de Données
[Capture photo] ──> [Upload API] ──> [Back-end stocke]
│
v
[Job OCR créé]
│
v (async)
[Traitement OCR]
[Extraction texte]
[Indexation search]
│
v
[App affiche fichier] <──── [Polling statut] <── [Résultat prêt]
- L'utilisateur prend une photo ou sélectionne un fichier
- Le fichier est uploadé vers POST /api/v1/files/upload
- Le back-end crée un job OCR et retourne immédiatement un ID
- L'app poll GET /api/v1/ocr/jobs/:id ou utilise un webhook
- Une fois l'OCR terminé, le texte est indexé et le fichier apparaît avec son contenu searchable
Choix Techniques
Front-end (React Native)
- Expo managed workflow (développement rapide, build plus simple)
- TanStack Query (gestion serveur state, cache, refetch)
- React Navigation (navigation entre écrans)
- react-native-image-picker (sélection + caméra)
- MMKV (stockage clé-valeur pour cache local)
Back-end (Go)
- Framework HTTP : Gin ou Fiber (au choix implémenteur)
- Persistance : SQLite pour V1 (volumétrie faible attendue)
- OCR : Tesseract en ligne de commande (appel système)
- Search : SQLite FTS5 pour la recherche full-text
- Stockage fichiers : disque local avec chemin référencé en base
Structure de Dossiers Suggérée
Front-end (React Native / Expo)
mobile/
├── app/ # Expo Router ou navigation
│ ├── index.tsx # Ecran principal (liste)
│ ├── upload.tsx # Ecran upload
│ ├── scan.tsx # Ecran scan caméra
│ └── search.tsx # Ecran recherche
├── components/
│ ├── FileCard.tsx
│ ├── TagChip.tsx
│ └── UploadProgress.tsx
├── hooks/
│ ├── useFiles.ts # TanStack Query hooks
│ ├── useSearch.ts
│ └── useUpload.ts
├── api/
│ └── client.ts # Client API (axios ou fetch)
├── types/
│ └── index.ts # Types TypeScript
├── constants/
│ └── api.ts # URLs, clés API
└── package.json
Back-end (Go)
backend/
├── cmd/
│ └── server/
│ └── main.go # Point d'entrée
├── internal/
│ ├── handlers/ # Handlers HTTP
│ ├── models/ # Modèles de données
│ ├── repository/ # Accès données
│ ├── service/ # Logique métier
│ └── ocr/ # Module OCR
├── pkg/
│ └── api/
│ └── response.go # Helpers réponse
├── uploads/ # Fichiers stockés
├── go.mod
└── go.sum
Getting Started
Prérequis
- Node.js latest lts
- npm ou yarn
- Expo CLI (
npm install -g expo-cli) - Go latest lts
- Tesseract OCR installé (
apt install tesseract-ocrsur Debian/Ubuntu)
Installation (Front-end)
cd mobile
npm install
npx expo start
Installation (Back-end)
cd backend
go mod download
go run cmd/server/main.go
Build APK Android (Expo)
npx expo run:android --variant release
Variables d'Environnement
Front-end (.env)
API_BASE_URL=http://localhost:8080/api/v1
TESSERACT_LANG=fr+eng
Back-end (.env)
PORT=8080
UPLOAD_DIR=./uploads
MAX_FILE_SIZE_MB=50
OCR_LANG=fra+eng
Itérations Futures
V2 — Fiabilité et Performance
- Remplacement SQLite par PostgreSQL
- Upload chunked pour gros fichiers
- Compression d'images côté client
V3 — Organisation Avancée
- Dossiers virtuels / hiérarchie
- Tags suggérés par IA
- OCR multilingue amélioré
V4 — Collaboration
- Comptes utilisateurs
- Partage avec lien temporaire
- Rôle et permissions
V5 — Plateforme
- Système de plugins (event bus)
- API publique
- Extensions tierces
Statut du Projet
Phase : Conception et prototypage Backend Go : En cours de structuration Frontend React Native : À initier