rubis/CLAUDE.md
ordinarthur 8d3bab6a89 feat: scaffold frontend monorepo + first /login screen
Monorepo Turborepo (pnpm workspaces) avec 3 packages :

- apps/web : SPA React 19 + Vite 8 + Tailwind v4 (CSS-first)
  • TanStack Router (file-based, auto code-splitting), Query, Form
  • Radix primitives bruts + CVA + clsx + tailwind-merge
  • MSW pour mocker l'API tant qu'Adonis n'est pas branché
  • Polices Bricolage Grotesque + Inter self-hostées via fontsource
  • Tokens marque (rubis, cream, ink) exposés via @theme
  • Primitives maison : Gem, Brand, Eyebrow, Button, Input, Field
  • Route /login full flow : TanStack Form + Zod + mutation Query

- apps/api : Adonis 7 (kit api, scaffold via create-adonisjs)
  • Auth access tokens (Bearer) — cf. ADR-017
  • Tuyau core déjà câblé pour la génération de types
  • Routes /api/v1/auth/{signup,login} + /api/v1/account/{profile,logout}
  • Minimal — uniquement le pont front ↔ back

- packages/shared : types TS + schemas Zod + constantes
  • Source unique de vérité partagée api ↔ web
  • Domaines : User, Org, Auth, Client, Invoice, Plan

Tooling racine : Turbo, ESLint v9 flat, Prettier, husky, lint-staged.

CLAUDE.md et docs/decisions.md mis à jour avec ADR-014 à ADR-018
(stack, monorepo, PG existant, Bearer tokens, MinIO existant)
et le pointeur vers docs/tech/architecture.md.

