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

4.4 KiB

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é)

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.