Some checks failed
Build & Deploy / build-and-deploy (push) Failing after 8s
Includes React PWA frontend, WebSocket signaling server, shared types, K8s manifests, Gitea CI/CD workflow, nginx config, and Dockerfiles. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
125 lines
4.4 KiB
Markdown
125 lines
4.4 KiB
Markdown
# AnyDrop
|
|
|
|
> Partage de fichiers et de texte instantané, multi-OS, peer-to-peer, sans compte.
|
|
|
|
**Domaine de production :** `anydrop.arthurbarre.fr`
|
|
**Auteur :** Arthur Barré
|
|
**Status :** V1 — Web app (en cours)
|
|
|
|
---
|
|
|
|
## Vision produit
|
|
|
|
AnyDrop est un "AirDrop universel" : il permet de partager fichiers, photos et texte instantanément entre **tous** les appareils (iOS, Android, macOS, Windows, Linux), quel que soit leur système d'exploitation, sans compte obligatoire et sans installation forcée.
|
|
|
|
Deux modes de partage :
|
|
|
|
1. **Mode réseau local** — Deux appareils sur le même Wi-Fi se voient automatiquement (détection par IP publique partagée).
|
|
2. **Mode lien public** — L'utilisateur génère une URL courte `anydrop.arthurbarre.fr/x7k` + QR code, partageable à n'importe qui, n'importe où (transfert P2P à travers internet via STUN/TURN).
|
|
|
|
Dans les deux cas, le transfert est **pair-à-pair** (WebRTC DataChannel), **chiffré** (DTLS), et **ne transite pas par le serveur**.
|
|
|
|
---
|
|
|
|
## Architecture technique
|
|
|
|
### Stack V1
|
|
|
|
**Front web**
|
|
- React 18 + Vite + TypeScript
|
|
- TailwindCSS
|
|
- Zustand (state management)
|
|
- `simple-peer` (abstraction WebRTC)
|
|
- `qrcode.react` (génération QR code)
|
|
- PWA (installable sur mobile/desktop)
|
|
|
|
**Back signaling**
|
|
- Node.js + TypeScript
|
|
- `ws` (WebSocket)
|
|
- Rooms en mémoire (pas de DB en V1)
|
|
- Génération de codes courts (3-4 caractères, alphabet sans ambiguïté)
|
|
|
|
**Infra**
|
|
- Signaling : Railway / Fly.io
|
|
- Front : Vercel / Netlify
|
|
- STUN : `stun.l.google.com:19302` (gratuit)
|
|
- TURN : Open Relay (gratuit) → coturn auto-hébergé plus tard
|
|
|
|
### Pourquoi WebRTC ?
|
|
|
|
- Transferts **P2P** (rapides sur réseau local, 50-500 Mo/s)
|
|
- **Chiffrement natif obligatoire** (DTLS)
|
|
- Fonctionne dans tous les navigateurs modernes
|
|
- Pas de coût bande passante serveur pour les données
|
|
|
|
### Rôle du serveur de signaling
|
|
|
|
Le serveur **ne voit jamais les fichiers**. Il sert uniquement à :
|
|
1. Regrouper les pairs par "room" (IP publique ou code court)
|
|
2. Relayer les SDP offers/answers et ICE candidates entre les pairs
|
|
3. Notifier les connexions/déconnexions
|
|
|
|
Une fois la connexion WebRTC établie, le serveur est transparent.
|
|
|
|
---
|
|
|
|
## Structure du repo
|
|
|
|
```
|
|
anydrop/
|
|
├── CLAUDE.md # Ce fichier
|
|
├── docs/ # Documentation technique détaillée
|
|
│ ├── architecture.md
|
|
│ ├── webrtc-flow.md
|
|
│ ├── signaling-protocol.md
|
|
│ └── roadmap.md
|
|
├── web/ # React PWA (front utilisateur)
|
|
├── server/ # Node signaling WebSocket
|
|
├── shared/ # Types TypeScript partagés front/back
|
|
└── package.json # Monorepo (npm workspaces)
|
|
```
|
|
|
|
---
|
|
|
|
## Roadmap (résumé)
|
|
|
|
- **Phase 1 — Web PWA** *(en cours)* : détection LAN, lien public + QR, transferts fichiers/texte
|
|
- **Phase 2 — Extensions** : Chrome + Firefox (menu contextuel "Envoyer via AnyDrop")
|
|
- **Phase 3 — Desktop** : Tauri (macOS + Windows + Linux, une base de code)
|
|
- **Phase 4 — Mobile** : iOS + Android (React Native ou Flutter, Share Sheet natif)
|
|
- **Phase 5 — Avancé** : chiffrement applicatif additionnel, transferts de dossiers, historique
|
|
|
|
Détails dans `docs/roadmap.md`.
|
|
|
|
---
|
|
|
|
## Conventions
|
|
|
|
- **Langue du code** : anglais (variables, commentaires, commits)
|
|
- **Langue de la doc utilisateur** : français (site + UI)
|
|
- **Commits** : style conventional commits (`feat:`, `fix:`, `docs:`, `refactor:`…)
|
|
- **Pas de compte / pas de tracking** : valeur produit fondamentale, ne pas l'abandonner pour des "features"
|
|
- **Pas de stockage côté serveur** des contenus échangés (les rooms sont en RAM, volatiles)
|
|
|
|
---
|
|
|
|
## Commandes principales (à venir une fois scaffoldé)
|
|
|
|
```bash
|
|
npm install # installe le monorepo
|
|
npm run dev # démarre front + signaling en parallèle
|
|
npm run dev:web # uniquement le front (Vite)
|
|
npm run dev:server # uniquement le signaling
|
|
npm run build # build production
|
|
npm run typecheck # vérification TS globale
|
|
```
|
|
|
|
---
|
|
|
|
## Principes de développement
|
|
|
|
1. **Privacy by design** — Pas de logs de contenus, pas d'analytics intrusifs, codes de rooms éphémères.
|
|
2. **Zero-friction** — Ouvrir l'URL doit suffire. Pas de compte, pas d'email.
|
|
3. **Progressive enhancement** — Le web marche partout ; les apps natives ajoutent du confort, pas des features bloquantes.
|
|
4. **Un seul domaine, plusieurs clients** — Tous les clients (web, extensions, desktop, mobile) parlent au même signaling.
|