Aller au contenu
Tous les projets
Étude de cas · 08

Dropwave

Déposez un fichier, recevez un lien privé à envoyer à qui vous voulez. Sans compte, sans application à installer.

Visiter DropwaveEn ligne · sans compte
Statut
En ligne
Contexte
Projet personnel
Mon rôle
Produit, design & développement
Catégorie
Partage de fichiers
Année
2026
dropwave.asrar.software
La page d'accueil de Dropwave en mode sombre : « Drop it here. Share it anywhere. », une ligne indiquant qu'il ne faut ni compte ni application, et une grande zone de dépôt pour des fichiers de 10 Mo maximum.

Partage de fichiers · Application web · 2026

Envoyez un fichier et partagez-le avec un lien privé, ou par e-mail directement depuis la page. Les liens peuvent expirer, les images, PDF et textes s'ouvrent dans le navigateur, et chaque fichier est vérifié avant que quiconque puisse le télécharger.

L'histoire

Comment je l'ai construit

Mon rôle
Produit, design & développement
Contexte
Projet personnel

Le problème

[01]

Envoyer un fichier à quelqu'un ne devrait demander ni compte, ni application, ni bataille avec la taille maximale des pièces jointes. Mais un formulaire d'envoi ouvert à tous, sans compte, attire les abus : des fichiers trop lourds, des programmes renommés en PDF, et un bouton d'envoi par e-mail que les spammeurs adoreraient utiliser.

Ce que j'ai construit

[02]

Dropwave réduit le travail du visiteur à un geste : déposer un fichier, recevoir un lien. Derrière, le navigateur envoie le fichier directement dans un bucket S3 privé, l'API NestJS vérifie sa taille réelle, et une fonction Lambda lit les premiers octets de chaque fichier pour s'assurer qu'il est bien ce qu'il prétend être avant que le lien fonctionne. Les liens peuvent expirer après une heure, un jour, une semaine, 30 jours ou à la date de votre choix, et une tâche planifiée supprime les fichiers expirés.

Choix clés

[03]
  1. Les fichiers ne passent jamais par l'API

    Le navigateur envoie le fichier directement dans S3 avec une URL présignée valable une minute. Une URL présignée ne peut pas limiter la taille du fichier : à la confirmation de l'envoi, l'API compare donc la taille réelle dans S3 avec celle annoncée, et supprime le fichier si elles diffèrent.

  2. Une vérification impossible à tromper

    Chaque nouveau fichier dans S3 déclenche une fonction Lambda qui lit ses 4 premiers Ko, détecte son vrai format et rejette les programmes et les fichiers qui se font passer pour un autre type. Elle renvoie son verdict par une requête signée en HMAC, refusée au-delà de cinq minutes, et appliquer deux fois le même verdict ne change rien, car S3 peut envoyer un même événement plusieurs fois.

  3. Un partage par e-mail inutilisable pour le spam

    Cinq adresses par envoi et cinq envois par tranche de dix minutes, limités sur la vraie IP du visiteur que transmet Cloudflare. Le lien de chaque e-mail vient de la configuration du serveur, jamais de la requête : personne ne peut glisser son propre lien dans un e-mail envoyé depuis le domaine.

Le résultat

  • 3Services AWS : S3, Lambda et SES
  • 10 MoPar fichier, vérifiés à nouveau une fois stockés
  • 30 joursExpiration maximale d'un lien, s'il expire
Écrans

Le vrai produit

Captures du produit en ligne, réalisées avec des données de démonstration. Ouvrez-les en plein écran.

  • [01]Plusieurs envois à la fois, chacun avec son propre lien privé.

  • [02]Ce que voit le destinataire : le fichier, son expiration et un bouton de téléchargement.

  • [03]Images, PDF et textes s'ouvrent dans le navigateur avant le téléchargement.

  • [04]Le partage par e-mail, jusqu'à cinq personnes à la fois.

  • [05]Chaque fichier est vérifié avant que quiconque puisse le télécharger.

  • [06]Un lien expiré cesse aussitôt de fonctionner.

  • [07]Thèmes clair et sombre.

Fonctionnalités

Ce qu'il fait

Je sais construire et faire tourner un back-end sur AWS de bout en bout : une API NestJS avec S3, Lambda et SES, déployée sur EC2 par la CI, et pensée contre les abus qu'attire un formulaire d'envoi public.

[01]

Glisser, coller ou parcourir

Glissez vos fichiers, collez-les avec ⌘V ou choisissez-les sur votre ordinateur : plusieurs à la fois, jusqu'à 10 Mo chacun, avec la progression en direct.

[02]

Un lien privé par fichier

Chaque fichier a son propre lien, prêt à être copié, ouvert ou envoyé par e-mail dès la fin de l'envoi. Les fichiers sont rangés dans un bucket privé que seul le lien ouvre.

[03]

Des liens qui expirent

Jamais par défaut, ou après 1 heure, 1 jour, 7 jours, 30 jours ou à la date et l'heure de votre choix. Un lien expiré cesse aussitôt de fonctionner, et le fichier est supprimé dans les dix minutes.

[04]

Un aperçu avant de télécharger

Les images, les PDF et les fichiers texte s'ouvrent directement dans le navigateur, pour vérifier un fichier avant de l'enregistrer.

[05]

L'envoyer par e-mail

Jusqu'à cinq adresses à la fois. Chaque personne reçoit son propre e-mail avec le nom, la taille et l'expiration du fichier, sans voir les autres destinataires.

[06]

Vérifié avant d'être partagé

Chaque fichier est contrôlé avant de pouvoir être téléchargé : sa taille réelle, son vrai format, et aucun programme. La page de partage l'indique pendant la vérification.

Construit avec

La stack

Une API NestJS et un front-end Next.js dans un même Turborepo, sur AWS : S3 pour les fichiers, Lambda pour les vérifications et SES pour les e-mails, sur EC2 derrière Cloudflare et Traefik, déployé par GitHub Actions.

  • NestJS
  • AWS
  • Next.js
  • TypeScript
  • PostgreSQL
  • Prisma
  • Docker
  • Tailwind CSS

Vous recrutez ? Parlons-en.

Parlez-moi du poste et de l'équipe. Je réponds sous un jour ouvré.