feat(landing): CTAs vers app + pages mentions légales & RGPD
All checks were successful
Build & Deploy Landing / build-and-deploy (push) Successful in 25s

- Remplace les formulaires waitlist par des CTA "Lancer Rubis"
  pointant vers app.rubis.pro (nav, hero, section finale)
- Met à jour la trust line ("3 mois gratuits puis Free 5 factures")
- Footer : ajoute liens Mentions légales / Confidentialité, casse
  "Rubis sur l'ongle" + lien Lancer Rubis
- Supprime le script de binding waitlist (plus utilisé)
- Migre les références au domaine vers rubis.pro

Nouvelles pages :
- mentions-legales.html : conformité LCEN (9 sections)
- confidentialite.html : politique RGPD (10 sections, sous-traitants
  Stripe/Resend/Mistral, droits utilisateur, durées de conservation)
- _legal-shell.css : shell graphique partagé (palette rubis,
  Bricolage Grotesque + Inter, header/footer brandés, TOC)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
ordinarthur 2026-05-07 21:24:42 +02:00
parent ff8fe64be2
commit 6e796a0980
4 changed files with 846 additions and 45 deletions

331
landing/_legal-shell.css Normal file
View File

@ -0,0 +1,331 @@
/*
* Styles partagés pour les pages légales (mentions-legales, confidentialite).
* Reprend la palette + typo de la landing pour l'unité visuelle, mais en
* version "longue lecture" pas de hero, pas d'animations, juste un
* container central confortable avec hiérarchie typographique soignée.
*/
@import url("https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@10..48,500;10..48,600;10..48,700;10..48,800&family=Inter:wght@400;500;600;700&display=swap");
:root {
--rubis: #9f1239;
--rubis-deep: #771328;
--rubis-glow: #fbe4ea;
--cream: #faf7f2;
--cream-2: #f5efe7;
--ink: #1a1410;
--ink-2: #4f4640;
--ink-3: #8a7f76;
--line: #e8e0d6;
--display: "Bricolage Grotesque", system-ui, sans-serif;
--body: "Inter", -apple-system, BlinkMacSystemFont, sans-serif;
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
scroll-behavior: smooth;
}
body {
font-family: var(--body);
background: var(--cream);
color: var(--ink);
font-size: 16px;
line-height: 1.65;
-webkit-font-smoothing: antialiased;
}
a {
color: var(--rubis);
text-decoration: none;
}
a:hover {
text-decoration: underline;
text-underline-offset: 3px;
}
/* === Header sobre (même brand que landing) === */
.legal-header {
background: var(--cream);
border-bottom: 1px solid var(--line);
padding: 18px 0;
position: sticky;
top: 0;
z-index: 50;
backdrop-filter: blur(10px);
background: rgba(250, 247, 242, 0.92);
}
.legal-header .container {
display: flex;
align-items: center;
justify-content: space-between;
}
.brand {
display: inline-flex;
align-items: center;
gap: 10px;
font-family: var(--display);
font-weight: 800;
font-size: 19px;
letter-spacing: -0.02em;
color: var(--ink);
}
.brand:hover {
text-decoration: none;
}
.brand-suffix {
font-family: var(--display);
font-style: italic;
font-weight: 500;
color: var(--ink-3);
font-size: 12.5px;
margin-left: 4px;
}
.gem-svg {
width: 22px;
height: 22px;
}
.back-link {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: 13px;
color: var(--ink-3);
font-weight: 500;
}
.back-link:hover {
color: var(--rubis);
}
/* === Container & contenu === */
.container {
max-width: 760px;
margin: 0 auto;
padding: 0 24px;
}
.legal-main {
padding: 56px 0 80px;
}
.legal-main > .container > .eyebrow {
font-size: 11px;
font-weight: 700;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--rubis);
margin-bottom: 12px;
}
h1 {
font-family: var(--display);
font-size: clamp(32px, 5vw, 44px);
font-weight: 800;
letter-spacing: -0.022em;
line-height: 1.1;
margin-bottom: 12px;
color: var(--ink);
}
h1 em {
color: var(--rubis);
font-style: normal;
}
.lede {
font-size: 16px;
color: var(--ink-2);
margin-bottom: 12px;
}
.last-updated {
font-size: 12.5px;
color: var(--ink-3);
margin-bottom: 40px;
font-style: italic;
}
h2 {
font-family: var(--display);
font-size: 22px;
font-weight: 700;
letter-spacing: -0.018em;
line-height: 1.2;
margin: 48px 0 14px;
color: var(--ink);
scroll-margin-top: 80px;
}
h3 {
font-family: var(--display);
font-size: 16.5px;
font-weight: 700;
margin: 28px 0 10px;
color: var(--ink);
}
p,
ul,
ol {
margin-bottom: 16px;
color: var(--ink-2);
}
ul,
ol {
padding-left: 24px;
}
ul li,
ol li {
margin-bottom: 8px;
color: var(--ink-2);
}
ul li strong,
ol li strong,
p strong {
color: var(--ink);
font-weight: 600;
}
/* Bloc info "callout" pour les emails de contact */
.callout {
background: var(--cream-2);
border-left: 3px solid var(--rubis);
padding: 16px 20px;
border-radius: 4px;
margin: 24px 0;
font-size: 14.5px;
}
.callout strong {
color: var(--ink);
}
.callout p {
margin: 0;
}
/* TOC compact en haut */
.toc {
background: var(--cream-2);
border: 1px solid var(--line);
border-radius: 14px;
padding: 20px 24px;
margin: 32px 0 40px;
font-size: 14px;
}
.toc-title {
font-size: 11px;
font-weight: 700;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--ink-3);
margin-bottom: 10px;
}
.toc ol {
padding-left: 20px;
margin-bottom: 0;
counter-reset: toc;
list-style: none;
}
.toc li {
counter-increment: toc;
margin-bottom: 4px;
}
.toc li::before {
content: counter(toc) ".";
color: var(--rubis);
font-weight: 600;
margin-right: 8px;
}
.toc a {
color: var(--ink-2);
}
.toc a:hover {
color: var(--rubis);
}
/* Tableau définitions (sous-traitants etc.) */
.def-table {
border-collapse: collapse;
width: 100%;
margin: 16px 0 24px;
font-size: 14px;
}
.def-table th,
.def-table td {
text-align: left;
padding: 10px 12px;
border-bottom: 1px solid var(--line);
vertical-align: top;
}
.def-table th {
background: var(--cream-2);
color: var(--ink-3);
font-weight: 600;
font-size: 12px;
text-transform: uppercase;
letter-spacing: 0.06em;
}
.def-table td:first-child {
font-weight: 600;
color: var(--ink);
white-space: nowrap;
width: 30%;
}
/* === Footer (identique landing minimal) === */
.legal-footer {
border-top: 1px solid var(--line);
background: var(--cream-2);
padding: 32px 0 40px;
font-size: 13px;
color: var(--ink-3);
}
.legal-footer .container {
display: flex;
flex-wrap: wrap;
gap: 24px;
align-items: center;
justify-content: space-between;
}
.legal-footer nav {
display: flex;
flex-wrap: wrap;
gap: 18px;
}
.legal-footer nav a {
color: var(--ink-3);
font-weight: 500;
}
.legal-footer nav a:hover {
color: var(--rubis);
}

