Compare commits

..

17 commits

Author SHA1 Message Date
bbe9605843 ci: restrict pages deployment to master and main branches
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2026-06-11 18:54:11 +09:00
1c763ba246 WIP new home page design 2026-06-11 18:54:11 +09:00
388c2b2e84 Update jumbo and screenshots
Some checks failed
ci/woodpecker/push/woodpecker Pipeline was canceled
2026-06-11 18:52:28 +09:00
6c29f5c74a Add default list layout for sections and taxonomies
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Fixes Hugo warnings about missing layout files for "section" and
"taxonomy" kinds.
2026-06-04 16:32:02 +09:00
3bb3f2cc75 Redirect sign-in and register links to a beta landing page
Public registrations on app.happydomain.org are paused. Route the
sign-in, register, and join entry points to a new /beta/ page that
explains the beta program and points users to self-hosting via the
binary or Docker image.
2026-06-04 16:29:22 +09:00
a52e4f8aee Update legal notice
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2026-06-03 23:42:43 +09:00
a61dc211a0 Rework usage pages 2026-06-03 23:42:43 +09:00
d1a20d0baa Replace hcaptcha by altcha 2026-06-03 23:42:43 +09:00
43d8ce7a49 Add beta-only access alert to jumbo
Public registrations are paused; surface a signup form on the homepage
hero that subscribes users to the beta tester list.
2026-06-03 23:42:43 +09:00
2b5bb8e12a Revamp website 2026-06-03 23:42:43 +09:00
42a4275a76 Rework jumbo 2026-06-03 23:42:43 +09:00
15db3cb30c Create a dedicated file for the svg logo 2026-06-03 21:40:35 +09:00
c5ff1adb90 Handle dark theme 2026-06-03 21:40:35 +09:00
d360cc380d Upgrade to bootstrap 5 2026-06-03 21:40:35 +09:00
20e8a081b3 Improve footer 2026-06-03 21:40:35 +09:00
0f5cea3670 Use text-balance for slogan 2026-06-03 21:40:35 +09:00
d74149f404 Use generated css, common to the project 2026-06-03 21:40:35 +09:00
39 changed files with 779 additions and 249 deletions

View file

@ -35,7 +35,7 @@ languages:
others_links:
- text: "S'identifier"
href: "//app.happydomain.org/login"
href: "/fr/beta/"
class: "btn btn-link text-dark"
- text: "Essayer en ligne →"
href: "//try.happydomain.org/"
@ -71,12 +71,12 @@ languages:
image: "/img/screenshots/domain-logs.webp"
- title: "domain-abstract-list"
description: "Une zone simplifiée, sous forme de liste, plus rapide à modifier"
image: "/img/screenshots/domain-abstract-list.webp"
description: "Les enregistrements bruts de la zone"
image: "/img/screenshots/domain-abstract-records.webp"
- title: "sources"
description: "Liste des hébergeurs existantes où récupérer les domaines"
image: "/img/screenshots/sources.png"
description: "Liste des hébergeurs existants où récupérer les domaines"
image: "/img/screenshots/providers-list.webp"
params:
author:
@ -87,9 +87,31 @@ params:
survey: "https://feedback.happydomain.org/"
tryit: "https://try.happydomain.org/"
# Screenshots cycled in the hero browser mockup (jumbo partial).
jumboscreen:
- image: "/img/screenshots/domains-list.webp"
path: "/domains"
alt: "List of your domains in happyDomain"
weight: 10
- image: "/img/screenshots/checks-dashboard.webp"
path: "/domains/happydomain.org"
alt: "Each domain has extensive checks"
weight: 20
- image: "/img/screenshots/domain-abstract.webp"
path: "/domains/happydomain.org/editor"
alt: "A zone organized by service"
weight: 30
- image: "/img/screenshots/zone-diff.webp"
path: "/zone/happydomain.org/records"
alt: "Reviewing changes before applying them"
weight: 40
others_links:
- text: "Sign in"
href: "//app.happydomain.org/login"
href: "/en/beta/"
class: "btn btn-link text-dark"
- text: "Try it online →"
href: "//try.happydomain.org/"
@ -125,12 +147,12 @@ params:
image: "/img/screenshots/domain-logs.webp"
- title: "domain-abstract-list"
description: "Simplified zone in list, for quicker editing"
image: "/img/screenshots/domain-abstract-list.webp"
description: "Raw records of the zone"
image: "/img/screenshots/domain-abstract-records.webp"
- title: "sources"
description: "Existing name service providers where pull domains"
image: "/img/screenshots/sources.png"
image: "/img/screenshots/providers-list.webp"
menu:
main:

54
content/beta.en.md Normal file
View file

