Improve persona page with browser-like screenshots and background color
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
nemunaire 2026-06-11 22:53:12 +09:00
commit 24eb85edc1
13 changed files with 143 additions and 2 deletions

View file

@ -24,6 +24,7 @@ An expired domain, a broken delegation, a forgotten subdomain still pointing at
title="See your entire domain portfolio in one place." title="See your entire domain portfolio in one place."
image="/img/screenshots/domains-list.webp" image="/img/screenshots/domains-list.webp"
alt="List of domains from several providers, grouped by need" alt="List of domains from several providers, grouped by need"
url="app.happydomain.org/domains"
>}} >}}
happy<span class="fw-bold">Domain</span> connects to more than 25 hosting providers worldwide: registrars, cloud DNS, CDNs and your on-premise servers. happy<span class="fw-bold">Domain</span> connects to more than 25 hosting providers worldwide: registrars, cloud DNS, CDNs and your on-premise servers.
@ -34,6 +35,7 @@ Import a provider in one click and get a single, always up-to-date inventory of
title="Catch incidents before your users do." title="Catch incidents before your users do."
image="/img/screenshots/checks-dashboard.webp" image="/img/screenshots/checks-dashboard.webp"
alt="Monitoring dashboard showing the status of every check on a domain" alt="Monitoring dashboard showing the status of every check on a domain"
url="app.happydomain.org/domains/example.com/checks"
flip="true" flip="true"
bg="green" bg="green"
>}} >}}
@ -46,6 +48,7 @@ Your teams are notified the moment something changes state. Silent failures beco
title="Review every change before it reaches production." title="Review every change before it reaches production."
image="/img/screenshots/zone-diff.webp" image="/img/screenshots/zone-diff.webp"
alt="Review and confirm the changes that will be applied" alt="Review and confirm the changes that will be applied"
url="app.happydomain.org/domains/example.com/diff"
>}} >}}
No change is applied blindly: happy<span class="fw-bold">Domain</span> shows the exact difference between the current zone and the new one, and asks for confirmation. No change is applied blindly: happy<span class="fw-bold">Domain</span> shows the exact difference between the current zone and the new one, and asks for confirmation.
@ -56,6 +59,7 @@ A typo in a record no longer takes a service down. Your team sees what will chan
title="A full audit trail, and a way back." title="A full audit trail, and a way back."
image="/img/screenshots/domain-logs.webp" image="/img/screenshots/domain-logs.webp"
alt="Domain logs showing change history" alt="Domain logs showing change history"
url="app.happydomain.org/domains/example.com/logs"
flip="true" flip="true"
bg="plum" bg="plum"
>}} >}}
@ -68,6 +72,7 @@ And because the entire history is kept, you can roll any zone back to a previous
title="Delegate to your teams, without losing control." title="Delegate to your teams, without losing control."
image="/img/screenshots/domain-abstract.webp" image="/img/screenshots/domain-abstract.webp"
alt="Zone management shared between teams" alt="Zone management shared between teams"
url="app.happydomain.org/domains/example.com"
coming_soon="true" coming_soon="true"
>}} >}}
Let each team manage the records related to its own projects, internal or public, instead of queuing tickets to a central admin. Let each team manage the records related to its own projects, internal or public, instead of queuing tickets to a central admin.
@ -79,6 +84,7 @@ happy<span class="fw-bold">Domain</span>'s fine-grained access control lets you
title="No more forgotten subdomains." title="No more forgotten subdomains."
image="/img/screenshots/domain-services.webp" image="/img/screenshots/domain-services.webp"
alt="Services attached to a domain, each with a clear purpose" alt="Services attached to a domain, each with a clear purpose"
url="app.happydomain.org/domains/example.com/services"
flip="true" flip="true"
bg="green" bg="green"
coming_soon="true" coming_soon="true"

View file

