Update website to use simpler, more direct language for user submissions

Adjusted synthesis prompt and frontend copy to shift from a solemn, manifesto-like tone to a practical, direct communication style for user contributions and political representatives.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 923ae0e3-a363-4db8-b04a-e8baca2a1330
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 1a34f0b7-23c8-4e2d-a327-0e8096495ea3
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/8af7d2ec-2cc3-4ece-8af3-9f071488d072/923ae0e3-a363-4db8-b04a-e8baca2a1330/qrVKaka
Replit-Helium-Checkpoint-Created: true
This commit is contained in:
pironantoine
2026-04-04 06:17:33 +00:00
parent 6730700f5a
commit 3bc7d92e6c
3 changed files with 44 additions and 55 deletions
+25 -24
View File
@@ -31,8 +31,8 @@ import {
const submitIdeaSchema = z.object({
content: z.string()
.min(10, "Votre idée doit comporter au moins 10 caractères pour avoir du poids.")
.max(1000, "La concision est une vertu. Restez sous 1 000 caractères."),
.min(10, "Votre contribution doit faire au moins 10 caractères.")
.max(1000, "Merci de rester sous 1 000 caractères."),
author: z.string().max(100).optional(),
});
@@ -96,13 +96,13 @@ export default function Home() {
if (result.accepted) {
setSubmitResult({
success: true,
message: "Votre voix a été intégrée au manifeste collectif.",
message: "Votre contribution a été ajoutée à la synthèse.",
});
form.reset();
} else {
setSubmitResult({
success: false,
message: "Cette contribution n'a pas pu être intégrée au manifeste car elle n'est pas en accord avec les valeurs fondamentales qui guident cet espace commun.",
message: "Cette contribution n'a pas pu être intégrée : elle n'est pas compatible avec le cadre de modération de cette plateforme.",
reason: result.reason ?? undefined,
});
}
@@ -125,10 +125,10 @@ export default function Home() {
<div className="p-6 md:p-8 flex flex-col gap-6 flex-shrink-0 border-b border-border/40">
<div className="space-y-2">
<h1 className="text-3xl font-serif font-bold text-primary tracking-tight">
Parlez à la République
Vos propositions
</h1>
<p className="text-muted-foreground font-mono text-sm uppercase tracking-wider">
Votre voix compte. Partagez votre vision pour l'avenir.
<p className="text-muted-foreground text-sm">
Soumettez vos idées. Elles sont synthétisées et transmises à vos représentants.
</p>
</div>
@@ -142,7 +142,7 @@ export default function Home() {
<FormLabel className="sr-only">Votre idée</FormLabel>
<FormControl>
<Textarea
placeholder="Quel changement souhaitez-vous ? Exprimez-vous librement."
placeholder="Quelle proposition souhaitez-vous faire remonter ?"
className="min-h-[120px] resize-none font-serif text-lg bg-background border-primary/20 focus-visible:ring-primary placeholder:text-muted-foreground/50"
data-testid="input-idea-content"
{...field}
@@ -181,7 +181,7 @@ export default function Home() {
{submitIdea.isPending ? (
<><Loader2 className="mr-2 h-4 w-4 animate-spin" /> Envoi</>
) : (
<><PenTool className="mr-2 h-4 w-4" /> Proclamer</>
<><PenTool className="mr-2 h-4 w-4" /> Contribuer</>
)}
</Button>
</div>
@@ -199,7 +199,7 @@ export default function Home() {
: <Info className="h-4 w-4 text-amber-600" />
}
<AlertTitle>
{submitResult.success ? "Proclamation enregistrée" : "Contribution non retenue"}
{submitResult.success ? "Contribution enregistrée" : "Contribution non retenue"}
</AlertTitle>
<AlertDescription>
{submitResult.message}
@@ -217,13 +217,14 @@ export default function Home() {
<AccordionItem value="valeurs" className="border-none">
<AccordionTrigger className="text-xs font-mono uppercase tracking-widest text-muted-foreground hover:no-underline py-3">
<span className="flex items-center gap-2">
<Scale className="h-3 w-3" /> Nos valeurs &amp; fondements juridiques
<Scale className="h-3 w-3" /> Cadre de modération
</span>
</AccordionTrigger>
<AccordionContent>
<p className="text-xs text-muted-foreground font-serif mb-4 leading-relaxed">
Cet espace est régi par les grands textes fondateurs du droit international
des droits humains. Toute contribution est évaluée à leur lumière.
<p className="text-xs text-muted-foreground mb-4 leading-relaxed">
Les contributions sont modérées selon les textes fondamentaux du droit
international des droits humains. Les contenus contraires à ces principes
ne sont pas intégrés.
</p>
<div className="space-y-3">
{VALEURS.map((v) => (
@@ -247,7 +248,7 @@ export default function Home() {
<ScrollArea className="flex-1 bg-muted/30">
<div className="p-6 md:p-8">
<h2 className="text-xs font-mono font-bold uppercase tracking-widest text-muted-foreground mb-6 flex items-center gap-2">
<TrendingUp className="h-3 w-3" /> Proclamations récentes
<TrendingUp className="h-3 w-3" /> Contributions récentes
</h2>
<div className="space-y-8">
@@ -277,8 +278,8 @@ export default function Home() {
</div>
))
) : (
<div className="text-center p-8 text-muted-foreground font-mono text-sm border border-dashed border-border/60">
Aucune proclamation enregistrée. Soyez le premier à prendre la parole.
<div className="text-center p-8 text-muted-foreground text-sm border border-dashed border-border/60">
Aucune contribution enregistrée pour l'instant.
</div>
)}
</div>
@@ -299,17 +300,17 @@ export default function Home() {
<div className="flex justify-between items-start mb-12">
<div>
<h2 className="text-sm font-mono font-bold uppercase tracking-widest text-primary flex items-center gap-2">
<Users className="h-4 w-4" /> La Voix du Peuple
<Users className="h-4 w-4" /> Synthèse des contributions
</h2>
<p className="text-xs font-mono text-muted-foreground mt-1">
La synthèse vivante de la pensée démocratique
Mise à jour à chaque nouvelle contribution
</p>
</div>
{stats && (
<div className="text-xs font-mono text-right" data-testid="text-stats">
<div className="flex flex-col">
<span className="text-muted-foreground">Voix rejointes</span>
<span className="text-muted-foreground">Contributions intégrées</span>
<span className="font-bold text-primary">{stats.accepted}</span>
</div>
</div>
@@ -321,7 +322,7 @@ export default function Home() {
<div className="flex flex-col items-center justify-center gap-4 text-muted-foreground">
<Loader2 className="h-8 w-8 animate-spin text-primary" />
<span className="font-mono text-sm uppercase tracking-widest">
À l'écoute du peuple
Chargement
</span>
</div>
) : synthesis ? (
@@ -334,7 +335,7 @@ export default function Home() {
<div>{synthesis.text}</div>
) : (
<p className="text-muted-foreground italic text-center text-xl">
Les pages de notre manifeste sont encore vierges. Prenez la parole.
Aucune contribution pour l'instant.
</p>
)}
</div>
@@ -345,14 +346,14 @@ export default function Home() {
data-testid="text-synthesis-meta"
>
<span>
Synthèse de {synthesis.ideaCount} idée{synthesis.ideaCount !== 1 ? "s" : ""} citoyenne{synthesis.ideaCount !== 1 ? "s" : ""}
Basé sur {synthesis.ideaCount} contribution{synthesis.ideaCount !== 1 ? "s" : ""}
</span>
<span className="flex items-center gap-2">
<span className="relative flex h-2 w-2">
<span className="animate-ping absolute inline-flex h-full w-full rounded-full bg-primary opacity-75" />
<span className="relative inline-flex rounded-full h-2 w-2 bg-primary" />
</span>
En direct &bull; {format(new Date(synthesis.updatedAt), "HH:mm:ss")}
Mis à jour le {format(new Date(synthesis.updatedAt), "d MMM à HH:mm", { locale: fr })}
</span>
</div>
)}