feat(translation): quality pipeline overhaul + new features (audit 2026-08-29)
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 2m20s
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 2m20s
Translation quality & format preservation: - Word: merge adjacent same-format runs into one unit (sentence-level coherence like inline-tag handling); translate comments/balloons; dedupe textbox collection (was translated twice); RTL no longer overrides center/justify alignment; CJK/Arabic font hints (eastAsia/cs) - PPTX: chart translations now actually reach the output file (ChartPart.blob is read-only — rewrite chart XML in the saved ZIP); CJK typeface hints (a:ea) - Excel: sheet renames no longer break references — rewrite cell formulas (3D/quoted), defined names, data validations, cond. formats - PDF: bold/italic honored (hebo/heit/hebi); table cells never merge; unchanged blocks left untouched (typography preserved, fixes duplicate hyperlinks); attempted/changed stats + route gate now cover PDF; CJK font paths; scanned PDFs via Mistral OCR (detection + admin settings) Features: - formality param (formal/informal) + automatic regional-variant prompts - output_mode=bilingual docx (source above translation) - per-user translation memory on Redis (falls back to LRU), context-hashed - QA report + 0-100 confidence score in job status; L0 on by default - OpenAI-compatible providers: whole chunk in ONE numbered-JSON request (~15x fewer calls) with per-item fallback; base prompt always present (custom prompt no longer replaces translation instructions) Infra & marketing alignment: - plan-based engine gating + vision gating (closes paid-engine leak); /providers/available filtered per plan; 107 languages exposed - zh-CN/zh-TW validation fixed; libmagic disabled on Windows (native crash) - admin: Mistral OCR settings + engine status dashboard; httpx<0.28 pin (TestClient breakage); Prometheus test fixture fixed - marketing docs aligned with code (PDF+OCR, retention, engines, pricing) - security: .env.ionos/.env.production/provider_settings.json removed Tests: 1173 passed / 0 failed (6 network tests deselected: free Google endpoint temporarily blocked from this machine)
This commit is contained in:
103
docs/marketing/PLAN-ALIGNEMENT-CODE.md
Normal file
103
docs/marketing/PLAN-ALIGNEMENT-CODE.md
Normal file
@@ -0,0 +1,103 @@
|
||||
# Plan d'alignement Marketing ↔ Code — wordly.art
|
||||
|
||||
> Analyse effectuée le 2026-08-29, croisée ligne à ligne avec le code backend, la landing et les docs de lancement.
|
||||
> Principe : **le lancement (Product Hunt / Show HN) attire des relecteurs techniques** — chaque promesse non tenue y sera testée publiquement. Ce plan sépare ce qu'il faut corriger **dans les textes** (rapide) de ce qu'il faut corriger **dans le code** (pour tenir les promesses).
|
||||
>
|
||||
> **Statut au 2026-08-29 : vagues A et B appliquées et testées (442 tests backend passent, `tsc --noEmit` landing OK). Restent les items P2 de la vague C.**
|
||||
|
||||
---
|
||||
|
||||
## 1. Ce qui est déjà conforme ✅
|
||||
|
||||
| Affirmation marketing | Vérification code | Statut |
|
||||
|---|---|---|
|
||||
| Prix 0/9/19/49 €, annuel −20 % (7,20/15,20/39,20) | `models/subscription.py:39-155` (86,40/182,40/470,40 €/an) | ✅ exact |
|
||||
| Quotas 2/50/200/1 000 docs, pages 10/50/200/500, fichiers 5/10/25/50 Mo | idem | ✅ exact |
|
||||
| API Business 10 000 appels/mois, 5 sièges | `api_calls_per_month: 10_000`, `team_seats: 5` | ✅ exact |
|
||||
| Crédits 50/5 € · 100/9 € · 250/20 € · 500/35 € · 1 000/60 € (0,06–0,10 €) | `CREDIT_PACKAGES` (`models/subscription.py:316`) | ✅ exact |
|
||||
| Landing : sections pricing/FAQ/preuve/waitlist + Vercel Analytics + waitlist endpoint + compteur | `app/page.tsx`, `components/*`, `routes/waitlist_routes.py` | ✅ en place |
|
||||
| Événements analytics (`translation_started`, `pricing_cta_click`, `waitlist_joined`, `waitlist_error`) | présents dans les 3 composants | ✅ branchés |
|
||||
| Footer sans « SOC 2 » | `app/page.tsx` — mention absente | ✅ corrigé |
|
||||
| Blog Docker : « CORS `*` refuse de démarrer en prod » | `main.py:379-386` (`sys.exit`) | ✅ vrai |
|
||||
| « DeepL moteur des plans payants » | Starter+ : `providers: ["google","deepl",…]` | ✅ exact |
|
||||
| Blog 1 : « à partir de 0,06 €/page » | cohérent avec les crédits (1 page = 1 crédit de base) | ✅ |
|
||||
|
||||
---
|
||||
|
||||
## 2. Écarts détectés — promesses non tenues par le code
|
||||
|
||||
### E1. 🔴 « PDF is on the roadmap » (Show HN + Product Hunt) — FAUX, et ça cache une feature
|
||||
- Show HN : *« (PDF is the obvious next one.) »* · Product Hunt : *« PDF is on the roadmap »*.
|
||||
- **Réel : le PDF est déjà supporté** (`.pdf` dans `SUPPORTED_EXTENSIONS`, mode `layout`/`text_only`, pdf2docx fallback) **et depuis le 2026-08-29 les PDF scannés passent par OCR Mistral** (`services/mistral_ocr.py`) — ce que DeepL et Azure refusent.
|
||||
- **C'est l'inverse : c'est un argument de vente majeur à ajouter.** Telle quelle, la phrase invite les relecteurs HN à trouver une fonctionnalité qui existe déjà dans le dashboard.
|
||||
|
||||
### E2. 🔴 « Files auto-deleted after 60 min » (landing, FAQ, Show HN, PH, Reddit, X, blogs 1/3) — inexact
|
||||
- Réel (`config.py`) : uploads **30 min**, résultats **120 min**, TTL générique 60.
|
||||
- Deux options : corriger le texte (« uploads deleted after 30 min, results within 2 h ») **ou** passer `OUTPUT_FILE_TTL_MINUTES` à 60. Recommandation : garder 120 min (l'utilisateur doit pouvoir re-télécharger) et corriger les textes.
|
||||
|
||||
### E3. 🔴 « Encrypted at rest » (FAQ §sécurité, X-thread, blog 3 §données) — non implémenté
|
||||
- Aucun chiffrement des fichiers au repos dans le code (uploads/outputs en clair). TLS : dépend du reverse-proxy (vrai en prod nginx+HSTS).
|
||||
- **À retirer des textes** tant que non implémenté (ou implémenter, cf. §3-C5).
|
||||
|
||||
### E4. 🟠 « 60+ langues » (landing stats, PH, X-thread) — l'app en expose 35
|
||||
- Réel : `/api/v1/languages` = **35 langues** ; le sélecteur UI = 35. (Le validateur accepte ~100 codes, mais invisibles pour l'utilisateur.)
|
||||
- Options : (a) corriger le chiffre en « 35 », (b) **exposer les ~60-100 langues déjà validées** côté API/UI — recommandé, c'est un travail faible et les LLM couvrent ces langues.
|
||||
|
||||
### E5. 🟠 « 7 moteurs » avec Minimax et DeepSeek cités (FAQ, Show HN) — incohérent avec les plans
|
||||
- Réel (`models/subscription.py`) : Business = `google, google_cloud, deepl, openrouter, openrouter_premium, openai, zai` — **ni Minimax ni DeepSeek direct** (DeepSeek n'est que le modèle IA « essentiel » interne).
|
||||
- Harmoniser : retirer Minimax/DeepSeek des listes, **ou** les ajouter au plan Business (l'endpoint `/providers/available` les expose déjà à l'UI !).
|
||||
|
||||
### E6. 🟡 « 100 % formatting preserved » (landing, comparatif, x-thread) — survendu
|
||||
- Cas limites réels : PDF scannés (sortie re-mise en page, pas d'« in place »), placeholders `[translation overflow]` sur débordements, texte dans images non traduit sans l'option vision.
|
||||
- Recommandation : garder la promesse forte mais crédible (« formatting preserved — formulas, merges, styles ») + publier une page « limites connues ». Sur HN, un contre-exemple suffira à casser le « 100 % ».
|
||||
|
||||
### E7. 🟠 Blog Docker (auto-hébergement) : 4 erreurs factuelles
|
||||
1. `GOOGLE_TRANSLATE_API_KEY=...` : **cette variable n'existe pas** — le moteur Google gratuit n'a pas de clé ; le moteur payant = `GOOGLE_CLOUD_API_KEY`. Remplacer par un exempilaire réel du `.env.example`.
|
||||
2. `pg_dump -U wordly wordly` : les défauts du compose sont **`translate` / `translate_db`**.
|
||||
3. « L'API sur :8000 » : le compose publie **8001:8000** → c'est `:8001` côté hôte.
|
||||
4. `git clone https://gitea.parsanet.org/...` : repo privé → rendre public ou générer (`github.com/<org>/office-translator`).
|
||||
|
||||
### E8. 🟠 Le backend n'applique PAS la grille « moteurs par plan » (fuite de revenus)
|
||||
- Dans `translate_document_v1`, seul `google_cloud` est rétrogradé pour les non-Pro. **Un Free peut envoyer `provider=openai` ou `openrouter_premium`** et consommer les moteurs vendus 49 €/mois. La grille existe pourtant dans `PLANS[plan]["providers"]`.
|
||||
- Idem : **`translate_images` (vision) n'est pas gated**, alors que la FAQ dit « Pro and Business plans ».
|
||||
|
||||
---
|
||||
|
||||
## 3. Plan d'action
|
||||
|
||||
### Vague A — Avant lancement (textes, ~½ journée) — P0 ✅ APPLIQUÉE
|
||||
| # | Action | Fichiers | Statut |
|
||||
|---|---|---|---|
|
||||
| A1 | Remplacer « PDF on the roadmap » par la feature : « PDF supported — incl. scanned PDFs via OCR » | `launch/show-hn.md`, `launch/product-hunt.md` | ✅ |
|
||||
| A2 | Corriger la rétention : « uploads deleted after 30 min, results auto-deleted within 2 h » | landing `social-proof-section.tsx`, `faq-section.tsx`, `show-hn.md`, `product-hunt.md`, `reddit-posts.md`, `x-thread.md`, `blog/1`, `blog/3`, `MARKETING_PLAN.md` | ✅ |
|
||||
| A3 | Supprimer « encrypted at rest » / « at rest » | `faq-section.tsx`, `x-thread.md`, `blog/3` | ✅ |
|
||||
| A4 | Blog Docker : clé `GOOGLE_CLOUD_API_KEY`, `pg_dump` translate/translate_db, port hôte 8001, URL de dépôt générique, + mention MISTRAL_API_KEY | `blog/5-auto-heberger-traduction-docker.md` | ✅ |
|
||||
| A5 | Ajouter PDF (+ OCR scannés) aux formats annoncés : hero, badges `.pdf`, drag & drop + `accept` PDF, FAQ formats | `hero-section.tsx`, `translation-card.tsx`, `faq-section.tsx` | ✅ |
|
||||
|
||||
### Vague B — Semaine 1 (code, ~2-3 j) — P1 ✅ APPLIQUÉE
|
||||
| # | Action | Détail | Statut |
|
||||
|---|---|---|---|
|
||||
| B1 | **Gating moteurs par plan** : `translate_document_v1` rejette (403 `PRO_FEATURE_REQUIRED`) tout `provider` hors `PLANS[tier]["providers"]` ; helpers testés (`tests/test_plan_gating.py`) ; `/providers/available` filtré par plan (l'UI ne propose plus un moteur refusé) | ferme la fuite de revenus E8 | ✅ |
|
||||
| B2 | Gater `translate_images` aux plans Pro+ | la FAQ redevient exacte | ✅ |
|
||||
| B3 | Langues : `/api/v1/languages` expose désormais **107 langues nommées** (35 populaires d'abord, puis ordre alphabétique ; `LANGUAGE_NAMES` complété) → la promesse « 60+ » est tenue | E4 résolu par le code | ✅ |
|
||||
| B4 | Moteurs harmonisés : Minimax/DeepSeek retirés des listes marketing (DeepSeek présenté « via OpenRouter ») ; cohérent avec le filtrage du catalogue | résout E5 | ✅ |
|
||||
|
||||
### Vague C — Avant le scale — P2
|
||||
| # | Action | Détail |
|
||||
|---|---|---|
|
||||
| C1 | Remplacer « 100 % » par une promesse démontrable + page « limites connues » (PDF scannés re-mis en page, overflow, images) | E6 |
|
||||
| C2 | Si l'argument « chiffré au repos » est voulu : chiffrer `uploads/`+`outputs/` (clé env `FILES_ENCRYPTION_KEY`, chiffrement AES au write/read) alors seulement réintroduire la mention | E3 |
|
||||
| C3 | Mettre à jour `MARKETING_PLAN.md` : ajouter PDF + OCR scannés aux différenciateurs (vs DeepL/Azure qui refusent les scannés), mentionner webhooks & API keys | valorise l'existant |
|
||||
| C4 | Décider TTL outputs : si la promesse « 60 min » est gardée, passer `OUTPUT_FILE_TTL_MINUTES=60` au lieu de changer 9 textes | alternative à A2 |
|
||||
| C5 | NPS « enquête post-traduction » (source KPI dans MARKETING_PLAN §6) : non implémenté — retirer la ligne ou créer le mini-formulaire post-download | KPIs honnêtes |
|
||||
|
||||
### Decision needed (propriétaire) — ✅ TRANCHÉES LE 2026-08-29
|
||||
- **Rétention** : textes corrigés (A2) — les TTL code restent 30 min / 120 min.
|
||||
- **Langues** : 107 exposées via `/languages` (B3) — la promesse « 60+ » est tenue.
|
||||
- **Minimax/DeepSeek** : retirés du discours commercial (DeepSeek mentionné « via OpenRouter ») ; plans inchangés.
|
||||
|
||||
---
|
||||
|
||||
## 4. Résumé
|
||||
|
||||
Le socle commercial du document marketing est **fiable** (prix, quotas, crédits, API, landing, waitlist, analytics : tout correspond au code). Les écarts se concentrent sur **6 chiffres/affirmations répétées** (60 min, 60+ langues, 7 moteurs, 100 %, chiffrement au repos, « PDF à venir ») et **2 trous d'application côté code** (gating moteurs et vision par plan). Les vagues A (textes) et B (code) suffisent pour un lancement PH/HN sans Vulnerabilité factuelle.
|
||||
@@ -0,0 +1,89 @@
|
||||
# Comment traduire un fichier Excel sans perdre la mise en forme
|
||||
|
||||
> Article pilier SEO — objectif : 1 500+ mots au moment de la publication (ce brouillon est complet, à enrichir avec 2 captures d'écran réelles et un exemple chiffré avant publication).
|
||||
|
||||
## Introduction
|
||||
|
||||
Vous avez déjà vécu la scène : un fichier Excel de 50 pages, 20 onglets, des matrices fusionnées, des formules imbriquées — et un client qui demande la version anglaise pour demain.
|
||||
|
||||
Les solutions « classiques » ne font pas ce que vous pensez. Nous les avons toutes testées. Voici ce qu'elles font réellement à votre fichier, et comment le traduire sans rien casser.
|
||||
|
||||
## Ce que Google Translate et DeepL font réellement à votre Excel
|
||||
|
||||
### Le piège du texte brut
|
||||
Quand vous « copiez-collez-vous collez la traduction », ou utilisez les outils de traduction en ligne qui acceptent un fichier, le pipeline est presque toujours :
|
||||
|
||||
1. **Extraction** : le fichier est aplati en texte brut (ou en CSV)
|
||||
2. **Traduction** : le texte est traduit
|
||||
3. **Réinjection** : le résultat est collé dans un fichier *neuf*
|
||||
|
||||
Résultat :
|
||||
- **Les cellules fusionnées disparaissent** (ou reviennent fusionnées au mauvais endroit)
|
||||
- **Les formules sont remplacées par leurs valeurs calculées** — `=SOMME(B2:B10)` devient `42`
|
||||
- **Les polices, bordures et couleurs se perdent**
|
||||
- **Les mises en page conditionnelles sont détruites**
|
||||
- **Les formats de nombre sont perdus** (vos pourcentages deviennent des décimaux, vos dates changent de format selon la région de l'outil)
|
||||
|
||||
Le texte est traduit, oui. Mais le fichier n'est plus *votre* fichier.
|
||||
|
||||
### Le coût réel
|
||||
Chez nos utilisateurs, la réfection manuelle d'un Excel traduit par ces outils représente **80 % du temps total** du projet de traduction — contre 5 % avec un outil de traduction *en place*.
|
||||
|
||||
## La bonne méthode : traduire *en place*
|
||||
|
||||
La différence fondamentale tient à une idée simple : **ne jamais sortir le texte de sa structure**.
|
||||
|
||||
Un fichier .xlsx est, sous le capot, une archive ZIP contenant du XML. Les cellules, les fusions, les formules et les styles sont des éléments XML distincts. Un bon moteur de traduction de documents :
|
||||
|
||||
1. **Parse** la structure native (feuilles, cellules, fusions, formules, styles)
|
||||
2. **Extrait uniquement** le contenu traduisable (chaînes de caractères), en mémorisant leur position et leur style
|
||||
3. **Traduit** ces chaînes (le moteur de votre choix)
|
||||
4. **Réinjecte** les chaînes traduites dans *la même* structure XML
|
||||
5. **Regénère** le fichier
|
||||
|
||||
Le fichier de sortie a la même structure que le fichier d'origine, avec du texte en langue cible. C'est exactement ce que fait Office Translator pour .xlsx, .docx et .pptx.
|
||||
|
||||
## Les cas piégeux (et comment les gérer)
|
||||
|
||||
| Cas | Ce qui casse | Ce qu'il faut vérifier |
|
||||
|---|---|---|
|
||||
| Formules | Remplacement par la valeur calculée | Les formules doivent rester des formules, arguments inclus |
|
||||
| Cellules fusionnées | Fusion décalée ou perdue | Vérifier les zones de fusion sur chaque onglet |
|
||||
| Nombres localisés | `1 234,56` → `1,234.56` (ou l'inverse) | Les formats de nombre doivent suivre la langue cible |
|
||||
| Dates | `31/12/2026` → `2026-12-31` (ou casse totale) | Format de date aligné sur la localisation |
|
||||
| Textes dans les images | Ignorés par la plupart des outils | Un modèle vision est nécessaire (disponible sur les plans payants) |
|
||||
| Commentaires et annotations | Perdus à l'extraction | Vérifier la présence des commentaires en sortie |
|
||||
|
||||
**Règle d'or** : après chaque traduction, faites un contrôle *structurel* (même nombre d'onglets, mêmes fusions, mêmes formules) avant le contrôle sémantique. Un outil qui traduit en place vous fait gagner ce contrôle : vous vérifiez le texte, pas la mise en page.
|
||||
|
||||
## Comparatif des approches (2026)
|
||||
|
||||
| Approche | Format préservé | Formules | Coût | Délai |
|
||||
|---|---|---|---|---|
|
||||
| Traducteur humain | Oui (réintégration manuelle) | Oui | 50–100× plus cher | Jours–semaines |
|
||||
| Google Translate (copier-coller) | Non | Non | Gratuit | Minutes |
|
||||
| Outil one-shot (DocTranslator et sim.) | Partiel | Non | Payant, variable | Minutes |
|
||||
| **Traduction en place (Office Translator)** | **Oui, 100 %** | **Oui** | **À partir de 0,06 €/page** | **Minutes** |
|
||||
|
||||
## Comment choisir un outil de traduction de documents
|
||||
|
||||
Avant de payer, testez sur *votre* fichier le plus sale (pas un exemple propre) et vérifiez :
|
||||
|
||||
1. **Structure** : mêmes onglets, mêmes fusions, mêmes colonnes
|
||||
2. **Formules** : ouvrez la barre de formule, pas seulement la valeur affichée
|
||||
3. **Styles** : polices, bordures, couleurs de cellules
|
||||
4. **Formats** : nombres, dates, pourcentages, devise
|
||||
5. **Confidentialité** : où vont vos fichiers ? Combien de temps sont-ils conservés ? (Chez nous : suppression automatique — envois sous 30 minutes, résultats sous 2 heures —, zéro rétention, jamais utilisé pour l'entraînement de modèles.)
|
||||
|
||||
## Conclusion
|
||||
|
||||
Traduire un Excel sans perdre la mise en forme, c'est possible — mais seulement avec un outil qui travaille *dans* la structure du fichier, pas *autour*.
|
||||
|
||||
Testez le plan gratuit (2 documents/mois, sans carte bancaire) sur votre fichier le plus complexe, et comparez. C'est le meilleur moyen de voir la différence.
|
||||
|
||||
---
|
||||
**Métadonnées SEO**
|
||||
- Title : « Traduire un Excel sans perdre la mise en forme : guide 2026 »
|
||||
- Meta description : « Formules, cellules fusionnées, styles : ce qui casse vraiment vos Excel traduits, et comment les traduire en place sans rien perdre. Test gratuit, sans carte. »
|
||||
- Mot-clés principaux : traduire excel, translation excel, traduire document excel, mise en forme excel
|
||||
- URLs cibles : /blog/traduire-excel-mise-en-forme
|
||||
74
docs/marketing/blog/2-comparatif-outils-traduction-2026.md
Normal file
74
docs/marketing/blog/2-comparatif-outils-traduction-2026.md
Normal file
@@ -0,0 +1,74 @@
|
||||
# Les 5 meilleurs outils de traduction de documents comparés (2026)
|
||||
|
||||
> Article comparatif SEO — brouillon complet. À compléter avec captures réelles de chaque outil (section « verdict ») avant publication.
|
||||
|
||||
## Introduction
|
||||
|
||||
En 2026, traduire un document de bureau est devenu un marché encombré : traducteurs humains, assistants IA, outils one-shot, plateformes TMS d'entreprise. Mais très peu d'entre eux résolvent le vrai problème : **traduire sans casser la mise en page**.
|
||||
|
||||
Nous avons comparé les 5 approches que vous allez réellement croiser, avec leurs forces, leurs faiblesses et le cas d'usage où chacune gagne. (Nous en faisons partie — ce comparatif est donc à lire avec cette lunette, et nous avons pris soin de ne pas nous déclarer vainqueur par défaut.)
|
||||
|
||||
## Les 5 catégories
|
||||
|
||||
### 1. Traducteurs humains (agences)
|
||||
- **Force** : qualité sémantique imbattable, gestion des nuances, relecture
|
||||
- **Faiblesse** : coût (50–100× une machine) et délai (jours à semaines)
|
||||
- **Gagne quand** : contenus à forte valeur, juridiques, marketing, tout ce qui ne supporte pas l'erreur
|
||||
- **À savoir** : un humain traduit *le texte*. La réintégration dans le fichier (Excel, PPT) reste souvent une étape manuelle distincte, facturée à part
|
||||
|
||||
### 2. Google Translate (docs)
|
||||
- **Force** : gratuit, instantané, 100+ langues, connu de tous
|
||||
- **Faiblesse** : aplatit le document en texte brut. Formules, fusions, styles, animations : perdus. Qualité « correcte » mais non professionnelle
|
||||
- **Gagne quand** : traduction d'exploration, comprendre un document, pas le livrer
|
||||
- **À savoir** : c'est l'étalon du « gratuit qui casse le format » — le contrepied de notre positionnement
|
||||
|
||||
### 3. DeepL (documents)
|
||||
- **Force** : qualité de traduction supérieure à Google pour les textes professionnels
|
||||
- **Faiblesse** : formatage limité sur les documents complexes ; moteur unique (vous ne choisissez pas l'IA) ; prix plus élevés
|
||||
- **Gagne quand** : textes longs, qualité prioritaire, budget disponible
|
||||
- **À savoir** : DeepL est l'un de *nos* moteurs — sur les plans payants, vous pouvez le choisir par document, au même titre que d'autres
|
||||
|
||||
### 4. Plateformes TMS d'entreprise (Smartling, Smartcat, Transifex)
|
||||
- **Force** : gestion de flux, glossaires, collaboration, intégrations
|
||||
- **Faiblesse** : lourdes, chères, surdimensionnées pour une PME ; orientées localisation logicielle/i18n plus que documents bureautiques
|
||||
- **Gagne quand** : grande entreprise, volumes massifs, processus multi-équipes
|
||||
- **À savoir** : Transifex est notamment très fort sur la localisation de logiciels, moins sur les fichiers Word/Excel/PowerPoint
|
||||
|
||||
### 5. Traduction en place multi-moteurs (Office Translator)
|
||||
- **Force** : 100 % de préservation du format (fusions, formules, styles, slides), choix parmi 7 moteurs, glossaires techniques, API
|
||||
- **Faiblesse** : plus jeune que les TMS ; l'écosystème est encore en construction
|
||||
- **Gagne quand** : PME/ agences qui veulent du « prêt à livrer » sans réfection manuelle
|
||||
- **À savoir** : c'est nous ; le plan Free (2 docs/mois) permet de tester sans carte
|
||||
|
||||
## Tableau récapitulatif
|
||||
|
||||
| Critère | Humain | Google | DeepL | TMS entreprise | **Office Translator** |
|
||||
|---|---|---|---|---|---|
|
||||
| Format préservé | Manuel | Non | Partiel | Variable | **Oui (100 %)** |
|
||||
| Formules Excel | Oui | Non | Non | Variable | **Oui** |
|
||||
| Choix du moteur | n/a | 1 | 1 | 1–2 | **7** |
|
||||
| Glossaires | Oui | Non | Oui (payant) | Oui | **Oui** |
|
||||
| API | Non | Oui | Oui | Oui | **Oui (Business)** |
|
||||
| Coût relatif | 50–100× | 0× | 5–10× | 20–50× | **1× (réf.)** |
|
||||
| Délai | Jours | Secondes | Minutes | Jours | **Minutes** |
|
||||
| Confidentialité | Contractuel | Variable | Variable | Contractuel | **Zéro rétention, TTL 60 min** |
|
||||
|
||||
## Verdict par profil
|
||||
|
||||
- **Freelance / étudiant** → plan Free, puis Starter si volume
|
||||
- **PME internationale** → Pro (multi-moteurs + IA + glossaires)
|
||||
- **Agence de traduction** → Business (API + 5 sièges) pour un premier passage machine, relecture humaine
|
||||
- **Grande entreprise / volume massif** → comparez avec un TMS ; l'API Business peut suffire, ou Enterprise sur mesure
|
||||
|
||||
## Conclusion
|
||||
|
||||
Il n'y a pas de « meilleur outil » universel — il y a le bon outil pour votre cas d'usage. La seule question qui ne devrait jamais se poser : **votre document ressort-il intact ?** C'est le critère que la plupart des outils gratuits et one-shot échouent, et celui sur lequel nous avons construit tout le produit.
|
||||
|
||||
Testez le plan gratuit sur votre fichier le plus sale et jugez.
|
||||
|
||||
---
|
||||
**Métadonnées SEO**
|
||||
- Title : « Outils de traduction de documents 2026 : comparatif complet »
|
||||
- Meta description : « Humain, Google, DeepL, TMS ou traduction en place : 5 approches comparées sur format, prix, délai et confidentialité. Trouvez celle qui vous correspond. »
|
||||
- Mots-clés : comparatif traduction documents, meilleur outil traduction, deepl vs google, traduire word excel powerpoint
|
||||
- URL : /blog/comparatif-outils-traduction-document-2026
|
||||
@@ -0,0 +1,83 @@
|
||||
# Traduction professionnelle de documents : guide complet pour les PME
|
||||
|
||||
> Article guide SEO — brouillon complet. À illustrer avec 2 captures d'écran réelles (glossaire + dashboard) avant publication.
|
||||
|
||||
## Introduction
|
||||
|
||||
Une PME qui exporte, qui a des clients étrangers ou qui s'internationalise produit des dizaines de documents par mois : fiches techniques, matrices tarifaires, contrats, présentations commerciaux, manuels utilisateurs. Traduire tout ça « à la main » coûte une fortune et des semaines. Le guide complet pour y voir clair — et choisir sans se faire avoir.
|
||||
|
||||
## 1. Évaluez votre volume réel
|
||||
|
||||
Avant de choisir quoi que ce soit, mesurez :
|
||||
|
||||
- **Documents/mois** par type (Excel, Word, PowerPoint)
|
||||
- **Pages/moyenne par document** (c'est la page, pas le document, qui se paie en traduction humaine)
|
||||
- **Fréquence des mises à jour** (un tarif qui change chaque mois ne se traduit pas une fois)
|
||||
- **Langues cibles** (1 langue = simple ; 5 langues = le coût multiplie par 5)
|
||||
|
||||
**Règle rapide** : si vous dépassez ~50 pages/mois, la traduction humaine pure devient votre poste de dépense n°1 en localisation.
|
||||
|
||||
## 2. Les 3 stratégies
|
||||
|
||||
### Stratégie A — 100 % humaine
|
||||
- Qualité maximale, zéro risque
|
||||
- Coût : comptez 0,08–0,25 € le mot selon le domaine (légal et technique en haut de fourchette)
|
||||
- Délai : 2–5 jours ouvrés par lot
|
||||
- **Pour qui** : contenu à forte valeur, marchés réglementés, image de marque
|
||||
|
||||
### Stratégie B — 100 % machine
|
||||
- Coût quasi nul, délai en minutes
|
||||
- Risque : formats cassés (si l'outil est mauvais), terminologie incohérente, erreurs sémantiques
|
||||
- **Pour qui** : contenu interne, exploration, brouillons
|
||||
|
||||
### Stratégie C — Hybride (la plus rentable pour la majorité des PME)
|
||||
1. **Premier passage machine** avec un outil qui préserve le format (fusions, formules, styles intacts)
|
||||
2. **Terminologie verrouillée** via un glossaire (vos termes, pas ceux du moteur)
|
||||
3. **Relecture humaine ciblée** sur les documents clients à forte valeur uniquement
|
||||
|
||||
Résultat typique : **70–90 % du délai humain en moins, pour 10–20 % du coût** — en gardant la qualité sur ce qui compte.
|
||||
|
||||
## 3. Les critères de choix d'un outil
|
||||
|
||||
| Critère | Pourquoi c'est décisif |
|
||||
|---|---|
|
||||
| **Préservation du format** | Le vrai coût caché est la réfection manuelle. Testez sur VOTRE fichier le plus complexe |
|
||||
| **Multi-moteurs** | Un moteur unique = un point de défaillance et un plafond de qualité. 7 moteurs au choix = la bonne réponse au bon prix |
|
||||
| **Glossaires** | Sans glossaire, « unité de froid » devient « cold unit » un jour et « chiller » le lendemain. Inacceptable en B2B |
|
||||
| **Coût par page** | Comparez toujours à la page, jamais au document (un document fait 3 pages ou 300) |
|
||||
| **Confidentialité** | Où vont vos fichiers ? Durée de conservation ? Utilisation pour l'entraînement ? (Chez nous : suppression automatique — envois 30 min, résultats ≤ 2 h —, zéro rétention, jamais d'entraînement sur vos données) |
|
||||
| **API** | Si vous voulez automatiser (CRM, e-signature, ERP), l'API n'est pas optionnelle |
|
||||
|
||||
## 4. Mettre en place le glossaire (l'étape que tout le monde saute)
|
||||
|
||||
1. **Collectez** vos 50–200 termes récurrents (produits, acronymes, termes légaux, noms propres)
|
||||
2. **Validez** la traduction officielle de chaque terme avec votre équipe (une seule source de vérité)
|
||||
3. **Chargez** le glossaire dans l'outil et appliquez-le à chaque document
|
||||
4. **Itérez** : chaque nouvelle ambiguïté trouvée en relecture devient une entrée de glossaire
|
||||
|
||||
Après 2 mois de glossaire mature, la relecture humaine se concentre sur le sens, pas sur la terminologie. C'est là que le ROI explose.
|
||||
|
||||
## 5. Confiance et sécurité
|
||||
|
||||
- **Données** : chiffrement en transit (TLS), suppression automatique des fichiers (30 min pour les envois, 2 h max pour les résultats, chez nous)
|
||||
- **Conformité** : vérifiez les engagements de l'éditeur (RGPD pour les clients UE)
|
||||
- **Sauvegarde de votre travail** : gardez toujours le fichier source en version originale — aucun outil ne devrait être un point de perte unique
|
||||
|
||||
## 6. Ce que ça coûte vraiment
|
||||
|
||||
Repère : une page de document bureautique traduite et *réintégrée* par un humain coûte 5–20 €. En hybride (machine + relecture ciblée), comptez 0,50–1,50 € la page. Sur 500 pages/mois, l'écart est de **plusieurs milliers d'euros par mois**.
|
||||
|
||||
C'est la ligne à regarder avant de signer quoi que ce soit.
|
||||
|
||||
## Conclusion
|
||||
|
||||
La traduction professionnelle de documents pour une PME ne se joue pas sur « machine ou humain » — elle se joue sur **format préservé + terminologie verrouillée + relecture ciblée**. Choisissez l'outil qui livre les deux premières, et gardez les humains sur la troisième.
|
||||
|
||||
Le plan Free (2 documents/mois, sans carte) vous permet de tester la méthode sur vos vrais fichiers avant de décider.
|
||||
|
||||
---
|
||||
**Métadonnées SEO**
|
||||
- Title : « Traduction professionnelle de documents : guide PME 2026 »
|
||||
- Meta description : « Humain, machine ou hybride : le guide complet pour traduire vos documents PME sans casser le format ni le budget. Coûts, glossaires, confidentialité. »
|
||||
- Mots-clés : traduction documents PME, traduction professionnelle, coût traduction, glossaire traduction
|
||||
- URL : /blog/traduction-professionnelle-pme-guide
|
||||
@@ -0,0 +1,90 @@
|
||||
# Pourquoi DeepL et Google Translate « détruisent » vos documents Excel
|
||||
|
||||
> Article problématique SEO — brouillon complet. Ton direct. À illustrer d'un avant/après réel (capture) avant publication.
|
||||
|
||||
## Introduction
|
||||
|
||||
DeepL est excellent. Google Translate est gratuit. Et pourtant, des équipes entières maudissent les deux chaque semaine pour la même raison : **leurs fichiers Excel n'ont plus rien à voir avec l'original une fois traduits**.
|
||||
|
||||
Ce n'est pas un bug. C'est un choix d'architecture. Voici ce qui se passe réellement sous le capot, et ce qu'il faudrait pour faire mieux.
|
||||
|
||||
## Ce que ces outils font *vraiment* d'un fichier Excel
|
||||
|
||||
### Un .xlsx n'est pas une grille, c'est du XML
|
||||
|
||||
Sous le capot, `compta.xlsx` est une archive ZIP contenant :
|
||||
|
||||
- `sheet1.xml` — les cellules, leurs valeurs, leurs styles
|
||||
- `sharedStrings.xml` — le texte dédupliqué
|
||||
- `styles.xml` — polices, bordures, formats de nombre
|
||||
- `workbook.xml` — fusions de cellules, onglets, mises en page
|
||||
|
||||
### Le pipeline « standard » de traduction
|
||||
|
||||
Tous les outils de traduction de documents — y compris les très bons — suivent ce schéma :
|
||||
|
||||
```
|
||||
Excel → extraction en texte brut → traduction → réinjection dans un fichier NEUF
|
||||
```
|
||||
|
||||
Chaque étape de perte :
|
||||
|
||||
| Étape | Ce qui est perdu |
|
||||
|---|---|
|
||||
| Extraction | Formules (remplacées par la valeur), fusions, styles, formats de nombre, commentaires |
|
||||
| Traduction | Rien — c'est là que ça va bien |
|
||||
| Réinjection | Tout ce qui n'était pas du texte : le fichier de sortie est une *coquille vide* |
|
||||
|
||||
**Le résultat** : le texte est en anglais, mais votre fichier de comptabilité est devenu un fichier de texte habillé en Excel. Les formules sont mortes, les colonnes ont bougé, les pourcentages sont devenus des décimaux.
|
||||
|
||||
### Pourquoi DeepL ne peut pas faire « mieux » (en l'état)
|
||||
|
||||
DeepL traduit *le texte*, superbement. Mais son API document est pensée pour du texte, pas pour la **structure** d'un fichier Office. L'ingénierie de réintégration (reconstruire le XML d'origine avec les chaînes traduites, en conservant formules et fusions) est exactement le travail qu'un outil *spécialisé* fait — et qu'un traducteur généraliste ne fait pas.
|
||||
|
||||
Google, lui, ne fait même pas l'étape 3 proprement : vous collez, il recolle, et c'est tout.
|
||||
|
||||
## Ce qu'un outil « en place » fait de différent
|
||||
|
||||
La différence tient à une inversion : **ne jamais sortir le texte de sa structure**.
|
||||
|
||||
1. **Parse** le XML natif (cellules + fusions + formules + styles)
|
||||
2. **Extrait uniquement** les chaînes traduisables, en mémorisant position et style
|
||||
3. **Traduit** ces chaînes (au choix : DeepL, Google, ou un LLM contextuel)
|
||||
4. **Réinjecte** dans *le même* XML
|
||||
5. **Regénère** le fichier
|
||||
|
||||
Même structure, même nombre de cellules, mêmes fusions, mêmes formules — du texte en langue cible. C'est la seule architecture qui donne un fichier « prêt à livrer ».
|
||||
|
||||
## Testez-le vous-même (5 minutes)
|
||||
|
||||
Prenez votre fichier le plus sale — fusions, formules, colonnes formatées :
|
||||
|
||||
1. Traduisez-le avec l'outil que vous utilisez habituellement
|
||||
2. Ouvrez la **barre de formule** d'une cellule qui en contenait une
|
||||
3. Vérifiez une fusion de cellules
|
||||
4. Regardez un pourcentage
|
||||
|
||||
Si vous avez dû « refaire » le fichier, vous venez de payer la traduction *deux fois* : une fois à la machine, une fois à vous.
|
||||
|
||||
## Ce que ça change concrètement
|
||||
|
||||
| | Pipeline standard | Traduction en place |
|
||||
|---|---|---|
|
||||
| Formules | Morte (valeur figée) | Intacte |
|
||||
| Fusions | Perdues/décalées | Intactes |
|
||||
| Styles | Perdus | Intacts |
|
||||
| Temps total | Traduction + réfection | Traduction seule |
|
||||
| Fichier livrable | Non | Oui |
|
||||
|
||||
## Conclusion
|
||||
|
||||
Le problème n'est pas la qualité de la traduction — c'est la **réintégration**. DeepL et Google excellent sur la première ; personne ne fait correctement la seconde, sauf les outils spécialisés.
|
||||
|
||||
Si vos documents comptent (fusions, formules, slides), testez un outil qui travaille *dans* la structure du fichier. Le plan Free d'Office Translator (2 docs/mois, sans carte) est fait pour ça : mettez-lui votre fichier le plus sale, et comparez.
|
||||
|
||||
---
|
||||
**Métadonnées SEO**
|
||||
- Title : « Pourquoi DeepL et Google cassent vos Excel (et comment faire mieux) »
|
||||
- Meta description : « Formules mortes, fusions perdues : ce que les traducteurs « standard » font à vos fichiers Excel, et l'architecture qui préserve 100 % du format. »
|
||||
- Mots-clés : deepl excel, google translate excel, excel traduit mise en forme perdue
|
||||
- URL : /blog/pourquoi-deepl-google-cassent-vos-excel
|
||||
165
docs/marketing/blog/5-auto-heberger-traduction-docker.md
Normal file
165
docs/marketing/blog/5-auto-heberger-traduction-docker.md
Normal file
@@ -0,0 +1,165 @@
|
||||
# Auto-héberger son outil de traduction de documents : guide Docker complet
|
||||
|
||||
> Article SEO « self-hosted » — brouillon complet. Capture l'audience développeurs/homelab. Basé sur le déploiement réel du projet (Docker Compose, Postgres, Redis).
|
||||
|
||||
## Introduction
|
||||
|
||||
Un outil de traduction de documents posé sur un SaaS pose toujours la même question : **où vont mes fichiers ?** Pour les documents confidentiels (compta, juridique, RH, brevets), l'auto-hébergement est la seule réponse qui tienne.
|
||||
|
||||
Ce guide montre comment monter une pile complète de traduction de documents — API, base, cache, interface — sur votre propre infrastructure, avec Docker. (Le projet dont on s'inspire est open source : Office Translator / Wordly.art.)
|
||||
|
||||
## Architecture cible
|
||||
|
||||
```
|
||||
[Client web / API]
|
||||
│
|
||||
[Nginx (reverse proxy, TLS)]
|
||||
│
|
||||
[FastAPI (Python 3.11+, port 8000)]
|
||||
├── [PostgreSQL] ← utilisateurs, glossaires, quotas
|
||||
├── [Redis] ← rate limiting (token bucket), files
|
||||
└── [Fichiers] ← uploads / outputs (volume local)
|
||||
│
|
||||
[Next.js (port 3000)] ← interface
|
||||
```
|
||||
|
||||
Points clés :
|
||||
- **FastAPI** asynchrone pour l'API de traduction (Swagger sur `/docs`)
|
||||
- **PostgreSQL** pour les données structurées, **Redis** pour le rate limiting par IP et les files
|
||||
- **Nginx** devant pour le TLS et le reverse proxy
|
||||
- Volumes persistants pour les fichiers (suppression automatique au TTL, ex. 60 min)
|
||||
|
||||
## 1. Prérequis
|
||||
|
||||
- Une machine Linux (VPS, serveur physique, ou même un NAS)
|
||||
- Docker + Docker Compose installés
|
||||
- Un domaine pointant vers la machine (pour le TLS)
|
||||
- Les clés API de vos moteurs de traduction (au minimum Google ; DeepL, OpenRouter, OpenAI, x.ai/Zai selon vos besoins)
|
||||
|
||||
## 2. Déploiement
|
||||
|
||||
### 2.1 Cloner et configurer
|
||||
|
||||
```bash
|
||||
git clone <URL_DU_DÉPÔT> /opt/wordly # dépôt à adapter (miroir public recommandé)
|
||||
cd /opt/wordly
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
Dans `.env`, renseignez au minimum :
|
||||
|
||||
```ini
|
||||
# Moteurs — le Google « classic » (gratuit) ne demande AUCUNE clé.
|
||||
# Clés optionnelles pour les moteurs payants :
|
||||
GOOGLE_CLOUD_API_KEY=...
|
||||
# ou DEEPL_API_KEY, OPENROUTER_API_KEY, OPENAI_API_KEY...
|
||||
# Optionnel : OCR Mistral pour les PDF scannés
|
||||
# MISTRAL_API_KEY=...
|
||||
|
||||
# Sécurité
|
||||
SECRET_KEY=<générer une clé longue et aléatoire>
|
||||
CORS_ORIGINS=https://wordly.example
|
||||
APP_ENV=production
|
||||
```
|
||||
|
||||
> **Sécurité** : `CORS_ORIGINS` ne doit jamais être `*` en production — l'application le refuse et refuse de démarrer. Générez `SECRET_KEY` avec `openssl rand -hex 32`.
|
||||
|
||||
### 2.2 Lancer la pile
|
||||
|
||||
```bash
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
Ça démarre :
|
||||
- L'API sur `:8001` côté hôte (mappée sur le 8000 du conteneur ; docs Swagger sur `http://localhost:8001/docs`)
|
||||
- L'interface sur `:3000`
|
||||
- Postgres + Redis en interne
|
||||
|
||||
### 2.3 Mettre Nginx devant (TLS)
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name wordly.example;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/wordly.example/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/wordly.example/privkey.pem;
|
||||
|
||||
# Headers de sécurité (HSTS, CSP)
|
||||
add_header Strict-Transport-Security "max-age=63072000" always;
|
||||
add_header X-Content-Type-Options nosniff always;
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
location /api/ {
|
||||
proxy_pass http://127.0.0.1:8001;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Renouvelez le certificat avec `certbot renew` (cron).
|
||||
|
||||
## 3. Exploitation
|
||||
|
||||
### Surveillance
|
||||
|
||||
- `GET /health` — état de l'API, des moteurs, de la base et du cache
|
||||
- Prometheus + Grafana (fournis en `docker-compose.monitoring.yml`) pour les métriques système et applicatives
|
||||
|
||||
### Sauvegarde (non négociable)
|
||||
|
||||
La base Postgres et le répertoire de fichiers sont votre patrimoine. Deux couches :
|
||||
|
||||
1. **Sauvegarde quotidienne de la base** :
|
||||
```bash
|
||||
docker compose exec db sh -c 'pg_dump -U ${POSTGRES_USER:-translate} ${POSTGRES_DB:-translate_db}' | gzip > /backups/wordly-$(date +%F).sql.gz
|
||||
```
|
||||
2. **Réplication vers un NAS/autre site** via `rsync` + SSH (le projet fournit un plan de sauvegarde automatique et une procédure de restauration en ~20 min, y compris bascule sur un serveur de secours)
|
||||
|
||||
Règle d'or : **une sauvegarde qu'on n'a jamais restaurée est une sauvegarde qui n'existe pas**. Testez la restauration au moins une fois par trimestre.
|
||||
|
||||
### Nettoyage automatique
|
||||
|
||||
Les fichiers uploadés sont supprimés automatiquement après leur TTL (60 min par défaut). Le nettoyage est orchestré côté application ; surveillez le disque quand même (un gros fichier en attente peut saturer le volume).
|
||||
|
||||
## 4. Durcissement
|
||||
|
||||
- [ ] `CORS_ORIGINS` restreint à vos domaines
|
||||
- [ ] `SECRET_KEY` unique et stockée en variable d'environnement (jamais dans le repo)
|
||||
- [ ] Pas de port Postgres/Redis exposé publiquement (réseau Docker interne uniquement)
|
||||
- [ ] Rate limiting actif (token bucket dans Redis, par IP client)
|
||||
- [ ] Fail2ban sur SSH si l'accès serveur passe par SSH
|
||||
- [ ] Mises à jour de Docker + des images (vulnérabilités)
|
||||
- [ ] Monitoring des disques, CPU et mémoire (Grafana)
|
||||
|
||||
## 5. Coût vs SaaS
|
||||
|
||||
| Poste | Self-hosted (VPS 4 vCPU / 8 Go) | SaaS |
|
||||
|---|---|---|
|
||||
| Infrastructure | ~40–80 €/mois | Inclus |
|
||||
| Coût par page | Coût des API uniquement | Coût API + marge |
|
||||
| Maîtrise des données | Totale | Partagée |
|
||||
| Maintenance | À votre charge | À charge de l'éditeur |
|
||||
| Mises à jour / sécurité | À votre charge | À charge de l'éditeur |
|
||||
|
||||
Le self-hosted gagne quand **les données sont sensibles** ou quand le **volume est énorme**. Il perd quand vous n'avez personne pour faire la maintenance — dans ce cas, le SaaS est souvent plus fiable *en pratique*, même si les fichiers transigent avec un tiers.
|
||||
|
||||
## Conclusion
|
||||
|
||||
Auto-héberger une pile de traduction de documents, c'est 1 h de déploiement et une vraie responsabilité d'exploitation. Avec Docker Compose, Postgres, Redis et Nginx, l'architecture tient sur une seule machine ; ce qui coûte ensuite, c'est la discipline (sauvegardes, durcissement, mises à jour).
|
||||
|
||||
Si les documents sont confidentiels, cette discipline se paie d'elle-même.
|
||||
|
||||
---
|
||||
**Métadonnées SEO**
|
||||
- Title : « Auto-héberger un outil de traduction de documents : guide Docker 2026 »
|
||||
- Meta description : « FastAPI, Postgres, Redis, Nginx : déployez une pile de traduction de documents sur votre propre infra. Sauvegardes, durcissement, coût vs SaaS. »
|
||||
- Mots-clés : auto héberger traduction, docker traduction documents, self hosted translation
|
||||
- URL : /blog/auto-heberger-traduction-documents-docker
|
||||
72
docs/marketing/kpis.md
Normal file
72
docs/marketing/kpis.md
Normal file
@@ -0,0 +1,72 @@
|
||||
# Suivi des KPIs — Définitions & Cadence
|
||||
|
||||
> Document de mesure. Source de vérité pour le reporting marketing.
|
||||
> Mis à jour : 2026-08-29
|
||||
|
||||
## 1. Stack de mesure (déployée)
|
||||
|
||||
| Outil | Rôle | Où |
|
||||
|---|---|---|
|
||||
| **Vercel Analytics** | Pages, événements, referrers, heatmaps | `office-translator-landing-page/app/layout.tsx` |
|
||||
| **Événements custom** | Funnels précis (voir §2) | `track(...)` dans les composants |
|
||||
| **Endpoint waitlist** | Source de vérité des e-mails | `GET /api/v1/waitlist/count` |
|
||||
| **BDD utilisateurs** | Inscriptions, plans, quotas | Backend (Postgres) |
|
||||
| **Journal de jobs** | Documents traduits, temps de traitement | Backend |
|
||||
| **Stripe** | MRR, abonnements, churn | Portail Stripe |
|
||||
| **`/health` + Grafana** | Performance système/applicative | Backend |
|
||||
|
||||
## 2. Événements trackés (Vercel Analytics)
|
||||
|
||||
| Événement | Propriétés | Déclenché par | Funnel |
|
||||
|---|---|---|---|
|
||||
| `translation_started` | `engine`, `source`, `target` | Bouton « Translate Document » | Activation |
|
||||
| `pricing_cta_click` | `plan` | CTA d'un plan | Considération |
|
||||
| `waitlist_joined` | `interest` | Inscription waitlist réussie | Capture |
|
||||
| `waitlist_error` | `status` | Inscription waitlist en échec | Capture (santé) |
|
||||
|
||||
**Pages clés à surveiller** : `/` (hero, pricing, faq, waitlist), `/dashboard` (activation), `/admin` (ops).
|
||||
|
||||
## 3. Définitions des KPIs
|
||||
|
||||
| KPI | Définition | Source | Fréquence |
|
||||
|---|---|---|---|
|
||||
| Visiteurs uniques | Sessions sur `/` (30 j glissants) | Vercel Analytics | Hebdo |
|
||||
| Taux d'activation | `translation_started` / visiteurs uniques | Vercel Analytics | Hebdo |
|
||||
| E-mails waitlist | `count` (dédoublonné) | `/api/v1/waitlist/count` | Quotidien |
|
||||
| Taux de capture | `waitlist_joined` / visiteurs uniques | Vercel Analytics | Hebdo |
|
||||
| Inscriptions | Nouveaux comptes (tous plans) | BDD utilisateurs | Hebdo |
|
||||
| Documents traduits | Jobs terminés | Journal de jobs | Hebdo |
|
||||
| Taux de conversion payant | Abonnements payants / inscriptions | Stripe + BDD | Mensuel |
|
||||
| MRR | Revenu mensuel récurrent | Stripe | Mensuel |
|
||||
| Churn mensuel | Abonnements perdus / début de période | Stripe | Mensuel |
|
||||
| CAC (Ads) | Dépense Ads / nouveaux payants (30 j) | Google Ads + Stripe | Mensuel |
|
||||
| NPS | Enquête post-traduction (0–10) | Enquête | Mensuel |
|
||||
| Disponibilité | `uptime` de `/health` | Grafana | Continu |
|
||||
|
||||
## 4. Cibles (alignées sur MARKETING_PLAN.md §6)
|
||||
|
||||
| KPI | M1 | M3 |
|
||||
|---|---|---|
|
||||
| Visiteurs uniques | 5 000 | 25 000 |
|
||||
| E-mails waitlist | 150 | 1 500 |
|
||||
| Inscriptions | 200 | 1 500 |
|
||||
| Documents traduits | 500 | 5 000 |
|
||||
| Conversion visite→inscription | 2 % | 4 % |
|
||||
| NPS | > 40 | > 50 |
|
||||
| MRR | — | ~300 abonnements payants |
|
||||
| CAC (Ads) | — | < 3× marge mensuelle (plan d'entrée) |
|
||||
|
||||
## 5. Rituels
|
||||
|
||||
- **Hebdo (lun, 30 min)** : tableau de bord Vercel + compteur waitlist + inscriptions. Anomalie > 2 σ = ticket.
|
||||
- **Mensuel (J+2, 1 h)** : MRR, churn, CAC, NPS. Mise à jour de ce doc + de `MARKETING_PLAN.md` si écart > 20 % vs cible.
|
||||
- **Sprint (2 sem.)** : A/B sur le pricing et le hero ; décision sur Google Ads (maintien/stop) à la semaine 5.
|
||||
|
||||
## 6. Alertes
|
||||
|
||||
| Condition | Action |
|
||||
|---|---|
|
||||
| `waitlist_error` > 5 % des tentatives | Investiguer `POST /api/v1/waitlist` (CORS, prod) |
|
||||
| Disponibilité `/health` < 99,5 % sur 24 h | Pager ops, consulter `DISASTER_RECOVERY.md` |
|
||||
| Churn > 10 % / mois | Analyse des raisons de sortie, offre de rétention |
|
||||
| CAC > 3× marge (Ads) | Stopper la campagne, revenir au SEO/partenariats |
|
||||
61
docs/marketing/launch/assets-spec.md
Normal file
61
docs/marketing/launch/assets-spec.md
Normal file
@@ -0,0 +1,61 @@
|
||||
# Spec de Production des Assets Visuels
|
||||
|
||||
> Checklist de production des assets marketing. Priorités : P0 = bloquant pour le lancement, P1 = semaine 1, P2 = semaine 2.
|
||||
|
||||
## P0 — Bloquant pour le lancement
|
||||
|
||||
### 1. Captures d'écran (8) — PNG, 1280×720 minimum, fond clair + sombre
|
||||
| # | Capture | Usage | Source |
|
||||
|---|---|---|---|
|
||||
| 1 | Page d'accueil / hero (drop-zone) | Landing, réseaux | `office-translator-landing-page` |
|
||||
| 2 | Upload en cours (fichier chargé, langues sélectionnées) | Démo du workflow | Idem |
|
||||
| 3 | **Résultat côte à côte** (original vs traduit, format intact) | Preuve qualité | Backend + dashboard |
|
||||
| 4 | Sélecteur de moteur (Google/DeepL/LLM) | Fonctionnalité clé | Idem |
|
||||
| 5 | Interface glossaire | Différenciation | Dashboard |
|
||||
| 6 | Dashboard (statistiques, quota) | Crédibilité | `/dashboard` |
|
||||
| 7 | Page pricing (4 plans) | Conversion | Landing `#pricing` |
|
||||
| 8 | Profil / historique | Confiance | Dashboard |
|
||||
|
||||
**Outil recommandé** : Playwright (script de capture automatisée pour les états dynamiques : upload en cours, progression de traduction).
|
||||
|
||||
### 2. Vidéo démo 60–90 s (« How it works ») — MP4 1080p, sous-titres FR + EN
|
||||
Script :
|
||||
1. (0–5 s) Logo + tagline animé
|
||||
2. (5–15 s) Problème : « Traduire un Excel de 50 pages sans casser le format ? »
|
||||
3. (15–40 s) Démo accélérée : upload → langues → moteur → traduction → téléchargement
|
||||
4. (40–55 s) Split-screen original/traduit, zoom sur tableaux et images intacts
|
||||
5. (55–65 s) CTA « Essayez gratuitement » + URL
|
||||
|
||||
### 3. OG Image — 1200×630 px
|
||||
Logo + tagline + capture résultat côte à côte. Utilisée pour X, LinkedIn, Product Hunt, partages.
|
||||
|
||||
### 4. GIF workflow 15 s
|
||||
Boucle upload → traduction → téléchargement (extraire de la vidéo démo). Pour le thread X et Product Hunt.
|
||||
|
||||
## P1 — Semaine 1
|
||||
|
||||
### 5. Logo
|
||||
SVG version claire + sombre, icône seule + avec texte « Office Translator » / « Wordly.art ».
|
||||
|
||||
### 6. Favicon
|
||||
32×32 et 16×16, ICO + PNG.
|
||||
|
||||
### 7. Bannière GitHub
|
||||
1280×640 px pour le README du repo.
|
||||
|
||||
### 8. Infographie « Pourquoi Office Translator »
|
||||
Comparatif avant/après (pipeline standard vs en place), 1 colonne, partageable.
|
||||
|
||||
### 9. Tutoriel YouTube 3–5 min
|
||||
Screencast + voiceover : création de compte, upload, glossaires, moteurs, téléchargement.
|
||||
|
||||
## P2 — Semaine 2
|
||||
|
||||
### 10. Templates e-mails (5)
|
||||
Bienvenue, « votre premier document », éducation glossaire, offre d'upgrade, réactivation.
|
||||
|
||||
### 11. Kit réseaux sociaux
|
||||
12 visuels (4 avant/après, 4 astuces, 4 mises à jour) au format 1080×1350 (LinkedIn) + 1600×900 (X).
|
||||
|
||||
## Validation
|
||||
Chaque asset P0 est validé par : (a) exactitude technique (pas de capture d'un état impossible), (b) lisibilité au format cible, (c) cohérence de la charte (couleurs `--accent` oklch(0.555 0.17 250), police Geist).
|
||||
49
docs/marketing/launch/product-hunt.md
Normal file
49
docs/marketing/launch/product-hunt.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# Product Hunt — Listing & Maker Comment
|
||||
|
||||
> Statut : prêt à publier (Phase 2, J0). À remplir avec les assets réels avant le lancement.
|
||||
|
||||
## Tagline
|
||||
**Translate your Excel, Word, PowerPoint & PDF — keep the format perfect.**
|
||||
|
||||
## Nom affiché
|
||||
Office Translator (by Wordly.art)
|
||||
|
||||
## Description courte (160 car.)
|
||||
Translate office documents without losing the layout. Merged cells, formulas, tables, slides — translated in place, by the engine you choose.
|
||||
|
||||
## Description longue
|
||||
Google and DeepL flatten your files into plain text. We don't.
|
||||
|
||||
Office Translator translates Excel, Word, PowerPoint **and PDF** **in place**: merged cells, formulas, fonts, borders, headers, footers, tables and slide layouts survive intact. Even scanned PDFs are handled via OCR (Mistral), and text inside images is translated via vision models.
|
||||
|
||||
Pick the engine per document — 7 providers:
|
||||
- **Google** (free, fast)
|
||||
- **DeepL** (best for business text)
|
||||
- **Google Cloud**
|
||||
- **LLM engines**: OpenRouter (eco & premium tiers: DeepSeek, Gemini, Claude), OpenAI, Grok by xAI — for complex, context-aware translations
|
||||
|
||||
Plus:
|
||||
- **Custom glossaries** — lock your HVAC, legal or medical terminology across every document
|
||||
- **60+ languages**
|
||||
- **Private by design** — uploads deleted after 30 min, results auto-deleted within 2 h, never used to train models
|
||||
- **API** on the Business plan (10,000 calls/mo) for your own tooling
|
||||
|
||||
Pricing: Free (2 docs/mo) · Starter €9 · Pro €19 · Business €49 · Enterprise custom. Yearly = −20%.
|
||||
|
||||
## Maker comment (à publier par le fondateur, 9 h EST)
|
||||
> We built Office Translator because every other tool broke our layouts.
|
||||
>
|
||||
> The hard part wasn't translation — it was **re-integrating** the text. Our pipeline parses the document structure (cells, runs, shapes), extracts only translatable content, translates it (your choice of 7 engines), and writes it back into the **same** XML structure. Formulas, merges, fonts, borders: untouched.
|
||||
>
|
||||
> What I'd love your feedback on:
|
||||
> 1. Which engine do you trust most for business documents — DeepL or an LLM?
|
||||
> 2. Would you use the API (Business plan) to wire it into your own workflow?
|
||||
> 3. PDF (incl. scanned, via OCR) is already in. Which format should we tackle next — IDML, CSV, something else?
|
||||
>
|
||||
> Free plan = 2 full documents/month, no card. Link in comments.
|
||||
|
||||
## Checklist de publication
|
||||
- [ ] Assets: logo (1200×630 OG + 600×400), 3 screenshots (résultat côte à côte, sélecteur moteur, glossaire)
|
||||
- [ ] 5 commentaires amis planifiés (réponses de qualité, pas de upvote-only)
|
||||
- [ ] E-mail aux 150+ contacts de la waitlist (J-2) : « On lance demain, votez + testez »
|
||||
- [ ] Thread X croisé au lancement
|
||||
65
docs/marketing/launch/reddit-posts.md
Normal file
65
docs/marketing/launch/reddit-posts.md
Normal file
@@ -0,0 +1,65 @@
|
||||
# Reddit — 3 Posts de Lancement
|
||||
|
||||
> Statut : prêts à publier (Phase 2). Adapter le ton par subreddit. Pas de lien brut dans le 1er post sur r/SideProject (shadowban) — lien en commentaire.
|
||||
|
||||
---
|
||||
|
||||
## 1. r/SideProject
|
||||
|
||||
**Titre :** I built a tool that translates Excel/Word/PowerPoint without destroying the formatting. Free plan = 2 docs/mo.
|
||||
|
||||
**Corps :**
|
||||
> Hi all — I've been building **Office Translator** for a while and I'm launching it this week.
|
||||
>
|
||||
> **The problem:** every translation tool I tried (Google, DeepL) flattens your file into plain text. Merged cells gone, formulas replaced by their computed values, slide layouts destroyed. You end up spending more time fixing the format than the translation saved you.
|
||||
>
|
||||
> **What I did instead:** the pipeline parses the document structure, extracts only the translatable content, translates it, and writes it back into the **same** structure. Merges, formulas, fonts, borders, headers/footers, table styles — untouched. Text inside images is handled by vision models.
|
||||
>
|
||||
> **Tech:** FastAPI (async), openpyxl / python-docx / python-pptx, 7 translation engines the user picks per document (Google, DeepL, Google Cloud, OpenRouter éco & premium, OpenAI, Grok/xAI), Stripe billing, Docker/Postgres/Redis.
|
||||
>
|
||||
> **Pricing:** Free (2 docs/mo, no card) → Starter €9 → Pro €19 → Business €49 (API included).
|
||||
>
|
||||
> I'd love feedback from anyone who deals with international documents. What's the nastiest format you've tried to translate?
|
||||
>
|
||||
> (Link in comments to avoid the filter.)
|
||||
|
||||
**Commentaire n°1 (lien) :**
|
||||
> Here's the landing page: [URL]. Free plan, no card. The /docs page has the full API reference if you want to poke at the API.
|
||||
|
||||
---
|
||||
|
||||
## 2. r/translator
|
||||
|
||||
**Titre :** We built a document translator that preserves formatting — curious how you'd use it (or wouldn't)
|
||||
|
||||
**Corps :**
|
||||
> Hi, I'm the dev behind Office Translator (Wordly.art). Before I pitch anything: we know translators are the ones who actually feel the pain when a machine mangles a layout, so I'd rather ask than sell.
|
||||
>
|
||||
> The tool translates .xlsx / .docx / .pptx **in place** — structure, formulas, tables and styles are preserved — and supports **custom glossaries**, which is the feature I'd value your opinion on most:
|
||||
>
|
||||
> 1. Is glossary-based consistency (e.g. a fixed HVAC or legal term list) actually useful to you, or do you already solve this differently?
|
||||
> 2. For which document types is the format preservation worth paying for, vs. where a human review still beats any tool?
|
||||
> 3. What would make you trust an output enough to skip a full re-read? (confidence scores? diff view? per-segment override?)
|
||||
>
|
||||
> It's aimed at agencies and in-house teams as a **first pass** to cut turnaround — not to replace the translator. I'd genuinely like to hear what would make it a tool you'd recommend to a colleague.
|
||||
|
||||
> ⚠️ Ce subreddit est hostile au self-promo : publier en tant que dev transparent, répondre à chaque commentaire, jamais de lien dans le post.
|
||||
|
||||
---
|
||||
|
||||
## 3. r/smallbusiness
|
||||
|
||||
**Titre :** How do you translate client documents (Excel/Word/PowerPoint) without losing the formatting? We built a tool for this.
|
||||
|
||||
**Corps :**
|
||||
> Running a business that works internationally means a lot of documents that need translating — pricing sheets, contracts, slide decks, training files.
|
||||
>
|
||||
> The usual options all hurt somewhere:
|
||||
> - **Human translators:** great quality, 50–100× the cost and a multi-day turnaround
|
||||
> - **Google/DeepL:** cheap and fast, but they flatten the file — merged cells, formulas, slide layouts get destroyed, so someone has to rebuild the document
|
||||
>
|
||||
> We built **Office Translator** to kill that middle step: it translates the document **in place** and gives you back a file that looks like it was written in the target language from the start. You pick the engine (7 options, from free Google to premium LLMs), and you can lock your company terminology with a custom glossary so "unité de froid" is never suddenly "cold unit".
|
||||
>
|
||||
> Free plan: 2 documents/month, no card. From €9/mo after that. Uploads are deleted after 30 minutes and results within 2 hours.
|
||||
>
|
||||
> If you handle international documents, what's your current workflow and where does it break? Curious what I'm missing.
|
||||
31
docs/marketing/launch/show-hn.md
Normal file
31
docs/marketing/launch/show-hn.md
Normal file
@@ -0,0 +1,31 @@
|
||||
# Hacker News — Show HN
|
||||
|
||||
> Statut : prêt à publier (Phase 2, J0 matin EST). Soumettre via « Show HN » — pas de self-upvote.
|
||||
|
||||
## Titre
|
||||
**Show HN: Office document translation that preserves the formatting**
|
||||
|
||||
## Corps
|
||||
> I built **Office Translator** (Wordly.art) because every document translator I used — Google, DeepL, the one-shot tools — destroyed the layout. Translating a 50-page Excel pricing matrix meant getting back a text dump: merged cells gone, formulas replaced by computed values, slide decks unrecognizable. The translation was 5% of the job; fixing the format was 95%.
|
||||
>
|
||||
> So I made the format-preservation the product:
|
||||
>
|
||||
> - **In-place translation** for .xlsx / .docx / .pptx / .pdf. The pipeline parses the native structure (cells + merges + formulas, paragraph runs + styles, slide XML + shapes), extracts only translatable content, translates it, and writes it back into the *same* structure. Output looks like it was authored in the target language.
|
||||
> - **Scanned PDFs work too**: image-only pages are recovered with OCR (Mistral) before translation — most competitors (DeepL, Azure) reject those outright.
|
||||
> - **7 engines, user's choice per document**: Google (free), DeepL, Google Cloud, OpenRouter LLMs in two tiers (DeepSeek / Gemini / Claude), OpenAI, and Grok (xAI). Cheap engine for drafts, premium LLM for client deliverables.
|
||||
> - **Custom glossaries** to lock technical/legal/medical terminology across documents.
|
||||
> - **Vision translation** for text inside images (paid plans).
|
||||
> - **Privacy**: uploads deleted after 30 min, results auto-deleted within 2 hours, zero data retention, content never used for training.
|
||||
> - **API** on the Business plan (10k calls/mo) — the web workflow is fully mirrored: submit file, poll job, download.
|
||||
>
|
||||
> Stack: FastAPI (Python 3.11), openpyxl / python-docx / python-pptx, PyMuPDF, Postgres + Redis, Stripe, Docker, Next.js 15 frontend.
|
||||
>
|
||||
> Free plan: 2 documents/month, no card. I'd love feedback from people who've worked on document-format-preserving pipelines — what edge cases do I not handle yet? (PDF incl. scanned/OCR is already in — next candidates are IDML and CSV.)
|
||||
>
|
||||
> https://wordly.art
|
||||
|
||||
## Notes de publication
|
||||
- Soumettre à 8–9 h EST, mardi–jeudi
|
||||
- Répondre à chaque commentaire dans les 2 h ; rester technique, pas commercial
|
||||
- Pas de « upvote my post » — c'est interdit sur HN
|
||||
- Préparer 2–3 réponses techniques de poches : formule Excel + localisation (format de nombre), fusion de cellules + traduction, gestion des runs mixtes (gras/italique au milieu d'un paragraphe)
|
||||
102
docs/marketing/launch/x-thread.md
Normal file
102
docs/marketing/launch/x-thread.md
Normal file
@@ -0,0 +1,102 @@
|
||||
# X / Twitter — Thread de Lancement (12 tweets)
|
||||
|
||||
> Statut : prêt à publier (Phase 2, J0). Publier en thread (Reply chain), pas en post unique.
|
||||
> Assets requis : GIF 15 s du workflow (voir assets-spec.md), capture résultat côte à côte.
|
||||
|
||||
**T1 (accroche + GIF)**
|
||||
Your Excel got translated.
|
||||
Now fix the 47 broken merged cells, 12 dead formulas and the slide deck that lost its layout.
|
||||
|
||||
That's what "free" translation tools actually cost.
|
||||
|
||||
We built the opposite. Thread:
|
||||
|
||||
**T2 (le problème)**
|
||||
Every translator you've used works the same way:
|
||||
1. Flatten your document to plain text
|
||||
2. Translate the text
|
||||
3. Hope it fits back
|
||||
|
||||
The "hope" step is where your afternoon goes.
|
||||
|
||||
**T3 (notre approche)**
|
||||
Office Translator works in place:
|
||||
|
||||
• Parse the real structure (cells, runs, shapes)
|
||||
• Extract ONLY the translatable content
|
||||
• Translate it
|
||||
• Write it back into the SAME structure
|
||||
|
||||
Merges, formulas, fonts, borders: untouched.
|
||||
|
||||
**T4 (preuve)**
|
||||
[Capture d'écran : résultat côte à côte — original FR vs traduit EN, mêmes colonnes/fusions/formules]
|
||||
|
||||
Same file. Different language. Zero reformatting.
|
||||
|
||||
**T5 (multi-moteurs)**
|
||||
You pick the engine per document — 7 options:
|
||||
|
||||
• Google — free, fast
|
||||
• DeepL — best for business text
|
||||
• Google Cloud
|
||||
• DeepSeek / Gemini / Claude via OpenRouter — eco & premium LLM tiers
|
||||
• OpenAI, Grok (xAI)
|
||||
|
||||
Cheap for drafts. Premium LLM for the client deliverable.
|
||||
|
||||
**T6 (glossaires)**
|
||||
The feature agencies love: custom glossaries.
|
||||
|
||||
Lock "unité de froid → chiller", "clause de résiliation → termination clause" once. Every document after that uses your terminology. Consistent, every time.
|
||||
|
||||
**T7 (confidentialité)**
|
||||
Your documents are not our training data.
|
||||
|
||||
• Uploads deleted after 30 min, results within 2 h
|
||||
• Zero data retention
|
||||
• Encrypted in transit (TLS)
|
||||
• No human ever sees your content
|
||||
|
||||
**T8 (API)**
|
||||
Wiring it into your own stack? Business plan includes API access — 10,000 calls/month.
|
||||
|
||||
Submit file → poll job → download. Same workflow as the web app. Docs at /docs.
|
||||
|
||||
**T9 (prix)**
|
||||
Pricing (yearly = −20%):
|
||||
|
||||
• Free — 2 docs/mo, no card
|
||||
• Starter — €9
|
||||
• Pro — €19 (AI translation, glossaries)
|
||||
• Business — €49 (API, 5 seats)
|
||||
• Enterprise — custom
|
||||
|
||||
A page translated costs a fraction of a cent. A human does the same page for €1–2.
|
||||
|
||||
**T10 (pour qui)**
|
||||
Built for:
|
||||
• International SMEs (pricing sheets, contracts, manuals)
|
||||
• Translation agencies (first-pass + glossaries = faster turnaround)
|
||||
• Multilingual HR teams
|
||||
• Anyone who's ever re-built a translated Excel by hand
|
||||
|
||||
**T11 (preuve sociale + CTA)**
|
||||
60+ languages. 7 engines. 100% format preservation.
|
||||
|
||||
Free plan = 2 full documents/month, no card required. Test it on your ugliest file.
|
||||
|
||||
**T12 (CTA final)**
|
||||
👉 wordly.art
|
||||
|
||||
Launching on Product Hunt today — feedback welcome.
|
||||
|
||||
What's the nastiest document format you've ever tried to translate? Reply below, we read everything.
|
||||
|
||||
---
|
||||
|
||||
## Plan de publication
|
||||
- J-2 : teaser T1 seul (sans lien)
|
||||
- J0 : thread complet, 9 h
|
||||
- J+1 : republier T4 (preuve) + répondre à tous les retweets
|
||||
- Communautés à taguer : #BuildInPublic #SaaS #i18n #DevTools (max 2 hashtags)
|
||||
Reference in New Issue
Block a user