docs: email infra rubis.pro (Resend sortant + OVH MX entrant)
All checks were successful
Build & Deploy Landing / build-and-deploy (push) Successful in 24s

Documentation post-migration du setup email :

- /docs/tech/backend.md §12.5 : architecture des 2 flux
  (Resend pour le sortant transactionnel via send.rubis.pro,
  OVH MX Plan pour l'entrant humain via @ rubis.pro)
- /CLAUDE.md : tableau récap email infra + maj domaine principal
  rubis.pro / app.rubis.pro, suppression de la question ouverte
  "domaine définitif" (résolue) et "endpoint waitlist" (remplacé
  par CTA app)
- /.claude/deploy-memory.md : section migration rubis.pro marquée
   avec checklist décommissionnement legacy
- /landing/confidentialite.html : remplace privacy@rubis.pro
  par contact@rubis.pro (alignement avec les boîtes OVH créées)

Adresses opérationnelles :
- contact@rubis.pro (général + RGPD)
- dev@rubis.pro (notifs techniques)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
ordinarthur 2026-05-07 21:48:35 +02:00
parent 1c5a58e09a
commit 1acb273c1d
4 changed files with 90 additions and 16 deletions

View File

@ -202,14 +202,27 @@ challenge LE).
---
## Quand le domaine définitif sera acheté (`rubis.pro`)
## Domaine actuel — `rubis.pro` ✅ migré (2026-05-07)
1. Records DNS chez OVH : A `@`, A `app`, MX/SPF/DKIM pour Resend
2. Modifier les rules dans `rubis.yml.j2` et `rubis-app.yml.j2` (Host)
3. Replay `gateway.yml`
4. Maj `MAIL_FROM_ADDRESS=relances@rubis.pro` dans le secret
5. (Optionnel) supprimer les A records `rubis.pro` et
`app.rubis.pro` chez OVH
- **Landing** : https://rubis.pro
- **App SaaS** : https://app.rubis.pro
- **Compat legacy** : `rubis.arthurbarre.fr` / `app.rubis.arthurbarre.fr` → 301 vers `rubis.pro` / `app.rubis.pro` (Traefik dynamic config dans `~/dev/perso/proxmox/ansible/roles/traefik/templates/rubis*.yml.j2`)
### Email rubis.pro
| Flux | Provider | Setup | Adresses |
|---|---|---|---|
| **Sortant** (transactionnel) | Resend | DKIM + SPF + DMARC sur `send.rubis.pro` (verified dashboard Resend) | `relances@rubis.pro` (via `MAIL_FROM_ADDRESS` secret K3s) |
| **Entrant** (humain) | OVH MX Plan (gratuit) | MX `@` → OVH (auto-configuré via Espace Client) | `contact@rubis.pro`, `dev@rubis.pro` |
⚠️ Resend Inbound (toggle "Enable Receiving") doit rester **OFF** : il veut le MX `@`, qui est pris par OVH MX Plan.
### Décommissionnement progressif `arthurbarre.fr` (à faire dans 30-90 jours)
Quand confiance acquise et plus aucune référence vivante :
1. Vire les blocs `rubis-legacy-redirect` / `rubis-app-legacy-redirect` (et middlewares) dans `rubis*.yml.j2`
2. `ansible-playbook playbooks/gateway.yml`
3. Supprime A records `rubis` (id 5413044152) + `app.rubis` (id 5413305619) dans la zone DNS OVH d'`arthurbarre.fr`
---

View File

@ -153,20 +153,29 @@ Voir `/docs/decisions.md` pour le log complet avec rationale.
## Déploiement
- **Image** : `git.arthurbarre.fr/ordinarthur/rubis:latest`
- **Domaine actuel** (temporaire) : https://rubis.pro
- **Build** : `COPY landing/` → nginx servi sur port 80
- **Domaine principal** : https://rubis.pro (landing) + https://app.rubis.pro (SaaS V1)
- **Image landing** : `git.arthurbarre.fr/ordinarthur/rubis:latest`
- **Build landing** : `COPY landing/` → nginx servi sur port 80
- **Compat** : `rubis.arthurbarre.fr` / `app.rubis.arthurbarre.fr` redirigent en 301 vers `rubis.pro` / `app.rubis.pro` (config Traefik dans repo proxmox)
- Voir `.claude/deploy-memory.md` pour la procédure complète.
## Email infrastructure (`rubis.pro`)
Deux flux distincts qui cohabitent sur le même domaine via des sous-domaines DNS séparés :
| Flux | Provider | Adresse | DNS clés |
|---|---|---|---|
| **Sortant** (relances, check-in, auth) | Resend | `relances@rubis.pro` | `send.rubis.pro` (MX + SPF), `resend._domainkey` (DKIM), `_dmarc` |
| **Entrant** (humain) | OVH MX Plan | `contact@rubis.pro` (général + RGPD), `dev@rubis.pro` (notifs tech) | MX `@``mx*.mail.ovh.net.` |
Détails dans `/docs/tech/backend.md` §12.5.
## Questions ouvertes
- **Stack technique app produit** à formaliser (la landing tourne en static nginx, mais le SaaS lui-même reste à scoper)
- **Conversion 1 rubis = 10 min** validée mais à confirmer en user testing après MVP
- **Wordmark "rubis" avec gem-i** (direction C) à monter en complément du logo A à un moment
- **Provider OCR** à benchmarker (Mindee, Document AI, Textract, Tesseract)
- **Endpoint waitlist** à câbler dans `/landing/index.html` (Resend, Formspree, ou API perso)
- **Domaine définitif** à acheter (le sous-domaine actuel est temporaire)
---
*Dernière mise à jour : 2026-05-05 · Maintenu par Arthur + Claude.*
*Dernière mise à jour : 2026-05-07 · Maintenu par Arthur + Claude.*

