feat: publication IA (magazine/brief/essay) + fixes critique
Publication IA: - 4 templates (magazine, brief, essay, simple) avec CSS riche - Rewrite IA (article/exercises/tutorial/reference/mixed) - Modération avec timeout 12s + fallback safe - Quotas publish_enhance par tier (basic=2, pro=15, business=100) - Détection contenu stale (hash) - Migration DB publishedContent/publishedTemplate/publishedSourceHash Fixes: - cheerio v1.2: Element -> AnyNode (domhandler), decodeEntities cast - _isShared ajouté au type Note (champ virtuel serveur) - callout colors PDF export: extraction fonction pure testable - admin/published: guard note.userId null - Cmd+S fonctionne en mode dialog (pas seulement fullPage) i18n: - 23 clés publish* traduites dans les 15 locales - Extension Web Clipper: 13 locales mise à jour Tests: - callout-colors.test.ts (6 tests) - note-visible-in-view.test.ts (5 tests) - entitlements.test.ts + byok-entitlements.test.ts: mock usageLog + unstubAllEnvs - 199/199 tests passent Tracker: user-stories.md sync avec sprint-status.yaml
This commit is contained in:
@@ -42,7 +42,7 @@ export const LandingPageV2: React.FC<LandingPageV2Props> = ({
|
||||
onSwitchVersion
|
||||
}) => {
|
||||
|
||||
// Real world Momento note seeds to match constants.ts exactly
|
||||
// Real world Memento note seeds to match constants.ts exactly
|
||||
const realNotes = [
|
||||
{
|
||||
id: 'n1',
|
||||
@@ -194,7 +194,7 @@ $$\\Omega(x) = \\int_{0}^{\\Lambda} e^{-k \\cdot x} \\cdot dx$$
|
||||
<span className="text-paper font-serif text-2xl font-bold">M</span>
|
||||
</div>
|
||||
<div className="text-left">
|
||||
<span className="font-serif text-2xl font-medium tracking-tight">Momento</span>
|
||||
<span className="font-serif text-2xl font-medium tracking-tight">Memento</span>
|
||||
<span className="text-[9px] font-black text-accent uppercase tracking-widest block font-mono -mt-1.5 pl-0.5">Second Cerveau</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -242,7 +242,7 @@ $$\\Omega(x) = \\int_{0}^{\\Lambda} e^{-k \\cdot x} \\cdot dx$$
|
||||
<section className="relative pt-32 pb-24 px-6 md:px-12 max-w-7xl mx-auto">
|
||||
<div className="grid grid-cols-1 lg:grid-cols-12 gap-10 items-stretch">
|
||||
|
||||
{/* Left Hero Sidebar: Information on Momento's Core Features */}
|
||||
{/* Left Hero Sidebar: Information on Memento's Core Features */}
|
||||
<div className="lg:col-span-5 flex flex-col justify-between space-y-6 text-left">
|
||||
<div className="space-y-5">
|
||||
<div className="inline-flex items-center gap-2 px-3 py-1.5 rounded-full bg-accent/10 border border-accent/20 text-accent text-[9px] font-bold font-mono tracking-widest uppercase">
|
||||
@@ -256,7 +256,7 @@ $$\\Omega(x) = \\int_{0}^{\\Lambda} e^{-k \\cdot x} \\cdot dx$$
|
||||
</h1>
|
||||
|
||||
<p className="text-stone-600 text-sm leading-relaxed font-light">
|
||||
Momento rassemble vos notes, vos formules mathématiques et votre logique dans une structure d'apprentissage offline d'une flexibilité absolue. Évitez les abonnements ruineux en apportant votre clé personnelle (BYOK) ou utilisez l'environnement de manière 100% autonome et sécurisée.
|
||||
Memento rassemble vos notes, vos formules mathématiques et votre logique dans une structure d'apprentissage offline d'une flexibilité absolue. Évitez les abonnements ruineux en apportant votre clé personnelle (BYOK) ou utilisez l'environnement de manière 100% autonome et sécurisée.
|
||||
</p>
|
||||
|
||||
{/* Guided Feature Tabs Selector: Directly gives info on what the user can do */}
|
||||
@@ -320,7 +320,7 @@ $$\\Omega(x) = \\int_{0}^{\\Lambda} e^{-k \\cdot x} \\cdot dx$$
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Right Hero Column: True 1-to-1 Interactive Representation of Momento Workspace */}
|
||||
{/* Right Hero Column: True 1-to-1 Interactive Representation of Memento Workspace */}
|
||||
<div className="lg:col-span-7 w-full flex flex-col justify-between">
|
||||
<div className="w-full bg-[#1c1c1c] rounded-[24px] border border-ink/40 p-3 shadow-2xl relative overflow-hidden flex flex-col justify-between">
|
||||
|
||||
@@ -863,7 +863,7 @@ $$\\Omega(x) = \\int_{0}^{\\Lambda} e^{-k \\cdot x} \\cdot dx$$
|
||||
<span className="text-[10px] font-bold uppercase tracking-[0.3em] text-[#A47148] font-mono block">Respect Souverain des Écrits</span>
|
||||
<h2 className="text-3xl font-serif text-[#1C1C1C] tracking-tight leading-tight">Aucun abonnement IA obligatoire grâce au modèle "BYOK".</h2>
|
||||
<p className="text-sm font-light text-stone-600 leading-relaxed">
|
||||
La plupart des applications cloud d'intelligence artificielle re-facturent de lourdes marges commerciales sur vos écrits. Momento change les règles du jeu :
|
||||
La plupart des applications cloud d'intelligence artificielle re-facturent de lourdes marges commerciales sur vos écrits. Memento change les règles du jeu :
|
||||
</p>
|
||||
<div className="space-y-4">
|
||||
<div className="flex gap-4">
|
||||
@@ -916,7 +916,7 @@ $$\\Omega(x) = \\int_{0}^{\\Lambda} e^{-k \\cdot x} \\cdot dx$$
|
||||
<div className="max-w-6xl mx-auto space-y-16">
|
||||
<div className="max-w-xl mx-auto text-center space-y-3">
|
||||
<span className="text-[11px] font-bold uppercase tracking-[0.3em] text-[#A47148] font-mono block">Les Atouts Pratiques</span>
|
||||
<h2 className="text-3xl font-serif text-[#1C1C1C] tracking-tight leading-tight">Pourquoi utiliser Momento ?</h2>
|
||||
<h2 className="text-3xl font-serif text-[#1C1C1C] tracking-tight leading-tight">Pourquoi utiliser Memento ?</h2>
|
||||
<p className="text-xs font-light text-stone-500">Un écosystème conçu de bout en bout pour l'autonomie et la productivité.</p>
|
||||
</div>
|
||||
|
||||
@@ -961,7 +961,7 @@ $$\\Omega(x) = \\int_{0}^{\\Lambda} e^{-k \\cdot x} \\cdot dx$$
|
||||
<section className="py-20 text-center bg-[#FAF9F5]/70 select-none">
|
||||
<div className="max-w-xl mx-auto space-y-5 px-6">
|
||||
<h3 className="text-2xl font-serif text-[#1C1C1C] tracking-tight">Structurer vos notes et vos pensées.</h3>
|
||||
<p className="text-xs text-stone-500 font-light">Accédez directement à l'espace de travail fluide de Momento, sans processus contraignant.</p>
|
||||
<p className="text-xs text-stone-500 font-light">Accédez directement à l'espace de travail fluide de Memento, sans processus contraignant.</p>
|
||||
<div className="flex gap-4 justify-center">
|
||||
<button
|
||||
onClick={onEnter}
|
||||
|
||||
Reference in New Issue
Block a user