@ -23,6 +23,7 @@ Un domaine expiré, une délégation cassée, un sous-domaine oublié qui pointe
{{< usage-feature {{< usage-feature
title="Visualisez tout votre portefeuille de domaines au même endroit." title="Visualisez tout votre portefeuille de domaines au même endroit."
image="/img/screenshots/domains-list.webp" image="/img/screenshots/domains-list.webp"
url="app.happydomain.org/domains"
alt="Liste des domaines de plusieurs hébergeurs, regroupés selon vos besoins" alt="Liste des domaines de plusieurs hébergeurs, regroupés selon vos besoins"
>}} >}}
happy<span class="fw-bold">Domain</span> se connecte à plus de 25 hébergeurs à travers le monde: registrars, DNS cloud, CDN et vos serveurs internes. happy<span class="fw-bold">Domain</span> se connecte à plus de 25 hébergeurs à travers le monde: registrars, DNS cloud, CDN et vos serveurs internes.
@ -33,6 +34,7 @@ Importez un hébergeur en un clic et obtenez un inventaire unique et toujours à
{{< usage-feature {{< usage-feature
title="Détectez les incidents avant vos utilisateurs." title="Détectez les incidents avant vos utilisateurs."
image="/img/screenshots/checks-dashboard.webp" image="/img/screenshots/checks-dashboard.webp"
url="app.happydomain.org/domains/example.com/checks"
alt="Tableau de bord de supervision affichant l'état de chaque vérification d'un domaine" alt="Tableau de bord de supervision affichant l'état de chaque vérification d'un domaine"
flip="true" flip="true"
bg="green" bg="green"
@ -45,6 +47,7 @@ Vos équipes sont notifiées dès qu'un état change. Les pannes silencieuses de
{{< usage-feature {{< usage-feature
title="Relisez chaque modification avant qu'elle n'atteigne la production." title="Relisez chaque modification avant qu'elle n'atteigne la production."
image="/img/screenshots/zone-diff.webp" image="/img/screenshots/zone-diff.webp"
url="app.happydomain.org/domains/example.com/diff"
alt="Relisez puis confirmez les modifications qui seront appliquées" alt="Relisez puis confirmez les modifications qui seront appliquées"
>}} >}}
Aucune modification n'est appliquée à l'aveugle: happy<span class="fw-bold">Domain</span> affiche la différence exacte entre la zone actuelle et la nouvelle, et demande confirmation. Aucune modification n'est appliquée à l'aveugle: happy<span class="fw-bold">Domain</span> affiche la différence exacte entre la zone actuelle et la nouvelle, et demande confirmation.
@ -55,6 +58,7 @@ Une faute de frappe dans un enregistrement ne met plus un service à terre. Votr
{{< usage-feature {{< usage-feature
title="Une piste d'audit complète, et un retour en arrière possible." title="Une piste d'audit complète, et un retour en arrière possible."
image="/img/screenshots/domain-logs.webp" image="/img/screenshots/domain-logs.webp"
url="app.happydomain.org/domains/example.com/logs"
alt="Historique des modifications d'un domaine" alt="Historique des modifications d'un domaine"
flip="true" flip="true"
bg="plum" bg="plum"
@ -67,6 +71,7 @@ Et puisque tout l'historique est conservé, vous pouvez restaurer n'importe quel
{{< usage-feature {{< usage-feature
title="Déléguez à vos équipes, sans perdre le contrôle." title="Déléguez à vos équipes, sans perdre le contrôle."
image="/img/screenshots/domain-abstract.webp" image="/img/screenshots/domain-abstract.webp"
url="app.happydomain.org/domains/example.com"
alt="Gestion d'une zone partagée entre les équipes" alt="Gestion d'une zone partagée entre les équipes"
coming_soon="true" coming_soon="true"
>}} >}}
@ -78,6 +83,7 @@ Le contrôle d'accès fin de happy<span class="fw-bold">Domain</span> vous perme
{{< usage-feature {{< usage-feature
title="Fini les sous-domaines oubliés." title="Fini les sous-domaines oubliés."
image="/img/screenshots/domain-services.webp" image="/img/screenshots/domain-services.webp"
url="app.happydomain.org/domains/example.com/services"
alt="Services rattachés à un domaine, chacun avec un objectif clair" alt="Services rattachés à un domaine, chacun avec un objectif clair"
flip="true" flip="true"
bg="green" bg="green"

View file

@ -23,6 +23,7 @@ Deployments are reviewed, tested and rolled back. DNS changes go straight to pro
{{< usage-feature {{< usage-feature
title="One REST API for all your domains' operations." title="One REST API for all your domains' operations."
image="/img/screenshots/features/rest.png" image="/img/screenshots/features/rest.png"
url="app.happydomain.org/swagger/index.html"
alt="Our REST API, commented and exposed with Swagger" alt="Our REST API, commented and exposed with Swagger"
>}} >}}
Everything that's done in the happy<span class="fw-bold">Domain</span> web interface can be done with the API, in your language of choice. Script it once, run it everywhere. Everything that's done in the happy<span class="fw-bold">Domain</span> web interface can be done with the API, in your language of choice. Script it once, run it everywhere.
@ -35,6 +36,7 @@ Our REST API is fully documented, and thanks to Swagger, you can browse it and g
{{< usage-feature {{< usage-feature
title="Forget the quirks of each provider. One abstraction for over 25 hosts." title="Forget the quirks of each provider. One abstraction for over 25 hosts."
image="/img/screenshots/domain-abstract.webp" image="/img/screenshots/domain-abstract.webp"
url="app.happydomain.org/domains/example.com"
alt="A zone displayed the same way, whatever the provider behind it" alt="A zone displayed the same way, whatever the provider behind it"
flip="true" flip="true"
bg="green" bg="green"
@ -54,6 +56,7 @@ Write your automation against happy<span class="fw-bold">Domain</span> once; it
{{< usage-feature {{< usage-feature
title="Bring DNS into your review workflow." title="Bring DNS into your review workflow."
image="/img/screenshots/zone-diff.webp" image="/img/screenshots/zone-diff.webp"
url="app.happydomain.org/domains/example.com/diff"
alt="Review and confirm the changes that will be applied" alt="Review and confirm the changes that will be applied"
>}} >}}
Before anything is published, happy<span class="fw-bold">Domain</span> shows the exact diff between the current zone and the new one, and waits for confirmation. Before anything is published, happy<span class="fw-bold">Domain</span> shows the exact diff between the current zone and the new one, and waits for confirmation.
@ -64,6 +67,7 @@ You can even cherry-pick which changes ship now and which ones wait. It works li
{{< usage-feature {{< usage-feature
title="Tooling that plugs into what you already use." title="Tooling that plugs into what you already use."
image="/img/screenshots/sdk-python.webp" image="/img/screenshots/sdk-python.webp"
url="pypi.org/project/happydomain"
alt="Python SDK usage" alt="Python SDK usage"
flip="true" flip="true"
bg="plum" bg="plum"
@ -87,6 +91,7 @@ You can even cherry-pick which changes ship now and which ones wait. It works li
{{< usage-feature {{< usage-feature
title="Monitoring included, no extra stack to deploy." title="Monitoring included, no extra stack to deploy."
image="/img/screenshots/checks-dashboard.webp" image="/img/screenshots/checks-dashboard.webp"
url="app.happydomain.org/domains/example.com/checks"
alt="Monitoring dashboard showing the status of every check on a domain" alt="Monitoring dashboard showing the status of every check on a domain"
>}} >}}
happy<span class="fw-bold">Domain</span>'s checkers continuously verify expirations, DNSSEC, delegation, certificates and service availability for every domain you manage. happy<span class="fw-bold">Domain</span>'s checkers continuously verify expirations, DNSSEC, delegation, certificates and service availability for every domain you manage.

View file

@ -23,6 +23,7 @@ Les déploiements sont relus, testés et réversibles. Les changements DNS parte
{{< usage-feature {{< usage-feature
title="Une seule API REST pour toutes les opérations sur vos domaines." title="Une seule API REST pour toutes les opérations sur vos domaines."
image="/img/screenshots/features/rest.png" image="/img/screenshots/features/rest.png"
url="app.happydomain.org/swagger/index.html"
alt="Notre API REST, commentée et exposée avec Swagger" alt="Notre API REST, commentée et exposée avec Swagger"
>}} >}}
Tout ce qui se fait dans l'interface web d'happy<span class="fw-bold">Domain</span> peut se faire avec l'API, dans votre langage de prédilection. Scriptez-le une fois, exécutez-le partout. Tout ce qui se fait dans l'interface web d'happy<span class="fw-bold">Domain</span> peut se faire avec l'API, dans votre langage de prédilection. Scriptez-le une fois, exécutez-le partout.
@ -35,6 +36,7 @@ Notre API REST est entièrement documentée et grâce à Swagger, vous pouvez la
{{< usage-feature {{< usage-feature
title="Oubliez les particularités de chaque hébergeur. Une seule abstraction pour plus de 25 hébergeurs." title="Oubliez les particularités de chaque hébergeur. Une seule abstraction pour plus de 25 hébergeurs."
image="/img/screenshots/domain-abstract.webp" image="/img/screenshots/domain-abstract.webp"
url="app.happydomain.org/domains/example.com"
alt="Une zone affichée de la même façon, quel que soit le fournisseur derrière" alt="Une zone affichée de la même façon, quel que soit le fournisseur derrière"
flip="true" flip="true"
bg="green" bg="green"
@ -54,6 +56,7 @@ Notre API REST est entièrement documentée et grâce à Swagger, vous pouvez la
{{< usage-feature {{< usage-feature
title="Intégrez le DNS dans votre workflow de relecture." title="Intégrez le DNS dans votre workflow de relecture."
image="/img/screenshots/zone-diff.webp" image="/img/screenshots/zone-diff.webp"
url="app.happydomain.org/domains/example.com/diff"
alt="Relisez et confirmez les changements qui seront appliqués" alt="Relisez et confirmez les changements qui seront appliqués"
>}} >}}
Avant toute publication, happy<span class="fw-bold">Domain</span> affiche le diff exact entre la zone actuelle et la nouvelle, et attend votre confirmation. Avant toute publication, happy<span class="fw-bold">Domain</span> affiche le diff exact entre la zone actuelle et la nouvelle, et attend votre confirmation.
@ -64,6 +67,7 @@ Vous pouvez même choisir quels changements partent maintenant et lesquels atten
{{< usage-feature {{< usage-feature
title="Des outils qui s'intègrent à ce que vous utilisez déjà." title="Des outils qui s'intègrent à ce que vous utilisez déjà."
image="/img/screenshots/sdk-python.webp" image="/img/screenshots/sdk-python.webp"
url="pypi.org/project/happydomain"
alt="Utilisation du SDK Python" alt="Utilisation du SDK Python"
flip="true" flip="true"
bg="plum" bg="plum"
@ -87,6 +91,7 @@ Vous pouvez même choisir quels changements partent maintenant et lesquels atten
{{< usage-feature {{< usage-feature
title="Supervision incluse, aucune stack supplémentaire à déployer." title="Supervision incluse, aucune stack supplémentaire à déployer."
image="/img/screenshots/checks-dashboard.webp" image="/img/screenshots/checks-dashboard.webp"
url="app.happydomain.org/domains/example.com/checks"
alt="Tableau de bord de supervision affichant l'état de chaque vérification d'un domaine" alt="Tableau de bord de supervision affichant l'état de chaque vérification d'un domaine"
>}} >}}
Les vérificateurs d'happy<span class="fw-bold">Domain</span> contrôlent en continu les expirations, le DNSSEC, la délégation, les certificats et la disponibilité des services pour chaque domaine que vous gérez. Les vérificateurs d'happy<span class="fw-bold">Domain</span> contrôlent en continu les expirations, le DNSSEC, la délégation, les certificats et la disponibilité des services pour chaque domaine que vous gérez.

View file

@ -23,6 +23,7 @@ An expired domain, broken mail, an invalid certificate. Too often, the person wh
{{< usage-feature {{< usage-feature
title="All your clients' domains, grouped by client." title="All your clients' domains, grouped by client."
image="/img/screenshots/domains-list.webp" image="/img/screenshots/domains-list.webp"
url="app.happydomain.org/domains"
alt="List of domain names, cleverly grouped by client" alt="List of domain names, cleverly grouped by client"
>}} >}}
No matter how many clients you follow, happy<span class="fw-bold">Domain</span> gives you a clear overview of every domain you are responsible for, organized your way. No matter how many clients you follow, happy<span class="fw-bold">Domain</span> gives you a clear overview of every domain you are responsible for, organized your way.
@ -33,6 +34,7 @@ One login, one inventory, no more digging through password managers to answer a
{{< usage-feature {{< usage-feature
title="One interface, whatever your client's provider." title="One interface, whatever your client's provider."
image="/img/screenshots/domain-abstract.webp" image="/img/screenshots/domain-abstract.webp"
url="app.happydomain.org/domains/example.com"
alt="A zone displayed the same way, whatever the provider behind it" alt="A zone displayed the same way, whatever the provider behind it"
flip="true" flip="true"
bg="green" bg="green"
@ -45,6 +47,7 @@ Every zone is displayed and edited the same way, so a new client with an exotic
{{< usage-feature {{< usage-feature
title="Fix issues before your client even notices." title="Fix issues before your client even notices."
image="/img/screenshots/checks-dashboard.webp" image="/img/screenshots/checks-dashboard.webp"
url="app.happydomain.org/domains/example.com/checks"
alt="Monitoring dashboard showing the status of every check on a client domain" alt="Monitoring dashboard showing the status of every check on a client domain"
>}} >}}
happy<span class="fw-bold">Domain</span>'s built-in checkers keep watch over every client domain: expiry dates, DNSSEC, mail and web service availability, TLS certificates and more, all reported with a clear <span class="fw-bold">OK</span> / <span class="fw-bold">Warning</span> / <span class="fw-bold">Critical</span> status. happy<span class="fw-bold">Domain</span>'s built-in checkers keep watch over every client domain: expiry dates, DNSSEC, mail and web service availability, TLS certificates and more, all reported with a clear <span class="fw-bold">OK</span> / <span class="fw-bold">Warning</span> / <span class="fw-bold">Critical</span> status.
@ -55,6 +58,7 @@ Get notified the moment something changes, fix it quietly, and show up looking l
{{< usage-feature {{< usage-feature
title="Respond to every request with ease." title="Respond to every request with ease."
image="/img/screenshots/domain-services.webp" image="/img/screenshots/domain-services.webp"
url="app.happydomain.org/domains/example.com/services"
alt="Services attached to a domain, described in plain words" alt="Services attached to a domain, described in plain words"
flip="true" flip="true"
bg="plum" bg="plum"
@ -67,6 +71,7 @@ Less time decoding record types, more time delivering.
{{< usage-feature {{< usage-feature
title="Collaborate on a zone with your client or your team." title="Collaborate on a zone with your client or your team."
image="/img/screenshots/domain-abstract.webp" image="/img/screenshots/domain-abstract.webp"
url="app.happydomain.org/domains/example.com"
alt="Zone management shared with clients and collaborators" alt="Zone management shared with clients and collaborators"
coming_soon="true" coming_soon="true"
>}} >}}

View file

@ -23,6 +23,7 @@ Un domaine expiré, un mail en panne, un certificat invalide. Trop souvent, celu
{{< usage-feature {{< usage-feature
title="Tous les domaines de vos clients, regroupés par client." title="Tous les domaines de vos clients, regroupés par client."
image="/img/screenshots/domains-list.webp" image="/img/screenshots/domains-list.webp"
url="app.happydomain.org/domains"
alt="Liste des domaines, regroupés astucieusement par client" alt="Liste des domaines, regroupés astucieusement par client"
>}} >}}
Quel que soit le nombre de clients que vous suivez, happy<span class="fw-bold">Domain</span> vous donne un aperçu clair de chaque domaine dont vous êtes responsable, organisé à votre façon. Quel que soit le nombre de clients que vous suivez, happy<span class="fw-bold">Domain</span> vous donne un aperçu clair de chaque domaine dont vous êtes responsable, organisé à votre façon.
@ -33,6 +34,7 @@ Un seul login, un seul inventaire, fini de fouiller dans les gestionnaires de mo
{{< usage-feature {{< usage-feature
title="Une seule interface, quel que soit l'hébergeur de votre client." title="Une seule interface, quel que soit l'hébergeur de votre client."
image="/img/screenshots/domain-abstract.webp" image="/img/screenshots/domain-abstract.webp"
url="app.happydomain.org/domains/example.com"
alt="Une zone affichée de la même façon, quel que soit l'hébergeur derrière" alt="Une zone affichée de la même façon, quel que soit l'hébergeur derrière"
flip="true" flip="true"
bg="green" bg="green"
@ -45,6 +47,7 @@ Chaque zone s'affiche et s'édite de la même façon, ainsi un nouveau client av
{{< usage-feature {{< usage-feature
title="Corrigez les problèmes avant même que votre client ne s'en aperçoive." title="Corrigez les problèmes avant même que votre client ne s'en aperçoive."
image="/img/screenshots/checks-dashboard.webp" image="/img/screenshots/checks-dashboard.webp"
url="app.happydomain.org/domains/example.com/checks"
alt="Tableau de bord de supervision affichant l'état de chaque vérification d'un domaine client" alt="Tableau de bord de supervision affichant l'état de chaque vérification d'un domaine client"
>}} >}}
Les vérificateurs intégrés de happy<span class="fw-bold">Domain</span> veillent sur chaque domaine client: dates d'expiration, DNSSEC, disponibilité des services mail et web, certificats TLS et plus encore, le tout reporté avec un statut clair <span class="fw-bold">OK</span> / <span class="fw-bold">Avertissement</span> / <span class="fw-bold">Critique</span>. Les vérificateurs intégrés de happy<span class="fw-bold">Domain</span> veillent sur chaque domaine client: dates d'expiration, DNSSEC, disponibilité des services mail et web, certificats TLS et plus encore, le tout reporté avec un statut clair <span class="fw-bold">OK</span> / <span class="fw-bold">Avertissement</span> / <span class="fw-bold">Critique</span>.
@ -55,6 +58,7 @@ Soyez notifié dès qu'un changement survient, corrigez-le discrètement, et aff
{{< usage-feature {{< usage-feature
title="Répondez à toutes les demandes en toute simplicité." title="Répondez à toutes les demandes en toute simplicité."
image="/img/screenshots/domain-services.webp" image="/img/screenshots/domain-services.webp"
url="app.happydomain.org/domains/example.com/services"
alt="Services attachés à un domaine, décrits avec des mots simples" alt="Services attachés à un domaine, décrits avec des mots simples"
flip="true" flip="true"
bg="plum" bg="plum"
@ -67,6 +71,7 @@ Moins de temps à décoder les types d'enregistrements, plus de temps à livrer.
{{< usage-feature {{< usage-feature
title="Collaborez sur une zone avec votre client ou votre équipe." title="Collaborez sur une zone avec votre client ou votre équipe."
image="/img/screenshots/domain-abstract.webp" image="/img/screenshots/domain-abstract.webp"
url="app.happydomain.org/domains/example.com"
alt="Gestion de zone partagée avec les clients et les collaborateurs" alt="Gestion de zone partagée avec les clients et les collaborateurs"
coming_soon="true" coming_soon="true"
>}} >}}

View file

@ -23,6 +23,7 @@ Each registrar's interface decides what you can do and how. Moving your zones el
{{< usage-feature {{< usage-feature
title="A simple and clear interface, whatever the host." title="A simple and clear interface, whatever the host."
image="/img/screenshots/domain-abstract.webp" image="/img/screenshots/domain-abstract.webp"
url="app.happydomain.org/domains/example.com"
alt="A zone displayed in a clear, human-readable way" alt="A zone displayed in a clear, human-readable way"
>}} >}}
Whether your zones live at a registrar or on your own servers, happy<span class="fw-bold">Domain</span> displays them the same clear way, limiting errors. Whether your zones live at a registrar or on your own servers, happy<span class="fw-bold">Domain</span> displays them the same clear way, limiting errors.
@ -34,6 +35,7 @@ Install happy<span class="fw-bold">Domain</span> next to your Bind or PowerDNS a
{{< usage-feature {{< usage-feature
title="Self-hosting made easy, even for DNS." title="Self-hosting made easy, even for DNS."
image="/img/screenshots/providers-list.webp" image="/img/screenshots/providers-list.webp"
url="app.happydomain.org/providers"
alt="List of supported providers, from cloud services to self-hosted servers" alt="List of supported providers, from cloud services to self-hosted servers"
flip="true" flip="true"
bg="green" bg="green"
@ -48,6 +50,7 @@ happy<span class="fw-bold">Domain</span> is open source, needs very few resource
{{< usage-feature {{< usage-feature
title="Tinker without fear: preview, history, rollback." title="Tinker without fear: preview, history, rollback."
image="/img/screenshots/zone-diff.webp" image="/img/screenshots/zone-diff.webp"
url="app.happydomain.org/domains/example.com/diff"
alt="Review and confirm the changes that will be applied" alt="Review and confirm the changes that will be applied"
>}} >}}
Before any change is published, happy<span class="fw-bold">Domain</span> shows you exactly what will be modified and asks for confirmation. No more silent typos. Before any change is published, happy<span class="fw-bold">Domain</span> shows you exactly what will be modified and asks for confirmation. No more silent typos.
@ -58,6 +61,7 @@ And since every version of your zone is kept in history, you can experiment free
{{< usage-feature {{< usage-feature
title="Set up any service in all simplicity." title="Set up any service in all simplicity."
image="/img/screenshots/domain-services.webp" image="/img/screenshots/domain-services.webp"
url="app.happydomain.org/domains/example.com/services"
alt="Services attached to a domain, described in plain words" alt="Services attached to a domain, described in plain words"
flip="true" flip="true"
bg="plum" bg="plum"
@ -70,6 +74,7 @@ We are committed to providing the latest in DNS registration and services, so yo
{{< usage-feature {{< usage-feature
title="Manage easily, even special zones." title="Manage easily, even special zones."
image="/img/screenshots/service-caa.webp" image="/img/screenshots/service-caa.webp"
url="app.happydomain.org/domains/example.com/services"
alt="Editing an advanced DNS service through a guided form" alt="Editing an advanced DNS service through a guided form"
coming_soon="true" coming_soon="true"
>}} >}}

View file

@ -23,6 +23,7 @@ L'interface de chaque registrar décide de ce que vous pouvez faire et comment.
{{< usage-feature {{< usage-feature
title="Une interface simple et claire, quel que soit l'hébergeur." title="Une interface simple et claire, quel que soit l'hébergeur."
image="/img/screenshots/domain-abstract.webp" image="/img/screenshots/domain-abstract.webp"
url="app.happydomain.org/domains/example.com"
alt="Une zone affichée de manière claire et lisible" alt="Une zone affichée de manière claire et lisible"
>}} >}}
Que vos zones soient chez un registrar ou sur vos propres serveurs, happy<span class="fw-bold">Domain</span> les affiche de la même manière claire, pour limiter les erreurs. Que vos zones soient chez un registrar ou sur vos propres serveurs, happy<span class="fw-bold">Domain</span> les affiche de la même manière claire, pour limiter les erreurs.
@ -34,6 +35,7 @@ Installez happy<span class="fw-bold">Domain</span> à côté de votre Bind ou Po
{{< usage-feature {{< usage-feature
title="L'auto-hébergement facilité, même pour le DNS." title="L'auto-hébergement facilité, même pour le DNS."
image="/img/screenshots/providers-list.webp" image="/img/screenshots/providers-list.webp"
url="app.happydomain.org/providers"
alt="Liste des fournisseurs pris en charge, des services cloud aux serveurs auto-hébergés" alt="Liste des fournisseurs pris en charge, des services cloud aux serveurs auto-hébergés"
flip="true" flip="true"
bg="green" bg="green"
@ -48,6 +50,7 @@ happy<span class="fw-bold">Domain</span> est open source, n'a besoin que de trè
{{< usage-feature {{< usage-feature
title="Bidouillez sans crainte: aperçu, historique, retour arrière." title="Bidouillez sans crainte: aperçu, historique, retour arrière."
image="/img/screenshots/zone-diff.webp" image="/img/screenshots/zone-diff.webp"
url="app.happydomain.org/domains/example.com/diff"
alt="Vérifiez et confirmez les modifications qui seront appliquées" alt="Vérifiez et confirmez les modifications qui seront appliquées"
>}} >}}
Avant la publication de toute modification, happy<span class="fw-bold">Domain</span> vous montre exactement ce qui va changer et demande confirmation. Fini les fautes de frappe silencieuses. Avant la publication de toute modification, happy<span class="fw-bold">Domain</span> vous montre exactement ce qui va changer et demande confirmation. Fini les fautes de frappe silencieuses.
@ -58,6 +61,7 @@ Et comme chaque version de votre zone est conservée dans l'historique, vous pou
{{< usage-feature {{< usage-feature
title="Répondez à tous vos besoins en toute simplicité." title="Répondez à tous vos besoins en toute simplicité."
image="/img/screenshots/domain-services.webp" image="/img/screenshots/domain-services.webp"
url="app.happydomain.org/domains/example.com/services"
alt="Services rattachés à un domaine, décrits en mots simples" alt="Services rattachés à un domaine, décrits en mots simples"
flip="true" flip="true"
bg="plum" bg="plum"
@ -70,6 +74,7 @@ Nous avons à cœur de mettre à disposition les dernières nouveautés en terme
{{< usage-feature {{< usage-feature
title="Gérez simplement, même les zones spéciales." title="Gérez simplement, même les zones spéciales."
image="/img/screenshots/service-caa.webp" image="/img/screenshots/service-caa.webp"
url="app.happydomain.org/domains/example.com/services"
alt="Édition d'un service DNS avancé via un formulaire guidé" alt="Édition d'un service DNS avancé via un formulaire guidé"
coming_soon="true" coming_soon="true"
>}} >}}

View file

@ -23,6 +23,7 @@ You're the only one trusted to touch DNS, so every record request becomes a tick
{{< usage-feature {{< usage-feature
title="Edit all your zones in one place, internal and public." title="Edit all your zones in one place, internal and public."
image="/img/screenshots/domain-abstract.webp" image="/img/screenshots/domain-abstract.webp"
url="app.happydomain.org/domains/example.com"
alt="A zone displayed the same clear way, whatever the host" alt="A zone displayed the same clear way, whatever the host"
>}} >}}
Whatever the host of your zones, happy<span class="fw-bold">Domain</span> displays them in the same clear way, limiting errors. Whatever the host of your zones, happy<span class="fw-bold">Domain</span> displays them in the same clear way, limiting errors.
@ -33,6 +34,7 @@ Install happy<span class="fw-bold">Domain</span> next to your Bind or PowerDNS a
{{< usage-feature {{< usage-feature
title="View your changes before applying them." title="View your changes before applying them."
image="/img/screenshots/zone-diff.webp" image="/img/screenshots/zone-diff.webp"
url="app.happydomain.org/domains/example.com/diff"
alt="Review and confirm the changes that will be applied" alt="Review and confirm the changes that will be applied"
flip="true" flip="true"
bg="green" bg="green"
@ -45,6 +47,7 @@ You can even select which changes go out now and which ones should wait.
{{< usage-feature {{< usage-feature
title="Full history, instant rollback." title="Full history, instant rollback."
image="/img/screenshots/domain-history.webp" image="/img/screenshots/domain-history.webp"
url="app.happydomain.org/domains/example.com/logs"
alt="History of every version of a zone" alt="History of every version of a zone"
>}} >}}
Every version of every zone is kept, with who changed what and when. Every version of every zone is kept, with who changed what and when.
@ -55,6 +58,7 @@ When something breaks, you don't reconstruct the previous state from backups: yo
{{< usage-feature {{< usage-feature
title="Catch problems before they become outages." title="Catch problems before they become outages."
image="/img/screenshots/checks-dashboard.webp" image="/img/screenshots/checks-dashboard.webp"
url="app.happydomain.org/domains/example.com/checks"
alt="Monitoring dashboard showing the status of every check on a domain" alt="Monitoring dashboard showing the status of every check on a domain"
flip="true" flip="true"
bg="plum" bg="plum"
@ -67,6 +71,7 @@ Each check is evaluated against clear rules and reported as <span class="fw-bold
{{< usage-feature {{< usage-feature
title="Share zone management with your teams." title="Share zone management with your teams."
image="/img/screenshots/domain-abstract-records.webp" image="/img/screenshots/domain-abstract-records.webp"
url="app.happydomain.org/domains/example.com"
alt="Zone management shared between teams" alt="Zone management shared between teams"
coming_soon="true" coming_soon="true"
>}} >}}
@ -78,6 +83,7 @@ Delegate all or only part of a zone, down to a single record. The routine reques
{{< usage-feature {{< usage-feature
title="Manage simply, even the special zones." title="Manage simply, even the special zones."
image="/img/screenshots/service-caa.webp" image="/img/screenshots/service-caa.webp"
url="app.happydomain.org/domains/example.com/services"
alt="Editing an advanced DNS service through a guided form" alt="Editing an advanced DNS service through a guided form"
flip="true" flip="true"
bg="green" bg="green"

View file

@ -23,6 +23,7 @@ Vous êtes la seule personne de confiance pour toucher au DNS, alors chaque dema
{{< usage-feature {{< usage-feature
title="Éditez toutes vos zones au même endroit, internes et publiques." title="Éditez toutes vos zones au même endroit, internes et publiques."
image="/img/screenshots/domain-abstract.webp" image="/img/screenshots/domain-abstract.webp"
url="app.happydomain.org/domains/example.com"
alt="Une zone affichée de la même manière claire, quel que soit l'hébergeur" alt="Une zone affichée de la même manière claire, quel que soit l'hébergeur"
>}} >}}
Quel que soit l'hébergeur de vos zones, happy<span class="fw-bold">Domain</span> les affiche de la même manière claire, pour limiter les erreurs. Quel que soit l'hébergeur de vos zones, happy<span class="fw-bold">Domain</span> les affiche de la même manière claire, pour limiter les erreurs.
@ -33,6 +34,7 @@ Installez happy<span class="fw-bold">Domain</span> à côté de votre Bind ou Po
{{< usage-feature {{< usage-feature
title="Visualisez vos modifications avant de les appliquer." title="Visualisez vos modifications avant de les appliquer."
image="/img/screenshots/zone-diff.webp" image="/img/screenshots/zone-diff.webp"
url="app.happydomain.org/domains/example.com/diff"
alt="Relisez puis confirmez les modifications qui seront appliquées" alt="Relisez puis confirmez les modifications qui seront appliquées"
flip="true" flip="true"
bg="green" bg="green"
@ -45,6 +47,7 @@ Vous pouvez même sélectionner les changements qui partent maintenant et ceux q
{{< usage-feature {{< usage-feature
title="Historique complet, retour arrière instantané." title="Historique complet, retour arrière instantané."
image="/img/screenshots/domain-history.webp" image="/img/screenshots/domain-history.webp"
url="app.happydomain.org/domains/example.com/logs"
alt="Historique de chaque version d'une zone" alt="Historique de chaque version d'une zone"
>}} >}}
Chaque version de chaque zone est conservée, avec qui a changé quoi et quand. Chaque version de chaque zone est conservée, avec qui a changé quoi et quand.
@ -55,6 +58,7 @@ Quand quelque chose casse, vous ne reconstruisez pas l'état précédent à part
{{< usage-feature {{< usage-feature
title="Détectez les problèmes avant qu'ils ne deviennent des pannes." title="Détectez les problèmes avant qu'ils ne deviennent des pannes."
image="/img/screenshots/checks-dashboard.webp" image="/img/screenshots/checks-dashboard.webp"
url="app.happydomain.org/domains/example.com/checks"
alt="Tableau de bord de supervision affichant l'état de chaque vérification d'un domaine" alt="Tableau de bord de supervision affichant l'état de chaque vérification d'un domaine"
flip="true" flip="true"
bg="plum" bg="plum"
@ -67,6 +71,7 @@ Chaque vérification est évaluée selon des règles claires et reportée en <sp
{{< usage-feature {{< usage-feature
title="Partagez la gestion de la zone avec vos équipes." title="Partagez la gestion de la zone avec vos équipes."
image="/img/screenshots/domain-abstract-records.webp" image="/img/screenshots/domain-abstract-records.webp"
url="app.happydomain.org/domains/example.com"
alt="Gestion de zone partagée entre les équipes" alt="Gestion de zone partagée entre les équipes"
coming_soon="true" coming_soon="true"
>}} >}}
@ -78,6 +83,7 @@ Déléguez tout ou seulement une partie d'une zone, jusqu'à un seul enregistrem
{{< usage-feature {{< usage-feature
title="Gérez simplement, même les zones spéciales." title="Gérez simplement, même les zones spéciales."
image="/img/screenshots/service-caa.webp" image="/img/screenshots/service-caa.webp"
url="app.happydomain.org/domains/example.com/services"
alt="Édition d'un service DNS avancé via un formulaire guidé" alt="Édition d'un service DNS avancé via un formulaire guidé"
flip="true" flip="true"
bg="green" bg="green"

View file

@ -0,0 +1,22 @@
{{/*
Wraps a screenshot in a fake browser frame, like the hero on the home page.
Params (passed as a dict):
image (required) — screenshot URL
alt — alt text
url — address shown in the URL bar (default: app.happydomain.org)
*/}}
{{ $image := .image }}
{{ $alt := .alt | default "" }}
{{ $url := .url | default "app.happydomain.org" }}
<div class="usage-browser">
<div class="browser-bar">
<div class="browser-dots"><span></span><span></span><span></span></div>
<div class="browser-url">
<i class="bi bi-lock-fill lock"></i>
<span>{{ $url }}</span>
</div>
</div>
<div class="browser-body">
<img src="{{ $image }}" alt="{{ $alt }}">
</div>
</div>

View file

@ -1,5 +1,6 @@
{{ $image := .Get "image" }} {{ $image := .Get "image" }}
{{ $alt := .Get "alt" | default "" }} {{ $alt := .Get "alt" | default "" }}
{{ $url := .Get "url" }}
{{ $title := .Get "title" }} {{ $title := .Get "title" }}
{{ $flip := eq (.Get "flip") "true" }} {{ $flip := eq (.Get "flip") "true" }}
{{ $bg := .Get "bg" | default "" }} {{ $bg := .Get "bg" | default "" }}
@ -9,12 +10,14 @@
{{ if eq $bg "green" }}{{ $style = "background: var(--hd-green-50)" }}{{ end }} {{ if eq $bg "green" }}{{ $style = "background: var(--hd-green-50)" }}{{ end }}
{{ if eq $bg "plum" }}{{ $style = "background: var(--hd-plum-100)" }}{{ end }} {{ if eq $bg "plum" }}{{ $style = "background: var(--hd-plum-100)" }}{{ end }}
{{ $browserArgs := dict "image" $image "alt" $alt "url" $url }}
<div class="container-fluid py-5"{{ with $style }} style="{{ . }}"{{ end }}> <div class="container-fluid py-5"{{ with $style }} style="{{ . }}"{{ end }}>
<div class="container my-5"> <div class="container my-5">
<div class="row"> <div class="row">
{{ if $flip }} {{ if $flip }}
<div class="order-1 order-md-0 col-md-7 align-self-center"> <div class="order-1 order-md-0 col-md-7 align-self-center">
<img class="rounded img-thumbnail" src="{{ $image }}" alt="{{ $alt }}"> {{ partial "usage-browser.html" $browserArgs }}
</div> </div>
<div class="order-0 order-md-1 col-md-5 align-self-center text-center"> <div class="order-0 order-md-1 col-md-5 align-self-center text-center">
{{ else }} {{ else }}
@ -28,7 +31,7 @@
</div> </div>
{{ if not $flip }} {{ if not $flip }}
<div class="order-1 col-md-7 py-2 align-self-center"> <div class="order-1 col-md-7 py-2 align-self-center">
<img class="rounded img-thumbnail" src="{{ $image }}" alt="{{ $alt }}"> {{ partial "usage-browser.html" $browserArgs }}
</div> </div>
{{ end }} {{ end }}
</div> </div>

View file

@ -1,3 +1,65 @@
/* Fake browser frame wrapping usage screenshots (see partials/usage-browser.html) */
.usage-browser {
background: var(--hd-bg-canvas);
border: 1px solid var(--hd-border-1);
border-radius: 10px;
overflow: hidden;
box-shadow: 0 12px 32px -12px rgba(0, 0, 0, 0.25);
}
.usage-browser .browser-bar {
display: flex;
align-items: center;
gap: 8px;
padding: 10px 12px;
background: var(--hd-bg-subtle);
border-bottom: 1px solid var(--hd-border-1);
}
.usage-browser .browser-dots {
display: flex;
gap: 6px;
}
.usage-browser .browser-dots span {
width: 10px;
height: 10px;
border-radius: 50%;
background: var(--hd-border-2);
}
.usage-browser .browser-url {
flex: 1;
font-family: var(--hd-font-mono, monospace);
font-size: 11px;
background: var(--hd-bg-canvas);
border: 1px solid var(--hd-border-1);
border-radius: 5px;
padding: 4px 10px;
color: var(--hd-fg-3);
display: flex;
align-items: center;
gap: 6px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.usage-browser .browser-url .lock {
color: var(--hd-accent);
font-size: 10px;
}
.usage-browser .browser-body {
display: block;
}
.usage-browser .browser-body img {
display: block;
width: 100%;
height: auto;
}
nav.navbar { nav.navbar {
background: var(--hd-bg-canvas); background: var(--hd-bg-canvas);
box-shadow: 0 0px 3px 0 var(--hd-accent); box-shadow: 0 0px 3px 0 var(--hd-accent);