View File

@ -0,0 +1,311 @@
<!doctype html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="theme-color" content="#9F1239" />
<meta name="description" content="Politique de confidentialité et conformité RGPD du service Rubis sur l'ongle." />
<meta name="robots" content="index,follow" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
<link rel="manifest" href="/site.webmanifest" />
<link rel="stylesheet" href="/_legal-shell.css" />
<title>Politique de confidentialité · Rubis sur l'ongle</title>
</head>
<body>
<header class="legal-header">
<div class="container">
<a href="/" class="brand">
<svg class="gem-svg" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
<polygon points="100,10 190,100 100,190 10,100" fill="#9F1239" />
<line x1="10" y1="100" x2="190" y2="100" stroke="rgba(255,255,255,0.55)" stroke-width="3" />
<line x1="55" y1="55" x2="100" y2="100" stroke="rgba(255,255,255,0.4)" stroke-width="2" />
<line x1="145" y1="55" x2="100" y2="100" stroke="rgba(255,255,255,0.4)" stroke-width="2" />
</svg>
<span>Rubis<span class="brand-suffix">sur l'ongle</span></span>
</a>
<a href="/" class="back-link">← Retour à l'accueil</a>
</div>
</header>
<main class="legal-main">
<div class="container">
<p class="eyebrow">Données personnelles · RGPD</p>
<h1>Politique de <em>confidentialité</em></h1>
<p class="lede">
Cette page décrit comment Rubis sur l'ongle collecte, utilise et protège vos données
personnelles, conformément au Règlement (UE) 2016/679 (RGPD) et à la loi
Informatique et Libertés modifiée.
</p>
<p class="last-updated">Dernière mise à jour : 7 mai 2026</p>
<div class="toc" aria-label="Sommaire">
<p class="toc-title">Sommaire</p>
<ol>
<li><a href="#responsable">Responsable du traitement</a></li>
<li><a href="#donnees">Données collectées</a></li>
<li><a href="#finalites">Finalités et bases légales</a></li>
<li><a href="#sous-traitants">Sous-traitants et hébergement</a></li>
<li><a href="#duree">Durée de conservation</a></li>
<li><a href="#droits">Vos droits</a></li>
<li><a href="#cookies">Cookies</a></li>
<li><a href="#securite">Sécurité</a></li>
<li><a href="#reclamation">Réclamation auprès de la CNIL</a></li>
<li><a href="#evolutions">Évolutions de cette politique</a></li>
</ol>
</div>
<h2 id="responsable">1. Responsable du traitement</h2>
<p>
Le responsable du traitement de vos données est <strong>Arthur Barré</strong>,
éditeur du service Rubis sur l'ongle (cf.
<a href="/mentions-legales.html">mentions légales</a>).
</p>
<div class="callout">
<p>
<strong>Pour toute question liée à vos données</strong> :
<a href="mailto:privacy@rubis.pro">privacy@rubis.pro</a>
</p>
</div>
<h2 id="donnees">2. Données collectées</h2>
<p>
Nous collectons uniquement les données strictement nécessaires au fonctionnement du
service. Aucune donnée n'est revendue à des tiers à des fins commerciales.
</p>
<h3>2.1 Données d'inscription et de compte</h3>
<ul>
<li><strong>Email</strong> (identifiant de connexion + canal de notification check-in)</li>
<li><strong>Mot de passe</strong> (stocké hashé via Argon2 — nous ne pouvons pas le lire)</li>
<li><strong>Nom complet</strong> (signature des relances)</li>
<li><strong>Nom de l'organisation et SIRET</strong> (optionnel, pour les mises en demeure formelles)</li>
</ul>
<h3>2.2 Données métier saisies par l'utilisateur</h3>
<ul>
<li><strong>Factures</strong> : numéro, montant, dates d'émission et d'échéance, fichier PDF/image source</li>
<li><strong>Clients du user</strong> : nom, email, téléphone, adresse, SIRET (si fourni)</li>
<li><strong>Plans de relance</strong> et templates d'emails que l'utilisateur configure</li>
</ul>
<p>
<strong>Important</strong> : les données des <em>clients finaux</em> du user sont
collectées par l'utilisateur lui-même qui en est responsable de traitement vis-à-vis
de ses clients. Rubis agit en tant que sous-traitant au sens de l'article 28 du
RGPD pour ces données. Un avenant DPA peut être fourni sur demande.
</p>
<h3>2.3 Données techniques et journaux</h3>
<ul>
<li>Logs serveur (adresse IP, user agent, date/heure de connexion) — conservés 30 jours pour la sécurité</li>
<li>Cookies de session (refresh token httpOnly) — durée de vie 30 jours</li>
<li>Identifiants Stripe Customer/Subscription (en cas d'abonnement payant)</li>
</ul>
<h2 id="finalites">3. Finalités et bases légales</h2>
<table class="def-table">
<thead>
<tr>
<th>Finalité</th>
<th>Base légale</th>
</tr>
</thead>
<tbody>
<tr>
<td>Fourniture du service (relances, OCR, dashboard)</td>
<td>Exécution du contrat (art. 6.1.b RGPD)</td>
</tr>
<tr>
<td>Facturation et abonnement</td>
<td>Exécution du contrat + obligation légale (comptable)</td>
</tr>
<tr>
<td>Sécurité du service (anti-fraude, logs)</td>
<td>Intérêt légitime (art. 6.1.f)</td>
</tr>
<tr>
<td>Support utilisateur</td>
<td>Exécution du contrat</td>
</tr>
<tr>
<td>Statistiques d'usage anonymisées</td>
<td>Intérêt légitime — pas de profiling individuel</td>
</tr>
<tr>
<td>Communication commerciale</td>
<td>Consentement explicite (opt-in à l'inscription)</td>
</tr>
</tbody>
</table>
<h2 id="sous-traitants">4. Sous-traitants et hébergement</h2>
<p>
Tout l'hébergement principal (base de données, fichiers PDF, application) reste sur
notre infrastructure auto-hébergée en France. Quelques services tiers spécialisés
interviennent uniquement pour des fonctions ciblées&nbsp;:
</p>
<table class="def-table">
<thead>
<tr>
<th>Sous-traitant</th>
<th>Rôle &amp; localisation</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Stripe</strong></td>
<td>
Traitement des paiements et abonnements. Données : email, nom, CB (jamais
stockée chez nous, gérée par Stripe). Stripe est certifié PCI-DSS niveau 1.
Hébergement principal&nbsp;: Irlande (UE).
</td>
</tr>
<tr>
<td><strong>Resend</strong></td>
<td>
Envoi des emails transactionnels (relances et confirmations). Données :
adresses email, contenu des emails. Hébergement&nbsp;: UE/US avec
clauses contractuelles types.
</td>
</tr>
<tr>
<td><strong>Mistral AI</strong></td>
<td>
OCR sur les factures uploadées. Les fichiers sont envoyés à Mistral pour
extraction du texte puis supprimés de leur côté. Hébergement&nbsp;: France.
</td>
</tr>
</tbody>
</table>
<p>
Aucun transfert hors UE n'a lieu sans encadrement contractuel approprié (clauses
contractuelles types de la Commission européenne).
</p>
<h2 id="duree">5. Durée de conservation</h2>
<ul>
<li>
<strong>Compte utilisateur actif</strong> : conservation tant que le compte est
ouvert.
</li>
<li>
<strong>Compte supprimé</strong> : suppression complète des données dans un
délai de 30 jours, hors obligations comptables.
</li>
<li>
<strong>Factures émises et payées</strong> : conservation 10 ans (obligation
comptable, art. L.123-22 du Code de commerce).
</li>
<li>
<strong>Logs techniques</strong> : 30 jours.
</li>
<li>
<strong>Données Stripe (factures d'abonnement)</strong> : selon politique de
Stripe (en général 10 ans).
</li>
</ul>
<h2 id="droits">6. Vos droits</h2>
<p>
Conformément au RGPD, vous disposez à tout moment des droits suivants&nbsp;:
</p>
<ul>
<li><strong>Droit d'accès</strong> à vos données personnelles</li>
<li><strong>Droit de rectification</strong> en cas de données inexactes</li>
<li><strong>Droit à l'effacement</strong> (« droit à l'oubli »)</li>
<li><strong>Droit à la portabilité</strong> dans un format lisible (export JSON sur demande)</li>
<li><strong>Droit à la limitation</strong> du traitement</li>
<li><strong>Droit d'opposition</strong> au traitement pour motif légitime</li>
<li><strong>Droit de retirer votre consentement</strong> à tout moment, sans rétroactivité</li>
</ul>
<p>
Pour exercer ces droits, écrivez-nous à
<a href="mailto:privacy@rubis.pro">privacy@rubis.pro</a> en
précisant l'email associé à votre compte. Nous répondons dans un délai maximal d'un
mois (extensible à trois mois pour les demandes complexes, avec information dans le
mois initial).
</p>
<h2 id="cookies">7. Cookies</h2>
<p>
Nous utilisons exclusivement des <strong>cookies strictement nécessaires</strong>
au fonctionnement du service. Aucun cookie publicitaire ni de mesure d'audience
tierce n'est déposé.
</p>
<table class="def-table">
<thead>
<tr>
<th>Cookie</th>
<th>Rôle &amp; durée</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>rubis_refresh</code></td>
<td>Cookie httpOnly maintenant la session connectée. Durée : 30 jours.</td>
</tr>
<tr>
<td>localStorage <code>access_token</code></td>
<td>
Token JWT de courte durée (30 min) pour authentifier les appels API. Pas un
cookie au sens technique mais un stockage local du navigateur.
</td>
</tr>
<tr>
<td>localStorage <code>rubis.sidebar.collapsed</code></td>
<td>Préférence d'affichage (sidebar repliée ou non). Aucun tracking.</td>
</tr>
</tbody>
</table>
<h2 id="securite">8. Sécurité</h2>
<p>
Nous appliquons les mesures de sécurité usuelles pour un service SaaS&nbsp;:
</p>
<ul>
<li>Chiffrement des connexions TLS 1.2+ (Let's Encrypt)</li>
<li>Mots de passe hashés via Argon2id (pas de stockage en clair)</li>
<li>Tokens d'API rotatés (access tokens 30 min, refresh tokens 30 jours)</li>
<li>Restrictions d'accès aux clés Stripe par IP allowlist</li>
<li>Sauvegardes chiffrées de la base de données</li>
<li>Logs d'accès conservés et audités en cas d'incident</li>
</ul>
<h2 id="reclamation">9. Réclamation auprès de la CNIL</h2>
<p>
Si vous estimez, après nous avoir contactés, que vos droits ne sont pas respectés,
vous pouvez adresser une réclamation à la
<a href="https://www.cnil.fr/fr/plaintes" target="_blank" rel="noopener">
Commission Nationale de l'Informatique et des Libertés (CNIL)
</a>.
</p>
<h2 id="evolutions">10. Évolutions de cette politique</h2>
<p>
Nous pouvons modifier cette politique pour refléter des évolutions légales,
techniques ou organisationnelles. Toute modification substantielle sera annoncée
par email aux utilisateurs concernés au moins 30 jours avant son entrée en vigueur.
</p>
</div>
</main>
<footer class="legal-footer">
<div class="container">
<a href="/" class="brand">
<svg class="gem-svg" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
<polygon points="100,10 190,100 100,190 10,100" fill="#9F1239" />
</svg>
Rubis sur l'ongle
</a>
<nav>
<a href="/">Accueil</a>
<a href="https://app.rubis.pro">Lancer Rubis</a>
<a href="/mentions-legales.html">Mentions légales</a>
<a href="/confidentialite.html">Confidentialité</a>
</nav>
<div>© 2026 · Made in France 🇫🇷</div>
</div>
</footer>
</body>
</html>

View File

@ -208,6 +208,15 @@
color: white;
}
/* Layout commun pour 1-2 boutons côte-à-côte */
.cta-row {
display: flex;
gap: 12px;
flex-wrap: wrap;
align-items: center;
margin-top: 28px;
}
/* === BRAND MARK === */
.brand {
display: inline-flex;
@ -1911,7 +1920,7 @@
<a href="#how" class="nav-link">Comment ça marche</a>
<a href="#pricing" class="nav-link">Tarifs</a>
<a href="#faq" class="nav-link">FAQ</a>
<a href="#waitlist" class="nav-cta">Rejoindre la waitlist</a>
<a href="https://app.rubis.pro" class="nav-cta">Lancer Rubis</a>
</nav>
</div>
</header>
@ -1927,21 +1936,18 @@
moyenne
<b>5 heures par semaine</b>.
</p>
<form class="waitlist-form" id="heroForm" action="#" method="post" novalidate>
<input type="email" name="email" placeholder="votre@entreprise.fr" required aria-label="Votre adresse email">
<button type="submit">Rejoindre la waitlist →</button>
</form>
<div class="form-success" id="heroSuccess">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"
stroke-linecap="round" stroke-linejoin="round">
<polyline points="20 6 9 17 4 12" />
</svg>
On vous écrit dès qu'on ouvre les premiers comptes. Merci.
<div class="cta-row">
<a href="https://app.rubis.pro" class="btn btn-primary">
Lancer Rubis →
</a>
<a href="#pricing" class="btn btn-secondary">
Voir les tarifs
</a>
</div>
<div class="trust">
<span><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polyline points="20 6 9 17 4 12" />
</svg> 14 jours offerts au lancement</span>
</svg> 3 mois gratuits puis Free 5 factures</span>
<span class="dot"></span>
<span>Hébergement souverain</span>
<span class="dot"></span>
@ -2495,22 +2501,16 @@
</section>
<!-- ============== FINAL CTA ============== -->
<section class="final-cta" id="waitlist">
<section class="final-cta" id="lancer">
<div class="container">
<h2>Récupérez vos premières heures dès le lancement.</h2>
<p>On lance les premiers comptes au printemps 2026. Inscrivez-vous, vous serez prévenu en priorité.</p>
<form class="waitlist-form" id="footerForm" action="#" method="post" novalidate>
<input type="email" name="email" placeholder="votre@entreprise.fr" required aria-label="Votre adresse email">
<button type="submit">Rejoindre la waitlist</button>
</form>
<div class="form-success" id="footerSuccess" style="margin: 16px auto 0; max-width: 480px;">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"
stroke-linecap="round" stroke-linejoin="round">
<polyline points="20 6 9 17 4 12" />
</svg>
On vous écrit dès qu'on ouvre les premiers comptes. Merci.
<h2>Récupérez vos premières heures dès aujourd'hui.</h2>
<p>3 mois gratuits illimités, puis le plan Free continue avec 5 factures actives. Pas de carte demandée pour démarrer.</p>
<div class="cta-row" style="justify-content: center; margin-top: 24px;">
<a href="https://app.rubis.pro" class="btn btn-primary">
Lancer Rubis →
</a>
</div>
<p class="micro">On vous écrit une fois — quand on ouvre les premiers comptes. Pas avant.</p>
<p class="micro">Inscription en 30 secondes. Annulation 1-clic à tout moment.</p>
</div>
</section>
@ -2532,14 +2532,15 @@
<polygon points="100,10 190,100 100,190 10,100" fill="#9F1239" />
<line x1="10" y1="100" x2="190" y2="100" stroke="rgba(255,255,255,0.55)" stroke-width="3" />
</svg>
Rubis Sur l'Ongle
Rubis sur l'ongle
</a>
<nav>
<a href="#how">Comment ça marche</a>
<a href="#pricing">Tarifs</a>
<a href="#faq">FAQ</a>
<a href="#">Mentions légales</a>
<a href="#">RGPD</a>
<a href="https://app.rubis.pro">Lancer Rubis</a>
<a href="/mentions-legales.html">Mentions légales</a>
<a href="/confidentialite.html">Confidentialité</a>
</nav>
<div class="copy">© 2026 · Made in France 🇫🇷</div>
</div>
@ -2552,22 +2553,6 @@
if (window.scrollY > 8) header.classList.add('scrolled');
else header.classList.remove('scrolled');
});
// Form handling — replace action with real endpoint (Resend, Formspree, Tally, etc.)
function bindForm(formId, successId) {
const form = document.getElementById(formId);
const success = document.getElementById(successId);
if (!form) return;
form.addEventListener('submit', (e) => {
e.preventDefault();
// TODO: POST to /api/waitlist or chosen provider
// For now: just show success state
form.style.display = 'none';
success.classList.add('visible');
});
}
bindForm('heroForm', 'heroSuccess');
bindForm('footerForm', 'footerSuccess');
</script>
</body>

