anydrop/CLAUDE.md
ordinarthur 9d6e4da4ae
Some checks failed
Build & Deploy / build-and-deploy (push) Failing after 8s
feat: initial commit with full deployment setup
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>
2026-04-14 10:30:45 +02:00

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.