docn-ui

Comment j’ai transformé un problème récurrent de conception PDF en registre open source de composants et modèles pour les projets shadcn.

Documentation et catalogue de modèles docn-ui

Pourquoi docn-ui existe

Créer un beau PDF était une contrainte récurrente dans mon équipe. La tâche revenait souvent aux quelques développeurs les plus à l’aise avec le design, car assembler un document restait bien moins simple que construire une interface sobre avec des composants modernes.

J’ai conçu docn-ui seul pour réduire cet écart : une collection open source de composants et de modèles PDF destinée aux développeurs qui utilisent déjà shadcn. L’objectif était simple : combiner des briques distinctes et obtenir un résultat convaincant sans repenser chaque document depuis zéro.

Un registre plutôt qu’une nouvelle librairie

Le registre n’encapsule pas des composants de site web. Il distribue du code propre aux PDF, fondé sur @react-pdf/renderer, avec des formats validés, des polices locales et des adaptateurs de rendu distincts pour le navigateur et Node.

  1. Choisir un composant ou un modèle dans un catalogue construit à partir de vrais aperçus PDF.
  2. Installer son code et ses dépendances limitées avec le CLI officiel de shadcn.
  3. Composer des données validées localement, générer le PDF, puis inspecter ou télécharger les mêmes octets.
Catalogue docn-ui présentant des composants PDF réutilisables
La bêta expose 28 composants installables séparément, sans importer tout le catalogue.

Rendre l’outil compréhensible

La principale difficulté n’était pas de générer un PDF, mais de construire l’expérience développeur autour de l’outil. Son fonctionnement me paraissait naturel en tant que concepteur ; la documentation devait rendre l’installation, la composition, les contraintes physiques et la personnalisation évidentes dès la première visite.

Chaque page de composant relie donc un véritable aperçu PDF à son rôle, son API typée, son utilisation, ses limites, sa commande d’installation et son code source. La vérification couvre aussi la géométrie réelle des PDF, les parcours navigateur et des installations isolées dans des projets React/Vite et Node/TypeScript.

Documentation du composant QR Code de docn-ui avec aperçu PDF, utilisation et code source
La page réunit le rendu, les instructions et le code modifiable d’un même composant.

Mesurer l’usage sans profiler les visiteurs

Le site public combine deux niveaux d’analyse complémentaires. Vercel Web Analytics mesure anonymement les pages vues, les routes, les pays et les référents. PostHog enregistre seulement une liste limitée d’actions utiles — aperçu, téléchargement, copie et intention d’installation — en mode cookieless, sans autocapture, profil utilisateur ni replay de session.

Un tableau de bord privé, développé séparément avec Next.js et shadcn/ui, interroge les agrégats des deux fournisseurs côté serveur sans tenter de relier leurs visiteurs. Il permet aussi d’exporter un rapport PDF composé avec les propres briques de docn-ui.

Vue d’ensemble du tableau de bord analytique privé de docn-ui avec trafic, actions et répartition géographique
Le tableau de bord rapproche le trafic anonyme de Vercel et les actions produit agrégées de PostHog sans fusionner les identités. Les valeurs visibles illustrent l’interface.
Vue rapprochée des indicateurs, filtres et courbes du tableau de bord analytique de docn-ui
Les filtres et rapports restent privés ; le navigateur public ne reçoit ni clé de lecture ni événement brut.

Une bêta publique fonctionnelle

La bêta actuelle réunit 18 modèles répartis entre factures, reçus, CV, rapports, badges et cartes de visite. Le résultat dont je suis le plus fier est de pouvoir assembler ces compositions denses à partir de briques explicites et réutilisables, plutôt que de reconstruire chaque mise en page à la main.

La prochaine priorité est la clarté, pas le nombre de fonctionnalités : rendre la documentation plus facile à prendre en main et ajouter des composants lorsque des besoins réels le justifient. docn-ui m’a aussi appris à concevoir plus consciemment des outils pour d’autres développeurs, et pas seulement des applications pour leurs utilisateurs.