2026-09-03 20:57:27 +02:00
2026-09-03 20:57:27 +02:00
2026-08-29 09:31:53 +02:00
2026-07-12 23:49:25 +02:00
2026-07-12 23:49:25 +02:00
2026-07-11 20:12:00 +02:00
2026-07-28 18:12:56 +02:00
2026-07-28 09:37:05 +02:00

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]
  1. L'utilisateur prend une photo ou sélectionne un fichier
  2. Le fichier est uploadé vers POST /api/v1/files/upload
  3. Le back-end crée un job OCR et retourne immédiatement un ID
  4. L'app poll GET /api/v1/ocr/jobs/:id ou utilise un webhook
  5. 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-ocr sur 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

S
Description
No description provided
Readme AGPL-3.0
1.8 MiB
Languages
Kotlin 73.6%
Go 26.2%
Dockerfile 0.2%