@ -0,0 +1,54 @@
+++
title = "Join the beta"
description = "Public registrations on app.happydomain.org are closed. Join the beta program or self-host happyDomain to get started."
+++
## Online version closed
Public registrations on `app.happydomain.org` are paused while we
polish the next release.
### happyDomain is evolving
happyDomain will soon let you **continuously test the security of
your domains** and **monitor every service exposed through DNS**
(web, mail, VPN, etc.) — all of this **with zero configuration**,
working straight from your existing records.
We are rolling out this new version **progressively**, to gather
feedback from our users and refine the service before reopening it
to everyone. Your input at this stage is invaluable in helping us
deliver the best possible product.
Two ways to use happyDomain right now:
### 1. Join the beta program
Subscribe below and we will send you an invitation once a spot opens up.
<form
class="card card-body bg-light my-4"
method="post"
action="https://lists.happydomain.org/subscription/form"
>
<input type="hidden" name="nonce" />
<input type="hidden" name="l" value="ef8b61ad-fa7d-4f1a-a20f-bb34ac37a3bf" />
<input type="hidden" name="lang" value="en" />
<div class="mb-3">
<label for="beta-email" class="form-label">Your email</label>
<input type="email" id="beta-email" name="email" required placeholder="j.postel@isi.edu" class="form-control" />
</div>
<altcha-widget floating class="mb-3 mx-auto" challengeurl="https://lists.happydomain.org/api/public/captcha/altcha"></altcha-widget>
<button type="submit" class="btn btn-primary" data-umami-event="beta-page-join">
Request beta access
</button>
</form>
### 2. Self-host happyDomain
happyDomain is open source. You can run it on your own machine in minutes:
- **Binary:** download a [release for your platform](/#downloads).
- **Docker:** `docker run -p 8081:8081 happydomain/happydomain`.
Source code and documentation live on [git.happydomain.org](https://git.happydomain.org/).

55
content/beta.fr.md Normal file
View file

@ -0,0 +1,55 @@
+++
title = "Rejoindre la bêta"
description = "Les inscriptions publiques sur app.happydomain.org sont fermées. Rejoignez le programme bêta ou auto-hébergez happyDomain pour commencer."
+++
## Version en ligne fermée
Les inscriptions publiques sur `app.happydomain.org` sont suspendues
le temps de finaliser la prochaine version.
### happyDomain se transforme
happyDomain va bientôt vous permettre de **tester en continu la
sécurité de vos domaines** et de **superviser l'ensemble des services
exposés via le DNS** (web, mail, VPN, etc.) — le tout **sans
configuration**, en s'appuyant directement sur vos enregistrements.
Nous déployons cette nouvelle version **progressivement**, afin de
recueillir les avis de nos utilisateurs et d'ajuster le service avant
sa réouverture publique. Votre retour à ce stade est précieux pour
nous aider à offrir le meilleur produit possible.
Deux manières d'utiliser happyDomain dès maintenant :
### 1. Rejoindre le programme bêta
Inscrivez-vous ci-dessous, nous vous enverrons une invitation
dès qu'une place se libère.
<form
class="card card-body bg-light my-4"
method="post"
action="https://lists.happydomain.org/subscription/form"
>
<input type="hidden" name="nonce" />
<input type="hidden" name="l" value="ef8b61ad-fa7d-4f1a-a20f-bb34ac37a3bf" />
<input type="hidden" name="lang" value="fr" />
<div class="mb-3">
<label for="beta-email" class="form-label">Votre email</label>
<input type="email" id="beta-email" name="email" required placeholder="j.postel@isi.edu" class="form-control" />
</div>
<altcha-widget floating class="mb-3 mx-auto" challengeurl="https://lists.happydomain.org/api/public/captcha/altcha"></altcha-widget>
<button type="submit" class="btn btn-primary" data-umami-event="beta-page-join">
Demander un accès bêta
</button>
</form>
### 2. Auto-héberger happyDomain
happyDomain est libre. Vous pouvez le faire tourner sur votre propre machine en quelques minutes :
- **Binaire :** téléchargez une [version pour votre plateforme](/fr/#downloads).
- **Docker :** `docker run -p 8081:8081 happydomain/happydomain`.
Le code source et la documentation sont sur [git.happydomain.org](https://git.happydomain.org/).

View file

@ -16,8 +16,8 @@ De facto association "happyDNS"
<address style="margin-left: 2em; margin-top: -.5em">
Association happyDNS<br>
ABS Pierre-Olivier Mercier<br>
40 avenue Raspail<br>
94250 GENTILLY
8 avenue Georges Clemenceau<br>
14000 CAEN
</address>

View file

@ -18,8 +18,8 @@ Siège social :
<address style="margin-left: 2em; margin-top: -.5em">
Association happyDNS<br>
ABS Pierre-Olivier Mercier<br>
40 avenue Raspail<br>
94250 GENTILLY
8 avenue Georges Clemenceau<br>
14000 CAEN
</address>
### Hébergement

View file

@ -6,7 +6,7 @@ title = "Subscribe to our newsletter"
Join the happyDomain newsletter
</h2>
<div class="mt-4 card bg-secondary text-light" style="border-radius: 1rem; box-shadow: 3px 3px 5px #999">
<div class="mt-4 card bg-primary-subtle" style="border-radius: 1rem">
<div class="card-body p-4">
<div class="row">
<div class="col-lg-6 d-flex flex-column justify-content-center">
@ -25,7 +25,7 @@ title = "Subscribe to our newsletter"
<input type="hidden" name="lang" value="en" />
<input type="email" name="email" required placeholder="j.postel@isi.edu" class="form-control mb-3">
<input type="text" name="name" placeholder="Name (optional)" class="form-control mb-3">
<div class="mb-2 mx-auto h-captcha" data-sitekey="12a1e811-7f34-44ca-9e7c-fb1e9ade6b00"></div>
<altcha-widget floating class="mb-2 mx-auto" challengeurl="https://lists.happydomain.org/api/public/captcha/altcha"></altcha-widget>
<button type="submit" class="btn btn-lg btn-primary py-2" data-umami-event="cta-newsletter-join">
Join our newsletter
</button>

View file

@ -6,7 +6,7 @@ title = "Rejoindre notre newsletter"
S'inscrire à la lettre d'information d'happyDomain
</h2>
<div class="mt-4 card bg-secondary text-light" style="border-radius: 1rem; box-shadow: 3px 3px 5px #999">
<div class="mt-4 card bg-primary-subtle" style="border-radius: 1rem">
<div class="card-body p-4">
<div class="row">
<div class="col-lg-6 d-flex flex-column justify-content-center">
@ -25,7 +25,7 @@ title = "Rejoindre notre newsletter"
<input type="hidden" name="lang" value="en" />
<input type="email" name="email" required placeholder="j.postel@isi.edu" class="form-control mb-3">
<input type="text" name="name" placeholder="Nom (optionnel)" class="form-control mb-3">
<div class="mb-2 mx-auto h-captcha" data-sitekey="12a1e811-7f34-44ca-9e7c-fb1e9ade6b00"></div>
<altcha-widget floating class="mb-2 mx-auto" challengeurl="https://lists.happydomain.org/api/public/captcha/altcha"></altcha-widget>
<button type="submit" class="btn btn-lg btn-primary py-2" data-umami-event="cta-newsletter-join">
Rejoindre notre newsletter
</button>

View file

@ -19,12 +19,12 @@ layout = "usage"
<div class="container mb-5">
<div class="row">
<div class="order-0 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Keep track of every change with the built-in history.
</h4>
<hr class="bg-light mx-5">
<p>
happy<span class="font-weight-bold">Domain</span> allows you to go back at any time in case of a problem.
happy<span class="fw-bold">Domain</span> allows you to go back at any time in case of a problem.
</p>
<p>
The history allows you to easily track the latest changes, keeping track of who made them.
@ -37,14 +37,14 @@ layout = "usage"
</div>
</div>
<div class="container-fluid py-5 bg-secondary text-light">
<div class="container-fluid py-5" style="background: var(--hd-green-50)">
<div class="container my-5">
<div class="row">
<div class="order-1 order-md-0 col-md-7 align-self-center">
<img class="rounded img-thumbnail" src="/img/screenshots/domain-abstract.webp" alt="Liste des domaines, regroupés astucieusement par client">
</div>
<div class="order-0 order-md-1 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Share the management of zones between your teams.
<small class="text-muted">
(coming soon)
@ -55,7 +55,7 @@ layout = "usage"
Reduce friction between your teams by allowing them to manage records related to their projects (internal or even public).
</p>
<p>
happy<span class="font-weight-bold">Domain</span> implements a powerful access control system allowing you to delegate all or part of a zone, up to the recording.
happy<span class="fw-bold">Domain</span> implements a powerful access control system allowing you to delegate all or part of a zone, up to the recording.
</p>
</div>
</div>
@ -66,12 +66,12 @@ layout = "usage"
<div class="container my-5">
<div class="row">
<div class="order-0 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Centralize and synchronize your domain portfolios.
</h4>
<hr class="bg-light mx-5">
<p>
happy<span class="font-weight-bold">Domain</span> connects to more than 25 hosting providers worldwide. You can manage them in the interface with one click.
happy<span class="fw-bold">Domain</span> connects to more than 25 hosting providers worldwide. You can manage them in the interface with one click.
</p>
</div>
<div class="order-1 col-md-7">
@ -81,14 +81,14 @@ layout = "usage"
</div>
</div>
<div class="container-fluid py-5 bg-secondary text-light">
<div class="container-fluid py-5" style="background: var(--hd-plum-100)">
<div class="container my-5">
<div class="row">
<div class="order-1 order-md-0 col-md-7 align-self-center">
<img class="rounded img-thumbnail" src="/img/screenshots/zone-diff.webp" alt="Relisiez puis confirmer les modifications qui seront appliquées">
</div>
<div class="order-0 order-md-1 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Keep track of the purpose of each sub-domain.
<small class="text-muted">
(coming soon)
@ -96,7 +96,7 @@ layout = "usage"
</h4>
<hr class="bg-light mx-5">
<p>
happy<span class="font-weight-bold">Domain</span> allows you to set an expiration date on your subdomains so that a temporary event and its servers do not remain accessible, simply because a closing ticket has not been processed. We take care of it automatically.
happy<span class="fw-bold">Domain</span> allows you to set an expiration date on your subdomains so that a temporary event and its servers do not remain accessible, simply because a closing ticket has not been processed. We take care of it automatically.
</p>
</div>
</div>

View file

@ -19,12 +19,12 @@ layout = "usage"
<div class="container mb-5">
<div class="row">
<div class="order-0 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Garder une trace de chaque modification avec l'historique intégré.
</h4>
<hr class="bg-light mx-5">
<p>
happy<span class="font-weight-bold">Domain</span> vous permet de revenir en arrière à n'importe quel moment en cas de problème.
happy<span class="fw-bold">Domain</span> vous permet de revenir en arrière à n'importe quel moment en cas de problème.
</p>
<p>
L'historique vous permet de vous repérer facilement dans les dernières modifications, en gardant une trace des intervenants.
@ -37,14 +37,14 @@ layout = "usage"
</div>
</div>
<div class="container-fluid py-5 bg-secondary text-light">
<div class="container-fluid py-5" style="background: var(--hd-green-50)">
<div class="container my-5">
<div class="row">
<div class="order-1 order-md-0 col-md-7 align-self-center">
<img class="rounded img-thumbnail" src="/img/screenshots/domain-abstract.webp" alt="Liste des domaines, regroupés astucieusement par client">
</div>
<div class="order-0 order-md-1 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Partagez la gestion des zones entre vos équipes.
<small class="text-muted">
(bientôt disponible)
@ -55,7 +55,7 @@ layout = "usage"
Réduisez les points de frictions entre vos équipes en leur permettant de gérer les enregistrements relatifs à leurs projets (internes ou publics).
</p>
<p>
happy<span class="font-weight-bold">Domain</span> met en place un puissant système de contrôle d'accès permettant de déléguer tout ou partie d'une zone, jusqu'à l'enregistrement.
happy<span class="fw-bold">Domain</span> met en place un puissant système de contrôle d'accès permettant de déléguer tout ou partie d'une zone, jusqu'à l'enregistrement.
</p>
</div>
</div>
@ -66,12 +66,12 @@ layout = "usage"
<div class="container my-5">
<div class="row">
<div class="order-0 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Centraliser et synchroniser vos portefeuilles de domaines.
</h4>
<hr class="bg-light mx-5">
<p>
happy<span class="font-weight-bold">Domain</span> se connecte à plus de 25 hébergeurs à travers le monde. Vous pouvez les gérer dans l'interface en un clic.
happy<span class="fw-bold">Domain</span> se connecte à plus de 25 hébergeurs à travers le monde. Vous pouvez les gérer dans l'interface en un clic.
</p>
</div>
<div class="order-1 col-md-7">
@ -81,14 +81,14 @@ layout = "usage"
</div>
</div>
<div class="container-fluid py-5 bg-secondary text-light">
<div class="container-fluid py-5" style="background: var(--hd-plum-100)">
<div class="container my-5">
<div class="row">
<div class="order-1 order-md-0 col-md-7 align-self-center">
<img class="rounded img-thumbnail" src="/img/screenshots/zone-diff.webp" alt="Relisiez puis confirmer les modifications qui seront appliquées">
</div>
<div class="order-0 order-md-1 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Garder une trace de la raison d'être de chaque sous-domaine.
<small class="text-muted">
(bientôt disponible)
@ -96,7 +96,7 @@ layout = "usage"
</h4>
<hr class="bg-light mx-5">
<p>
happy<span class="font-weight-bold">Domain</span> vous permet de fixer une date d'expiration sur vos sous-domaines pour éviter qu'un événement temporaire et ses serveurs restent accessibles simplement parce qu'un ticket de fermeture n'a pas été traité. On s'en occupe automatiquement.
happy<span class="fw-bold">Domain</span> vous permet de fixer une date d'expiration sur vos sous-domaines pour éviter qu'un événement temporaire et ses serveurs restent accessibles simplement parce qu'un ticket de fermeture n'a pas été traité. On s'en occupe automatiquement.
</p>
</div>
</div>

View file

@ -18,13 +18,13 @@ layout = "usage"
<div class="container mb-5">
<div class="row">
<div class="order-0 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
All your domains' operations<br>
accessible via a REST API.
</h4>
<hr class="bg-light mx-5">
<p>
Everything that's done in the happy<span class="font-weight-bold">Domain</span> web interface can easily be done with the API, in your language of choice.
Everything that's done in the happy<span class="fw-bold">Domain</span> web interface can easily be done with the API, in your language of choice.
</p>
<p>
Our REST API is fully documented, and thanks to Swagger, you can browse it and easily generate a tool using it in any supported language.
@ -40,20 +40,20 @@ layout = "usage"
</div>
</div>
<div class="container-fluid py-5 bg-secondary text-light">
<div class="container-fluid py-5" style="background: var(--hd-green-50)">
<div class="container my-5">
<div class="row">
<div class="order-1 order-md-0 col-md-7 align-self-center">
<img class="rounded img-thumbnail" src="/img/screenshots/domain-abstract.webp" alt="Liste des domaines, regroupés astucieusement par client">
</div>
<div class="order-0 order-md-1 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Forget about the complexity of each hosting company.<br>
Take advantage of our unified interface.
</h4>
<hr class="bg-light mx-5">
<p>
Don't be afraid of discovering a new host. happy<span class="font-weight-bold">Domain</span> manages over 25 hosts worldwide:
Don't be afraid of discovering a new host. happy<span class="fw-bold">Domain</span> manages over 25 hosts worldwide:
</p>
<ul class="text-left">
<li class="mb-1"><strong>cloud services&nbsp;:</strong> Route53, Azure DNS, Google Cloud DNS, DigitalOcean, Linode, Oracle Cloud, ...</li>
@ -73,13 +73,13 @@ layout = "usage"
<div class="container my-5">
<div class="row">
<div class="order-0 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Respond to all requests<br>
with ease.
</h4>
<hr class="bg-light mx-5">
<p>
A new service? An urgent fix? happy<span class="font-weight-bold">Domain</span> uses simple terminology to stay focused.
A new service? An urgent fix? happy<span class="fw-bold">Domain</span> uses simple terminology to stay focused.
</p>
</div>
<div class="order-1 col-md-7">
@ -89,14 +89,14 @@ layout = "usage"
</div>
</div>
<div class="container-fluid py-5 bg-secondary text-light">
<div class="container-fluid py-5" style="background: var(--hd-plum-100)">
<div class="container my-5">
<div class="row">
<div class="order-1 order-md-0 col-md-7 align-self-center">
<img class="rounded img-thumbnail" src="/img/screenshots/sdk-python.webp" alt="Python SDK usage">
</div>
<div class="order-0 order-md-1 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Many tools are already available for you, DevOps.
</h4>
<hr class="bg-light mx-5">
@ -107,8 +107,8 @@ layout = "usage"
</a>
<span class="text-hilight px-1 text-dark">add or modify zone records,</span>
manage new domains through their registrar,
manage happy<span class="font-weight-bold">Domain</span>'s users,
or deploy happy<span class="font-weight-bold">Domain</span> using the official Ansible collection.
manage happy<span class="fw-bold">Domain</span>'s users,
or deploy happy<span class="fw-bold">Domain</span> using the official Ansible collection.
</li>
<li class="mb-2">
<a href="https://pypi.org/project/happydomain/" target="_blank">

View file

@ -18,13 +18,13 @@ layout = "usage"
<div class="container mb-5">
<div class="row">
<div class="order-0 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Tous vos domaines<br>
accessibles par une API REST.
</h4>
<hr class="bg-light mx-5">
<p>
Tout ce qui se fait dans l'interface web d'happy<span class="font-weight-bold">Domain</span> peut se faire facilement avec l'API, dans votre langage de prédilection.
Tout ce qui se fait dans l'interface web d'happy<span class="fw-bold">Domain</span> peut se faire facilement avec l'API, dans votre langage de prédilection.
</p>
<p>
Notre API REST est entièrement documentée et grâce à Swagger, vous pouvez la parcourir et générer aisément un outil l'utilisant dans tous les langages supportés.
@ -40,20 +40,20 @@ layout = "usage"
</div>
</div>
<div class="container-fluid py-5 bg-secondary text-light">
<div class="container-fluid py-5" style="background: var(--hd-green-50)">
<div class="container my-5">
<div class="row">
<div class="order-1 order-md-0 col-md-7 align-self-center">
<img class="rounded img-thumbnail" src="/img/screenshots/domain-abstract.webp" alt="Liste des domaines, regroupés astucieusement par client">
</div>
<div class="order-0 order-md-1 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Oubliez la complexité de chaque hébergeur.<br>
Profitez de notre interface unifiée.
</h4>
<hr class="bg-light mx-5">
<p>
N'ayez plus d'appréhension à découvrir un nouvel hébergeur. happy<span class="font-weight-bold">Domain</span> gère plus de 25 hébergeurs à travers le monde&nbsp;:
N'ayez plus d'appréhension à découvrir un nouvel hébergeur. happy<span class="fw-bold">Domain</span> gère plus de 25 hébergeurs à travers le monde&nbsp;:
</p>
<ul class="text-left">
<li class="mb-1"><strong>services de cloud&nbsp;:</strong> Route53, Azure DNS, Google Cloud DNS, DigitalOcean, Linode, Oracle Cloud, ...</li>
@ -73,13 +73,13 @@ layout = "usage"
<div class="container my-5">
<div class="row">
<div class="order-0 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Répondez à toutes les demandes<br>
en toute simplicité.
</h4>
<hr class="bg-light mx-5">
<p>
Un nouveau service&nbsp;? Une correction urgente&nbsp;? happy<span class="font-weight-bold">Domain</span> utilise une terminologie simple, pour rester focalisé sur ses objectifs.
Un nouveau service&nbsp;? Une correction urgente&nbsp;? happy<span class="fw-bold">Domain</span> utilise une terminologie simple, pour rester focalisé sur ses objectifs.
</p>
</div>
<div class="order-1 col-md-7">
@ -89,14 +89,14 @@ layout = "usage"
</div>
</div>
<div class="container-fluid py-5 bg-secondary text-light">
<div class="container-fluid py-5" style="background: var(--hd-plum-100)">
<div class="container my-5">
<div class="row">
<div class="order-1 order-md-0 col-md-7 align-self-center">
<img class="rounded img-thumbnail" src="/img/screenshots/sdk-python.webp" alt="Utilisation du SDK Python">
</div>
<div class="order-0 order-md-1 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Déjà de nombreux outils disponibles pour les DevOps.
</h4>
<hr class="bg-light mx-5">
@ -107,8 +107,8 @@ layout = "usage"
</a>
<span class="text-hilight px-1 text-dark">ajouter ou modifier les enregistrements d'une zone,</span>
gérer les bureaux d'enregistrement,
gérer les utilisateurs d'happy<span class="font-weight-bold">Domain</span>,
ou encore déployer happy<span class="font-weight-bold">Domain</span> grâce à la collection Ansible officielle.
gérer les utilisateurs d'happy<span class="fw-bold">Domain</span>,
ou encore déployer happy<span class="fw-bold">Domain</span> grâce à la collection Ansible officielle.
</li>
<li class="mb-2">
<a href="https://pypi.org/project/happydomain/" target="_blank">

View file

@ -18,13 +18,13 @@ layout = "usage"
<div class="container mb-5">
<div class="row">
<div class="order-0 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
All domain names<br>
grouped by customer.
</h4>
<hr class="bg-light mx-5">
<p>
No matter how many customers you follow, happy<span class="font-weight-bold">Domain</span> always gives you a clear overview.
No matter how many customers you follow, happy<span class="fw-bold">Domain</span> always gives you a clear overview.
</p>
</div>
<div class="order-1 col-md-7 py-2 align-self-center">
@ -34,20 +34,20 @@ layout = "usage"
</div>
</div>
<div class="container-fluid py-5 bg-secondary text-light">
<div class="container-fluid py-5" style="background: var(--hd-green-50)">
<div class="container my-5">
<div class="row">
<div class="order-1 order-md-0 col-md-7 align-self-center">
<img class="rounded img-thumbnail" src="/img/screenshots/domain-abstract.webp" alt="Liste des domaines, regroupés astucieusement par client">
</div>
<div class="order-0 order-md-1 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Forget about the complexity of each hosting company.<br>
Take advantage of our unified interface.
</h4>
<hr class="bg-light mx-5">
<p>
Don't be afraid of discovering a new host. happy<span class="font-weight-bold">Domain</span> manages over 25 hosts worldwide. Your customers are probably using them.
Don't be afraid of discovering a new host. happy<span class="fw-bold">Domain</span> manages over 25 hosts worldwide. Your customers are probably using them.
</p>
</div>
</div>
@ -58,13 +58,13 @@ layout = "usage"
<div class="container my-5">
<div class="row">
<div class="order-0 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Respond to all requests<br>
with ease.
</h4>
<hr class="bg-light mx-5">
<p>
A new service? An urgent fix? happy<span class="font-weight-bold">Domain</span> uses simple terminology to stay focused.
A new service? An urgent fix? happy<span class="fw-bold">Domain</span> uses simple terminology to stay focused.
</p>
</div>
<div class="order-1 col-md-7">
@ -74,14 +74,14 @@ layout = "usage"
</div>
</div>
<div class="container-fluid py-5 bg-secondary text-light">
<div class="container-fluid py-5" style="background: var(--hd-plum-100)">
<div class="container my-5">
<div class="row">
<div class="order-1 order-md-0 col-md-7 align-self-center">
<img class="rounded img-thumbnail" src="/img/screenshots/domain-abstract.webp" alt="Liste des domaines, regroupés astucieusement par client">
</div>
<div class="order-0 order-md-1 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Share the management of the area with your client, his teams or your collaborators.
<small class="text-muted">
(coming soon)
@ -89,7 +89,7 @@ layout = "usage"
</h4>
<hr class="bg-light mx-5">
<p>
Whether it is permanent or in preparation for a particular event, happy<span class="font-weight-bold">Domain</span> offers you the possibility to collaborate on the editing of the same area.
Whether it is permanent or in preparation for a particular event, happy<span class="fw-bold">Domain</span> offers you the possibility to collaborate on the editing of the same area.
</p>
<p>
Delegate to your client's teams all or only part of the area, it's up to you.

View file

@ -18,13 +18,13 @@ layout = "usage"
<div class="container mb-5">
<div class="row">
<div class="order-0 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Tous les domaines<br>
regroupés par client.
</h4>
<hr class="bg-light mx-5">
<p>
Quel que soit le nombre de clients que vous suivez, happy<span class="font-weight-bold">Domain</span> vous <span class="text-stroke">donne un aperçu toujours clair</span>.
Quel que soit le nombre de clients que vous suivez, happy<span class="fw-bold">Domain</span> vous <span class="text-stroke">donne un aperçu toujours clair</span>.
</p>
</div>
<div class="order-1 col-md-7 py-2 align-self-center">
@ -34,20 +34,20 @@ layout = "usage"
</div>
</div>
<div class="container-fluid py-5 bg-secondary text-light">
<div class="container-fluid py-5" style="background: var(--hd-green-50)">
<div class="container my-5">
<div class="row">
<div class="order-1 order-md-0 col-md-7 align-self-center">
<img class="rounded img-thumbnail" src="/img/screenshots/domain-abstract.webp" alt="Liste des domaines, regroupés astucieusement par client">
</div>
<div class="order-0 order-md-1 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Oubliez la complexité de chaque hébergeur.<br>
Profitez de notre interface unifiée.
</h4>
<hr class="bg-light mx-5">
<p>
N'ayez plus d'appréhension à découvrir un nouvel hébergeur. happy<span class="font-weight-bold">Domain</span> gère plus de 25 hébergeurs à travers le monde. Vos clients les utilisent sûrement.
N'ayez plus d'appréhension à découvrir un nouvel hébergeur. happy<span class="fw-bold">Domain</span> gère plus de 25 hébergeurs à travers le monde. Vos clients les utilisent sûrement.
</p>
</div>
</div>
@ -58,13 +58,13 @@ layout = "usage"
<div class="container my-5">
<div class="row">
<div class="order-0 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Répondez à toutes les demandes<br>
en toute simplicité.
</h4>
<hr class="bg-light mx-5">
<p>
Un nouveau service&nbsp;? Une correction urgente&nbsp;? happy<span class="font-weight-bold">Domain</span> utilise une terminologie simple, pour rester focalisé sur ses objectifs.
Un nouveau service&nbsp;? Une correction urgente&nbsp;? happy<span class="fw-bold">Domain</span> utilise une terminologie simple, pour rester focalisé sur ses objectifs.
</p>
</div>
<div class="order-1 col-md-7">
@ -74,14 +74,14 @@ layout = "usage"
</div>
</div>
<div class="container-fluid py-5 bg-secondary text-light">
<div class="container-fluid py-5" style="background: var(--hd-plum-100)">
<div class="container my-5">
<div class="row">
<div class="order-1 order-md-0 col-md-7 align-self-center">
<img class="rounded img-thumbnail" src="/img/screenshots/domain-abstract.webp" alt="Liste des domaines, regroupés astucieusement par client">
</div>
<div class="order-0 order-md-1 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Partagez la gestion de la zone avec votre client, ses équipes ou vos collaborateurs.
<small class="text-muted">
(bientôt disponible)
@ -89,7 +89,7 @@ layout = "usage"
</h4>
<hr class="bg-light mx-5">
<p>
Que ce soit de façon permanente ou en préparation d'un événement particulier, happy<span class="font-weight-bold">Domain</span> vous offre la possibilité de collaborer à l'édition d'un même domaine.
Que ce soit de façon permanente ou en préparation d'un événement particulier, happy<span class="fw-bold">Domain</span> vous offre la possibilité de collaborer à l'édition d'un même domaine.
</p>
<p>
Déléguez aux équipes de votre client tout ou partie de la zone, c'est vous qui choisissez.

View file

@ -18,15 +18,15 @@ layout = "usage"
<div class="container mb-5">
<div class="row">
<div class="order-0 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Discover a simple and clear interface.
</h4>
<hr class="bg-light mx-5">
<p>
Whatever the host of your zones, happy<span class="font-weight-bold">Domain</span> displays them in a clear way to limit errors.
Whatever the host of your zones, happy<span class="fw-bold">Domain</span> displays them in a clear way to limit errors.
</p>
<p>
By installing happy<span class="font-weight-bold">Domain</span> next to your Bind or PowerDNS, enjoy the interface without changing your configuration.
By installing happy<span class="fw-bold">Domain</span> next to your Bind or PowerDNS, enjoy the interface without changing your configuration.
<span class="text-muted">(coming soon)</span>
</p>
</div>
@ -37,19 +37,19 @@ layout = "usage"
</div>
</div>
<div class="container-fluid py-5 bg-secondary text-light">
<div class="container-fluid py-5" style="background: var(--hd-green-50)">
<div class="container my-5">
<div class="row">
<div class="order-1 order-md-0 col-md-7 align-self-center">
<img class="rounded img-thumbnail" src="/img/screenshots/domain-abstract.webp" alt="Liste des domaines, regroupés astucieusement par client">
</div>
<div class="order-0 order-md-1 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Self-hosting made easy.
</h4>
<hr class="bg-light mx-5">
<p>
happy<span class="font-weight-bold">Domain</span> allows you with the same interface to manage your DNS zone with a third party provider, or to manage your own DNS servers.
happy<span class="fw-bold">Domain</span> allows you with the same interface to manage your DNS zone with a third party provider, or to manage your own DNS servers.
</p>
<p>
Don't be afraid to edit a zone text file, we take care of it!
@ -66,13 +66,13 @@ layout = "usage"
<div class="container my-5">
<div class="row">
<div class="order-0 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Meet all your needs<br>
in all simplicity.
</h4>
<hr class="bg-light mx-5">
<p>
A new service? An urgent fix? happy<span class="font-weight-bold">Domain</span> uses simple terminology to stay focused on the expected result.
A new service? An urgent fix? happy<span class="fw-bold">Domain</span> uses simple terminology to stay focused on the expected result.
</p>
<p>
We are committed to providing the latest in DNS registration and services.
@ -85,14 +85,14 @@ layout = "usage"
</div>
</div>
<div class="container-fluid py-5 bg-secondary text-light">
<div class="container-fluid py-5" style="background: var(--hd-plum-100)">
<div class="container my-5">
<div class="row">
<div class="order-1 order-md-0 col-md-7 align-self-center">
<img class="rounded img-thumbnail" src="/img/screenshots/service-caa.webp" alt="Liste des domaines, regroupés astucieusement par client">
</div>
<div class="order-0 order-md-1 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Manage easily, even special zones.
<small class="text-muted">
(coming soon)
@ -104,7 +104,7 @@ layout = "usage"
Or a <a href="https://en.wikipedia.org/wiki/DNSBL">Real-time Blockhole List (DNSBL)</a> zone? Or a DNS <a href="https://www.dnsrpz.info/">Response Policy Zones</a> (DNS-RPZ)?
</p>
<p>
happy<span class="font-weight-bold">Domain</span> understands them and allows you to manage them unequivocally.
happy<span class="fw-bold">Domain</span> understands them and allows you to manage them unequivocally.
</p>
</div>
</div>

View file

@ -18,15 +18,15 @@ layout = "usage"
<div class="container mb-5">
<div class="row">
<div class="order-0 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Découvrez une interface simple et claire.
</h4>
<hr class="bg-light mx-5">
<p>
Quel que soit l'hébergeur de vos zones, happy<span class="font-weight-bold">Domain</span> les affiche de 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 manière claire pour limiter les erreurs.
</p>
<p>
En installant happy<span class="font-weight-bold">Domain</span> à côté de votre Bind ou PowerDNS, profitez de l'interface sans changer votre configuration.
En installant happy<span class="fw-bold">Domain</span> à côté de votre Bind ou PowerDNS, profitez de l'interface sans changer votre configuration.
<span class="text-muted">(bientôt disponible)</span>
</p>
</div>
@ -37,19 +37,19 @@ layout = "usage"
</div>
</div>
<div class="container-fluid py-5 bg-secondary text-light">
<div class="container-fluid py-5" style="background: var(--hd-green-50)">
<div class="container my-5">
<div class="row">
<div class="order-1 order-md-0 col-md-7 align-self-center">
<img class="rounded img-thumbnail" src="/img/screenshots/domain-abstract.webp" alt="Liste des domaines, regroupés astucieusement par client">
</div>
<div class="order-0 order-md-1 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Auto-hébergement facilité.
</h4>
<hr class="bg-light mx-5">
<p>
happy<span class="font-weight-bold">Domain</span> vous permet avec la même interface de gérer votre zone DNS auprès d'un fournisseur tiers, ou de gérer votre/vos propres serveurs DNS.
happy<span class="fw-bold">Domain</span> vous permet avec la même interface de gérer votre zone DNS auprès d'un fournisseur tiers, ou de gérer votre/vos propres serveurs DNS.
</p>
<p>
N'ayez plus peur de mal éditer un fichier texte de zone, on s'en occupe&nbsp;!
@ -66,13 +66,13 @@ layout = "usage"
<div class="container my-5">
<div class="row">
<div class="order-0 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Répondez à tous vos besoins<br>
en toute simplicité.
</h4>
<hr class="bg-light mx-5">
<p>
Un nouveau service&nbsp;? Une correction urgente&nbsp;? happy<span class="font-weight-bold">Domain</span> utilise une terminologie simple, pour rester focalisé sur le résultat attendu.
Un nouveau service&nbsp;? Une correction urgente&nbsp;? happy<span class="fw-bold">Domain</span> utilise une terminologie simple, pour rester focalisé sur le résultat attendu.
</p>
<p>
Nous avons à cœur de mettre à disposition les dernières nouveautés en terme d'enregistrement DNS et de services.
@ -85,14 +85,14 @@ layout = "usage"
</div>
</div>
<div class="container-fluid py-5 bg-secondary text-light">
<div class="container-fluid py-5" style="background: var(--hd-plum-100)">
<div class="container my-5">
<div class="row">
<div class="order-1 order-md-0 col-md-7 align-self-center">
<img class="rounded img-thumbnail" src="/img/screenshots/service-caa.webp" alt="Liste des domaines, regroupés astucieusement par client">
</div>
<div class="order-0 order-md-1 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Gérez simplement, même les zones spéciales.
<small class="text-muted">
(bientôt disponible)
@ -103,7 +103,7 @@ layout = "usage"
Vous recherchez une interface qui affiche d'une manière humaine les zones de <span class="font-italic">reverse</span> IPv4/IPv6&nbsp;? ou une zone <a href="https://fr.wikipedia.org/wiki/DNSBL"><span class="font-italic">Real-time Blockhole List</span> (DNSBL)</a>&nbsp;? Ou encore une zone de politique <a href="https://www.dnsrpz.info/">de filtrage des réponses DNS (DNS-RPZ)</a>&nbsp;?
</p>
<p>
happy<span class="font-weight-bold">Domain</span> les comprend et vous permet de les gérer sans équivoque.
happy<span class="fw-bold">Domain</span> les comprend et vous permet de les gérer sans équivoque.
</p>
</div>
</div>

View file

@ -18,15 +18,15 @@ layout = "usage"
<div class="container mb-5">
<div class="row">
<div class="order-0 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Edit your zone files more efficiently.
</h4>
<hr class="bg-light mx-5">
<p>
Whatever the host of your zones, happy<span class="font-weight-bold">Domain</span> displays them in a clear way to limit errors.
Whatever the host of your zones, happy<span class="fw-bold">Domain</span> displays them in a clear way to limit errors.
</p>
<p>
By installing happy<span class="font-weight-bold">Domain</span> next to your Bind or PowerDNS, enjoy the interface without changing your configuration. <span class="text-muted">(coming soon)</span>
By installing happy<span class="fw-bold">Domain</span> next to your Bind or PowerDNS, enjoy the interface without changing your configuration. <span class="text-muted">(coming soon)</span>
</p>
</div>
<div class="order-1 col-md-7 py-2 align-self-center">
@ -36,19 +36,19 @@ layout = "usage"
</div>
</div>
<div class="container-fluid py-5 bg-secondary text-light">
<div class="container-fluid py-5" style="background: var(--hd-green-50)">
<div class="container my-5">
<div class="row">
<div class="order-1 order-md-0 col-md-7 align-self-center">
<img class="rounded img-thumbnail" src="/img/screenshots/zone-diff.webp" alt="Review and confirm the changes that will be applied">
</div>
<div class="order-0 order-md-1 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
View your changes before applying them.
</h4>
<hr class="bg-light mx-5">
<p>
Before publishing your changes, happy<span class="font-weight-bold">Domain</span> shows you what changes will be made. A preview that will avoid many mistakes.
Before publishing your changes, happy<span class="fw-bold">Domain</span> shows you what changes will be made. A preview that will avoid many mistakes.
</p>
<p>
You can even select which changes you want to release now and which ones should wait.
@ -62,7 +62,7 @@ layout = "usage"
<div class="container my-5">
<div class="row">
<div class="order-0 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Share the zone management with your teams or collaborators.
<small class="text-muted">
(coming soon)
@ -70,7 +70,7 @@ layout = "usage"
</h4>
<hr class="bg-light mx-5">
<p>
Whether it's permanent or in preparation for a particular event, happy<span class="font-weight-bold">Domain</span> gives you the ability to collaborate on editing the same area.
Whether it's permanent or in preparation for a particular event, happy<span class="fw-bold">Domain</span> gives you the ability to collaborate on editing the same area.
</p>
<p>
Delegate to your teams all or only part of the area, it's up to you.
@ -83,14 +83,14 @@ layout = "usage"
</div>
</div>
<div class="container-fluid py-5 bg-secondary text-light">
<div class="container-fluid py-5" style="background: var(--hd-plum-100)">
<div class="container my-5">
<div class="row">
<div class="order-1 order-md-0 col-md-7 align-self-center">
<img class="rounded img-thumbnail" src="/img/screenshots/domains-list.png" alt="Liste des domaines, regroupés astucieusement par client">
</div>
<div class="order-0 order-md-1 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Manage simply, even the special zones.
<small class="text-muted">
(coming soon)
@ -102,7 +102,7 @@ layout = "usage"
Or a <a href="https://en.wikipedia.org/wiki/DNSBL">Real-time Blockhole List (DNSBL)</a> zone? Or a DNS <a href="https://www.dnsrpz.info/">Response Policy Zones</a> (DNS-RPZ)?
</p>
<p>
happy<span class="font-weight-bold">Domain</span> understands them and allows you to manage them unequivocally.
happy<span class="fw-bold">Domain</span> understands them and allows you to manage them unequivocally.
</p>
</div>
</div>

View file

@ -18,15 +18,15 @@ layout = "usage"
<div class="container mb-5">
<div class="row">
<div class="order-0 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Éditez plus efficacement vos fichiers de zone.
</h4>
<hr class="bg-light mx-5">
<p>
Quel que soit l'hébergeur de vos zones, happy<span class="font-weight-bold">Domain</span> les affiche de 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 manière claire pour limiter les erreurs.
</p>
<p>
En installant happy<span class="font-weight-bold">Domain</span> à côté de votre Bind ou PowerDNS, profitez de l'interface sans changer votre configuration. <span class="text-muted">(bientôt disponible)</span>
En installant happy<span class="fw-bold">Domain</span> à côté de votre Bind ou PowerDNS, profitez de l'interface sans changer votre configuration. <span class="text-muted">(bientôt disponible)</span>
</p>
</div>
<div class="order-1 col-md-7 py-2 align-self-center">
@ -36,19 +36,19 @@ layout = "usage"
</div>
</div>
<div class="container-fluid py-5 bg-secondary text-light">
<div class="container-fluid py-5" style="background: var(--hd-green-50)">
<div class="container my-5">
<div class="row">
<div class="order-1 order-md-0 col-md-7 align-self-center">
<img class="rounded img-thumbnail" src="/img/screenshots/zone-diff.webp" alt="Relisiez puis confirmer les modifications qui seront appliquées">
</div>
<div class="order-0 order-md-1 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Visualisez les modifications apportées avant de les appliquer.
</h4>
<hr class="bg-light mx-5">
<p>
Avant de publier vos changements, happy<span class="font-weight-bold">Domain</span> vous montre quelles modifications seront faites. Une prévisualisation qui évitera bien des erreurs.
Avant de publier vos changements, happy<span class="fw-bold">Domain</span> vous montre quelles modifications seront faites. Une prévisualisation qui évitera bien des erreurs.
</p>
<p>
Vous pouvez même sélectionner les changements que vous souhaitez diffuser maintenant et ceux qui doivent attendre.
@ -62,7 +62,7 @@ layout = "usage"
<div class="container my-5">
<div class="row">
<div class="order-0 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Partagez la gestion de la zone avec vos équipes ou vos collaborateurs.
<small class="text-muted">
(bientôt disponible)
@ -70,7 +70,7 @@ layout = "usage"
</h4>
<hr class="bg-light mx-5">
<p>
Que ce soit permanent ou en préparation d'un événement particulier, happy<span class="font-weight-bold">Domain</span> vous offre la possibilité de collaborer à l'édition d'un même domaine.
Que ce soit permanent ou en préparation d'un événement particulier, happy<span class="fw-bold">Domain</span> vous offre la possibilité de collaborer à l'édition d'un même domaine.
</p>
<p>
Déléguez à vos équipes tout ou partie de la zone, c'est vous qui choisissez.
@ -83,14 +83,14 @@ layout = "usage"
</div>
</div>
<div class="container-fluid py-5 bg-secondary text-light">
<div class="container-fluid py-5" style="background: var(--hd-plum-100)">
<div class="container my-5">
<div class="row">
<div class="order-1 order-md-0 col-md-7 align-self-center">
<img class="rounded img-thumbnail" src="/img/screenshots/domains-list.png" alt="Liste des domaines, regroupés astucieusement par client">
</div>
<div class="order-0 order-md-1 col-md-5 align-self-center text-center">
<h4 class="font-weight-bold">
<h4 class="fw-bold">
Gérez simplement, même les zones spéciales.
<small class="text-muted">
(bientôt disponible)
@ -101,7 +101,7 @@ layout = "usage"
Vous recherchez une interface qui affiche d'une manière humaine les zones de <span class="font-italic">reverse</span> IPv4/IPv6&nbsp;? ou une zone <a href="https://fr.wikipedia.org/wiki/DNSBL"><span class="font-italic">Real-time Blockhole List</span> (DNSBL)</a>&nbsp;? Ou encore une zone de politique <a href="https://www.dnsrpz.info/">de filtrage des réponses DNS (DNS-RPZ)</a>&nbsp;?
</p>
<p>
happy<span class="font-weight-bold">Domain</span> les comprend et vous permet de les gérer sans équivoque.
happy<span class="fw-bold">Domain</span> les comprend et vous permet de les gérer sans équivoque.
</p>
</div>
</div>

View file

@ -4,7 +4,7 @@
- id: lead
translation: |
brings every DNS zone you manage — across registrars, providers and self-hosted name servers — into one calm space, clearly organized by service.
brings every DNS zone you manage (across registrars, providers and self-hosted name servers) into one calm space, clearly organized by service.
- id: tryit
translation: "Try it online"
@ -255,6 +255,13 @@
- id: cta-account-button
translation: "Create my online space"
- id: beta-alert-title
translation: "Online version closed, beta access only"
- id: beta-alert-text
translation: 'happyDomain is evolving: soon, continuously test your domains'' security and monitor every service exposed through DNS — with zero configuration. We''re rolling out this new version progressively to gather feedback and deliver the best possible service. <a href="/en/beta/">Learn more</a>.'
- id: beta-alert-button
translation: "Join the beta"
- id: cta-newsletter-title
translation: "Stay a step ahead!"
- id: cta-newsletter-text
@ -274,3 +281,8 @@
translation: "https://fosdem.org/2024/schedule/event/fosdem-2024-2316-let-s-make-people-love-domain-names-again/"
- id: conf-fosdem24-body-2
translation: "on the FOSDEM website, along with the video."
- id: usage-discover-pre
translation: "Discover"
- id: usage-discover-post
translation: "for:"

View file

@ -4,7 +4,7 @@
- id: lead
translation: |
rassemble toutes les zones DNS que vous gérez qu'elles proviennent de bureaux d'enregistrement, de prestataires de cloud ou de serveurs de noms auto-hébergés au sein d'un espace unique et clair, organisé clairement par service.
rassemble toutes les zones DNS que vous gérez (qu'elles proviennent de bureaux d'enregistrement, de prestataires de cloud ou de serveurs de noms auto-hébergés) au sein d'un espace unique et clair, organisé clairement par service.
- id: tryit
translation: "Essayer maintenant"
@ -254,6 +254,13 @@
- id: cta-account-button
translation: "Créer mon espace en ligne"
- id: beta-alert-title
translation: "Version en ligne fermée, accès bêta uniquement"
- id: beta-alert-text
translation: 'happyDomain se transforme : bientôt, testez en continu la sécurité de vos domaines et supervisez l''ensemble des services exposés via le DNS, sans configuration. Nous déployons cette nouvelle version progressivement pour recueillir vos retours et offrir le meilleur service possible. <a href="/fr/beta/">En savoir plus</a>.'
- id: beta-alert-button
translation: "Rejoindre la bêta"
- id: cta-newsletter-title
translation: "Gardez une longueur d'avance!"
- id: cta-newsletter-text
@ -273,3 +280,8 @@
translation: "https://fosdem.org/2024/schedule/event/fosdem-2024-2316-let-s-make-people-love-domain-names-again/"
- id: conf-fosdem24-body-2
translation: "sur le site du FOSDEM, avec la captation vidéo!"
- id: usage-discover-pre
translation: "Découvrez"
- id: usage-discover-post
translation: "pour:"

View file

@ -0,0 +1,40 @@
<!doctype html>
<html lang="{{ .Site.LanguageCode }}" style="background-color: var(--bs-dark)">
{{ partial "head.html" . }}
<body>
<div id="all">
{{ partial "nav.html" . }} {{ partial "breadcrumbs.html" . }}
<div
id="content"
class="mt-5 mb-5"
style="min-height: calc(80vh - 152px)"
>
<div class="container">
<header>
<h1>{{ .Title }}</h1>
</header>
{{ with .Content }}
<div>{{ . }}</div>
{{ end }}
<ul class="list-unstyled mt-4">
{{ range .Pages }}
<li class="mb-3">
<a href="{{ .RelPermalink }}"><h3>{{ .Title }}</h3></a>
{{ with .Description }}<p>{{ . }}</p>{{ end }}
</li>
{{ end }}
</ul>
</div>
<!-- /.container -->
</div>
<!-- /#content -->
</div>
<!-- /#all -->
{{ partial "footer.html" . }} {{ partial "scripts.html" . }}
</body>
</html>

View file

@ -1,5 +1,5 @@
<!doctype html>
<html lang="{{ .Site.LanguageCode }}">
<html lang="{{ .Site.LanguageCode }}" style="background-color: var(--bs-dark)">
{{ partial "head.html" . }}
<body>

View file

@ -1,4 +1,4 @@
<nav aria-label="breadcrumb" style="background-color: #e9ecef">
<nav aria-label="breadcrumb" style="background-color: #e9ecef; padding-top: 64px">
<ol class="breadcrumb container">
<li class="breadcrumb-item"><a href="../">{{ i18n "home" }}</a></li>
<li class="breadcrumb-item active" aria-current="page">{{ .Title }}</li>

View file

@ -1,20 +1,14 @@
<nav aria-label="breadcrumb" style="background-color: #e9ecef">
<div class="container d-flex">
<div class="align-self-center">
Découvrez
<svg version="1.1" viewBox="7 5 100 15" aria-labelledby="title" style="height: 1em">
<title>happyDomain</title>
<g fill="#000" stroke="#000" stroke-width=".4" aria-label="happy"><path d="m7.1613 5.7392h0.28939v4.2106q2.59-0.96945 3.9791-0.96945 0.77412 0 1.172 0.30386 0.709 0.53537 0.709 2.0257v4.8907h-0.28939v-4.8907q0-1.3457-0.59325-1.7942-0.36174-0.27492-1.0563-0.27492-0.57878 0-1.3746 0.1881-0.88264 0.20981-2.5466 0.83199v5.9397h-0.28939z" /><path d="m21.175 12.721h-2.7781q-1.1214 0-1.6929 0.24598-0.82476 0.36174-0.82476 1.3095 0 0.79582 0.5209 1.2299 0.49196 0.41238 1.3022 0.41238h0.0217q0.83923 0 1.8231-0.60772 0.34003-0.20981 0.83923-0.57878 0.709-0.52813 0.78858-0.57878zm2.496 3.0748q-0.3762 0.44132-1.0852 0.44132-0.67283 0-1.0418-0.39068-0.36897-0.39067-0.36897-1.0635v-0.28215q-1.3674 0.99116-1.6206 1.1431-0.96222 0.56431-1.8304 0.56431h-0.0217q-0.93328 0-1.5048-0.49196-0.60772-0.52813-0.60772-1.4397 0-1.0852 0.90434-1.5265 0.65836-0.31833 1.9027-0.31833h2.7781v-1.0635q0-1.0056-0.29662-1.3529-0.67283-0.78858-2.3875-0.78858-0.78135 0-1.3963 0.29662-0.74518 0.34727-0.94051 1.0129l-0.27492-0.07958q0.22428-0.76688 1.0346-1.172 0.69453-0.34727 1.5772-0.34727 1.8449 0 2.6117 0.88987 0.3545 0.42685 0.3545 1.541v3.4148q0.0072 1.1648 1.1286 1.1648 0.57878 0 0.86817-0.34003z" /><path d="m25.27 14.935q0.98392 1.0129 2.7998 1.0129h0.0217q1.5555 0 2.3875-0.8971 0.82476-0.88264 0.82476-2.4598 0-1.3891-0.61495-2.2862-0.709-1.0346-2.0257-1.0346-1.3746 0-3.3931 0.95498zm0-5.9325v0.90434q1.9606-0.92604 3.3931-0.92604 1.4469 0 2.2355 1.1141 0.69453 0.98392 0.69453 2.496 0 1.7002-0.91157 2.6624-0.92604 0.98392-2.6117 0.98392-1.7291 0-2.7998-0.91157v4.2106h-0.28939v-10.534z" /><path d="m34.241 14.935q0.98392 1.0129 2.7998 1.0129h0.0217q1.5555 0 2.3875-0.8971 0.82476-0.88264 0.82476-2.4598 0-1.3891-0.61495-2.2862-0.709-1.0346-2.0257-1.0346-1.3746 0-3.3931 0.95498zm0-5.9325v0.90434q1.9606-0.92604 3.3931-0.92604 1.4469 0 2.2355 1.1141 0.69453 0.98392 0.69453 2.496 0 1.7002-0.91157 2.6624-0.92604 0.98392-2.6117 0.98392-1.7291 0-2.7998-0.91157v4.2106h-0.28939v-10.534z" /><path d="m49 16.627q-0.1881 1.3891-1.0707 2.1559-0.91157 0.78858-2.4092 0.78858-1.1141-0.0072-2.033-0.42685-1.0635-0.49196-1.4759-1.3963l0.26045-0.12299q0.37621 0.83199 1.3746 1.2733 0.8537 0.38344 1.8738 0.38344 1.3818 0 2.2066-0.709 0.80305-0.6873 0.97669-1.9534 0.05064-0.32556 0.05064-0.88264v-0.49196q-1.7074 0.62942-2.6551 0.83923-0.709 0.15193-1.2588 0.15193-0.80305 0-1.2444-0.3328-0.70177-0.52813-0.70177-2.0257v-4.8762h0.28215v4.8762q0 1.3529 0.59325 1.7942 0.36174 0.27492 1.0563 0.27492 0.57878 0 1.3818-0.1881 0.88264-0.20257 2.5466-0.82476v-5.9325h0.28215v6.6921q0 0.60048-0.03617 0.93328z" /></g>
<g fill="#000" aria-label="Domain"><path d="m 53.228042,15.362291 h 1.938901 q 1.960602,0 2.966225,-0.940511 0.983919,-0.911573 0.983919,-2.684074 0,-1.786971 -0.991153,-2.749186 -1.020093,-0.991154 -2.987931,-0.991154 h -1.909961 z m 1.909961,-8.949325 q 2.626196,0 4.10931,1.439706 1.47588,1.425236 1.47588,3.885034 0,2.452563 -1.49035,3.841626 -1.475878,1.367358 -4.09484,1.367358 h -3.516064 v -10.533724 z" /><path d="m 62.228011,13.125048 q 0,-1.779737 1.070734,-2.814299 1.085204,-1.056266 2.973461,-1.056266 1.888258,0.0072 2.966228,1.056266 1.077971,1.041797 1.077971,2.814299 0,1.772501 -1.077971,2.807063 -1.07797,1.049032 -2.966228,1.049032 -1.88102,0 -2.973461,-1.041797 -1.070734,-1.049031 -1.070734,-2.814298 z m 1.598866,0 q 0,1.099674 0.593246,1.671215 0.622184,0.60048 1.852083,0.60048 1.2299,0 1.84485,-0.60048 0.593246,-0.571541 0.593246,-1.671215 0,-1.10691 -0.593246,-1.685686 -0.61495,-0.593245 -1.852083,-0.60048 -1.222666,0 -1.84485,0.60048 -0.593246,0.578776 -0.593246,1.685686 z" /><path d="m 73.66607,16.957892 h -1.606103 v -7.668782 h 1.606103 v 0.83199 q 0.687297,-0.535368 1.606105,-0.72347 0.708999,-0.144694 1.273307,-0.144694 0.947746,0 1.519285,0.426847 0.470258,0.340031 0.61495,0.600481 0.904338,-0.658358 1.786972,-0.853695 0.788583,-0.173633 1.396297,-0.173633 0.954981,0 1.526521,0.419613 0.918808,0.665592 0.918808,2.315104 v 4.970239 h -1.606103 v -4.970239 q 0,-0.84646 -0.267684,-1.041797 -0.144695,-0.10852 -0.557072,-0.10852 -0.470255,0 -1.172023,0.166398 -0.998386,0.340031 -1.729091,0.933276 v 5.020882 h -1.613339 v -4.970239 q 0,-0.84646 -0.260448,-1.041797 -0.151929,-0.115755 -0.557073,-0.115755 -0.448553,0 -1.09244,0.151929 -0.759643,0.173632 -1.786972,0.824756 z" /><path d="m 91.051057,14.051772 -1.996779,-0.166398 q -0.954979,0 -1.381828,0.166398 -0.376203,0.151929 -0.376203,0.535368 0,0.368969 0.24598,0.549837 0.289388,0.23151 0.839224,0.23151 h 0.0217 q 0.62942,0 1.425236,-0.405143 0.376206,-0.224275 1.222666,-0.651123 z m 3.935677,2.286165 q -0.752409,0.593246 -1.917197,0.636654 -0.911572,0 -1.46141,-0.528133 -0.245978,-0.238745 -0.383437,-0.542603 -0.477491,0.325562 -0.745175,0.470256 -1.070737,0.578776 -2.07636,0.578776 h -0.0217 q -1.121378,0 -1.852083,-0.578776 -0.839224,-0.665593 -0.839224,-1.786971 0,-1.389063 1.266071,-1.953369 0.759645,-0.332797 2.098063,-0.332797 l 1.996779,0.311092 v -0.643888 q 0,-1.157552 -1.700157,-1.157552 -1.418,0 -2.604492,0.911572 l -0.860928,-1.215429 q 0.549836,-0.499195 1.46141,-0.918807 0.80305,-0.36897 1.794206,-0.36897 2.061887,0 2.995165,0.998389 0.520899,0.571541 0.520899,1.808675 v 3.002401 q 0.0072,0.361734 0.419613,0.434082 h 0.07958 q 0.535365,0 1.157552,-0.405144 z" /><path d="m 96.448142,6.566922 q 0.368969,0 0.636653,0.24598 0.289388,0.267684 0.289388,0.658358 0,0.390674 -0.289388,0.658358 -0.267684,0.245979 -0.636653,0.245979 -0.347266,0 -0.629418,-0.238745 -0.303858,-0.274918 -0.303858,-0.665592 0,-0.390674 0.303858,-0.672827 0.282152,-0.231511 0.629418,-0.231511 z m -0.80305,10.38903 v -7.668782 h 1.598869 v 7.668782 z" /><path d="m 100.803432,16.957892 h -1.598869 v -7.668782 h 1.598869 v 0.774113 q 0.803053,-0.477491 1.758032,-0.665593 0.752409,-0.144694 1.345655,-0.144694 0.969449,0 1.562695,0.405143 0.969446,0.672828 0.969446,2.329574 v 4.970239 h -1.6061 v -4.970239 q 0,-0.831991 -0.289388,-1.034562 -0.173632,-0.12299 -0.636653,-0.12299 -0.477491,0 -1.179256,0.151929 -0.810287,0.180867 -1.924431,0.759643 z" /></g>
</svg>
pour :
<nav aria-label="breadcrumb" style="background-color: #e9ecef; padding-top: 64px">
<div class="container d-flex gap-1">
<div class="align-self-center">
{{ i18n "usage-discover-pre" }} <span style="font-family: var(--hd-font-brand)">happy<strong>Domain</strong></span> {{ i18n "usage-discover-post" }}
</div>
<ol class="breadcrumb mb-0">
<li class="breadcrumb-item"><a href="{{ ref . "/use-happyDomain/freelance" }}">{{ i18n "freelance" }}</a></li>
<li class="breadcrumb-item"><a href="{{ ref . "/use-happyDomain/sysadmin" }}">{{ i18n "sysadmin" }}</a></li>
<li class="breadcrumb-item"><a href="{{ ref . "/use-happyDomain/devops" }}">{{ i18n "devops" }}</a></li>
<li class="breadcrumb-item"><a href="{{ ref . "/use-happyDomain/cio" }}">{{ i18n "cio" }}</a></li>
<li class="breadcrumb-item"><a href="{{ ref . "/use-happyDomain/geek" }}">{{ i18n "geek" }}</a></li>
</ol>
</div>
<ol class="breadcrumb mb-0">
<li class="breadcrumb-item"><a href="{{ ref . "/use-happyDomain/freelance" }}">{{ i18n "freelance" }}</a></li>
<li class="breadcrumb-item"><a href="{{ ref . "/use-happyDomain/sysadmin" }}">{{ i18n "sysadmin" }}</a></li>
<li class="breadcrumb-item"><a href="{{ ref . "/use-happyDomain/devops" }}">{{ i18n "devops" }}</a></li>
<li class="breadcrumb-item"><a href="{{ ref . "/use-happyDomain/cio" }}">{{ i18n "cio" }}</a></li>
<li class="breadcrumb-item"><a href="{{ ref . "/use-happyDomain/geek" }}">{{ i18n "geek" }}</a></li>
</ol>
</div>
</nav>

View file

@ -13,7 +13,7 @@
</p>
</div>
<a
href="/register"
href="/beta/"
class="btn btn-lg btn-light px-4"
style="border-radius: 2em"
data-umami-event="cta-join"

View file

@ -39,10 +39,11 @@
placeholder="j.postel@isi.edu"
class="form-control my-3"
/>
<div
class="my-2 mx-auto h-captcha"
data-sitekey="12a1e811-7f34-44ca-9e7c-fb1e9ade6b00"
></div>
<altcha-widget
floating
class="my-2 mx-auto"
challengeurl="https://lists.happydomain.org/api/public/captcha/altcha"
></altcha-widget>
<button
type="submit"
class="btn btn-lg btn-primary py-2"

View file

@ -1,88 +1,254 @@
<style>
.jumbo-hero {
padding: 8rem 0 5rem;
background: linear-gradient(135deg, var(--hd-accent-subtle, #f0fdf4) 0%, var(--hd-bg-canvas, white) 60%);
}
.hero-eyebrow {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: .75rem;
margin-bottom: 1.5rem;
font-size: .875rem;
color: var(--hd-fg-3, #6b7280);
}
.hero-eyebrow .badge-os {
display: inline-flex;
align-items: center;
gap: .35rem;
padding: .25em .75em;
background: var(--hd-accent-subtle, #f0fdf4);
border: 1px solid var(--hd-accent, #22c55e);
border-radius: 2em;
color: var(--hd-accent, #22c55e);
font-weight: 600;
font-size: .8rem;
}
.hero-meta {
display: flex;
flex-wrap: wrap;
gap: 1rem;
margin-top: 1.5rem;
font-size: .875rem;
color: var(--hd-fg-3, #6b7280);
}
.hero-meta .check { color: var(--hd-accent, #22c55e); margin-right: .25rem; }
/* Browser mockup */
.hero-stack { position: relative; }
.hero-stack .browser:last-child {
position: absolute;
bottom: 0; right: 0;
width: 86%;
z-index: 0;
opacity: .45;
pointer-events: none;
}
.hero-stack .browser:first-child { position: relative; z-index: 1; }
.browser {
background: var(--hd-bg-canvas, #fff);
border-radius: 10px;
box-shadow: 0 16px 48px rgba(0,0,0,.12);
overflow: hidden;
border: 1px solid var(--hd-border, #e5e7eb);
}
.browser-bar {
display: flex;
align-items: center;
gap: .75rem;
padding: .55rem 1rem;
background: var(--hd-bg-subtle, #f9fafb);
border-bottom: 1px solid var(--hd-border, #e5e7eb);
}
.browser-dots { display: flex; gap: 5px; }
.browser-dots span { width: 10px; height: 10px; border-radius: 50%; background: var(--hd-border, #e5e7eb); }
.browser-url {
flex: 1;
display: flex;
align-items: center;
gap: .01rem;
background: var(--hd-bg-canvas, #fff);
border-radius: 4px;
padding: .22rem .6rem;
font-size: .75rem;
color: var(--hd-fg-3, #6b7280);
}
.browser-url .lock { color: var(--hd-accent, #22c55e); font-size: .7rem; }
.jumbo-hero {
padding: 8rem 0 5rem;
background: linear-gradient(
135deg,
var(--hd-accent-subtle, #f0fdf4) 0%,
var(--hd-bg-canvas, white) 60%
);
}
.hero-eyebrow {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 0.75rem;
margin-bottom: 1.5rem;
font-size: 0.875rem;
color: var(--hd-fg-3, #6b7280);
}
.hero-eyebrow .badge-os {
display: inline-flex;
align-items: center;
gap: 0.35rem;
padding: 0.25em 0.75em;
background: var(--hd-accent-subtle, #f0fdf4);
border: 1px solid var(--hd-accent, #22c55e);
border-radius: 2em;
color: var(--hd-accent, #22c55e);
font-weight: 600;
font-size: 0.8rem;
}
.hero-meta {
display: flex;
flex-wrap: wrap;
gap: 1rem;
margin-top: 1.5rem;
font-size: 0.875rem;
color: var(--hd-fg-3, #6b7280);
}
.hero-meta .check {
color: var(--hd-accent, #22c55e);
margin-right: 0.25rem;
}
/* Browser mockup */
.hero-stack {
position: relative;
}
.hero-stack .browser:last-child {
position: absolute;
bottom: 0;
right: 0;
width: 86%;
z-index: 0;
opacity: 0.45;
pointer-events: none;
}
.hero-stack .browser:first-child {
position: relative;
z-index: 1;
}
.browser {
background: var(--hd-bg-canvas, #fff);
border-radius: 10px;
box-shadow: 0 16px 48px rgba(0, 0, 0, 0.12);
overflow: hidden;
border: 1px solid var(--hd-border, #e5e7eb);
}
.browser-bar {
display: flex;
align-items: center;
gap: 0.75rem;
padding: 0.55rem 1rem;
background: var(--hd-bg-subtle, #f9fafb);
border-bottom: 1px solid var(--hd-border, #e5e7eb);
}
.browser-dots {
display: flex;
gap: 5px;
}
.browser-dots span {
width: 10px;
height: 10px;
border-radius: 50%;
background: var(--hd-border, #e5e7eb);
}
.browser-url {
flex: 1;
display: flex;
align-items: center;
gap: 0.01rem;
background: var(--hd-bg-canvas, #fff);
border-radius: 4px;
padding: 0.22rem 0.6rem;
font-size: 0.75rem;
color: var(--hd-fg-3, #6b7280);
}
.browser-url .lock {
color: var(--hd-accent, #22c55e);
font-size: 0.7rem;
}
/* ── Screenshot carousel ── */
.browser {
position: relative;
}
/* window dots double as carousel indicators */
.browser-dots .bdot {
width: 10px;
height: 10px;
padding: 0;
border: none;
border-radius: 50%;
background: var(--hd-border, #e5e7eb);
cursor: pointer;
transition:
background 0.35s ease,
transform 0.35s ease,
box-shadow 0.35s ease;
}
.browser-dots .bdot:hover {
transform: scale(1.18);
}
.browser-dots .bdot.active {
background: var(--hd-accent, #22c55e);
transform: scale(1.25);
box-shadow: 0 0 0 3px var(--hd-accent-subtle, #f0fdf4);
}
/* URL path swaps with the slide */
.browser-url .url-path {
transition: opacity 0.25s ease;
}
.browser.loading .url-path {
opacity: 0.35;
}
/* loading sweep, like a browser navigating */
.browser-load {
position: absolute;
left: 0;
top: 0;
height: 2px;
width: 0;
background: var(--hd-accent, #22c55e);
opacity: 0;
z-index: 6;
pointer-events: none;
border-radius: 0 2px 2px 0;
}
.browser.loading .browser-load {
animation: browserLoad 0.7s ease-out;
}
@keyframes browserLoad {
0% {
width: 0;
opacity: 1;
}
70% {
width: 85%;
opacity: 1;
}
100% {
width: 100%;
opacity: 0;
}
}
/* the carousel viewport */
.carousel-window {
position: relative;
overflow: hidden;
aspect-ratio: 1920 / 980;
background: var(--hd-bg-subtle, #f9fafb);
}
.carousel-track {
position: absolute;
inset: 0;
}
.carousel-track .slide {
position: absolute;
inset: 0;
margin: 0;
opacity: 0;
transition: opacity 0.8s ease;
pointer-events: none;
}
.carousel-track .slide.active {
opacity: 1;
pointer-events: auto;
z-index: 2;
}
.carousel-track .slide img {
width: 100%;
height: 100%;
object-fit: cover;
object-position: top left;
display: block;
}
/* 7s progress indicator */
.carousel-progress {
position: absolute;
left: 0;
bottom: 0;
height: 3px;
width: 100%;
background: rgba(0, 0, 0, 0.06);
z-index: 4;
}
.carousel-progress span {
display: block;
height: 100%;
width: 0;
background: var(--hd-accent, #22c55e);
}
.carousel-progress span.run {
animation: carProg 7s linear forwards;
}
@keyframes carProg {
from {
width: 0;
}
to {
width: 100%;
}
}
/* pause the progress timer on hover */
.browser.paused .carousel-progress span {
animation-play-state: paused;
}
@media (prefers-reduced-motion: reduce) {
.carousel-track .slide {
transition: none;
}
.carousel-progress span.run {
animation: none;
}
.browser.loading .browser-load {
animation: none;
}
}
</style>
<section class="jumbo-hero">
<div class="container">
<div class="row align-items-center g-5">
<!-- Copy column -->
<div class="col-lg-5">
<a class="hero-eyebrow" href="https://git.happydomain.org/" target="_blank">
<span class="badge-os"><i class="bi bi-git"></i> Open source</span>
<a
class="hero-eyebrow"
href="https://git.happydomain.org/"
target="_blank"
>
<span class="badge-os"
><i class="bi bi-git"></i> Open source</span
>
</a>
<h1 class="display-4 fw-bold mb-5" style="text-wrap: balance">
@ -111,41 +277,215 @@
</div>
<div class="hero-meta">
<span><i class="bi bi-check2 check"></i><strong>No account</strong> needed for the demo</span>
<span><i class="bi bi-check2 check"></i><strong>~30s</strong> to first zone</span>
<span><i class="bi bi-check2 check"></i><strong>55+</strong> providers</span>
<span
><i class="bi bi-check2 check"></i
><strong>No account</strong> needed for the demo</span
>
<span
><i class="bi bi-check2 check"></i
><strong>~30s</strong> to first zone</span
>
<span
><i class="bi bi-check2 check"></i
><strong>55+</strong> providers</span
>
</div>
</div>
<!-- Visual column -->
<div class="col-lg-7 d-none d-lg-block">
<div class="hero-stack">
<!-- Front browser frame: zone editor -->
<div class="browser">
<!-- Front browser frame: screenshot carousel -->
<div class="browser" id="hero-carousel">
<span class="browser-load"></span>
<div class="browser-bar">
<div class="browser-dots"><span></span><span></span><span></span></div>
<div
class="browser-dots"
role="tablist"
aria-label="Screenshots"
>
{{ range $i, $s := sort .Site.Params.jumboscreen "weight" }}
<button
type="button"
class="bdot{{ if eq $i 0 }} active{{ end }}"
data-slide="{{ $i }}"
role="tab"
aria-selected="{{ if eq $i 0 }}true{{ else }}false{{ end }}"
aria-label="{{ $s.alt }}"
></button>
{{ end }}
</div>
<div class="browser-url">
<i class="bi bi-lock-fill lock me-1"></i>
<span>app.</span><strong>happydomain.org</strong><span>/zone/happydomain.org</span>
<span>app.</span><strong>happydomain.org</strong
><span class="url-path"
>{{ with index (sort .Site.Params.jumboscreen "weight") 0 }}{{ .path }}{{ end }}</span
>
</div>
</div>
<img
src="/img/screenshots/domain-abstract.webp"
alt="happyDomain zone editor"
style="width:100%;display:block"
/>
<div class="carousel-window">
<div class="carousel-track">
{{ range $i, $s := sort .Site.Params.jumboscreen "weight" }}
<figure
class="slide{{ if eq $i 0 }} active{{ end }}"
data-path="{{ $s.path }}"
>
<img
src="{{ $s.image }}"
alt="{{ $s.alt }}"
loading="lazy"
decoding="async"
/>
</figure>
{{ end }}
</div>
<div class="carousel-progress"><span></span></div>
</div>
</div>
<!-- Back browser frame, peeking -->
<div class="browser" aria-hidden="true">
<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>try.</span><strong>happydomain.org</strong></div>
<div class="browser-dots">
<span></span><span></span><span></span>
</div>
<div class="browser-url">
<i class="bi bi-lock-fill lock"></i
><span>try.</span
><strong>happydomain.org</strong>
</div>
</div>
<div style="padding:14px 16px;height:120px;background:var(--hd-bg-subtle,#f9fafb)"></div>
<div
style="
padding: 14px 16px;
height: 120px;
background: var(--hd-bg-subtle, #f9fafb);
"
></div>
</div>
</div>
</div>
</div>
<div class="alert alert-warning mt-5 mb-0" role="alert">
<div class="row align-items-center g-3">
<div class="col-lg-7">
<h5 class="alert-heading mb-1">
<i class="bi bi-info-circle"></i>
{{ i18n "beta-alert-title" }}
</h5>
<p class="mb-0">{{ i18n "beta-alert-text" | safeHTML }}</p>
</div>
<form
class="col-lg-5 d-flex flex-column flex-sm-row gap-2"
method="post"
action="https://lists.happydomain.org/subscription/form"
>
<input type="hidden" name="nonce" />
<input type="hidden" name="l" value="ef8b61ad-fa7d-4f1a-a20f-bb34ac37a3bf" />
<input type="hidden" name="lang" value="{{ site.LanguageCode }}" />
<input
type="email"
name="email"
required
placeholder="j.postel@isi.edu"
class="form-control"
/>
<altcha-widget
floating
challengeurl="https://lists.happydomain.org/api/public/captcha/altcha"
></altcha-widget>
<button
type="submit"
class="btn btn-primary text-nowrap"
data-umami-event="beta-join"
>
{{ i18n "beta-alert-button" }}
</button>
</form>
</div>
</div>
</div>
</section>
<script>
(function () {
var root = document.getElementById("hero-carousel");
if (!root) return;
var slides = Array.prototype.slice.call(
root.querySelectorAll(".slide"),
);
var dots = Array.prototype.slice.call(root.querySelectorAll(".bdot"));
var pathEl = root.querySelector(".url-path");
var prog = root.querySelector(".carousel-progress span");
var paths = slides.map(function (slide) {
return slide.getAttribute("data-path");
});
var DURATION = 7000;
var i = 0,
timer = null;
var reduce =
window.matchMedia &&
window.matchMedia("(prefers-reduced-motion: reduce)").matches;
function restartProgress() {
if (!prog || reduce) return;
prog.classList.remove("run");
void prog.offsetWidth; // force reflow so the animation restarts
prog.classList.add("run");
}
function go(n) {
n = ((n % slides.length) + slides.length) % slides.length;
if (n === i) return;
// mimic a real page navigation: brief loading sweep + dimmed URL
root.classList.add("loading");
window.setTimeout(function () {
root.classList.remove("loading");
}, 700);
slides[i].classList.remove("active");
dots[i].classList.remove("active");
dots[i].setAttribute("aria-selected", "false");
i = n;
slides[i].classList.add("active");
dots[i].classList.add("active");
dots[i].setAttribute("aria-selected", "true");
if (pathEl) pathEl.textContent = paths[i];
restartProgress();
}
function schedule() {
window.clearInterval(timer);
if (reduce) return;
timer = window.setInterval(function () {
go(i + 1);
}, DURATION);
}
dots.forEach(function (dot, idx) {
dot.addEventListener("click", function () {
go(idx);
schedule(); // reset the timer so the chosen slide gets its full 7s
});
});
// Pause while the visitor is inspecting a screenshot.
root.addEventListener("mouseenter", function () {
root.classList.add("paused");
window.clearInterval(timer);
});
root.addEventListener("mouseleave", function () {
root.classList.remove("paused");
schedule();
});
restartProgress();
schedule();
})();
</script>

View file

@ -1,5 +1,5 @@
<script src="/js/bootstrap.bundle.min.js"></script>
<script src="https://js.hcaptcha.com/1/api.js" async defer></script>
<script src="https://lists.happydomain.org/public/static/altcha.umd.js" async defer></script>
<script>
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function(e) {
document.documentElement.setAttribute('data-bs-theme', e.matches ? 'dark' : 'light');

View file

@ -16,7 +16,7 @@
<a class="btn btn-primary mt-2 mx-3" data-umami-event="cta-{{ .Page.File.ContentBaseName }}-tryit" data-umami-event-lang="{{ .Page.Language.Lang }}" href="{{ .Site.Params.tryit }}">
{{ i18n "tryit" }} &#187;
</a>
<a class="btn btn-outline-secondary mt-2 mx-3" data-umami-event="cta-{{ .Page.File.ContentBaseName }}-downloads" data-umami-event-lang="{{ .Page.Language.Lang }}" href="/#downloads">
<a class="btn btn-outline-dark mt-2 mx-3" data-umami-event="cta-{{ .Page.File.ContentBaseName }}-downloads" data-umami-event-lang="{{ .Page.Language.Lang }}" href="/#downloads">
{{ i18n "downloadit" }} &#187;
</a>
</p>
@ -56,7 +56,7 @@
</div>
</div>
<div class="container-fluid bg-secondary text-light text-center py-5">
<div class="container-fluid text-center py-5" style="background: var(--hd-plum-100)">
<div class="container my-4">
<div class="row">
<div class="order-0 col-md-5 offset-md-1 align-self-center text-center">
@ -70,7 +70,7 @@
<p>
{{ i18n "footer-us-text-1" }}<span class="text-dark text-hilight px-1">{{ i18n "footer-us-text-hilight" }}</span>{{ i18n "footer-us-text-2" }}
</p>
<a href="{{ i18n "footer-us-button-link" }}" class="btn btn-outline-light" data-umami-event="cta-{{ .Page.File.ContentBaseName }}-about">
<a href="{{ i18n "footer-us-button-link" }}" class="btn btn-outline-dark" data-umami-event="cta-{{ .Page.File.ContentBaseName }}-about">
{{ i18n "footer-us-button" }}
</a>
</div>

View file

@ -1,4 +1,4 @@
/domains/* https://app.happydomain.org/domains/:splat
/join https://app.happydomain.org/register
/login https://app.happydomain.org/login
/register https://app.happydomain.org/register
/join /beta/
/login /beta/
/register /beta/

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 250 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 141 KiB

After

Width:  |  Height:  |  Size: 61 KiB

Before After
Before After