52
.claude/deploy-memory.md
Normal file
@ -0,0 +1,52 @@
|
||||
# Deploy memory — rubis
|
||||
|
||||
## Infra
|
||||
- Namespace : `rubis`
|
||||
- Deployment : `rubis`
|
||||
- Container : `rubis`
|
||||
- NodePort : `30109`
|
||||
- Image : `git.arthurbarre.fr/ordinarthur/rubis`
|
||||
- Domaine : https://rubis.arthurbarre.fr (sous-domaine **temporaire** — domaine définitif pas encore acheté)
|
||||
- Manifests : `k3s/` (namespace.yml, deployment.yml, service.yml)
|
||||
- Route Traefik : `~/dev/perso/proxmox/ansible/roles/traefik/templates/rubis.yml.j2`
|
||||
- Repo Gitea : https://git.arthurbarre.fr/ordinarthur/rubis (remote `gitea`)
|
||||
|
||||
## Mise à jour (à suivre pour les prochains /deploy)
|
||||
|
||||
1. **Voie normale — push git, le CI build + rollout auto** :
|
||||
```bash
|
||||
git push gitea main
|
||||
```
|
||||
|
||||
2. **Voie manuelle** (si Docker Desktop tourne sur le Mac) :
|
||||
```bash
|
||||
TAG=$(git rev-parse --short HEAD)
|
||||
docker build --platform linux/amd64 -t git.arthurbarre.fr/ordinarthur/rubis:$TAG .
|
||||
docker push git.arthurbarre.fr/ordinarthur/rubis:$TAG
|
||||
kubectl --kubeconfig ~/dev/perso/proxmox/k3s/kubeconfig.yaml \
|
||||
-n rubis set image deploy/rubis rubis=git.arthurbarre.fr/ordinarthur/rubis:$TAG
|
||||
kubectl --kubeconfig ~/dev/perso/proxmox/k3s/kubeconfig.yaml \
|
||||
-n rubis rollout status deploy/rubis
|
||||
```
|
||||
|
||||
3. Si changement route/domaine : `cd ~/dev/perso/proxmox/ansible && ansible-playbook playbooks/gateway.yml`
|
||||
|
||||
4. Vérif : `curl -I https://rubis.arthurbarre.fr`
|
||||
|
||||
## Quand le domaine définitif sera acheté
|
||||
|
||||
1. Créer le record A chez OVH (ou autre registrar) : `<nouveau-domaine>` → `51.38.62.199`
|
||||
2. Modifier la rule du fichier `~/dev/perso/proxmox/ansible/roles/traefik/templates/rubis.yml.j2` :
|
||||
`Host(\`<nouveau-domaine>\`)`
|
||||
3. Relancer le playbook `gateway.yml`
|
||||
4. (Optionnel) supprimer le record DNS `rubis.arthurbarre.fr` si plus utilisé
|
||||
|
||||
## Stack
|
||||
Landing statique, servie par **nginx:1.27-alpine** (Dockerfile à la racine, sert `public/`).
|
||||
Le rebuild est rapide (pas de bundler).
|
||||
|
||||
## Déjà fait — NE PAS refaire
|
||||
Dockerfile, manifests K3s, route Traefik (`rubis.yml.j2` + tâche dans `tasks/main.yml`),
|
||||
DNS OVH (A record `rubis.arthurbarre.fr` id 5413044152), repo Gitea + secrets CI
|
||||
(`KUBECONFIG`, `REGISTRY_PASSWORD`), namespace + secret registry K3s.
|
||||
Les prochains `/deploy` font uniquement build + rollout via push git.
|
||||
@ -3,7 +3,8 @@
|
||||
.claude
|
||||
.DS_Store
|
||||
docs/
|
||||
assets/
|
||||
landing.html
|
||||
public/
|
||||
*.md
|
||||
k3s/
|
||||
Dockerfile
|
||||
.dockerignore
|
||||
|
||||
20
CLAUDE.md
@ -118,21 +118,35 @@ Ce qu'on sait : TypeScript, le reste à formaliser (framework, DB, OCR provider,
|
||||
| Fichier | Rôle |
|
||||
|---|---|
|
||||
| `/CLAUDE.md` (ce fichier) | Contexte top-level, toujours en tête |
|
||||
| `/landing.html` | Landing page brand-applied, prête à déployer (waitlist V1) |
|
||||
| `/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 |
|
||||
| `/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** à formaliser
|
||||
- **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.html` (Resend, Formspree, ou API perso)
|
||||
- **Endpoint waitlist** à câbler dans `/landing/index.html` (Resend, Formspree, ou API perso)
|
||||
- **Domaine définitif** à acheter (le sous-domaine actuel est temporaire)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
FROM nginx:1.27-alpine
|
||||
|
||||
COPY public/ /usr/share/nginx/html/
|
||||
COPY landing/ /usr/share/nginx/html/
|
||||
|
||||
RUN printf 'server {\n\
|
||||
listen 80;\n\
|
||||
listen 80;\n\x
|
||||
server_name _;\n\
|
||||
root /usr/share/nginx/html;\n\
|
||||
index index.html;\n\
|
||||
\n\
|
||||
location / {\n\
|
||||
location / {\n\x
|
||||
try_files $uri $uri/ /index.html;\n\
|
||||
}\n\
|
||||
\n\
|
||||
|
||||
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 846 KiB After Width: | Height: | Size: 846 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
@ -2409,12 +2409,13 @@
|
||||
<span class="name">Plan Business</span>
|
||||
<span class="price-small">49 €<span class="per">/mois</span></span>
|
||||
</div>
|
||||
<div class="qualifier">Pour les équipes 5+, avec onboarding humain</div>
|
||||
<p>Vous êtes plusieurs dans la boîte ? Business ajoute le <b>multi-utilisateurs</b>, votre adresse
|
||||
<code>compta@votre-entreprise.fr</code>, et — V2 — le <b>SMS de relance</b>. On cale aussi un onboarding
|
||||
sur-mesure ensemble.
|
||||
<div class="qualifier">Pour les équipes</div>
|
||||
<p>Vous pouvez générer autant de relances actives que vous voulez.
|
||||
<br />
|
||||
Vous avez la possibilité d'avoir 5 utilisateurs.
|
||||
<br />
|
||||
</p>
|
||||
<span class="aside-cta">Caler 30 min avec Arthur <span class="arrow">→</span></span>
|
||||
<span class="aside-cta">Démarrer Business <span class="arrow">→</span></span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 309 KiB After Width: | Height: | Size: 309 KiB |