View File

@ -854,6 +854,58 @@ Recommandation V1 : **Resend** comme default, abstraction `@adonisjs/mail` perme
- Vérification de l'adresse expéditrice (DNS configuré, SPF + DKIM signés)
- Mention "Envoyé via Rubis" obligatoire en footer (transparence pour le destinataire)
### 12.5 Infrastructure email du domaine `rubis.pro`
Deux flux distincts, deux providers, **pas de conflit** parce qu'ils utilisent des
sous-domaines différents au niveau DNS.
#### Sortant (transactionnel) — Resend
Pour les emails **envoyés depuis l'app** (relances clients, check-in utilisateur,
auth/password-reset, notifications billing).
| Aspect | Valeur |
|---|---|
| Provider | [Resend](https://resend.com) (cf. ADR-021) |
| Driver AdonisJS | `transports.resend()` (`config/mail.ts`) |
| Adresse expéditrice | `relances@rubis.pro` (configurable via `MAIL_FROM_ADDRESS`) |
| Auth DNS | DKIM (TXT `resend._domainkey`) + SPF (TXT `send`) + return-path MX (`send`) |
| DMARC | TXT `_dmarc``v=DMARC1; p=none;` (mode monitoring) |
| Click tracking | CNAME `mail.rubis.pro``links1.resend-dns.com.` (optionnel) |
**Délivrabilité** : tous les records DNS doivent être en statut "Verified" dans le dashboard Resend
avant de switcher `MAIL_FROM_ADDRESS` sur `relances@rubis.pro` côté secret K3s.
#### Entrant (humain) — OVH MX Plan
Pour les emails **reçus par l'équipe** (questions support, demandes RGPD,
factures fournisseurs, etc.). **Pas de webhook**, vraies boîtes mail OVH avec
IMAP/SMTP/webmail standard.
| Adresse | Usage |
|---|---|
| `contact@rubis.pro` | Contact général + demandes RGPD (ref. mentions légales / confidentialité) |
| `dev@rubis.pro` | Notifs techniques, abonnements aux outils dev (Gitea, monitoring, etc.) |
| Aspect | Valeur |
|---|---|
| Provider | OVH MX Plan (gratuit, inclus avec le domaine acheté chez OVH) |
| Capacité | 5 boîtes 5 Go par domaine |
| MX records | Auto-configurés par OVH (`mx*.mail.ovh.net.`) lors de l'activation MX Plan |
| Webmail | https://www.ovh.com/mail/ |
| Apps mobiles / desktop | IMAP `ssl0.ovh.net:993`, SMTP `ssl0.ovh.net:465` |
**Important — coexistence avec Resend** :
- Resend utilise le sous-domaine **`send.rubis.pro`** pour son MX return-path.
- OVH MX Plan utilise l'apex **`@`** (`rubis.pro`) pour la réception.
- Les deux MX cohabitent sans conflit dans la zone DNS, chacun sur son hostname.
⚠️ Si on active un jour Resend Inbound (V2 — capter les replies clients pour
auto-bumper le statut invoice), il **faudra choisir** entre OVH MX Plan et Resend
Inbound : les deux veulent le MX `@`. Plan probable : on garde OVH pour
`contact@`/`dev@`/etc. (humains) et on crée un sous-domaine dédié style
`replies.rubis.pro` pour Resend Inbound (sender Reply-To = `<token>@replies.rubis.pro`).
---
## 13. Background jobs

View File

@ -65,7 +65,7 @@
<div class="callout">
<p>
<strong>Pour toute question liée à vos données</strong> :
<a href="mailto:privacy@rubis.pro">privacy@rubis.pro</a>
<a href="mailto:contact@rubis.pro">contact@rubis.pro</a>
</p>
</div>
@ -221,7 +221,7 @@
</ul>
<p>
Pour exercer ces droits, écrivez-nous à
<a href="mailto:privacy@rubis.pro">privacy@rubis.pro</a> en
<a href="mailto:contact@rubis.pro">contact@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).