Logo Rubis déplacé de landing/assets/ vers /assets/ (source unique
réutilisée par la landing et l'app).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-06 10:10:48 +02:00

8.2 KiB
Raw Blame History

Rubis Sur l'Ongle

Le SaaS de relance de factures impayées pour TPE-PME françaises. Drag-and-drop, OCR, plans de relance automatiques. 1 rubis = 10 minutes libérées.

Ce fichier est le contexte top-level. Il est court, dense, scannable. Pour les détails, voir /docs/.


En une phrase

Vos factures se relancent toutes seules pendant que vous travaillez.

Cible

TPE-PME françaises, 5 à 50 salariés, qui émettent 10 à 200 factures par mois, sans crédit manager dédié. Le décideur teste lui-même le produit (pas de cycle de vente long).

Promesse de valeur

  • 5 heures par semaine récupérées (benchmark : 8h → <3h après automatisation).
  • Tonalité émotionnelle : on vend du temps libéré, pas de la trésorerie. Le rubis gagné est la métrique-héros, pas le DSO.
  • 2 à 3 clics maximum pour lancer une relance sur une nouvelle facture.

Principes produit (toujours valides)

  1. 3 clics maximum pour lancer une relance sur une facture neuve. Idéalement 2 si bien configuré.
  2. Mobile et desktop — la photo de facture depuis le téléphone est un usage clé.
  3. Pure-player relance — on ne fait pas CRM, pas facturation, pas comptabilité. On fait une chose et on la fait bien.
  4. Respectueux du client final — le ton monte avec le retard, jamais avant. Pas d'agressivité par défaut.
  5. Le rubis est une vraie devise produit — 1 rubis = 10 min libérées. La gamification doit être tangible et défendable.

Identité de marque (TLDR)

Logo Direction A — gem facetté géométrique. Le ◆ est un symbole produit autant qu'un logo.
Couleur primaire #9F1239 — rubis profond légèrement violacé. Anti-Coca-Cola.
Couleur secondaires #771328 (deep), #C9415C (light), #FBE4EA (glow)
Neutres Crème #FAF7F2, encre chaude #1A1410. Jamais de blanc pur, jamais de noir pur.
Typo display Bricolage Grotesque (500800), Google Fonts
Typo body Inter (400700), Google Fonts
Icônes Lucide (regular weight)
Pas de or, bleu, vert, violet, emojis joaillerie 💎💰, mot "recouvrement" en com publique

Voir /docs/marque.md pour la référence complète et /brand-identity.html pour la présentation visuelle (note : la mention de l'or accent dans ce fichier est obsolète, à ignorer).

Voix

Direct, concret, chaleureux, précis, empathique. On parle comme un bon associé, pas comme une DAF.

  • ✓ "Vos factures relancées toutes seules."
  • ✗ "Optimisez votre processus de recouvrement amiable."

Glossaire

  • Rubis : unité de gamification. 1 rubis = 10 minutes libérées = 1 relance qu'on n'a pas eu à faire à la main.
  • Plan de relance : cadence d'emails automatisés (ex. J+3, J+10, J+20). Chaque facture est associée à un plan.
  • Étape : un email programmé dans un plan (ex. "J+10 — relance ferme").
  • Check-in : email envoyé à l'utilisateur (pas au client) pour confirmer si une facture a été payée avant l'envoi de la prochaine relance. Remplace l'intégration banking en V1.
  • Mise en demeure : étape ferme du plan. Toujours sous validation manuelle via modale de confirmation, jamais auto.
  • DSO : Days Sales Outstanding. Métrique secondaire dans l'app, jamais dans la com publique.
  • LME : loi de modernisation de l'économie (2008). Plafonne les délais de paiement à 60 jours (ou 45 jours fin de mois). Sanctions DGCCRF jusqu'à 2 M€.

Périmètre V1

IN

  • Auth email/password + Google SSO
  • Onboarding 3 étapes (compte, entreprise, signature email)
  • Upload drag-and-drop + OCR factures (PDF, PNG, JPG)
  • Saisie manuelle (fallback)
  • Bibliothèque de plans (4 plans fournis par défaut)
  • Éditeur de plan (cadence + templates email avec variables)
  • Check-in email à l'utilisateur (cadence configurable) → confirme si payé → relance ou stop
  • Dashboard avec compteur rubis + KPIs (à relancer, encaissé, DSO)
  • Liste filtrable des factures
  • Détail facture avec timeline des relances
  • App mobile (web responsive)

OUT (V2 ou plus tard)

  • SMS — uniquement plan le plus cher en V2
  • Multi-utilisateurs — uniquement plans payants en V2
  • Intégration banking / réconciliation auto — l'architecture V1 doit l'anticiper, mais l'implémentation est V2+
  • Multi-langues, multi-devises (FR/EUR only en V1)
  • Intégration ERP/comptable (Sage, Pennylane, Quickbooks)

Pricing (esquisse, à valider)

Plan Prix Limite
Free 0 € 5 factures actives en relance, 1 utilisateur
Pro 19 €/mois Factures illimitées, OCR illimité, 1 utilisateur
Business 49 €/mois + multi-utilisateurs, + branding email, + SMS (V2)

Argument de vente : "moins cher qu'une heure de votre temps mensuel".

Décisions clés validées (résumé)

Voir /docs/decisions.md pour le log complet avec rationale.

  • 1 rubis = 10 minutes libérées
  • Logo direction A (gem facetté), wordmark à monter en parallèle plus tard
  • Palette rubis chaude, sans or, sans bleu
  • Typo Bricolage Grotesque + Inter
  • Iconographie Lucide
  • Mise en demeure : validation manuelle obligatoire (modale)
  • SMS et multi-users : V2 + plans payants seulement
  • Banking intégration : pas en V1, remplacée par check-in emails

Stack technique

Couche Choix Source
Backend AdonisJS v7 (TS, MVC, Lucid ORM, auth & jobs intégrés) ADR-014
Frontend React + Vite ADR-014
Routing client TanStack Router ADR-014
State serveur TanStack Query ADR-014
Base de données PostgreSQL ADR-014
Hosting Proxmox + K3s (perso) ADR-014
OCR provider à benchmarker ADR-020 (en attente)
Email outbound à benchmarker ADR-021 (en attente)

Architecture : monorepo (apps/api + apps/web + packages/shared), API REST AdonisJS Bearer-auth, SPA React/Vite séparé, PG et MinIO existants sur LXC Proxmox. Détails dans /docs/tech/architecture.md.

Décisions cadres : ADR-014 (stack), ADR-015 (monorepo), ADR-016 (PG Proxmox existant), ADR-017 (Bearer tokens), ADR-018 (MinIO existant).

Documents associés

Fichier Rôle
/CLAUDE.md (ce fichier) Contexte top-level, toujours en tête
/landing/index.html Landing page brand-applied, déployée (waitlist V1)
/landing/favicon.{svg,ico,png} Set complet de favicons + apple-touch-icon
/landing/site.webmanifest Manifest PWA (theme #9F1239, background #FAF7F2)
/landing/assets/logo.png Logo Rubis original (généré, source pour les favicons)
/docs/produit.md Spec produit détaillée (features, flows, IN/OUT V1)
/docs/marque.md Référence marque écrite (palette, typo, voix, do/don't)
/docs/decisions.md Log de décisions avec rationale (format ADR-light)
/docs/wireframes-mvp.html Wireframes low-fi des 13 écrans MVP
/docs/brand-identity.html Présentation visuelle de la marque (4 logos, applications)
/docs/munitions-marketing.md Stats marché, concurrents, positionnement, copy
/docs/tech/architecture.md Architecture technique : composants, flux, topologie, conventions
/Dockerfile Build nginx-alpine servant /landing/ sur port 80
/k3s/ Manifests Kubernetes (namespace, deployment, service)
/.claude/deploy-memory.md Procédure de déploiement (Gitea CI ou manuel)

Déploiement

  • Image : git.arthurbarre.fr/ordinarthur/rubis:latest
  • Domaine actuel (temporaire) : https://rubis.arthurbarre.fr
  • Build : COPY landing/ → nginx servi sur port 80
  • Voir .claude/deploy-memory.md pour la procédure complète.

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.