View File

@ -0,0 +1,174 @@
<!doctype html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="theme-color" content="#9F1239" />
<meta name="description" content="Mentions légales du site Rubis sur l'ongle." />
<meta name="robots" content="index,follow" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
<link rel="manifest" href="/site.webmanifest" />
<link rel="stylesheet" href="/_legal-shell.css" />
<title>Mentions légales · Rubis sur l'ongle</title>
</head>
<body>
<header class="legal-header">
<div class="container">
<a href="/" class="brand">
<svg class="gem-svg" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
<polygon points="100,10 190,100 100,190 10,100" fill="#9F1239" />
<line x1="10" y1="100" x2="190" y2="100" stroke="rgba(255,255,255,0.55)" stroke-width="3" />
<line x1="55" y1="55" x2="100" y2="100" stroke="rgba(255,255,255,0.4)" stroke-width="2" />
<line x1="145" y1="55" x2="100" y2="100" stroke="rgba(255,255,255,0.4)" stroke-width="2" />
</svg>
<span>Rubis<span class="brand-suffix">sur l'ongle</span></span>
</a>
<a href="/" class="back-link">← Retour à l'accueil</a>
</div>
</header>
<main class="legal-main">
<div class="container">
<p class="eyebrow">Informations légales</p>
<h1>Mentions <em>légales</em></h1>
<p class="lede">
Conformément aux articles 6-III et 19 de la Loi n° 2004-575 du 21 juin 2004 pour la
confiance dans l'économie numérique (LCEN), voici les informations relatives à
l'éditeur, à l'hébergeur et aux conditions d'utilisation du site.
</p>
<p class="last-updated">Dernière mise à jour : 7 mai 2026</p>
<div class="toc" aria-label="Sommaire">
<p class="toc-title">Sommaire</p>
<ol>
<li><a href="#editeur">Éditeur du site</a></li>
<li><a href="#hebergeur">Hébergement</a></li>
<li><a href="#publication">Directeur de la publication</a></li>
<li><a href="#contact">Contact</a></li>
<li><a href="#propriete">Propriété intellectuelle</a></li>
<li><a href="#responsabilite">Limitation de responsabilité</a></li>
<li><a href="#liens">Liens externes</a></li>
<li><a href="#cookies">Cookies</a></li>
<li><a href="#droit">Droit applicable</a></li>
</ol>
</div>
<h2 id="editeur">1. Éditeur du site</h2>
<p>
Le site <strong>rubis.pro</strong> (ainsi que l'application
<strong>app.rubis.pro</strong>) est édité par&nbsp;:
</p>
<ul>
<li><strong>Arthur Barré</strong>, entrepreneur individuel.</li>
<li>Adresse postale : <em>à compléter lors de la mise en service commerciale</em>.</li>
<li>SIRET : <em>en cours d'attribution</em>.</li>
<li>Numéro de TVA intracommunautaire : <em>non applicable (franchise en base de TVA)</em>.</li>
</ul>
<h2 id="hebergeur">2. Hébergement</h2>
<p>
Le site et l'application sont hébergés sur une infrastructure auto-hébergée en France
(serveurs Proxmox + cluster Kubernetes K3s) administrée directement par l'éditeur.
Toutes les données utilisateurs (factures, emails) sont stockées sur ce même
environnement, sans externalisation à un cloud tiers grand public.
</p>
<p>
Les données techniques (paiements, emails sortants, OCR) transitent par les
sous-traitants listés dans la
<a href="/confidentialite.html">politique de confidentialité</a>.
</p>
<h2 id="publication">3. Directeur de la publication</h2>
<p>
<strong>Arthur Barré</strong>, en sa qualité d'éditeur, est responsable de la
publication du contenu du site et de l'application Rubis sur l'ongle.
</p>
<h2 id="contact">4. Contact</h2>
<div class="callout">
<p>
<strong>Email général</strong> :
<a href="mailto:contact@rubis.pro">contact@rubis.pro</a>
</p>
</div>
<p>
Pour les demandes liées aux données personnelles ou pour exercer vos droits RGPD,
consultez notre <a href="/confidentialite.html">politique de confidentialité</a>.
</p>
<h2 id="propriete">5. Propriété intellectuelle</h2>
<p>
L'ensemble des contenus présents sur le site et l'application — y compris les textes,
la marque "Rubis sur l'ongle", le logo (◆), les illustrations, la palette graphique,
le code source des templates et de l'application — sont la propriété exclusive
d'Arthur Barré ou font l'objet d'une autorisation d'utilisation.
</p>
<p>
Toute reproduction, représentation, modification, publication ou adaptation totale
ou partielle des éléments du site, quel que soit le moyen ou le procédé utilisé, est
interdite sans autorisation écrite préalable.
</p>
<h2 id="responsabilite">6. Limitation de responsabilité</h2>
<p>
L'éditeur s'efforce d'assurer au mieux l'exactitude et la mise à jour des informations
présentées. Cependant, il ne peut garantir l'absence d'erreurs ou d'omissions et
décline toute responsabilité quant à l'usage qui pourrait être fait du contenu.
</p>
<p>
Concernant l'application Rubis, l'éditeur met à disposition un outil d'assistance à
la relance automatisée. <strong>L'utilisateur reste seul responsable</strong> du
contenu des relances envoyées à ses clients, du respect de la législation applicable
(notamment la LME pour les délais de paiement) et de la qualification éventuelle
d'une mise en demeure.
</p>
<h2 id="liens">7. Liens externes</h2>
<p>
Le site peut contenir des liens vers des sites tiers (notamment les pages
réglementaires de Stripe, Resend ou la CNIL). L'éditeur n'exerce aucun contrôle
sur ces sites et décline toute responsabilité quant à leur contenu ou aux pratiques
de confidentialité qui leur sont propres.
</p>
<h2 id="cookies">8. Cookies</h2>
<p>
Le site landing <em>rubis.pro</em> ne dépose aucun cookie de mesure
d'audience ni de traçage publicitaire. L'application
<em>app.rubis.pro</em> utilise uniquement des cookies <strong>strictement
nécessaires</strong> au fonctionnement (session d'authentification, refresh tokens).
Les détails sont décrits dans la
<a href="/confidentialite.html">politique de confidentialité</a>.
</p>
<h2 id="droit">9. Droit applicable et juridiction</h2>
<p>
Les présentes mentions légales sont régies par le droit français. En cas de litige
ou de désaccord, et après tentative de recherche d'une solution amiable, compétence
est attribuée aux tribunaux français compétents, conformément aux règles de
procédure en vigueur.
</p>
</div>
</main>
<footer class="legal-footer">
<div class="container">
<a href="/" class="brand">
<svg class="gem-svg" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
<polygon points="100,10 190,100 100,190 10,100" fill="#9F1239" />
</svg>
Rubis sur l'ongle
</a>
<nav>
<a href="/">Accueil</a>
<a href="https://app.rubis.pro">Lancer Rubis</a>
<a href="/mentions-legales.html">Mentions légales</a>
<a href="/confidentialite.html">Confidentialité</a>
</nav>
<div>© 2026 · Made in France 🇫🇷</div>
</div>
</footer>
</body>
</html>