From b02a850ae0d51cbbbcb1fdaab100318ee7d41c67 Mon Sep 17 00:00:00 2001 From: Florian BRUNIAUX Date: Fri, 15 May 2026 12:01:20 +0200 Subject: [PATCH 1/8] =?UTF-8?q?feat(landing):=20apply=20Mobbin=20UX=20patt?= =?UTF-8?q?erns=20=E2=80=94=20hero=20CTAs,=20install=20$-prefix,=20countup?= =?UTF-8?q?=20stats,=20changelog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Hero: replace Star CTA with Docs ghost CTA (/guide/) - Hero: update stars fallback 31k → 47k - Hero: add countUp animation (IntersectionObserver + rAF) on 3 stat values - Install: add $ prompt prefix on code blocks via CSS ::before - Add /changelog page with type-coloured badges (accent/cyan/violet) and RSS feed button - Add doc/research/mobbin-ui-patterns.md (2 sessions, 12 actionable patterns) Co-Authored-By: Claude Sonnet 4.6 --- doc/research/mobbin-ui-patterns.md | 270 +++++++++++++++++++++++++++++ src/components/landing/Hero.astro | 56 +++++- src/pages/changelog/index.astro | 182 +++++++++++++++++++ src/styles/landing.css | 5 + 4 files changed, 506 insertions(+), 7 deletions(-) create mode 100644 doc/research/mobbin-ui-patterns.md create mode 100644 src/pages/changelog/index.astro diff --git a/doc/research/mobbin-ui-patterns.md b/doc/research/mobbin-ui-patterns.md new file mode 100644 index 0000000..f9ce480 --- /dev/null +++ b/doc/research/mobbin-ui-patterns.md @@ -0,0 +1,270 @@ +# Recherche Mobbin — Patterns UI/UX pour RTK landing + +**Date** : 2026-05-14 +**Périmètre** : Landing rtk-ai.app (/, section Hero, Install, Demo) +**Source** : Mobbin via MCP `mcp__mobbin__search_screens` (mode fast, platform web) +**Scope OUT** : Social proof, comparisons, docs UX, changelog, sub-product Vox/ICM (voir sessions 2-3) + +## Limites Mobbin observées + +Mobbin couvre bien les **SaaS developer tools web** (Resend, Neon, Modal, AWS) mais pas les landing pages CLI pur (Bun, Warp, Homebrew). Les patterns de terminal asciinema n'apparaissent pas. Les résultats sont utiles mais restent dans le registre "API platform" plutôt que "CLI proxy". Pour chaque thème, 3-5 screens sur 8 étaient pertinents. + +--- + +## Thème 1 — Hero CLI / dev tool landing + +**Queries** : `"developer tool landing hero CLI install"` — 5 résultats utiles / 8 + +### Top 3 screens (design engineer pass) + +**Resend** — [mobbin.com/screens/72bd36ac...](https://mobbin.com/screens/72bd36ac-0d76-4f93-b5a2-1a73afb92d92) +Fond noir (#0a0a0a), typographie serif display très grande ("Email for developers"), texte gauche-aligné, visuel 3D droit (cube géométrique animé). Nav plate avec 7 items + 2 CTAs à droite (filled "Get Started" + ghost "Documentation"). Décision UX clé : le lien vers la doc est en ghost CTA au même niveau que le CTA commercial, ce qui réduit la friction pour les devs qui veulent explorer avant d'acheter. + +**AutoSend** — [mobbin.com/screens/1f4da970...](https://mobbin.com/screens/1f4da970-2f42-4d98-95fd-684378cfc617) +Layout left-text / right-illustration, headline "Email for Developers, Marketers, & AI Agents", sous-headline 1 ligne, 2 CTAs (SIGN UP rempli + TALK TO FOUNDERS ghost). En dessous du fold : compteur live temps-réel ("795,110 emails sent in the last 7 days") + logo strip clients. La métrique live est un signal de preuve très dense en un seul chiffre — évite la liste de features. + +**Vapi** — [mobbin.com/screens/c960e4d4...](https://mobbin.com/screens/c960e4d4-12cc-4211-ac97-83136a5c152f) +"Voice AI agents for developers", headline centré, fond noir, animation equalizer sonore en arrière-plan (représente visuellement ce que fait le produit). Bouton central "TALK TO VAPI" = CTA qui EST la démo. Logo strip clients sous le fold. Le background animé remplace le screenshot produit — zéro bruit, tout dit en 4 mots + animation. + +### Patterns actionnables pour RTK + +1. **Ghost CTA "Docs" au même niveau que le CTA commercial** + Le hero RTK a actuellement le bouton principal (install) sans lien docs équivalent. Ajouter un ghost CTA "Read the docs" ou "See the guide" aligné avec le CTA principal réduit la friction des devs qui préfèrent lire avant d'agir. + Référence : `src/pages/index.astro` section Hero (CTA block) + Effort : XS + +2. **Métrique live comme seul proof-point au-dessus de la section preuve** + Au lieu d'attendre la section Proof, mettre une métrique chiffrée sous le hero immédiat : "X tokens saved today" ou "X% reduction mesurée sur cargo test". Un seul chiffre, en variant (--text-muted), en dessous des CTAs. + Référence : `src/pages/index.astro` juste sous le hero, avant la section Problem + Effort : S (nécessite décision sur quelle métrique afficher) + +3. **Animation de fond qui REPRÉSENTE la valeur (pas juste décore)** + RTK compresse des outputs. L'animation de fond pourrait montrer du texte/tokens qui "disparaissent" ou "se condensent" — plutôt qu'une illustration décorative. Coût : CSS ou canvas léger. + Référence : `src/pages/index.astro` section Hero, `src/styles/landing.css` + Effort : M (conception + implémentation CSS/canvas) + +### Patterns à éviter + +- **Illustration 3D générique côté droit** : les cubes et sphères 3D (Resend, Google AI Studio) sont indifférenciés sur le segment dev tools en 2026. Si RTK n'a pas d'asset visuel fort, mieux vaut du texte/terminal pur qu'un asset 3D banal. +- **Headline "for developers" générique** : "Email for developers", "Voice AI for developers" — le segment dev tools est saturé de ce pattern. RTK doit ancrer immédiatement sur la valeur mesurée : -60-90% tokens, pas "for developers". + +### Questions ouvertes +- La métrique "tokens saved" est-elle mesurable en temps réel ou seulement comme benchmark ? Si pas de données live, quelle métrique fixe utiliser (nb downloads, nb cmds exécutées avec rtk gain)? + +--- + +## Thème 2 — Install / copy-paste blocks + +**Queries** : `"install command code block copy button developer"` — 5 résultats utiles / 8 + +### Top 3 screens (design engineer pass) + +**Neon** — [mobbin.com/screens/94fb6fc0...](https://mobbin.com/screens/94fb6fc0-0fb0-4358-b6da-534a1f5addb9) +Quickstart multi-étapes dans un panel modal. Étape "Start your app" montre 4 tabs (npm / yarn / bun / **pnpm** actif + soulignement) avec le code dans le bloc en dessous et une icône copy à droite de la commande. Fond de bloc : légèrement grisé (#f5f5f5). La tab active est soulignée, pas en filled-pill. Décision UX clé : les package manager tabs sont un composant discret (juste des textes + underline), pas des boutons — réduction maximale du bruit visuel autour de la commande. + +**Modal** — [mobbin.com/screens/1052aa52...](https://mobbin.com/screens/1052aa52-940d-4600-b211-d2bac1cdf7fa) +Onboarding "Create your first app" avec accordion numéroté (1, 2). Étape 1 dépliée montre un bloc terminal dark (`#1a1a1a`) avec 2 commandes préfixées `$` en vert clair + fond sombre. La commande suit naturellement la prose d'explication. Décision UX : numéroter les étapes + accordions déroule la complexité sans l'afficher d'un coup — anti-anxiété pour un premier contact. + +**Apollo** — [mobbin.com/screens/50326c28...](https://mobbin.com/screens/50326c28-ee66-41be-baf7-69b3417f38eb) +"Add the Apollo code snippet" : grand bloc code fond blanc + bordure légère, bouton **Copy** texte simple en bas à droite du bloc. Section "How to install?" en accordéon juste dessous avec 5 étapes numérotées en prose. Le Copy button est placé DANS le bloc, pas flottant — il appartient au bloc visuellement. + +### Patterns actionnables pour RTK + +1. **Package manager tabs (brew / cargo / npm) avec underline actif, pas boutons** + RTK a 3 méthodes d'install. Le pattern Neon (tabs texte + underline actif) est plus élégant que des pills-buttons. Le bloc de commande change selon la tab active (JS simple, pas de lib). Copy icon à droite de chaque commande. + Référence : `src/pages/index.astro` section Install, `src/styles/landing.css` + Effort : S + +2. **Bloc terminal dark avec préfixe `$` en couleur accent** + Le fond du bloc install doit être sombre (`var(--bg-card)` minimum, idéalement plus sombre type `#0a0f1e`) avec le `$` en `var(--accent)` (#00e599) et la commande en `var(--text)`. Distingue clairement ce qui est à taper de ce qui est output. + Référence : `src/pages/index.astro` section Install, `src/styles/global.css` tokens déjà en place + Effort : XS + +3. **Copy button natif dans le bloc (pas flottant)** + Positionner l'icône copy comme élément du bloc (padding-right du bloc), pas en position:absolute flottant. Sur hover du bloc, copy apparaît. Au click : icône switch vers ✓ pendant 1.5s, puis retour. Pas de toast "Copied!" — le changement d'icône suffit. + Référence : `src/pages/index.astro`, `src/styles/landing.css` + Effort : S + +### Patterns à éviter + +- **Bloc code trop large avec du code applicatif** (Apollo) : RTK affiche 1 commande, pas 40 lignes de JavaScript. Ne pas grossir le bloc pour "faire professionnel" — la concision EST le produit. +- **Tabs en pills/filled-buttons** : crée du bruit autour de la commande principale. L'eye-tracking va sur les boutons, pas sur la commande. + +### Questions ouvertes +- Afficher 1 seule tab par défaut (brew sur macOS) avec détection UA ? Ou toujours montrer les 3 tabs sans détection ? +- Le hook CI (GitHub Actions) mérite-t-il sa propre tab ou une section séparée dans la doc ? + +--- + +## Thème 3 — Terminal demos web + +**Queries** : `"terminal animation demo developer tool landing"` — 4 résultats utiles / 8 +**Limites observées** : Aucun résultat montrant un vrai terminal asciinema ou CLI animated capture. Mobbin couvre des demos interactifs produit, pas des replays de sessions shell. + +### Top 3 screens (design engineer pass) + +**AWS Lambda** — [mobbin.com/screens/ccc2e1c7...](https://mobbin.com/screens/ccc2e1c7-2a2c-430d-8a72-d9085e2f1646) +Section "How it works" avec tabs runtime (.NET / Java / **Node.js** actif / Python / Ruby / Custom). Bloc code statique en dessous avec numéros de ligne. Bouton "Run" en accent orange + "Next: Lambda responds to events" enchaîné. Décision UX : la démo n'est pas dans le hero — elle est dans une section dédiée plus bas. Le hero vend, la section "How it works" prouve. Séparation claire des rôles. + +**ElevenLabs** — [mobbin.com/screens/1a733d7d...](https://mobbin.com/screens/1a733d7d-6f0c-4671-9570-90220cff2c82) +Produit-dans-le-hero : interface voix interactive directement dans la landing (text input + liste de voix + bouton Play). Le produit EST la démo, instantanément. Tabs produits en haut (ElevenCreative / ElevenAgents) + context "Text to Speech" en haut à droite. Décision UX audacieuse : zéro friction pour tester, mais nécessite un produit qui fonctionne côté serveur live. + +**Codecademy** — [mobbin.com/screens/01dbfb5f...](https://mobbin.com/screens/01dbfb5f-536a-4770-b9d7-2f752d10913b) +Split-pane éditeur : code à gauche (dark, syntaxe colorée, tabs fichiers) + preview navigateur à droite. Bouton "Save + Run" en accent jaune, centré en bas. Pattern classique learn-by-doing : le code ET son résultat visible simultanément. Adapté à l'apprentissage, pas directement à une landing CLI. + +### Patterns actionnables pour RTK + +1. **Section "How it works" avec mode tabs (avant/après ou par commande type)** + Plutôt qu'une animation terminal full-auto, créer une section "Before / After RTK" avec 2 panels statiques : gauche = `cargo test` raw output (200 lignes), droite = `rtk cargo test` output condensé (5 lignes). Tabs par type de commande (git / cargo / gh). Click sur un tab remplace les deux panels. Zéro animation requise, impact maximal sur la valeur perçue. + Référence : `src/pages/index.astro` section Demo, `src/styles/landing.css` + Effort : S/M + +2. **Séparation hero (vend) / section demo (prouve)** + AWS Lambda le fait bien : le hero est une accroche value prop, la démo est 2 sections plus bas. RTK a tendance à vouloir tout montrer above the fold. Laisser la section Demo en dessous de la section Problem (pas dans le hero) allège le hero et donne à la démo l'espace pour respirer. + Référence : `src/pages/index.astro` (ordre des sections) + Effort : XS (réorganisation, pas code) + +3. **Animation CSS lightweight "token counter" plutôt que terminal replay** + Un compteur de tokens qui diminue (ex: 15,000 → 1,200) avec une transition CSS `counter()` ou `countUp.js` est plus léger, plus lisible, et plus percutant qu'un replay de session shell. L'animation dure 2s, se rejoue au scroll-into-view. Poids < 2KB. + Référence : `src/pages/index.astro` section Demo ou Hero, `src/styles/landing.css` + Effort : S + +### Patterns à éviter + +- **Produit-dans-le-hero style ElevenLabs** : nécessite un backend live capable d'exécuter RTK. Risque de latence, de coût serveur, et de fallback horrible si ça freeze. Pour une CLI tool, le risque dépasse le bénéfice. +- **Terminal replay GIF autoplay** : les GIFs >200KB ralentissent LCP (Core Web Vitals). Si on utilise un replay, c'est une vidéo `