Replaces the passive "by signing in you agree…" paragraph on /login with
an active un-pre-ticked checkbox over three short statements that the
user actively accepts. Each acceptance is recorded against a code-level
version pointer, so a future wording revision bumps the version and
prompts every user again.
- New app/legal.py::ACKNOWLEDGEMENT_VERSION (currently 1).
- New UserAcknowledgement model + migration 0027 (user_id FK CASCADE,
version, lang, accepted_at, composite index on user_id+version).
- auth_service: has_acknowledged_current() and record_acknowledgement()
helpers; POST /login validates the checkbox, falls through to a 400
with the localised error otherwise, and writes a row iff the user has
no current-version row (so existing-already-accepted users don't
produce duplicates).
- GET /login: language detection mirrors the landing's
detect_public_lang(); ?lang=en|it overrides; stamps the rtm.lang
cookie; passes the locale dict + version into the template.
- login.html: EN/IT pill, localised lede/banner/legal footer, required
checkbox in an acknowledgement block, hidden lang+ack_version fields.
Submit disabled until the box is ticked (UX polish; the server check
is what carries weight).
- locales/{en,it}.yaml: new auth.ack.* section with TODO(legal) marker.
Wording matches the brief's substance pending solicitor sign-off.
- tests/test_signup_acknowledgement.py: 10 tests (EN + IT rejection,
one row per acceptance, displayed-lang recorded, idempotent on
current version, version-bump writes new row, helper unit tests).
The acknowledgement strengthens the user-civil-claim vector — combined
with the liability cap and the Ltd, it makes "I was misled into thinking
this was advice" much harder to argue. It does NOT move the regulatory
perimeter, which is governed by the content discipline shipped in
47dce1a. Belt-and-braces, not a substitute.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
140 lines
6.3 KiB
YAML
140 lines
6.3 KiB
YAML
# Italian copy for the public landing page.
|
|
#
|
|
# Note: brand names ("Read the Markets") and proper nouns
|
|
# (tickers, currency codes) stay verbatim — they aren't translated.
|
|
|
|
hero:
|
|
tagline: "Capisci i mercati. Non scommetterci sopra."
|
|
subhead: >-
|
|
Pensato per investitori che vogliono <strong>ragionare con
|
|
lucidità</strong> e tagliare fuori il rumore ad alta frequenza
|
|
che nasce dal trattare i mercati come un casinò. Aggreghiamo
|
|
notizie cross-asset e segnali macro, e ne scriviamo una lettura
|
|
in prosa chiara: cosa giustificano i fondamentali sottostanti,
|
|
rispetto a cosa sta facendo la folla. Aggiornato durante la
|
|
giornata di trading. Un servizio editoriale, non finanziario.
|
|
cta_dashboard: "Apri dashboard"
|
|
cta_pricing: "Vedi i piani"
|
|
cta_signup: "Iscriviti gratis"
|
|
|
|
shot_dashboard:
|
|
alt: "Anteprima dashboard"
|
|
zoom_hint: "Clicca per ingrandire"
|
|
caption: >-
|
|
La dashboard. In alto una lettura cross-asset aggregata, sotto
|
|
gruppi di indicatori selezionati a mano. Il toggle del livello
|
|
di lettura (Novice / Pro) cambia il taglio di ogni pannello
|
|
generato dall'IA, da prosa accessibile a registro tecnico
|
|
sintetico.
|
|
|
|
features:
|
|
news:
|
|
tag: "Notizie, aggregate"
|
|
title: "Titoli dall'intero universo macro"
|
|
body: >-
|
|
Feed RSS e per-ticker che coprono azioni, tassi, credito, FX,
|
|
materie prime e geopolitica. Ogni titolo è etichettato
|
|
automaticamente per tema, così il rumore resta rumore e il
|
|
materiale rilevante per i fondamentali è facile da trovare.
|
|
L'ingestione segue il calendario di trading — fuori orario
|
|
tutto resta in pausa.
|
|
shot_alt: "Feed notizie con tag automatici"
|
|
shot_caption: >-
|
|
Il feed delle notizie. Ogni titolo porta uno o più tag tematici
|
|
(tassi, AI, energia, geopolitica, …) per tenere i fili che ti
|
|
interessano e silenziare gli altri. Click su un tag per
|
|
includerlo; shift-click per escluderlo.
|
|
indicators:
|
|
tag: "Segnali macro"
|
|
title: "Una tape cross-asset curata"
|
|
body: >-
|
|
Un set di indicatori selezionato a mano su ogni classe di
|
|
attivo, aggiornato ogni ora durante le sessioni di mercato.
|
|
Ogni gruppo ha una lettura breve che spiega cosa il movimento
|
|
<em>significa</em>, non cosa è stato. Ancorata a utili,
|
|
politica monetaria, valutazione — non a pattern grafici.
|
|
shot_alt: "Pannello indicatori con commento IA"
|
|
shot_caption: >-
|
|
Il pannello indicatori. Tab per classe di attivo (azionario,
|
|
tassi, materie prime, FX, obbligazioni, …); ogni tab porta una
|
|
'lettura' di un paragrafo scritta dal modello sopra i prezzi
|
|
live. I numeri ancorano la prosa, così il commento è
|
|
verificabile, non sospeso nel vuoto.
|
|
strategic:
|
|
tag: "Lettura strategica"
|
|
title: "Razionale vs irrazionale, paragrafo per paragrafo"
|
|
body: >-
|
|
Leghiamo i titoli della giornata e i segnali cross-asset in
|
|
un'unica interpretazione breve. Ogni paragrafo distingue i
|
|
<strong>driver razionali</strong> (utili, politica, valutazione)
|
|
dagli <strong>irrazionali</strong> (posizionamento, narrativa,
|
|
flussi) e dà un nome al divario. Due livelli di lettura: Novice
|
|
e Pro. È commento editoriale su dati pubblici — non una
|
|
previsione e non un consiglio su nessuna decisione di
|
|
investimento.
|
|
shot_alt: "Log strategico — la lettura editoriale IA"
|
|
shot_caption: >-
|
|
Il log strategico. Il modello scrive un'interpretazione
|
|
aggiornata durante la giornata, partendo dalla versione
|
|
precedente come contesto, in modo da aggiornare invece di
|
|
ricominciare. Gli utenti paganti ricevono un refresh ogni ora;
|
|
gli utenti gratuiti uno ogni sei.
|
|
|
|
multilang_callout: >-
|
|
Ogni superficie generata dall'IA — log strategico, letture degli
|
|
indicatori, chat, digest giornaliero — è disponibile in
|
|
<strong>Inglese</strong> e <strong>Italiano</strong>. Usa il
|
|
selettore di lingua nell'header e i pannelli si aggiornano in
|
|
tempo reale; simboli ticker, codici valuta e numeri restano
|
|
invariati tra le lingue.
|
|
|
|
more_views:
|
|
head: "Altre viste"
|
|
chat:
|
|
alt: "Fai domande di approfondimento su qualunque log passato"
|
|
caption: >-
|
|
Fai domande di approfondimento su qualunque log passato. Il
|
|
pannello chat eredita tutto il contesto del log, così puoi
|
|
tirare un filo senza re-incollare titoli o re-spiegare la
|
|
situazione.
|
|
caption_strong: "Chiedi qualsiasi cosa su un log"
|
|
caption_span: "Domande conversazionali con il contesto della giornata già caricato."
|
|
|
|
portfolio_blurb: >-
|
|
Carica un CSV di portafoglio dal tuo broker per vedere la
|
|
ripartizione per settore, valuta e concentrazione — calcolata
|
|
interamente nel tuo browser. Le posizioni restano nel browser;
|
|
nulla sui tuoi titoli viene inviato o conservato sul server.
|
|
|
|
not_strip:
|
|
head: "Cosa questo NON è."
|
|
items:
|
|
- "Non è consulenza finanziaria."
|
|
- "Non sono segnali di trading."
|
|
- "Non è uno strumento per day-trading."
|
|
- "Nessuna chiamata buy/sell, mai."
|
|
- "Nessuna previsione basata su pattern grafici."
|
|
- "Non è un servizio regolamentato."
|
|
|
|
footer:
|
|
legal: >-
|
|
Iscrivendoti accetti i nostri <a href="/terms">Termini</a> e
|
|
l'<a href="/privacy">Informativa privacy</a>, e confermi di aver
|
|
letto il <a href="/disclaimer">disclaimer finanziario</a>.
|
|
|
|
meta:
|
|
description: "Capisci i mercati. Non scommetterci sopra."
|
|
|
|
# TODO(legal): final wording pending solicitor sign-off. Bumping
|
|
# ACKNOWLEDGEMENT_VERSION (app/legal.py) re-prompts every existing user
|
|
# on next sign-in and writes a fresh row at the new version.
|
|
auth:
|
|
ack:
|
|
heading: "Prima di creare un account, conferma:"
|
|
items:
|
|
- "Questo servizio è commento editoriale ed educativo su dati di mercato pubblici. Non è consulenza finanziaria, di investimento o fiscale e non è una raccomandazione personalizzata."
|
|
- "L'operatore non è autorizzato né regolamentato a fornire consulenza in materia di investimenti. Nulla qui è una raccomandazione di acquisto, vendita o detenzione di alcuno strumento finanziario."
|
|
- "Prendo da solo le mie decisioni di investimento e ne sono unico responsabile. Per una consulenza personalizzata mi rivolgerò a un consulente regolamentato."
|
|
checkbox_label: "Ho letto e accetto queste dichiarazioni."
|
|
error_required: "Spunta la casella per confermare prima di continuare."
|
|
lang_switch_aria: "Lingua"
|