Allinea contenuti legali e rifinisce UI home/footer.

Riorganizza privacy/gdpr/terms con struttura dati dedicata, uniforma copy e stile delle sezioni principali, aggiorna card prodotto/servizi e migliora ordine e separatori del footer per una presentazione più coerente.

Made-with: Cursor
This commit is contained in:
Javaxman
2026-04-22 17:00:23 +02:00
parent 9d96253888
commit d84163661b
20 changed files with 1415 additions and 671 deletions

View File

@ -116,91 +116,95 @@ const linkClass =
</div> </div>
<div <div
class="mt-10 flex flex-col gap-3 border-t border-nx-border/70 pt-8 sm:flex-row sm:items-center sm:gap-6" class="relative mt-10 grid gap-8 pt-8 before:pointer-events-none before:absolute before:left-1/2 before:top-0 before:h-px before:w-screen before:-translate-x-1/2 before:bg-nx-border/70 lg:grid-cols-[minmax(0,1fr)_minmax(0,1.2fr)] lg:items-start lg:gap-10"
data-nx-footer-print-collapsible data-nx-footer-print-collapsible
> >
<button <div class="min-w-0">
type="button" <p class="text-xs font-semibold uppercase tracking-wider text-nx-fg">
class="inline-flex h-10 shrink-0 items-center justify-center self-start rounded-lg border border-nx-border bg-nx-bg/50 px-4 text-sm font-medium text-sky-400/90 transition-colors hover:border-sky-500/35 hover:bg-sky-500/5 hover:text-sky-300 sm:self-auto" Impostazioni cookie
data-nx-cc-open </p>
> <p class="mt-1.5 max-w-xl text-xs leading-relaxed text-nx-muted">
{footer.cookiePreferences.label} {footer.cookiePreferences.hint}
</button> </p>
<p class="max-w-xl text-xs leading-relaxed text-nx-muted sm:flex-1"> <button
{footer.cookiePreferences.hint} type="button"
</p> class="mt-3 inline-flex h-10 shrink-0 items-center justify-center self-start rounded-lg border border-nx-border bg-nx-bg/50 px-4 text-sm font-medium text-sky-400/90 transition-colors hover:border-sky-500/35 hover:bg-sky-500/5 hover:text-sky-300"
data-nx-cc-open
>
{footer.cookiePreferences.label}
</button>
</div>
<div class="min-w-0">
<p class="text-xs font-semibold uppercase tracking-wider text-nx-fg">
{footer.newsletter.title}
</p>
<p class="mt-1.5 text-xs leading-relaxed text-nx-muted">
{footer.newsletter.description}
</p>
{
hasNewsletterAction ? (
<form
class="relative mt-3 flex flex-col gap-2 sm:flex-row sm:items-stretch"
action={nl.actionUrl}
method="post"
accept-charset="UTF-8"
>
{nextUrl ? <input type="hidden" name="_next" value={nextUrl} /> : null}
{notifySubject ? (
<input type="hidden" name="_subject" value={notifySubject} />
) : null}
<input
type="text"
name="_gotcha"
tabindex="-1"
autocomplete="off"
aria-hidden="true"
class="pointer-events-none absolute -left-[9999px] h-0 w-0 opacity-0"
/>
<input
type="email"
name={nl.fieldName}
required
autocomplete="email"
placeholder={nl.placeholder}
class="min-h-10 w-full rounded-lg border border-nx-border bg-nx-bg/80 px-3 text-sm text-nx-fg placeholder:text-nx-muted/70 outline-none ring-sky-500/30 focus:border-sky-500/40 focus:ring-2"
/>
<button
type="submit"
class="inline-flex h-10 shrink-0 items-center justify-center rounded-lg bg-nx-fg px-4 text-sm font-semibold text-nx-bg hover:bg-white sm:px-5"
>
{nl.buttonLabel}
</button>
</form>
) : (
<div class="mt-3 space-y-2">
<input
type="email"
disabled
placeholder={nl.placeholder}
class="min-h-10 w-full cursor-not-allowed rounded-lg border border-nx-border bg-nx-bg/40 px-3 text-sm text-nx-muted opacity-60"
aria-describedby="nx-newsletter-hint"
/>
<button
type="button"
disabled
class="inline-flex h-10 w-full cursor-not-allowed items-center justify-center rounded-lg border border-nx-border bg-nx-elevated/50 text-sm font-medium text-nx-muted opacity-70 sm:w-auto sm:px-5"
>
{nl.buttonLabel}
</button>
<p id="nx-newsletter-hint" class="text-xs leading-relaxed text-nx-muted">
Iscrizione in arrivo: configura lendpoint nel progetto per attivare il modulo.
</p>
</div>
)
}
</div>
</div> </div>
</div> </div>
<!-- Una sola area newsletter, allineata a sinistra come la colonna Sezioni -->
<div class="pt-10 lg:max-w-md" data-nx-footer-print-collapsible>
<p class="text-xs font-semibold uppercase tracking-wider text-nx-fg">
{footer.newsletter.title}
</p>
<p class="mt-1.5 text-xs leading-relaxed text-nx-muted">
{footer.newsletter.description}
</p>
{
hasNewsletterAction ? (
<form
class="relative mt-3 flex flex-col gap-2 sm:flex-row sm:items-stretch"
action={nl.actionUrl}
method="post"
accept-charset="UTF-8"
>
{nextUrl ? <input type="hidden" name="_next" value={nextUrl} /> : null}
{notifySubject ? (
<input type="hidden" name="_subject" value={notifySubject} />
) : null}
<input
type="text"
name="_gotcha"
tabindex="-1"
autocomplete="off"
aria-hidden="true"
class="pointer-events-none absolute -left-[9999px] h-0 w-0 opacity-0"
/>
<input
type="email"
name={nl.fieldName}
required
autocomplete="email"
placeholder={nl.placeholder}
class="min-h-10 w-full rounded-lg border border-nx-border bg-nx-bg/80 px-3 text-sm text-nx-fg placeholder:text-nx-muted/70 outline-none ring-sky-500/30 focus:border-sky-500/40 focus:ring-2"
/>
<button
type="submit"
class="inline-flex h-10 shrink-0 items-center justify-center rounded-lg bg-nx-fg px-4 text-sm font-semibold text-nx-bg hover:bg-white sm:px-5"
>
{nl.buttonLabel}
</button>
</form>
) : (
<div class="mt-3 space-y-2">
<input
type="email"
disabled
placeholder={nl.placeholder}
class="min-h-10 w-full cursor-not-allowed rounded-lg border border-nx-border bg-nx-bg/40 px-3 text-sm text-nx-muted opacity-60"
aria-describedby="nx-newsletter-hint"
/>
<button
type="button"
disabled
class="inline-flex h-10 w-full cursor-not-allowed items-center justify-center rounded-lg border border-nx-border bg-nx-elevated/50 text-sm font-medium text-nx-muted opacity-70 sm:w-auto sm:px-5"
>
{nl.buttonLabel}
</button>
<p id="nx-newsletter-hint" class="text-xs leading-relaxed text-nx-muted">
Iscrizione in arrivo: configura lendpoint nel progetto per attivare il modulo.
</p>
</div>
)
}
</div>
<div <div
class="mt-0 flex flex-col gap-3 border-t border-nx-border pt-8 sm:flex-row sm:items-end sm:justify-between sm:gap-6" class="relative mt-0 flex flex-col gap-3 pt-8 before:pointer-events-none before:absolute before:left-1/2 before:top-0 before:h-px before:w-screen before:-translate-x-1/2 before:bg-nx-border sm:flex-row sm:items-end sm:justify-between sm:gap-6"
> >
<p class="min-w-0 text-xs leading-relaxed text-nx-muted sm:text-sm"> <p class="min-w-0 text-xs leading-relaxed text-nx-muted sm:text-sm">
© {new Date().getFullYear()} NexStudio. {footer.legalLine} © {new Date().getFullYear()} NexStudio. {footer.legalLine}

135
src/data/codice-etico.ts Normal file
View File

@ -0,0 +1,135 @@
/**
* Codice etico — riferimenti a prodotti e domini **separati in dati**:
* aggiungere una riga a `productLines` e, se serve, un `ConformityBlock` in
* `codiceEticoConformityBlocks` senza riscrivere la pagina intera.
*/
export const codiceEtico = {
productLines: [
{ id: 'platform' as const, name: 'Piattaforme e servizi SaaS' },
{ id: 'legal' as const, name: 'Legal Tech', productName: 'LexAura' as const },
{ id: 'health' as const, name: 'Health Tech', productName: 'MediAura' as const },
],
} as const;
export type ConformityBlock = {
id: string;
anchorId: string;
title: string;
lead?: string;
items: readonly string[];
};
/**
* Sezione 4 — sottosezioni indipendenti. Per una nuova verticalità (es. fintech
* regolamentato): `productLines` + un nuovo blocco qui, più eventuali li dedicati
* altrove mappati da un piccolo elenco in questo file.
*/
export const codiceEticoConformityBlocks: readonly ConformityBlock[] = [
{
id: 'platform',
anchorId: 'conformita-piattaforma',
title: '4.1 Piattaforma e offerta SaaS (obblighi orizzontali)',
lead:
'Riferimenti comuni a tutte le attività di trattamento e a tutte le linee in abbonamento, indipendentemente dal dominio del cliente finale.',
items: [
'Thailand Personal Data Protection Act (PDPA).',
"Regolamento generale sulla protezione dei dati (GDPR), quando applicabile per utenti o servizi nell'Unione europea.",
],
},
{
id: 'legal',
anchorId: 'conformita-legal',
title: '4.2 Ambito legale (Legal Tech / LexAura)',
lead:
'Misure e riferimenti per software e flussi ad uso di studi legali e professioni regolamentate, inclusa lattività riferibile a LexAura o ad evoluzioni nello stesso dominio.',
items: [
'Norme professionali e di segreto professionale per lesercizio forense; rispetto di privilegi professionali (ad es. attorneyclient privilege) ove applicabili; lealtà e correttezza verso controparti e terzi, nei limiti della legge e deontologia.',
],
},
{
id: 'health',
anchorId: 'conformita-sanitario',
title: '4.3 Ambito sanitario (Health Tech / MediAura)',
lead:
'Dati, rischi e, se del caso, classificazioni regolatorie riferibili a Health Tech e a MediAura (e prodotti nello stesso perimetro).',
items: [
'Normative sanitarie e standard locali o internazionali pertinenti (requisiti per la gestione dei dati clinici, standard ISO rilevanti, continuità assistenziale ove toccata dal software).',
'Requisiti per dispositivi medici o software a scopo medico (es. EU MDR, regolamenti locali) se le funzionalità rientrano nella definizione di dispositivo medico o equivalente per il mercato prescelto.',
"Norme e buone pratiche su segreto e riservatezza in ambito sanitario (es. relazioni con operatori) e, se applicabile: HIPAA (Stati Uniti) oltre a quanto già previsto a livello orizzontale (GDPR, PDPA) per i trasferimenti.",
],
},
] as const;
type ProductLine = (typeof codiceEtico.productLines)[number];
export function getCodiceEticoProductListPhrase(): string {
const lines = codiceEtico.productLines.filter(
(p): p is ProductLine & { id: 'legal' | 'health' } => p.id !== 'platform',
);
return lines
.map((p) => (p.id !== 'platform' && 'productName' in p ? `${p.productName} (${p.name})` : p.name))
.join(' e ');
}
/** Testo unico per §1, coerente con `productLines` */
export function getCodiceEticoPremessa(): string {
const elenco = getCodiceEticoProductListPhrase();
return (
'Questo Codice Etico stabilisce i principi, i doveri e le regole di comportamento che tutti i ' +
'soggetti coinvolti in NexStudio (di seguito «Società») devono osservare nello ' +
'sviluppo, nella commercializzazione e nella gestione di soluzioni SaaS, con riferimento organizzato per linee (piattaforma comune, ambito legale, ambito sanitario) e, in concreto, in particolare a ' +
elenco +
". Se l'offerta si arricchirà o diverrà, le nuove linee a elevata regolamentazione andranno descritte con lo stesso schema (piattaforma + perimetro di dominio), tramite allegati o revisione del testo, senza mescolare criteri tra verticalità. " +
'Mira a garantire conformità normativa, tutela della privacy, sicurezza, ' +
'qualità tecnica, protezione dei diritti degli utenti e responsabilità professionale.'
);
}
/** Esempio: validazione in §7, separata per perimetro; estendere l'array con nuove righe. */
export const qualitaValidazioneProdotto: readonly { id: string; text: string }[] = [
{
id: 'legal',
text: 'per funzionalità che supportano scelte o attività in ambito legale, validazione con esperti legali, studi pilota, documentazione di limiti e avvertenze, così come previsto per LexAura o equivalenti in Legal Tech.',
},
{
id: 'health',
text: 'per funzionalità che assistono decisioni cliniche o attività sanitarie, validazione con esperti clinici, studi pilota, avvertenze, così come previsto per MediAura o equivalenti in Health Tech.',
},
];
/** Voci in “Note pratiche” che dipendono dalla stessa separazione dominio. */
export const notePraticheDPIA: readonly string[] = [
"Eseguire DPIA per trattamenti critici per ciascun perimetro (in particolare trattamenti sanitari o legali a elevata criticità) documentando il nesso con le linee prodotto coinvolte.",
"Per la linea Health Tech / MediAura o equivalenti, verificare se parti del prodotto rientrano nella definizione di dispositivo medico o software a scopo medico, ai fini di registrazione o approvazione secondo il mercato e la classificazione scelta.",
];
/**
* §5.1 — separazione netta tra fornitore SaaS, sottoscrittori (medici, avvocati, strutture)
* e interessati (pazienti, clienti delle parti). Il testo legale completo resta in
* privacy policy, DPA e informative verso pazienti/clienti; qui solo principi e condotta.
*/
export const codiceEticoTutelaDatiRuoli = {
anchorId: 'tutela-dati-ruoli',
title: '5.1 Pazienti, clienti degli studi e abbonamento: ruoli e trattamento',
intro:
"Sì, va spiegata la divisione di ruoli: il Codice fissa cosa ci aspettiamo da ciascuna parte, senza sostituire linformativa privacy né i contratti. Sotto, in sintesi, chi tratta i dati dei pazienti e dei clienti rispetto agli studi e con quali doveri (Società, sottoscrittori, interessati).",
rows: [
{
label: 'NexStudio (fornitore / operatore del servizio)',
text:
"La Società tratta dati personali e, ove presenti, categorie particolari (es. salute, situazione giuridica) solo per fornire, proteggere e migliorare le piattaforme, per supporto, sicurezza, fatturazione, adempimenti di legge e, se contrattualmente previsto, per assistere il titolare nellonorare i diritti degli interessati. Divieto, per chi lavora in Società, di usi incompatibili, di rivendere i dati a scopi estranei al servizio, e di accedere al contenuto professionale oltre quanto necessario tecnicamente o per la gestione del supporto autorizzata. Le qualifiche giuridiche esatte (es. responsabile del trattamento, art. 28 GDPR, o altro schema sotto PDPA) sono definite per iscritto in DPA e documenti privacy.",
},
{
label: 'Sottoscrittori in abbonamento (studi legali, medici, strutture, team iscritti)',
text:
"I sottoscrittori sono, di regola, titolari o co-titolari del trattamento sui dati che inseriscono o fanno inserire nella piattaforma: in particolare pazienti o assistiti (Health Tech) e clienti, controparti o terzi coinvolti in fascicoli o pratiche (Legal Tech), oltre ai dati del proprio personale. Devono: avere base giuridica e informative adeguate verso i propri pazienti, clienti e assistiti, rispettare obblighi deontologici (segreto, riservatezza, tenuta degli atti), mappare finalità e tempi, dare istruzioni documentate al fornitore ove serva la nomina di responsabile, e rispondere in prima istanza alle richieste di accesso, rettifica, cancellazione e opposizione degli interessati, collaborando con NexStudio quando servono strumenti tecnici o log.",
},
{
label: 'Pazienti e clienti (interessati)',
text:
"Esercitano i diritti privacy in primis verso lo studio, la struttura o il professionista che tratti i loro dati. NexStudio, salvo esercizio diretto previsto per legge o canale specifico, inoltra o supporta lesercizio attraverso il titolare, nei tempi e modi del contratto e del prodotto.",
},
],
note:
"I dettagli operativi (categorie, tempi, tabella del trattamento, sub-responsabili, trasferimenti extra-UE, testi informativa rivolti a pazienti o clienti delle parti) stanno in Privacy policy, informativa cookie, DPA, condizioni duso e allegati, aggiornabili senza riformulare lintero Codice quando cambia solo lallegato legale.",
} as const;

96
src/data/gdpr.ts Normal file
View File

@ -0,0 +1,96 @@
/**
* Pagina GDPR: diritti degli interessati e modalita' operative.
* Documento di supporto alla privacy policy quadro del portale NexStudio.
*/
export const gdprDocument = {
version: '1.0',
inVigoreDal: '22 aprile 2026',
ultimoAggiornamento: '22 aprile 2026',
} as const;
export const gdprCrossReferences = {
lead:
"Per LexAura e MediAura, i dettagli operativi del singolo prodotto sono indicati nelle rispettive informative privacy pubblicate sui portali SaaS dedicati.",
} as const;
export const gdprRiferimenti: readonly { label: string; href: string }[] = [
{ label: 'Informativa privacy', href: '/privacy' },
{ label: 'Cookie policy', href: '/cookies' },
{ label: "Condizioni d'uso", href: '/terms' },
] as const;
export type GdprSection = {
id: string;
title: string;
paragraphs: readonly string[];
bullets?: readonly string[];
};
export const gdprSections: readonly GdprSection[] = [
{
id: 'quadro',
title: '1. Quadro normativo e ambito',
paragraphs: [
"Il Regolamento (UE) 2016/679 (GDPR) tutela i diritti degli interessati e disciplina il trattamento dei dati personali. Questa pagina spiega come esercitare tali diritti verso NexStudio nel contesto del portale corporate e dei servizi collegati.",
"La presente pagina integra, ma non sostituisce, l'informativa privacy generale: per categorie dati, finalita' e basi giuridiche si rimanda a `/privacy`; per cookie e tecnologie simili si rimanda a `/cookies`.",
],
},
{
id: 'diritti',
title: '2. Diritti riconosciuti agli interessati',
paragraphs: [
"Nei limiti previsti dalla normativa applicabile, l'interessato puo' esercitare i seguenti diritti:",
],
bullets: [
"accesso ai dati personali e ottenimento di copia in formato intelligibile;",
"rettifica dei dati inesatti e integrazione dei dati incompleti;",
"cancellazione dei dati (diritto all'oblio), quando ne ricorrono i presupposti di legge;",
"limitazione del trattamento in presenza delle condizioni previste dal GDPR;",
"portabilita' dei dati trattati con mezzi automatizzati sulla base di consenso o contratto;",
"opposizione al trattamento fondato su legittimo interesse, inclusa l'opposizione a comunicazioni marketing ove applicabile;",
"revoca del consenso in qualsiasi momento, senza pregiudicare la liceita' del trattamento precedente;",
"reclamo all'autorita' di controllo competente.",
],
},
{
id: 'chi-contattare',
title: '3. Chi contattare per esercitare i diritti',
paragraphs: [
"Per trattamenti in cui NexStudio agisce come titolare (es. contatti dal sito, gestione richieste corporate, sicurezza infrastrutturale di propria competenza), la richiesta puo' essere inviata tramite i canali di contatto privacy indicati nei riferimenti istituzionali.",
"Per trattamenti svolti nei tenant SaaS del cliente (LexAura/MediAura), il primo punto di contatto resta di norma il cliente titolare (es. studio legale, struttura sanitaria, organizzazione cliente), che determina finalita' e mezzi del trattamento.",
"NexStudio, ove operi come responsabile del trattamento, supporta il cliente titolare nella gestione delle richieste ricevute, secondo DPA e accordi contrattuali applicabili.",
],
},
{
id: 'identificazione',
title: "4. Verifica dell'identita' e gestione della richiesta",
paragraphs: [
"Per tutelare riservatezza e sicurezza, NexStudio puo' richiedere informazioni minime aggiuntive necessarie a verificare l'identita' del richiedente e la legittimazione ad agire.",
"Le richieste sono gestite con procedure tracciate e prese in carico nei tempi previsti dal GDPR; in caso di richieste complesse o multiple, i termini possono essere prorogati nei limiti consentiti dalla legge, con comunicazione motivata.",
],
},
{
id: 'limitazioni',
title: '5. Casi di limitazione o rigetto',
paragraphs: [
"L'esercizio dei diritti puo' essere limitato o non accolto, in tutto o in parte, quando sussistono obblighi legali prevalenti, esigenze di difesa in giudizio, tutela dei diritti di terzi o altre eccezioni previste dalla normativa.",
"In tali casi NexStudio fornisce, ove possibile, un riscontro motivato e indica i rimedi disponibili, incluso il diritto di proporre reclamo all'autorita' competente.",
],
},
{
id: 'trasferimenti',
title: '6. Trasferimenti internazionali e garanzie',
paragraphs: [
"Qualora il trattamento comporti trasferimenti extra SEE/UE, NexStudio adotta le misure richieste dalla normativa (es. clausole contrattuali standard e misure supplementari tecniche/organizzative) secondo quanto descritto nell'informativa privacy.",
"Le informazioni rilevanti sui trasferimenti possono essere fornite all'interessato nei limiti consentiti e in coerenza con obblighi contrattuali e di sicurezza.",
],
},
{
id: 'documenti-prodotto',
title: '7. Coordinamento con le privacy dei SaaS',
paragraphs: [
"Le privacy policy dei portali SaaS LexAura e MediAura dettagliano, per ciascun prodotto, flussi dati, tempi di conservazione, ruoli privacy e canali dedicati. In caso di differenze tra documenti, prevalgono i documenti specifici del servizio e gli accordi contrattuali applicabili.",
"Questa pagina mantiene funzione di riferimento generale sul quadro GDPR del gruppo di servizi NexStudio.",
],
},
] as const;

View File

@ -17,7 +17,6 @@ export const footer = {
{ label: 'Servizi', href: '/#servizi' }, { label: 'Servizi', href: '/#servizi' },
{ label: 'Stack', href: '/#stack' }, { label: 'Stack', href: '/#stack' },
{ label: 'FAQ', href: '/#faq' }, { label: 'FAQ', href: '/#faq' },
{ label: 'Contattaci', href: '/#contatti' },
] as const, ] as const,
/** Pannello preferenze (CMP): non è un documento legale; tenuto fuori dalla colonna Normative */ /** Pannello preferenze (CMP): non è un documento legale; tenuto fuori dalla colonna Normative */
@ -50,8 +49,7 @@ export const footer = {
{ label: 'Chi siamo', href: '/about' }, { label: 'Chi siamo', href: '/about' },
{ label: 'Codice etico', href: '/codice-etico' }, { label: 'Codice etico', href: '/codice-etico' },
{ label: 'Modello organizzativo', href: '/modello-organizzativo' }, { label: 'Modello organizzativo', href: '/modello-organizzativo' },
/** `href` vuoto = etichetta senza link (es. in attesa di pagina) */ { label: 'Dove siamo', href: '/dove-siamo' },
{ label: 'Dove siamo', href: '' },
] as const, ] as const,
/** /**

View File

@ -12,11 +12,11 @@ export const productsSection = {
tagline: 'Il supporto analitico per leccellenza legale.', tagline: 'Il supporto analitico per leccellenza legale.',
focus: 'Gestione dati, memorie e contrattualistica.', focus: 'Gestione dati, memorie e contrattualistica.',
body: body:
'LexAura è la piattaforma SaaS di NexStudio dedicata ai professionisti del diritto. Sviluppata per ottimizzare la gestione di carichi informativi elevati, LexAura utilizza lIntelligenza Artificiale per lincrocio dinamico di leggi, sentenze e normative.', 'LexAura è la piattaforma SaaS di NexStudio dedicata ai professionisti del diritto. Sviluppata per ottimizzare la gestione di carichi informativi elevati, LexAura utilizza lIntelligenza Artificiale per lincrocio dinamico di leggi, sentenze e normative, garantendo una base analitica solida e tempestiva.',
highlights: [ highlights: [
{ {
title: 'Sintesi normativa', title: 'Sintesi normativa',
text: 'Analisi accelerata dei precedenti e delle fonti.', text: 'Analisi accelerata dei precedenti, delle fonti e dei contesti.',
}, },
{ {
title: 'Drafting assistito', title: 'Drafting assistito',
@ -27,8 +27,6 @@ export const productsSection = {
text: 'Automazione dei processi documentali per lo studio legale moderno.', text: 'Automazione dei processi documentali per lo studio legale moderno.',
}, },
] as const, ] as const,
closing:
'Lobiettivo di LexAura non è sostituire lavvocato, ma liberarne il tempo, garantendo una base analitica solida e tempestiva.',
}, },
{ {
id: 'mediaura', id: 'mediaura',

View File

@ -4,7 +4,7 @@
*/ */
export const services = { export const services = {
eyebrow: 'I nostri servizi', eyebrow: 'I nostri servizi',
title: 'Supporto, implementazione ed evoluzione', title: 'Implementazione, evoluzione e supporto',
lead: lead:
'In NexStudio, il nostro impegno non si esaurisce con la fornitura della licenza software. Il nostro modello di servizio è progettato per garantire che ogni professionista e struttura possa estrarre il massimo valore dalle potenzialità dellIntelligenza Artificiale integrata in LexAura e MediAura.', 'In NexStudio, il nostro impegno non si esaurisce con la fornitura della licenza software. Il nostro modello di servizio è progettato per garantire che ogni professionista e struttura possa estrarre il massimo valore dalle potenzialità dellIntelligenza Artificiale integrata in LexAura e MediAura.',
cards: [ cards: [

View File

@ -0,0 +1,180 @@
/**
* Modello organizzativo — contenuti in dati, così si aggiornano ruoli e processi
* senza toccare il layout della pagina.
*/
export const modelloOrganizzativo = {
introBox:
'NexStudio opera da Bangkok. I numeri tra parentesi nelle voci sotto sono orientativi (early stage): formalizzate nomine e deleghe e aggiornate a ogni crescita di team.',
perimetro:
"Documento su ruoli, ritmi di governo e controlli «lean» per la Società, con LexAura (Legal Tech) e MediAura (Health Tech) come linee prodotto. Non sostituisce modelli 231, statuti o pareri legali: allineatelo a entità giuridica, consiglio e consulenti.",
} as const;
export const modelloOrganizzativoRuoli = [
{
label: 'Founder / CEO (1)',
text: 'strategia, approvazione delle policy, contatti con board e investitori, accountability complessiva verso legge e contratti.',
},
{
label: 'CTO / Head of Product (1)',
text: 'architettura, roadmap, quality gate di prodotto, responsabilità tecnica end-to-end.',
},
{
label: 'Lead Engineer (12)',
text: 'sviluppo, code review, CI/CD, qualità del codice in reparto.',
},
{
label: 'DevOps / Platform (1, oppure outsourcing)',
text: 'deploy, KMS, backup e disaster recovery, governo ambiente di produzione.',
},
{
label: 'Security & Privacy Lead (1, ibrido o contractor)',
text: 'sicurezza operativa, vulnerabilità, allineamento con DPO e rilasci sensibili.',
},
{
label: 'DPO / Privacy responsible (frazionale o outsourcing)',
text: 'DPIA, diritti degli interessati, coerenza informativa e register dei trattamenti.',
},
{
label: 'Legal & compliance (frazionale o esterno)',
text: 'contratti, NDA, normative di settore pertinenza Legal Tech e Health Tech.',
},
{
label: 'Product / domain advisor (part-time o consulente)',
text: 'convalida funzionalità ad impatto su decisioni mediche o legali, avvertenze duso.',
},
{
label: 'Customer success / support (1)',
text: 'onboarding, richieste, escalation verso tecnica e governance.',
},
{
label: 'Operations / HR (1, part-time)',
text: 'onboarding personale, formazione, canali segnalazioni e whistleblowing interno.',
},
{
label: 'Finance (1, part-time o outsourcing)',
text: 'contabilità, incassi, policy fornitori.',
},
] as const;
export const modelloOrganizzativoGovernance = [
{
nome: 'Weekly tactical',
partecipanti: 'Founder, CTO, Security/privacy, customer success',
nota: 'priorità, incidenti aperti, rilasci critici.',
},
{
nome: 'Product sync (bisettimanale)',
partecipanti: 'CTO, lead engineer, domain advisor',
nota: 'backlog, release, checkpoint compliance di prodotto (per linea ove serva).',
},
{
nome: 'Compliance check (mensile)',
partecipanti: 'CEO, legal, DPO, security',
nota: 'DPIA, vendor ad alto rischio, sintesi incidenti e correzioni.',
},
{
nome: 'Review trimestrale',
partecipanti: 'board o founders',
nota: 'strategia, budget, rischi e capacity.',
},
] as const;
export const modelloOrganizzativoResponsabilitaSintesi: readonly string[] = [
"Codice etico e policy: owner legal & compliance; approvazione CEO.",
"Sicurezza operativa e incident response: owner security lead; esecuzione tecnica CTO.",
"Privacy, trattamenti sensibili, DPIA: owner DPO; supporto legal.",
"Rilasci in produzione: accountable CTO; responsible lead engineer; consulted security, DPO, domain advisor.",
"Fornitori e sub-processori: owner operations e legal; due diligence security e DPO.",
"Richieste interessati (DSR): owner DPO; operatività customer success ove applicabile.",
"Segnalazioni e whistleblowing: owner operations/HR; supporto investigativo legal.",
] as const;
export const modelloOrganizzativoControlliLean: readonly string[] = [
'IAM con MFA per accesso a produzione e a segreti.',
'CI/CD con SAST e scansione dipendenze in pipeline.',
'SBOM per ogni release.',
'TLS in transito; cifratura a riposo per dati sensibili.',
'Backup giornalieri; test DR trimestrale con ripristino documentato.',
"Log e alerting su anomalie (SIEM o servizio gestito).",
"Checklist pre-release security/privacy con traccia d'approvazione.",
] as const;
export const modelloOrganizzativoKpi = [
{ area: 'Security', testo: 'patch critiche entro SLA; MTTD e MTTR su incidenti.' },
{ area: 'Privacy', testo: 'tempo risposta DSR; DPIA aperte vs completate per perimetro (Legale, Sanitario, piattaforma).' },
{ area: 'Product', testo: 'lead time deploy; copertura test sui moduli critici (per linea prodotto).' },
{ area: 'Operations', testo: 'uptime su SLA; tempo risposta support; segnalazioni chiuse nel periodo.' },
] as const;
export const modelloOrganizzativoDocumentazione: readonly string[] = [
'Codice etico, adesioni in registro.',
'Informativa privacy, DPA, condizioni duso.',
'DPIA per trattamenti critici (riferire per perimetro, come nel codice etico).',
"Trust/security brief per clienti e audit (12 pagine).",
"Playbook incident response (versione eseguibile).",
"SBOM e registro fornitori e sub-processori.",
"Checklist pre-release e log approvazioni.",
] as const;
export const modelloOrganizzativoPiano30: readonly { quando: string; testo: string }[] = [
{
quando: 'Giorni 03',
testo: 'nomine scritte su security, DPO e legal frazionali, con deleghe.',
},
{
quando: 'Giorni 410',
testo: "checklist pre-release in pipeline; MFA e policy IAM al minimo sopra.",
},
{
quando: 'Giorni 1117',
testo:
'avviare o aggiornare una DPIA sul trattamento più critico (es. perimetro MediAura o LexAura); due diligence fornitori ad alto rischio.',
},
{
quando: 'Giorni 1824',
testo:
'Trust center di base: link a codice etico, canali DPO/security, materiali privacy/DPA se disponibili.',
},
{
quando: 'Giorni 2530',
testo: 'esercitazione su incident; test rollback e backup; formazione security/privacy obbligatoria iniziale.',
},
] as const;
export const modelloOrganizzativoOutsourcing: readonly { titolo: string; testo: string }[] = [
{
titolo: 'Security ops / SOC',
testo: 'log, alerting, penetration test periodici.',
},
{
titolo: 'DPO e legal',
testo: "consulenti con PDPA, GDPR e contesto medico-legale dei mercati in cui servite i clienti.",
},
{
titolo: 'DevOps / platform',
testo: "servizi cloud gestiti (KMS, database gestiti) per ridurre toil interno.",
},
] as const;
export const modelloOrganizzativoNote: readonly string[] = [
"Separazione dei compiti: chi approva in produzione non è lunico a concedere accessi amministrativi.",
'Automatizzare controlli ripetitivi (SAST, SBOM, scan dipendenze).',
"Documentare su ticketing accettazione rischio e decisioni per audit e post-mortem.",
'Per LexAura e MediAura: convalida esterna su funzionalità ad alto rischio di dominio.',
'Revisione trimestrale del modello; aggiornare le voci in questo documento e le deleghe scritte.',
] as const;
export const modelloOrganizzativoFlussiDecisionali: readonly { titolo: string; testo: string }[] = [
{
titolo: 'Decisione tecnica ordinaria',
testo: "lead engineer → CTO (ticket con nota se impatta rischi privacy/sicurezza o contrattuali).",
},
{
titolo: "Rilascio con impatto privacy o sicurezza",
testo: "via libera di security lead e DPO, target 48 ore lavorative salvo deroga motivata scritta.",
},
{
titolo: "Incident P0 (es. data breach probabile o confermato)",
testo: "security notifica entro 4h CEO, DPO e legal; board se impatto su clienti, regolatori o classi di dati sensibili elevato.",
},
] as const;

160
src/data/privacy.ts Normal file
View File

@ -0,0 +1,160 @@
/**
* Informativa privacy del portale NexStudio e dei prodotti SaaS LexAura / MediAura.
* Questo file centralizza i contenuti della pagina /privacy per facilitare revisioni legali.
*/
export const privacyDocument = {
version: '1.0',
inVigoreDal: '22 aprile 2026',
ultimoAggiornamento: '22 aprile 2026',
} as const;
export const privacyCrossReferences = {
lead:
"L'informativa distingue il portale istituzionale NexStudio dai servizi SaaS LexAura e MediAura, che rispondono a esigenze operative e livelli di rischio differenti; le informative privacy specifiche dei singoli SaaS, pubblicate nei rispettivi siti/portali applicativi, restano il riferimento di dettaglio per l'uso del prodotto.",
} as const;
export const privacyRiferimenti: readonly { label: string; href: string }[] = [
{ label: "Condizioni d'uso", href: '/terms' },
{ label: 'Cookie policy', href: '/cookies' },
{ label: 'Diritti GDPR', href: '/gdpr' },
] as const;
export type PrivacySection = {
id: string;
title: string;
paragraphs: readonly string[];
bullets?: readonly string[];
};
export const privacySections: readonly PrivacySection[] = [
{
id: 'ambito',
title: '1. Ambito della presente informativa',
paragraphs: [
"La presente informativa descrive il quadro generale con cui NexStudio tratta i dati personali raccolti tramite il sito istituzionale pubblico e i canali corporate (contatti, richieste demo, onboarding commerciale) collegati anche ai prodotti LexAura (Legal Tech) e MediAura (Health Tech).",
"Per l'uso operativo dei SaaS (area riservata, tenant cliente, funzionalita' applicative), il livello di dettaglio e il ruolo privacy possono variare: NexStudio puo' operare come titolare, contitolare o responsabile del trattamento a seconda del servizio concretamente attivato e degli accordi contrattuali sottoscritti con il cliente business.",
"In caso di conflitto tra questa pagina e un Data Processing Agreement (DPA), un contratto quadro o condizioni speciali firmate, prevalgono i documenti contrattuali specifici per il servizio acquistato.",
],
},
{
id: 'titolare',
title: "2. Identita' del titolare e punti di contatto",
paragraphs: [
"Titolare del trattamento: NexStudio (sede operativa a Bangkok, Thailandia). I dati anagrafici societari completi e il recapito privacy ufficiale sono indicati nei contatti istituzionali e nei documenti contrattuali applicabili.",
"Canali per richieste privacy: sezione contatti del sito, recapito email privacy dedicato ove attivo, ed eventuali canali autenticati/ticket previsti per i clienti SaaS. Se nominato, il DPO/Privacy Lead e' indicato con i relativi contatti.",
],
},
{
id: 'categorie-dati',
title: '3. Categorie di dati trattati',
paragraphs: [
"Le categorie di dati variano in funzione del canale utilizzato e dei moduli/feature attivi. Di seguito il perimetro tipico a livello corporate; i dettagli di prodotto sono disciplinati nelle privacy dedicate dei singoli SaaS.",
],
bullets: [
"Portale NexStudio: dati di navigazione (log tecnici, IP, user agent), dati di contatto inviati volontariamente (nome, email, azienda, contenuto del messaggio), preferenze cookie e metriche aggregate.",
"LexAura (Legal Tech): dati di account e profilo utente, metadati di workspace, documenti giuridici caricati o generati, richieste testuali ai motori di analisi/sintesi, log di audit su accessi e operazioni.",
"MediAura (Health Tech): dati di account e ruoli, metadati organizzativi di struttura/reparto, documentazione sanitaria o amministrativa trattata nel servizio, input vocali e relative trascrizioni ove la funzione sia attivata, log tecnici e di sicurezza.",
"Categorie particolari ex art. 9 GDPR: possono emergere in MediAura (e, in specifici casi, in LexAura) quando i clienti caricano contenuti che includono dati sanitari o altri dati sensibili; il trattamento avviene solo nei limiti del servizio e delle istruzioni ricevute dal cliente titolare.",
],
},
{
id: 'finalita-basi',
title: "4. Finalita' e basi giuridiche del trattamento",
paragraphs: [
"NexStudio tratta i dati personali per finalita' determinate e legittime, applicando la base giuridica adeguata al singolo trattamento.",
],
bullets: [
"Gestione del sito istituzionale, sicurezza e continuita' operativa (base: legittimo interesse alla sicurezza, prevenzione abusi e mantenimento del servizio).",
"Gestione richieste pre-contrattuali, demo, contatti commerciali e supporto (base: misure precontrattuali su richiesta dell'interessato; legittimo interesse nella gestione B2B).",
"Erogazione dei SaaS LexAura e MediAura, autenticazione utenti, gestione tenant e assistenza tecnica (base: esecuzione del contratto con il cliente business).",
"Conformita' normativa, adempimenti amministrativi/fiscali, gestione contenziosi e difesa di diritti (base: obbligo legale e legittimo interesse alla tutela in giudizio).",
"Comunicazioni marketing/newsletter, ove attive (base: consenso, salvo eccezioni di soft spam consentite dalla normativa applicabile).",
"Attivita' di miglioramento del servizio, quality assurance e sviluppo funzionalita' IA con dati del cliente solo se previsto dal contratto o da istruzioni documentate; in assenza di tale base i dati non sono utilizzati per training generalista.",
],
},
{
id: 'ruoli-saas',
title: '5. Ruoli privacy specifici per LexAura e MediAura',
paragraphs: [
"Per i servizi SaaS B2B, il cliente (studio legale, impresa, struttura sanitaria, professionista) determina normalmente finalita' e mezzi del trattamento relativi ai dati caricati nel proprio ambiente applicativo, agendo come titolare del trattamento.",
"NexStudio agisce di regola come responsabile del trattamento per conto del cliente, con nomina contrattuale e istruzioni documentate, limitando l'accesso ai dati al personale autorizzato che ne abbia necessita' operativa (supporto, manutenzione, sicurezza).",
"Qualora NexStudio determini autonomamente finalita' specifiche (es. prevenzione frodi, sicurezza infrastrutturale, metriche aggregate non riconducibili al singolo interessato), agisce come titolare autonomo per tali trattamenti.",
"Le informative privacy dedicate di LexAura e MediAura, pubblicate nei rispettivi siti o ambienti applicativi, approfondiscono categorie dati, flussi, tempi di retention e basi giuridiche specifiche del singolo prodotto.",
],
},
{
id: 'conservazione',
title: '6. Tempi di conservazione',
paragraphs: [
"I tempi di conservazione sono definiti in base a principio di minimizzazione, obblighi di legge e ciclo di vita del servizio. Durate puntuali possono essere regolate da contratto, configurazioni del cliente e policy interne.",
],
bullets: [
"Dati di contatto dal sito: per il tempo necessario alla gestione della richiesta e, se pertinente, per il successivo follow-up commerciale entro termini ragionevoli.",
"Dati di account SaaS: per tutta la durata del rapporto contrattuale e per il periodo tecnico-amministrativo necessario a chiusura, backup, audit e adempimenti post-contratto.",
"Log tecnici e di sicurezza: retention proporzionata a monitoraggio, incident response, prevenzione abusi e dimostrazione di conformita'.",
"Dati contrattuali/amministrativi: conservazione secondo i termini imposti dalla normativa fiscale, civilistica e regolatoria applicabile.",
],
},
{
id: 'destinatari',
title: '7. Destinatari e categorie di soggetti autorizzati',
paragraphs: [
"I dati possono essere trattati da personale NexStudio autorizzato e istruito, nonche' da fornitori qualificati che operano come responsabili/sub-responsabili (es. hosting cloud, servizi infrastrutturali, monitoraggio sicurezza, strumenti di comunicazione e assistenza).",
"L'elenco aggiornato dei responsabili e sub-responsabili rilevanti per i clienti SaaS e' messo a disposizione nei canali contrattuali o su richiesta, secondo quanto previsto dagli accordi in essere.",
],
},
{
id: 'trasferimenti',
title: '8. Trasferimenti internazionali di dati',
paragraphs: [
"In ragione della struttura operativa internazionale e dell'uso di fornitori cloud globali, alcuni trattamenti possono comportare trasferimenti verso Paesi extra SEE/UE.",
"Quando richiesto dalla normativa, NexStudio adotta garanzie adeguate (es. clausole contrattuali standard, misure supplementari tecniche/organizzative, valutazioni di impatto sul trasferimento) e limita il trasferimento ai soli dati necessari.",
],
},
{
id: 'sicurezza',
title: '9. Misure di sicurezza e governance',
paragraphs: [
"NexStudio adotta misure tecniche e organizzative proporzionate al rischio, con particolare attenzione ai contesti Legal Tech e Health Tech dove integrita', riservatezza e tracciabilita' sono requisiti essenziali.",
],
bullets: [
"Controlli di accesso basati su ruoli, autenticazione, segregazione logica degli ambienti cliente e principio del minimo privilegio.",
"Cifratura dei dati in transito e, ove previsto dall'architettura, a riposo; gestione sicura delle chiavi e dei segreti applicativi.",
"Logging, monitoraggio, audit trail e procedure di gestione incidenti con escalation interna e tracciamento delle azioni correttive.",
"Procedure di backup, continuita' operativa e disaster recovery in funzione del piano di servizio sottoscritto.",
],
},
{
id: 'diritti',
title: "10. Diritti degli interessati e modalita' di esercizio",
paragraphs: [
"Gli interessati possono esercitare i diritti previsti dalla normativa applicabile (accesso, rettifica, cancellazione, limitazione, opposizione, portabilita', revoca del consenso ove prestato, reclamo all'autorita' competente).",
"Per dati trattati nel contesto dei SaaS, la richiesta va di norma indirizzata prima al cliente titolare (es. studio legale o struttura sanitaria) che determina finalita' e mezzi del trattamento. NexStudio fornisce supporto al cliente titolare secondo contratto.",
"Per dati trattati da NexStudio come titolare (es. contatti dal sito, log di sicurezza propri), le richieste possono essere inviate ai recapiti privacy indicati in questa pagina o nella sezione contatti del sito.",
],
},
{
id: 'cookie-tracking',
title: '11. Cookie, analytics e tracciamenti',
paragraphs: [
"Le informazioni su cookie tecnici, eventuali cookie analitici e strumenti di tracciamento sono descritte nella Cookie Policy, da leggere congiuntamente alla presente informativa.",
"La gestione delle preferenze cookie avviene tramite banner/strumenti dedicati, con possibilita' di revisione successiva delle scelte quando tecnicamente disponibile.",
],
},
{
id: 'minori',
title: '12. Trattamento dati di minori',
paragraphs: [
"I servizi NexStudio sono progettati per un'utenza professionale e business. Non sono rivolti intenzionalmente a minori e non viene perseguita la raccolta volontaria di dati di minori al di fuori dei casi strettamente necessari e leciti nel contesto sanitario gestito dal cliente titolare.",
"Se viene rilevata una raccolta non appropriata di dati riferibili a minori al di fuori delle basi giuridiche consentite, NexStudio adotta le misure necessarie per la cancellazione o la regolarizzazione del trattamento, coordinandosi con il cliente titolare ove necessario.",
],
},
{
id: 'aggiornamenti',
title: '13. Aggiornamenti della policy',
paragraphs: [
"NexStudio puo' aggiornare questa informativa per adeguamenti normativi, evoluzione dei servizi, modifiche organizzative o introduzione di nuove funzionalita'.",
"Le modifiche rilevanti saranno pubblicate su questa pagina con aggiornamento di versione e data. Per i clienti SaaS, ulteriori notifiche possono essere fornite tramite canali contrattuali o in-app, quando previsto.",
],
},
] as const;

110
src/data/terms.ts Normal file
View File

@ -0,0 +1,110 @@
/**
* Condizioni duso del sito web pubblico NexStudio.
* I contratti B2B su LexAura, MediAura o servizi professionali restano strumenti separati.
* Aggiornare versione e data in sync con la pagina (box in testa).
*/
export const termsDocument = {
version: '1.0',
inVigoreDal: '22 aprile 2026',
} as const;
export type TermsSection = {
id: string;
title: string;
paragraphs: readonly string[];
bullets?: readonly string[];
};
export const termsSections: readonly TermsSection[] = [
{
id: 'premessa',
title: '1. Premessa e ambito',
paragraphs: [
"Le presenti condizioni duso regolano laccesso e la consultazione del sito web di NexStudio (di seguito «NexStudio», «noi») e dei contenuti informativi resi disponibili online. La sede operativa di riferimento è a Bangkok, Thailandia; i servizi software commerciali (inclusi prodotti e soluzioni per Legal Tech e Health Tech, ad es. le linee LexAura e MediAura) sono regolati da condizioni generali, ordini, offerte o accordi specifici sottoscritti con i clienti: in caso di conflitto tra il presente testo e un contratto B2B sottoscritto, prevalgono i documenti specifici del servizio e gli accordi contrattuali applicabili.",
"Per il trattamento dei dati personali e i cookie si rimanda rispettivamente allinformativa privacy e alla cookie policy, citate più sotto.",
],
},
{
id: 'accettazione',
title: '2. Accettazione e requisiti',
paragraphs: [
"Lutilizzo del sito (navigazione oltre la mera apertura della home, invio di moduli ove presenti, uso di strumenti di contatto) implica la conoscenza e laccettazione delle presenti condizioni e della versione in vigore della privacy policy e, ove applicabile, della cookie policy.",
"Lutente dichiara di avere letà e la capacità legale per vincolarsi, o di agire sotto la responsabilità di un rappresentante legale idoneo.",
],
},
{
id: 'servizi',
title: '3. Contenuti e servizi informativi',
paragraphs: [
"Il sito ha finalità promozionali e informative su NexStudio, sui prodotti e sullorganizzazione. Le descrizioni, schermate, esempi e roadmap non costituiscono offerta vincolante né promessa di feature: restano subordinati a contrattualizzazione, disponibilità tecnica e condizioni di mercato.",
"NexStudio si impegna a mantenere le informazioni ragionevolmente aggiornate, senza obbligo di esaustività o di aggiornamento in tempo reale. Può modificare, sospendere o limitare laccesso a sezioni del sito per manutenzione, sicurezza o evoluzione del prodotto.",
],
},
{
id: 'uso-lecito',
title: '4. Uso lecito del sito',
paragraphs: [
"Lutente si impegna a usare il sito in conformità a legge, buona fede e condotta professionale, in particolare a:",
],
bullets: [
'non introdurre malware, né tentare di eludere misure di sicurezza, né effettuare attività che sovraccaricano in modo abnorme o automatizzato non autorizzato linfrastruttura;',
'non copiare o sfruttare illecitamente i contenuti (cfr. sotto proprietà intellettuale) né impersonare NexStudio o terzi;',
"non usare canali di contatto per contenuti illeciti, diffamatori, spam o al di fuori delle finalità richieste (commerciale, supporto, segnalazioni, ecc.).",
],
},
{
id: 'proprieta',
title: '5. Proprietà intellettuale',
paragraphs: [
"Testi, logotipi, elementi grafici, layout, nomi di prodotto (inclusi LexAura e MediAura) e, ove presenti, software dimostrativo o materiali scaricabili, sono protetti dalle norme sul diritto dautore e dalle norme sui marchi applicabili. È vietata la riproduzione, distribuzione o modifica non espressamente autorizzata, salvo uso consentito per legge (citazione, breve estratto con attribuzione) o espressa deroga scritta.",
],
},
{
id: 'terze-parti',
title: '6. Link, servizi di terzi e strumenti incorporati',
paragraphs: [
"Il sito può contenere collegamenti a siti o servizi di terzi. NexStudio non controlla tali risorse e non risponde dei loro contenuti o politiche; laccesso avviene sotto la responsabilità dellutente, che dovrà leggere le condizioni e linformativa privacy del terzo.",
],
},
{
id: 'responsabilita',
title: '7. Limitazione di responsabilità',
paragraphs: [
"Nella misura massima consentita dalla legge applicabile, il sito e i suoi contenuti sono forniti «così come sono» e «secondo disponibilità», senza garanzie implicite di adeguatezza a un fine particolare, non interruzione o assenza di errori. Il materiale informativo non sostituisce consulenza legale, sanitaria o professionale: decisioni e responsabilità restano a carico del visitatore o del professionista e dei propri clienti.",
"NexStudio non risponde per danni indiretti, consequenziali, mancati guadagni, perdita di dati, interruzioni, azioni di terzi o fatti oltre il controllo ragionevole, salvo quanto non possa essere escluso o limitato per legge imperativa.",
],
},
{
id: 'sospensione',
title: '8. Sospensione, violazione e forza maggiore',
paragraphs: [
"NexStudio può sospendere, limitare o interrompere laccesso in caso di violazione delle presenti condizioni, rischio per la sicurezza, ordini di autorità, o forza maggiore. La mancata esecuzione in tali casi non costituisce inadempimento a titolo di danno.",
],
},
{
id: 'legge',
title: '9. Legge applicabile e foro (da confermare con il legale)',
paragraphs: [
"Salvo disposizioni inderogabili, le presenti condizioni e ogni contestazione inerente al sito informativo sono regolate dalla legge indicata qui sotto, con foro competente ove ammesso (da definire in base alla entità operativa, ai clienti e al mercato: es. Tailandia, o altra scelta con parere legale).",
],
},
{
id: 'contatti-termini',
title: '10. Contatti in merito a queste condizioni',
paragraphs: [
"Per domande sulle presenti condizioni duso del sito, utilizzare i contatti e i canali indicati nel sito. Per trattamento dei dati personali e diritti, seguire linformativa privacy; per cookie, la cookie policy.",
],
},
] as const;
export const termsRiferimenti: readonly { label: string; href: string }[] = [
{ label: 'Informativa privacy', href: '/privacy' },
{ label: 'Cookie policy', href: '/cookies' },
{ label: 'Diritti GDPR', href: '/gdpr' },
{ label: 'Codice etico', href: '/codice-etico' },
] as const;
export const termsCrossReferences = {
leadNote:
'I documenti collegati vanno allineati alla stessa data di revisione ove si tratti di un pacchetto unico di pubblicazione; per LexAura e MediAura, le informative privacy dedicate pubblicate sui portali SaaS restano il riferimento di dettaglio del singolo prodotto.',
} as const;

View File

@ -77,7 +77,7 @@ const printSource = Astro.url.href;
) )
} }
<div <div
class="mt-10 space-y-6 text-sm leading-relaxed text-nx-muted sm:text-base [&_h2]:mt-10 [&_h2]:text-lg [&_h2]:font-semibold [&_h2]:text-nx-fg [&_h2]:first:mt-0 [&_li]:mt-2 [&_ol]:list-decimal [&_ol]:space-y-2 [&_ol]:pl-5 [&_p]:mt-4 [&_p]:first:mt-0 [&_strong]:text-nx-fg [&_ul]:list-disc [&_ul]:space-y-2 [&_ul]:pl-5" class="mt-10 space-y-6 font-sans text-sm leading-relaxed text-nx-muted antialiased sm:text-base [&_h2]:mt-10 [&_h2]:text-lg [&_h2]:font-semibold [&_h2]:text-nx-fg [&_h2]:sm:text-xl [&_h2]:first:mt-0 [&_li]:mt-2 [&_ol]:list-decimal [&_ol]:space-y-2 [&_ol]:pl-5 [&_p]:mt-4 [&_p]:first:mt-0 [&_strong]:text-nx-fg [&_ul]:list-disc [&_ul]:space-y-2 [&_ul]:pl-5"
> >
<slot /> <slot />
</div> </div>

View File

@ -4,29 +4,80 @@ import SubpageLayout from '../layouts/SubpageLayout.astro';
<SubpageLayout <SubpageLayout
title="Chi siamo — NexStudio" title="Chi siamo — NexStudio"
description="Chi è NexStudio: missione, team e ambiti Legal Tech e Health Tech." description="Missione, valori e come lavoriamo con studi legali e strutture sanitarie: qualità, verticalità e impegno nel tempo."
heading="Chi siamo" heading="Chi siamo"
lead="Un team giovane e dinamico di programmatori dalla Tailandia e dall'Italia, uniti per creare lead="Siamo un team internazionale — tra Bangkok e lItalia — che unisce ingegneria del software, intelligenza artificiale applicata e conoscenza dei domini regolamentati, per strumenti professionali usabili e sostenibili nel tempo."
applicazioni ad alta usabilità ed efficienza"
> >
<p> <p>
Ci impegnamo nel rendere invisibile la tecnologia. Creiamo software che si fanno carico di processi strutturati Ci impegniamo a rendere la tecnologia invisibile nel lavoro quotidiano. Progettiamo
e calcoli intricati, sollevando l'utilizzatore da compiti impegnativi, dispersivi e soggetti ad errori. <strong>software che assume su di sé</strong> processi strutturati, controlli e
Siamo focalizzati su software SaaS ad alta complessità per settori complessità computazionale, così che chi lavora su norme, pazienti o documentazione
regolamentati, specificatamente legale e medico, con focus su intelligenza artificiale integrata nei flussi possa concentrarsi su <strong>giudizio, responsabilità e relazione</strong> — non su
professionali (LexAura, MediAura). Nascondiamo sotto una superficie fluida e intuitiva motori menu, formati o incertezze operative. Nascondere la complessità sotto
ad alta ingegneria. Abbiamo racchiuso una logica complessa in uninterfaccia essenziale, affinché basti solo <strong>interfaccia essenziale, tempi reattivi e tracciabilità</strong> è al centro di
premere un tasto dove prima servivano ore di lavoro. come disegniamo il prodotto, non un optional estetico.
</p> </p>
<h2>Dove operiamo</h2>
<h2>La nostra missione</h2>
<p> <p>
Base operativa a Bangkok; collaborazione con clienti a livello internazionale. Dettagli in <a Operiamo dove un errore pesa: <strong>Legal Tech e Health Tech</strong>. Qui servono
class="text-sky-400/90 hover:text-sky-300" precisione, tracciamento delle scelte e rispetto dei vincoli normativi, non
href="/dove-siamo">Dove siamo</a sperimenti generici. La nostra missione è fornire <strong>piattaforme SaaS mature</strong>
>. — come <strong>LexAura</strong> e <strong>MediAura</strong> — che integrino modelli
dintelligenza artificiale in flussi già vissuti dallo studio o dalla struttura, con
continuità tra automazione, revisione umana e responsabilità riconoscibile.
</p> </p>
<h2>Contatti</h2>
<h2>Perché possiamo meritare la tua fiducia</h2>
<p> <p>
<a class="text-sky-400/90 hover:text-sky-300" href="/#contatti">Vai alla sezione Contatti</a> sulla homepage. La fiducia non si ottiene con un motto, ma con <strong>ingegneria, chiarezza e
continuità</strong>. Significa architetture provate, aggiornamenti regolari dei
modelli danalisi, assistenza e formazione laddove ladozione chiede metodo oltre
al click. Significa anche onestà sui confini: lIA nelle nostre offerte è pensata
per <strong>estendere e accelerare</strong> il lavoro professionale, lasciando a
avvocato, medico o organizzazione <strong>la decisione finale e la
documentazione</strong> che la norma richiede.
</p>
<h2>Come lavoriamo, in sintesi</h2>
<ul>
<li>
<strong>Verticalità e dominio.</strong> Less genericismo, più requisiti operativi
(normative, flussi, audit) incorporati fin dalla progettazione.
</li>
<li>
<strong>Qualità e sicurezza come priorità, non retorica.</strong> Ingegneria, test
e infrastrutture coerenti con lesposizione a dati sensibili.
</li>
<li>
<strong>Supporto e evoluzione.</strong> Il rapporto con il cliente non finisce
allabbonamento: manutenzione evolutiva, assistenza e procedure chiare in caso di
urgenze operative, dove serve.
</li>
<li>
<strong>Comunicazione trasparente.</strong> Documentazione, informativa privacy
(dove obbligo) e <strong>aspettative reciproche</strong> esplicite, perché
lonboarding non diventi il primo ostacolo.
</li>
</ul>
<h2>Team e cultura</h2>
<p>
Siamo developer, product e specialisti di dominio in un <strong>modello
distribuito</strong>: fusi orari diversi e linguaggi comuni, un solo obiettivo
prodotto. Ci muoviamo con <strong>iterazioni rapide</strong> laddove serve
innovazione, e con <strong>governance</strong> laddove un cambiamento impatta
validazione, conformità o continuità del servizio. La diversità del gruppo
(competenze, contesti) è per noi vantaggio competitivo: riduce lassunto implicito
e costringe a rendere esplicito ciò che il software promette, e a chi.
</p>
<h2>Impegno nel tempo</h2>
<p>
Il settore che ci sceglie non cerca un prototipo, ma <strong>un percorso
sostenibile</strong>: allineamento normativo, adozione in team, affiancamento quando
qualcosa non gira. Costruiamo e manteniamo il prodotto con quella lente, perché
nelle vostre professioni la <strong>continuità</strong> non è comodità, è
requisito.
</p> </p>
</SubpageLayout> </SubpageLayout>

View File

@ -1,5 +1,13 @@
--- ---
import SubpageLayout from '../layouts/SubpageLayout.astro'; import SubpageLayout from '../layouts/SubpageLayout.astro';
import {
getCodiceEticoPremessa,
codiceEticoConformityBlocks,
qualitaValidazioneProdotto,
getCodiceEticoProductListPhrase,
notePraticheDPIA,
codiceEticoTutelaDatiRuoli,
} from '../data/codice-etico';
const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underline'; const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underline';
--- ---
@ -23,9 +31,29 @@ const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underl
<li><a class={link} href="#ambito">Ambito di applicazione</a></li> <li><a class={link} href="#ambito">Ambito di applicazione</a></li>
<li><a class={link} href="#valori">Valori e principi fondamentali</a></li> <li><a class={link} href="#valori">Valori e principi fondamentali</a></li>
<li> <li>
<a class={link} href="#conformita">Conformità normativa specifica (ambito legale e medico)</a> <a class={link} href="#conformita">Conformità normativa (per perimetro: piattaforma, legale, sanitario)</a>
<ol class="mt-2 list-decimal space-y-1 pl-5 text-nx-muted/95">
<li>
<a class={link} href="#conformita-piattaforma">4.1 Piattaforma e SaaS (orizzontale)</a>
</li>
<li>
<a class={link} href="#conformita-legal">4.2 Ambito legale (LexAura)</a>
</li>
<li>
<a class={link} href="#conformita-sanitario">4.3 Ambito sanitario (MediAura)</a>
</li>
</ol>
</li>
<li>
<a class={link} href="#tutela-dati">Tutela dei dati personali e dati sensibili</a>
<ol class="mt-2 list-decimal space-y-1 pl-5 text-nx-muted/95">
<li>
<a class={link} href="#tutela-dati-ruoli"
>5.1 Ruoli: pazienti, clienti, abbonati, Società</a
>
</li>
</ol>
</li> </li>
<li><a class={link} href="#tutela-dati">Tutela dei dati personali e dati sensibili</a></li>
<li> <li>
<a class={link} href="#sicurezza">Sicurezza dellinformazione e resilienza operativa</a> <a class={link} href="#sicurezza">Sicurezza dellinformazione e resilienza operativa</a>
</li> </li>
@ -70,11 +98,7 @@ const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underl
<h2 id="premessa">1. Premessa</h2> <h2 id="premessa">1. Premessa</h2>
<p> <p>
Questo Codice Etico stabilisce i principi, i doveri e le regole di comportamento che tutti i {getCodiceEticoPremessa()}
soggetti coinvolti in <strong>NexStudio</strong> (di seguito «Società») devono osservare nello
sviluppo, nella commercializzazione e nella gestione di soluzioni SaaS destinate ai settori
legale e medico. Mira a garantire conformità normativa, tutela della privacy, sicurezza,
qualità tecnica, protezione dei diritti degli utenti e responsabilità professionale.
</p> </p>
<h2 id="ambito">2. Ambito di applicazione</h2> <h2 id="ambito">2. Ambito di applicazione</h2>
@ -95,37 +119,68 @@ const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underl
<li>Miglioramento continuo e accountability.</li> <li>Miglioramento continuo e accountability.</li>
</ul> </ul>
<h2 id="conformita">4. Conformità normativa specifica (ambito legale e medico)</h2> <h2 id="conformita">4. Conformità normativa specifica</h2>
<p>La Società osserva, fra gli altri:</p>
<ul>
<li>Thailand Personal Data Protection Act (PDPA).</li>
<li>
Regolamento generale sulla protezione dei dati (GDPR), quando applicabile per utenti o
servizi nellUnione europea.
</li>
<li>
Normative sanitarie e standard locali o internazionali pertinenti (ad esempio requisiti
nazionali per la gestione dei dati clinici, standard ISO rilevanti).
</li>
<li>
Requisiti normativi per dispositivi medici o software medicale (ad esempio EU MDR,
regolamenti locali) se le funzionalità rientrano nella definizione di dispositivo medico.
</li>
<li>
Norme professionali e di segreto professionale per avvocati e operatori sanitari;
rispetto di privilegi professionali (<em>attorneyclient privilege</em>, segreto medico).
</li>
<li>
Se applicabile per mercati esteri: HIPAA per dati sanitari negli Stati Uniti e normative
sullesportazione di dati o tecnologie.
</li>
</ul>
<p> <p>
I riferimenti sotto sono raggruppati: obblighi orizzontali a tutte le offerte
<strong>SaaS</strong>, riferimenti distinti per il perimetro
<strong>Legal Tech / LexAura</strong> e per <strong>Health Tech / MediAura</strong> (ciascuna
linea può estendersi o diversificare secondo prodotto e mercato, senza commistione indebita
ad altri perimetri). Riepilogo riga prodotto:
<span class="text-nx-fg">{getCodiceEticoProductListPhrase()}</span>.
</p>
{
codiceEticoConformityBlocks.map((block, i) => (
<section
class:list={['', i > 0 && 'mt-5']}
data-conformity-block={block.id}
>
<h3
id={block.anchorId}
class="scroll-mt-8 text-base font-semibold text-nx-fg"
>
{block.title}
</h3>
{block.lead ? <p class="text-sm text-nx-muted sm:text-base">{block.lead}</p> : null}
<ul class="mt-2 list-disc pl-5">
{block.items.map((t) => (
<li>{t}</li>
))}
</ul>
</section>
))
}
<p class="mt-6 text-sm sm:text-base">
La Società effettua DPIA (Data Protection Impact Assessment) per trattamenti ad alto rischio e La Società effettua DPIA (Data Protection Impact Assessment) per trattamenti ad alto rischio e
consulta autorità o <em>regulatory counsel</em> quando necessario. consulta autorità o <em>regulatory counsel</em> quando necessario, con riferimenti
<strong>per ciascun trattamento</strong> al perimetro (piattaforma, legale, sanitario) ove
interessa.
</p> </p>
<h2 id="tutela-dati">5. Tutela dei dati personali e dati sensibili</h2> <h2 id="tutela-dati">5. Tutela dei dati personali e dati sensibili</h2>
<p class="text-nx-muted sm:text-base">{codiceEticoTutelaDatiRuoli.intro}</p>
<h3
id={codiceEticoTutelaDatiRuoli.anchorId}
class="!mt-6 text-base font-semibold text-nx-fg"
>
{codiceEticoTutelaDatiRuoli.title}
</h3>
{
codiceEticoTutelaDatiRuoli.rows.map((r) => (
<p class="mt-3 sm:text-base">
<span class="font-semibold text-nx-fg">{r.label}.</span>{' '}
{r.text}
</p>
))
}
<p
class="mt-4 border-l-2 border-sky-500/30 pl-4 text-sm leading-relaxed text-nx-muted"
>
{codiceEticoTutelaDatiRuoli.note}
</p>
<p class="mt-8 text-sm font-medium text-nx-fg sm:text-base">
Nella concreta operatività, la Società e i collaboratori si attengono ai principi operativi
seguenti (complementari ai ruoli sopra):
</p>
<ul> <ul>
<li><strong>Minimizzazione:</strong> raccogliere solo i dati necessari e pertinenti.</li> <li><strong>Minimizzazione:</strong> raccogliere solo i dati necessari e pertinenti.</li>
<li> <li>
@ -202,11 +257,14 @@ const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underl
<strong>Test e copertura:</strong> definire copertura minima per componenti critici; test di <strong>Test e copertura:</strong> definire copertura minima per componenti critici; test di
integrazione, performance e sicurezza. integrazione, performance e sicurezza.
</li> </li>
<li> {
<strong>Validazione clinica:</strong> per funzionalità che assistono decisioni cliniche o qualitaValidazioneProdotto.map((v) => (
legali, procedere a validazione con esperti (clinici e legali), studi pilota, documentazione <li>
di limitazioni e avvertenze. <strong>Validazione (per {v.id === 'legal' ? 'perimetro legale' : 'perimetro sanitario'}):</strong>{' '}
</li> {v.text}
</li>
))
}
<li> <li>
<strong>Classificazione del rischio:</strong> valutare impatto su salute o diritti e <strong>Classificazione del rischio:</strong> valutare impatto su salute o diritti e
applicare misure di mitigazione proporzionate. applicare misure di mitigazione proporzionate.
@ -338,8 +396,9 @@ const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underl
<ul> <ul>
<li> <li>
Onboarding obbligatorio su: sicurezza informatica, privacy (PDPA e GDPR), gestione dati Onboarding obbligatorio su: sicurezza informatica, privacy (PDPA e GDPR), gestione dati
sensibili, normative mediche e legali rilevanti, uso responsabile dellAI, pratiche di coding sensibili, requisiti e documentazione riferibili a ciascuna linea prodotto
sicuro. (oggi: {getCodiceEticoProductListPhrase()}; estendere il curriculum quando lelenco
cresce), uso responsabile dellAI, pratiche di coding sicuro.
</li> </li>
<li>Formazione annuale obbligatoria e formazione aggiuntiva per ruoli critici.</li> <li>Formazione annuale obbligatoria e formazione aggiuntiva per ruoli critici.</li>
<li>Registrazione e conservazione dei record di formazione.</li> <li>Registrazione e conservazione dei record di formazione.</li>
@ -475,20 +534,7 @@ const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underl
Predisporre un piano di formazione di 90 giorni per lonboarding e formazione ricorrente Predisporre un piano di formazione di 90 giorni per lonboarding e formazione ricorrente
annuale. annuale.
</li> </li>
<li> {notePraticheDPIA.map((t) => <li>{t}</li>)}
Eseguire DPIA per i trattamenti sanitari e legali critici e verificare se parti del prodotto
rientrano nella definizione di dispositivo medico ai fini di registrazione o approvazione
normativa.
</li>
</ul> </ul>
<h2>Collegamenti</h2>
<p>
<a class={link} href="/modello-organizzativo">Modello organizzativo</a>
<span class="text-nx-muted"> · </span>
<a class={link} href="/about">Chi siamo</a>
<span class="text-nx-muted"> · </span>
<a class={link} href="#indice">Torna allindice</a>
</p>
</div> </div>
</SubpageLayout> </SubpageLayout>

View File

@ -12,7 +12,7 @@ const td = 'border border-nx-border px-3 py-2 align-top text-nx-muted';
title="Cookie Policy — NexStudio" title="Cookie Policy — NexStudio"
description="Cookie Policy NexStudio: categorie, base giuridica, consenso, terze parti, diritti e contatti. Sede Bangkok." description="Cookie Policy NexStudio: categorie, base giuridica, consenso, terze parti, diritti e contatti. Sede Bangkok."
heading="Cookie Policy" heading="Cookie Policy"
lead="Per NexStudio sede: Bangkok, Thailandia. Versione documento 1.0, in vigore dal 21 aprile 2026. Integra luso del modulo di consenso first-party descritto sotto; per il trattamento dei dati personali vedi lInformativa privacy." lead="Per NexStudio, con sede a Bangkok, Thailandia. Versione documento 1.0, in vigore dal 21 aprile 2026. Integra l'uso del modulo di consenso first-party descritto sotto; per il trattamento dei dati personali vedi l'informativa privacy."
> >
<div class="[&_h3]:mt-6 [&_h3]:text-base [&_h3]:font-semibold [&_h3]:text-nx-fg"> <div class="[&_h3]:mt-6 [&_h3]:text-base [&_h3]:font-semibold [&_h3]:text-nx-fg">
<p class="border-l-2 border-sky-500/35 pl-4 text-sm leading-relaxed text-nx-muted"> <p class="border-l-2 border-sky-500/35 pl-4 text-sm leading-relaxed text-nx-muted">
@ -457,16 +457,5 @@ const td = 'border border-nx-border px-3 py-2 align-top text-nx-muted';
<li><span class="text-nx-muted">☐</span> Procedure DSR e revoca collegate dallinformativa privacy</li> <li><span class="text-nx-muted">☐</span> Procedure DSR e revoca collegate dallinformativa privacy</li>
<li><span class="text-nx-muted">☐</span> Link a privacy e contatti DPO/referente nel footer</li> <li><span class="text-nx-muted">☐</span> Link a privacy e contatti DPO/referente nel footer</li>
</ul> </ul>
<h2>Collegamenti</h2>
<p>
<a class={link} href="/privacy">Informativa privacy</a>
<span class="text-nx-muted"> · </span>
<a class={link} href="/codice-etico">Codice etico</a>
<span class="text-nx-muted"> · </span>
<a class={link} href="/modello-organizzativo">Modello organizzativo</a>
<span class="text-nx-muted"> · </span>
<a class={link} href="#indice">Torna allindice</a>
</p>
</div> </div>
</SubpageLayout> </SubpageLayout>

View File

@ -4,15 +4,13 @@ import SubpageLayout from '../layouts/SubpageLayout.astro';
<SubpageLayout <SubpageLayout
title="Dove siamo — NexStudio" title="Dove siamo — NexStudio"
description="Sede operativa e contatti NexStudio." description="Sede operativa a Bangkok, Thailandia; fusi orari e lingue per lavorare con clienti in Europa e altre regioni."
heading="Dove siamo" heading="Dove siamo"
lead="Sede operativa a Bangkok (Thailandia). Completate lindirizzo, i recapiti e gli orari di riferimento per il pubblico." lead="NexStudio ha base a Bangkok, in Thailandia. Sotto, come organizziamo fusi orari e lingue rispetto a clienti in Europa e oltre."
> >
<h2>Sede</h2> <h2>Sede</h2>
<p> <p>
NexStudio opera con base operativa a <strong>Bangkok</strong>, in <strong>Thailandia</strong> — <strong>Bangkok</strong>
Thailandia. Inserite qui indirizzo completo, eventuale sede legale in altro
Stato, e se il rapporto con i clienti avviene prevalentemente da remoto.
</p> </p>
<h2>Fusi orari e lingue</h2> <h2>Fusi orari e lingue</h2>
@ -21,14 +19,4 @@ import SubpageLayout from '../layouts/SubpageLayout.astro';
tedesco, francese, spagnolo e tailandese, con orari da concordare in base tedesco, francese, spagnolo e tailandese, con orari da concordare in base
al team e al fuso rispetto ai clienti in Europa e altre regioni. al team e al fuso rispetto ai clienti in Europa e altre regioni.
</p> </p>
<h2>Contatti</h2>
<p>
Per richieste commerciali o tecniche utilizzate la sezione <a
class="text-sky-400/90 hover:text-sky-300"
href="/#contatti">Contatti</a
> sulla homepage (chat e altri canali che attiverete). Aggiungete in questa
pagina email istituzionali, PEC se applicabile, e numeri di telefono solo se
desiderate renderli pubblici.
</p>
</SubpageLayout> </SubpageLayout>

View File

@ -1,55 +1,74 @@
--- ---
import SubpageLayout from '../layouts/SubpageLayout.astro'; import SubpageLayout from '../layouts/SubpageLayout.astro';
import {
gdprCrossReferences,
gdprDocument,
gdprRiferimenti,
gdprSections,
} from '../data/gdpr';
const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underline';
const lead =
"Diritti degli interessati e modalita' di esercizio ai sensi del Regolamento (UE) 2016/679, in coerenza con l'informativa privacy quadro del portale NexStudio. " +
gdprCrossReferences.lead;
--- ---
<SubpageLayout <SubpageLayout
title="GDPR — NexStudio" title="GDPR — NexStudio"
description="Informazioni sul trattamento dei dati personali ai sensi del Regolamento UE 2016/679 (GDPR)." description="Pagina GDPR NexStudio: diritti degli interessati, modalita' operative, ruoli tra portale corporate e SaaS LexAura/MediAura, coordinamento con privacy dedicate."
heading="GDPR e diritti degli interessati" heading="GDPR e diritti degli interessati"
lead="Documento provvisorio: integrare riferimenti contrattuali, responsabile della protezione dei dati (DPO) se nominato, e procedure interne." lead={lead}
> >
<p> <div>
Il Regolamento (UE) 2016/679 (GDPR) disciplina il trattamento dei dati <p class="border-l-2 border-sky-500/35 pl-4 text-sm leading-relaxed text-nx-muted">
personali nel territorio dellUnione. La presente pagina riassume i diritti <span class="font-medium text-nx-fg">Versione</span> {gdprDocument.version}
riconosciuti agli interessati e come possono esercitarli nei confronti di <span class="text-nx-muted/80"> · </span>
NexStudio, senza sostituire linformativa privacy completa. <span class="font-medium text-nx-fg">In vigore dal</span> {gdprDocument.inVigoreDal}
</p> <span class="text-nx-muted/80"> · </span>
<span class="font-medium text-nx-fg">Ultimo aggiornamento</span> {gdprDocument.ultimoAggiornamento}
</p>
<h2>Diritti riconosciuti</h2> <p class="!mt-5 text-sm text-nx-muted sm:text-base">
<ul> Documenti connessi:{' '}
<li>Accesso ai propri dati e copia in formato intelligibile</li> {
<li>Rettifica di dati inesatti o incompleti</li> gdprRiferimenti.map((r, i) => (
<li>Cancellazione (“diritto alloblio”) nei casi previsti dalla legge</li> <span>
<li>Limitazione del trattamento</li> {i > 0 && <span class="text-nx-muted/80"> · </span>}
<li>Portabilità dei dati forniti con consenso o contratto, ove applicabile</li> <a class={link} href={r.href}>{r.label}</a>
<li>Opposizione al trattamento basato su legittimo interesse o per fini di marketing</li> </span>
<li>Revoca del consenso in qualsiasi momento, senza pregiudicare la liceità del trattamento precedente</li> ))
<li>Reclamo allautorità di controllo competente</li> }
</ul> </p>
<h2>Modalità di esercizio</h2> <h2 id="indice" class="!mt-8">Indice</h2>
<p> <ol class="!mt-3 list-decimal space-y-1.5 pl-5 text-sm leading-relaxed sm:text-base">
Indicare un canale dedicato (es. email privacy@…, modulo PEC o ticket). Per {
richieste generiche potete anche utilizzare la sezione <a gdprSections.map((s) => (
class="text-sky-400/90 hover:text-sky-300" <li>
href="/#contatti">Contatti</a <a class={link} href={`#${s.id}`}>{s.title}</a>
> sul sito principale, specificando oggetto e dati utili a identificare la </li>
pratica. ))
</p> }
</ol>
<h2>Trasferimenti extra-UE</h2> {
<p> gdprSections.map((s) => (
Se utilizzate fornitori con sede fuori dallo Spazio Economico Europeo, <section class="mt-10" id={s.id}>
descrivete garanzie (Clausole contrattuali tipo, decisioni di adeguatezza, <h2 class="scroll-mt-8 text-lg font-semibold text-nx-fg sm:text-xl">
norme vincolanti dimpresa) e il riferimento documentale. {s.title}
</p> </h2>
{s.paragraphs.map((p) => (
<h2>Documenti correlati</h2> <p class="mt-3 text-sm leading-relaxed text-nx-muted sm:text-base">{p}</p>
<p> ))}
<a class="text-sky-400/90 hover:text-sky-300" href="/privacy" {s.bullets && s.bullets.length > 0 ? (
>Informativa privacy</a <ul class="mt-3 list-disc space-y-2 pl-5 text-sm sm:text-base">
> {s.bullets.map((b) => (
· <li class="text-nx-muted">{b}</li>
<a class="text-sky-400/90 hover:text-sky-300" href="/cookies">Informativa cookie</a> ))}
</p> </ul>
) : null}
</section>
))
}
</div>
</SubpageLayout> </SubpageLayout>

View File

@ -148,10 +148,10 @@ const techSliderItems = stackSection.techSlider.items;
</div> </div>
<div class="relative z-10 mx-auto max-w-6xl"> <div class="relative z-10 mx-auto max-w-6xl">
<p <p
class="mb-6 inline-flex items-center gap-2 rounded-full border border-nx-border bg-nx-surface/60 px-3 py-1 text-xs font-medium text-sky-300/90" class="mb-6 inline-flex items-center gap-2.5 rounded-full border border-nx-border bg-nx-surface/60 px-4 py-1.5 text-sm font-medium text-sky-300/90 sm:px-5 sm:py-2"
> >
<span <span
class="h-1.5 w-1.5 rounded-full bg-sky-400 shadow-[0_0_8px_#38bdf8]"></span> class="h-2 w-2 rounded-full bg-sky-400 shadow-[0_0_10px_#38bdf8]"></span>
{hero.badge} {hero.badge}
</p> </p>
<h1 <h1
@ -229,18 +229,32 @@ const techSliderItems = stackSection.techSlider.items;
{productsSection.lead} {productsSection.lead}
</p> </p>
<div <div class="relative mt-14">
class="mt-14 grid gap-8 lg:grid-cols-2 lg:gap-10 lg:items-stretch" <div
> class="pointer-events-none absolute -top-28 left-1/2 z-0 h-64 w-[min(96%,60rem)] -translate-x-1/2 rounded-full bg-[radial-gradient(ellipse_at_center,rgba(125,211,252,0.34)_0%,rgba(96,165,250,0.2)_36%,rgba(16,24,40,0)_74%)] blur-3xl"
aria-hidden="true"
/>
<div
class="pointer-events-none absolute -top-14 left-1/2 z-0 h-40 w-[min(88%,54rem)] -translate-x-1/2 rounded-full bg-[radial-gradient(ellipse_at_center,rgba(186,230,253,0.16)_0%,rgba(16,24,40,0)_70%)] blur-2xl"
aria-hidden="true"
/>
<div
class="relative z-10 grid gap-8 lg:grid-cols-2 lg:gap-10 lg:items-stretch"
>
{productsSection.items.map((product, pi) => ( {productsSection.items.map((product, pi) => (
<article <article
class:list={[ class:list={[
'flex flex-col rounded-2xl border p-6 sm:p-8', 'relative flex flex-col overflow-hidden rounded-2xl border p-6 -translate-y-1 shadow-2xl shadow-black/30 sm:p-8',
pi === 0 pi === 0
? 'border-sky-500/25 bg-gradient-to-b from-sky-950/30 to-nx-surface/30' ? 'border-sky-400/45 bg-gradient-to-b from-sky-950/30 to-nx-surface/30'
: 'border-emerald-500/20 bg-gradient-to-b from-emerald-950/25 to-nx-surface/30', : 'border-emerald-400/40 bg-gradient-to-b from-emerald-950/25 to-nx-surface/30',
]} ]}
> >
<div
class="pointer-events-none absolute inset-0 bg-[radial-gradient(ellipse_at_top,rgba(255,255,255,0.12),transparent_62%)]"
aria-hidden="true"
/>
<div class="pointer-events-none absolute inset-x-0 top-0 h-px bg-gradient-to-r from-transparent via-white/35 to-transparent opacity-60" aria-hidden="true"></div>
<div class="flex flex-wrap items-baseline justify-between gap-2"> <div class="flex flex-wrap items-baseline justify-between gap-2">
<h3 class="text-2xl font-semibold tracking-tight text-nx-fg"> <h3 class="text-2xl font-semibold tracking-tight text-nx-fg">
{product.name} {product.name}
@ -249,8 +263,8 @@ const techSliderItems = stackSection.techSlider.items;
class:list={[ class:list={[
'rounded-full px-2.5 py-0.5 text-xs font-medium', 'rounded-full px-2.5 py-0.5 text-xs font-medium',
pi === 0 pi === 0
? 'bg-sky-500/15 text-sky-200/95' ? 'bg-sky-500/25 text-sky-200/95'
: 'bg-emerald-500/15 text-emerald-200/95', : 'bg-emerald-500/25 text-emerald-200/95',
]} ]}
> >
{product.badge} {product.badge}
@ -298,6 +312,7 @@ const techSliderItems = stackSection.techSlider.items;
) : null} ) : null}
</article> </article>
))} ))}
</div>
</div> </div>
</div> </div>
</section> </section>
@ -464,7 +479,7 @@ const techSliderItems = stackSection.techSlider.items;
</div> </div>
<div <div
class="nx-tech-slider mt-10" class="nx-tech-slider mt-6 sm:mt-7"
role="region" role="region"
aria-label={stackSection.techSlider.ariaLabel} aria-label={stackSection.techSlider.ariaLabel}
> >

View File

@ -1,22 +1,38 @@
--- ---
import SubpageLayout from '../layouts/SubpageLayout.astro'; import SubpageLayout from '../layouts/SubpageLayout.astro';
import {
modelloOrganizzativo,
modelloOrganizzativoRuoli,
modelloOrganizzativoGovernance,
modelloOrganizzativoResponsabilitaSintesi,
modelloOrganizzativoControlliLean,
modelloOrganizzativoKpi,
modelloOrganizzativoDocumentazione,
modelloOrganizzativoPiano30,
modelloOrganizzativoOutsourcing,
modelloOrganizzativoNote,
modelloOrganizzativoFlussiDecisionali,
} from '../data/modello-organizzativo';
const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underline'; const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underline';
const tbl = 'mt-4 w-full border-collapse text-left text-sm'; const tbl = 'min-w-[22rem] w-full border-collapse text-left text-sm';
const th = 'border border-nx-border bg-nx-surface/60 px-3 py-2 font-semibold text-nx-fg'; const th = 'border border-nx-border bg-nx-surface/60 px-3 py-2 font-semibold text-nx-fg';
const td = 'border border-nx-border px-3 py-2 align-top text-nx-muted'; const td = 'border border-nx-border px-3 py-2 align-top text-nx-muted';
const tableWrap = 'mt-2 overflow-x-auto';
--- ---
<SubpageLayout <SubpageLayout
title="Modello organizzativo — NexStudio" title="Modello organizzativo — NexStudio"
description="Modello organizzativo NexStudio: ruoli, governance, RACI, controlli lean, KPI e piano operativo a 30 giorni." description="Modello organizzativo NexStudio: governance, ruoli, RACI, controlli lean, KPI, piano 30 giorni — per le linee LexAura (Legal Tech) e MediAura (Health Tech)."
heading="Modello organizzativo" heading="Modello organizzativo"
lead="Schema di ruoli, ritmi di governo e responsabilità per una software company snella (SaaS legal/med). Non sostituisce valutazioni legali (es. D.Lgs. 231/2001): va allineato a società, organi e consulenti." lead="Ruoli, ritmi di governo, processi e controlli «lean» in una software house con SaaS a elevata regolamentazione. Complementare al codice etico. Non sostituisce statuti, modelli di compliance societari (es. 231) né pareri legali: andate in parallelo con struttura reale e consulenti."
> >
<div class="[&_h3]:mt-6 [&_h3]:text-base [&_h3]:font-semibold [&_h3]:text-nx-fg"> <div class="[&_h3]:mt-6 [&_h3]:text-base [&_h3]:font-semibold [&_h3]:text-nx-fg">
<p class="border-l-2 border-sky-500/35 pl-4 text-sm leading-relaxed text-nx-muted"> <p class="border-l-2 border-sky-500/35 pl-4 text-sm leading-relaxed text-nx-muted">
Documento operativo per <strong class="text-nx-fg">NexStudio</strong> (sede Bangkok). Ruoli {modelloOrganizzativo.introBox}
numerici indicativi: adattare al team reale e formalizzare nomine e deleghe per iscritto. </p>
<p class="mt-3 text-sm leading-relaxed text-nx-muted sm:text-base">
{modelloOrganizzativo.perimetro}
</p> </p>
<h2 id="indice" class="!mt-8">Indice</h2> <h2 id="indice" class="!mt-8">Indice</h2>
@ -36,107 +52,36 @@ const td = 'border border-nx-border px-3 py-2 align-top text-nx-muted';
<h2 id="ruoli">1. Ruoli e perimetro</h2> <h2 id="ruoli">1. Ruoli e perimetro</h2>
<p> <p>
Elenco sintetico delle funzioni, con attese di impegno (full-time, part-time, frazionale o Elenco sintetico delle funzioni e delle attese di impegno. Per allineare il dominio
esternalizzato). I numeri tra parentesi sono orientativi per una fase early-stage. prodotto (Legal Tech, Health Tech) a ruoli e consiglieri, fate riferimento anche a <a
class={link}
href="/codice-etico">codice etico</a
> e, per i trattamenti di dati, a privacy policy e DPA.
</p> </p>
<ul> <ul>
<li> {
<strong>Founder / CEO (1):</strong> strategia, approvazione delle policy, contatti con board modelloOrganizzativoRuoli.map((r) => (
e investitori, accountability complessiva anche verso obblighi di legge e contratti. <li>
</li> <strong>{r.label}:</strong> {r.text}
<li> </li>
<strong>CTO / Head of Product (1):</strong> architettura, roadmap, quality gate di prodotto, ))
responsabilità tecnica end-to-end. }
</li>
<li>
<strong>Lead Engineer (12):</strong> sviluppo, code review, esecuzione CI/CD e qualità del
codice in reparto.
</li>
<li>
<strong>DevOps / Platform (1, oppure outsourcing):</strong> deploy, KMS, backup e
disaster recovery, governo dellambiente di produzione.
</li>
<li>
<strong>Security &amp; Privacy Lead (1, ruolo ibrido o contractor):</strong> sicurezza
operativa, gestione delle vulnerabilità, coordinamento con il DPO.
</li>
<li>
<strong>DPO / Privacy Responsible (frazionale o outsourcing):</strong> DPIA, gestione dei
diritti degli interessati, coerenza dellinformativa privacy.
</li>
<li>
<strong>Legal &amp; Compliance (frazionale o legale interno):</strong> contratti, NDA,
revisione delle normative di settore legale e medico pertinenti ai prodotti.
</li>
<li>
<strong>Product / Clinical Advisor (part-time o consulente):</strong> validazione di
funzionalità con impatto medico o legale, limiti duso e avvertenze.
</li>
<li>
<strong>Customer Success / Support (1):</strong> onboarding clienti, gestione richieste,
escalation verso tecnici e governance.
</li>
<li>
<strong>Operations / HR (1, part-time):</strong> onboarding del personale, formazione,
gestione delle segnalazioni interne.
</li>
<li>
<strong>Finance (1, part-time o outsourcing):</strong> contabilità, pagamenti, policy su
incassi e fornitori.
</li>
</ul> </ul>
<h2 id="governance">2. Governance essenziale</h2> <h2 id="governance">2. Governance essenziale</h2>
<ul> <ul>
<li> {
<strong>Weekly Tactical</strong> (Founder, CTO, Security/Privacy Lead, Customer Success): modelloOrganizzativoGovernance.map((g) => (
priorità operative, incidenti aperti, rilasci critici in corso. <li>
</li> <strong>{g.nome}:</strong> {g.partecipanti}. <span class="text-nx-muted/95">— {g.nota}</span>
<li> </li>
<strong>Biweekly Product Sync</strong> (CTO, Lead Engineer, Product Advisor): backlog, ))
piano di release, checkpoint di compliance di prodotto. }
</li>
<li>
<strong>Monthly Compliance Check</strong> (Founder/CEO, Legal, DPO, Security Lead): revisione
DPIA, vendor ad alto rischio, sintesi incidenti e azioni correttive.
</li>
<li>
<strong>Quarterly Board / Founders review:</strong> strategia, budget, rischi maggiori e
capacità organizzative.
</li>
</ul> </ul>
<h2 id="responsabilita">3. Principali responsabilità (sintesi)</h2> <h2 id="responsabilita">3. Principali responsabilità (sintesi)</h2>
<ul> <ul>
<li> {modelloOrganizzativoResponsabilitaSintesi.map((l) => <li>{l}</li>)}
<strong>Codice etico e policy:</strong> owner <em>Legal &amp; Compliance</em> — approvatore
<em>CEO</em>.
</li>
<li>
<strong>Sicurezza operativa e incident response:</strong> owner <em>Security Lead</em> —
esecutore tecnico <em>CTO</em>.
</li>
<li>
<strong>Privacy, trattamenti sensibili e DPIA:</strong> owner <em>DPO</em> — supporto
<em>Legal</em>.
</li>
<li>
<strong>Rilasci in produzione:</strong> accountable <em>CTO</em> — responsible <em>Lead
Engineer</em> — consulted <em>Security</em>, <em>DPO</em>, <em>Product Advisor</em>.
</li>
<li>
<strong>Fornitori e sub-processori:</strong> owner <em>Operations</em> + <em>Legal</em> —
due diligence <em>Security</em> / <em>DPO</em>.
</li>
<li>
<strong>Richieste degli interessati (DSR):</strong> owner <em>DPO</em> — esecuzione operativa
<em>Customer Success</em> (ove applicabile).
</li>
<li>
<strong>Segnalazioni e whistleblowing:</strong> owner <em>Operations</em> / <em>HR</em> —
supporto investigativo <em>Legal</em>.
</li>
</ul> </ul>
<h2 id="raci">4. RACI sintetico per processi critici</h2> <h2 id="raci">4. RACI sintetico per processi critici</h2>
@ -145,306 +90,248 @@ const td = 'border border-nx-border px-3 py-2 align-top text-nx-muted';
<strong>C</strong> = Consulted, <strong>I</strong> = Informed. <strong>C</strong> = Consulted, <strong>I</strong> = Informed.
</p> </p>
<h3>Rilascio in produzione</h3> <h3 class="!mt-5" id="raci-release">Rilascio in produzione</h3>
<table class={tbl}> <div class={tableWrap}>
<thead> <table class={tbl}>
<tr> <thead>
<th class={th}>Ruolo</th> <tr>
<th class={th}>R</th> <th class={th} scope="col">Ruolo</th>
<th class={th}>A</th> <th class={th} scope="col">R</th>
<th class={th}>C</th> <th class={th} scope="col">A</th>
<th class={th}>I</th> <th class={th} scope="col">C</th>
</tr> <th class={th} scope="col">I</th>
</thead> </tr>
<tbody> </thead>
<tr> <tbody>
<td class={td}>Lead Engineer</td> <tr>
<td class={td}></td> <td class={td}>Lead engineer</td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
</tr> <td class={td}></td>
<tr> </tr>
<td class={td}>CTO</td> <tr>
<td class={td}></td> <td class={td}>CTO</td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
</tr> <td class={td}></td>
<tr> </tr>
<td class={td}>Security Lead, DPO, Product Advisor</td> <tr>
<td class={td}></td> <td class={td}>Security lead, DPO, product advisor</td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
</tr> <td class={td}></td>
<tr> </tr>
<td class={td}>CEO, Customer Success</td> <tr>
<td class={td}></td> <td class={td}>CEO, customer success</td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
</tr> <td class={td}>●</td>
</tbody> </tr>
</table> </tbody>
</table>
</div>
<h3>Incident response (violazione dei dati)</h3> <h3 id="raci-incident">Incident response (violazione dei dati o incidente P0)</h3>
<table class={tbl}> <div class={tableWrap}>
<thead> <table class={tbl}>
<tr> <thead>
<th class={th}>Ruolo</th> <tr>
<th class={th}>R</th> <th class={th} scope="col">Ruolo</th>
<th class={th}>A</th> <th class={th} scope="col">R</th>
<th class={th}>C</th> <th class={th} scope="col">A</th>
<th class={th}>I</th> <th class={th} scope="col">C</th>
</tr> <th class={th} scope="col">I</th>
</thead> </tr>
<tbody> </thead>
<tr> <tbody>
<td class={td}>Security Lead</td> <tr>
<td class={td}></td> <td class={td}>Security lead</td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
</tr> <td class={td}></td>
<tr> </tr>
<td class={td}>CEO</td> <tr>
<td class={td}></td> <td class={td}>CEO</td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
</tr> <td class={td}></td>
<tr> </tr>
<td class={td}>DPO, Legal, CTO</td> <tr>
<td class={td}></td> <td class={td}>DPO, legal, CTO</td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
</tr> <td class={td}></td>
<tr> </tr>
<td class={td}>Clienti coinvolti, Board (se impatto elevato)</td> <tr>
<td class={td}></td> <td class={td}>Clienti interessati, board (se impatto elevato)</td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
</tr> <td class={td}>●</td>
</tbody> </tr>
</table> </tbody>
</table>
</div>
<h3>Onboarding vendor (sub-processore)</h3> <h3 id="raci-vendor">Onboarding vendor (sub-processore)</h3>
<table class={tbl}> <div class={tableWrap}>
<thead> <table class={tbl}>
<tr> <thead>
<th class={th}>Ruolo</th> <tr>
<th class={th}>R</th> <th class={th} scope="col">Ruolo</th>
<th class={th}>A</th> <th class={th} scope="col">R</th>
<th class={th}>C</th> <th class={th} scope="col">A</th>
<th class={th}>I</th> <th class={th} scope="col">C</th>
</tr> <th class={th} scope="col">I</th>
</thead> </tr>
<tbody> </thead>
<tr> <tbody>
<td class={td}>Operations</td> <tr>
<td class={td}></td> <td class={td}>Operations</td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
</tr> <td class={td}></td>
<tr> </tr>
<td class={td}>Legal</td> <tr>
<td class={td}></td> <td class={td}>Legal</td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
</tr> <td class={td}></td>
<tr> </tr>
<td class={td}>Security Lead, DPO</td> <tr>
<td class={td}></td> <td class={td}>Security lead, DPO</td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
</tr> <td class={td}></td>
<tr> </tr>
<td class={td}>CTO, Finance</td> <tr>
<td class={td}></td> <td class={td}>CTO, finance</td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
</tr> <td class={td}>●</td>
</tbody> </tr>
</table> </tbody>
</table>
</div>
<h3>DPIA per modulo sanitario o legale</h3> <h3 id="raci-dpia">DPIA (per perimetro: LexAura, MediAura, piattaforma)</h3>
<table class={tbl}> <p class="text-sm text-nx-muted sm:text-base">
<thead> La matrice RACI non sostituisce il criterio legale (chi è titolare, chi responsabile) definito
<tr> in contratti e in <a class={link} href="/codice-etico#tutela-dati-ruoli">§5.1 del codice etico</a
<th class={th}>Ruolo</th> >. Qui: chi coordina lesercizio interno della valutazione dimpatto.
<th class={th}>R</th> </p>
<th class={th}>A</th> <div class={tableWrap}>
<th class={th}>C</th> <table class={tbl}>
<th class={th}>I</th> <thead>
</tr> <tr>
</thead> <th class={th} scope="col">Ruolo</th>
<tbody> <th class={th} scope="col">R</th>
<tr> <th class={th} scope="col">A</th>
<td class={td}>DPO</td> <th class={th} scope="col">C</th>
<td class={td}>●</td> <th class={th} scope="col">I</th>
<td class={td}></td> </tr>
<td class={td}></td> </thead>
<td class={td}></td> <tbody>
</tr> <tr>
<tr> <td class={td}>DPO</td>
<td class={td}>Legal</td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> </tr>
</tr> <tr>
<tr> <td class={td}>Legal</td>
<td class={td}>Product Advisor, CTO, Security Lead</td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> </tr>
</tr> <tr>
<tr> <td class={td}>Product advisor, CTO, security lead</td>
<td class={td}>CEO</td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
<td class={td}></td> <td class={td}></td>
<td class={td}>●</td> </tr>
</tr> <tr>
</tbody> <td class={td}>CEO</td>
</table> <td class={td}></td>
<td class={td}></td>
<td class={td}></td>
<td class={td}>●</td>
</tr>
</tbody>
</table>
</div>
<h2 id="flussi">5. Flussi decisionali rapidi</h2> <h2 id="flussi">5. Flussi decisionali rapidi</h2>
<ul> <ul>
<li> {
<strong>Decisione tecnica ordinaria:</strong> Lead Engineer → CTO (documentare su ticket se modelloOrganizzativoFlussiDecisionali.map((f) => (
impatta rischio o contratti). <li>
</li> <strong>{f.titolo}:</strong> {f.testo}
<li> </li>
<strong>Rilascio con impatto privacy o sicurezza:</strong> approvazione obbligatoria di ))
<em>Security Lead</em> e <em>DPO</em> (target: entro 48 ore lavorative). }
</li>
<li>
<strong>Incident P0:</strong> <em>Security Lead</em> notifica CEO, DPO e Legal entro 4 ore;
escalation al Board se limpatto è elevato (clienti, regolatori, volumi o classi di dati).
</li>
</ul> </ul>
<h2 id="controlli">6. Controlli minimi obbligatori (lean)</h2> <h2 id="controlli">6. Controlli minimi obbligatori (lean)</h2>
<ul> <ul>
<li>IAM con MFA per accesso a produzione e a segreti.</li> {modelloOrganizzativoControlliLean.map((c) => <li>{c}</li>)}
<li>CI/CD con SAST e scansione automatica delle dipendenze.</li>
<li>SBOM generato automaticamente per ogni release.</li>
<li>TLS in transito; cifratura a riposo per dati sensibili.</li>
<li>Backup giornalieri e test DR trimestrale (ripristino documentato).</li>
<li>Log degli accessi e alerting su anomalie (SIEM o servizio gestito).</li>
<li>Checklist pre-release (security/privacy) con traccia digitale di approvazione.</li>
</ul> </ul>
<h2 id="kpi">7. KPI essenziali (core metrics)</h2> <h2 id="kpi">7. KPI essenziali</h2>
<ul> <ul>
<li> {
<strong>Security:</strong> percentuale di patch critiche entro SLA; MTTD e MTTR per modelloOrganizzativoKpi.map((k) => (
incidenti. <li>
</li> <strong>{k.area}:</strong> {k.testo}
<li> </li>
<strong>Privacy:</strong> tempo medio di risposta alle DSR; numero di DPIA completate / in ))
corso. }
</li>
<li>
<strong>Product:</strong> tempo di ciclo del deploy; copertura test sui moduli critici.
</li>
<li>
<strong>Operations:</strong> uptime rispetto a SLA; tempo medio di risposta del supporto;
segnalazioni chiuse nel periodo.
</li>
</ul> </ul>
<h2 id="documentazione">8. Documentazione minima da mantenere</h2> <h2 id="documentazione">8. Documentazione minima da mantenere</h2>
<ul> <ul>
<li>Codice etico firmato e registro delle adesioni.</li> {modelloOrganizzativoDocumentazione.map((d) => <li>{d}</li>)}
<li>Informativa privacy e template di DPA (Data Processing Agreement).</li>
<li>DPIA per trattamenti critici.</li>
<li>Security whitepaper breve (12 pagine) per clienti e audit.</li>
<li>Incident response playbook (versione esecutiva).</li>
<li>SBOM e registro fornitori / sub-processori.</li>
<li>Checklist pre-release e log delle approvazioni.</li>
</ul> </ul>
<h2 id="piano-30">9. Primo piano operativo (30 giorni)</h2> <h2 id="piano-30">9. Primo piano operativo (30 giorni)</h2>
<ol> <ol>
<li> {
<strong>Giorni 03:</strong> nomina formale dei ruoli chiave (Security Lead, DPO frazionale, modelloOrganizzativoPiano30.map((p) => (
Legal frazionale). <li>
</li> <strong>{p.quando}:</strong> {p.testo}
<li> </li>
<strong>Giorni 410:</strong> integrare la checklist pre-release in CI/CD; abilitare MFA e ))
policy IAM coerenti con il minimo sopra. }
</li>
<li>
<strong>Giorni 1117:</strong> avviare DPIA sul modulo medico/legale più critico; due
diligence sui fornitori ad alto rischio.
</li>
<li>
<strong>Giorni 1824:</strong> pubblicare una Trust Center di base (link al Codice etico,
contatti DPO/security, materiali privacy/DPA se disponibili).
</li>
<li>
<strong>Giorni 2530:</strong> tabletop su incident response; test di rollback deploy e
ripristino backup; formazione iniziale obbligatoria (security e privacy).
</li>
</ol> </ol>
<h2 id="outsourcing">10. Outsourcing consigliato (per restare snelli)</h2> <h2 id="outsourcing">10. Outsourcing consigliato (per restare snelli)</h2>
<ul> <ul>
<li> {
<strong>Security Ops / SOC:</strong> servizio gestito per log, alerting e penetration test modelloOrganizzativoOutsourcing.map((o) => (
periodici. <li>
</li> <strong>{o.titolo}:</strong> {o.testo}
<li> </li>
<strong>DPO e Legal:</strong> consulenti frazionali con esperienza PDPA, GDPR e contesto ))
medico-legale locale. }
</li>
<li>
<strong>DevOps / Platform:</strong> servizi cloud gestiti (es. KMS, database gestiti) per
ridurre carico operativo interno.
</li>
</ul> </ul>
<h2 id="note">11. Note pratiche e raccomandazioni</h2> <h2 id="note">11. Note pratiche e raccomandazioni</h2>
<ul> <ul>
<li> {modelloOrganizzativoNote.map((n) => <li>{n}</li>)}
Mantenere <strong>separazione dei compiti</strong> sui controlli critici (es. chi sviluppa
non approva da solo gli accessi a produzione).
</li>
<li>
<strong>Automatizzare</strong> controlli ripetitivi (SAST, SBOM, scansioni dipendenze) nella
pipeline.
</li>
<li>
<strong>Documentare</strong> decisioni su rischio e accettazioni (log nel sistema di
ticketing) per audit e post-mortem.
</li>
<li>
Coinvolgere <strong>advisor clinici e legali</strong> esterni per convalide su funzionalità ad
alto rischio.
</li>
<li>
Prevedere <strong>revisione trimestrale</strong> del modello e aggiornamento delle
responsabilità man mano che la società cresce.
</li>
</ul> </ul>
<h2>Collegamenti</h2>
<p>
<a class={link} href="/codice-etico">Codice etico</a>
<span class="text-nx-muted"> · </span>
<a class={link} href="/about">Chi siamo</a>
<span class="text-nx-muted"> · </span>
<a class={link} href="#indice">Torna allindice</a>
</p>
</div> </div>
</SubpageLayout> </SubpageLayout>

View File

@ -1,53 +1,77 @@
--- ---
import SubpageLayout from '../layouts/SubpageLayout.astro'; import SubpageLayout from '../layouts/SubpageLayout.astro';
import {
privacyCrossReferences,
privacyDocument,
privacyRiferimenti,
privacySections,
} from '../data/privacy';
const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underline';
const lead =
"Informativa quadro sul trattamento dei dati personali per il portale istituzionale NexStudio (sede operativa: Bangkok, Thailandia) e per le interazioni corporate con i servizi SaaS LexAura e MediAura. " +
privacyCrossReferences.lead;
--- ---
<SubpageLayout <SubpageLayout
title="Privacy — NexStudio" title="Privacy — NexStudio"
description="Informativa sul trattamento dei dati personali NexStudio." description="Informativa privacy quadro NexStudio: sito istituzionale, contatti corporate, rimandi ai dettagli privacy dei SaaS LexAura (Legal Tech) e MediAura (Health Tech)."
heading="Informativa sulla privacy" heading="Informativa sulla privacy"
lead="Documento provvisorio: va adattato alla vostra organizzazione e revisionato da un legale prima della pubblicazione definitiva." lead={lead}
> >
<p> <div>
Questa pagina descrive, in forma generica, come NexStudio intende trattare i <p class="border-l-2 border-sky-500/35 pl-4 text-sm leading-relaxed text-nx-muted">
dati personali raccolti attraverso il sito web e i canali di contatto. Le <span class="font-medium text-nx-fg">Versione</span> {privacyDocument.version}
finalità, le basi giuridiche e i destinatari vanno definiti in base alle <span class="text-nx-muted/80"> · </span>
vostre attività reali (es. gestione richieste, newsletter, analytics). <span class="font-medium text-nx-fg">In vigore dal</span> {privacyDocument.inVigoreDal}
</p> <span class="text-nx-muted/80"> · </span>
<span class="font-medium text-nx-fg">Ultimo aggiornamento</span>{' '}
{privacyDocument.ultimoAggiornamento}
</p>
<h2>Titolare del trattamento</h2> <p class="!mt-5 text-sm text-nx-muted sm:text-base">
<p> Documenti connessi:{' '}
Indicare ragione sociale, sede, P.IVA e modalità di contatto (es. email {
dedicata privacy). Per richieste degli interessati potete rimandare alla privacyRiferimenti.map((r, i) => (
sezione <a class="text-sky-400/90 hover:text-sky-300" href="/#contatti" <span>
>Contatti</a {i > 0 && <span class="text-nx-muted/80"> · </span>}
> o a un indirizzo PEC / form strutturato. <a class={link} href={r.href}>{r.label}</a>
</p> </span>
))
}
</p>
<h2>Tipologie di dati e finalità</h2> <h2 id="indice" class="!mt-8">Indice</h2>
<p> <ol class="!mt-3 list-decimal space-y-1.5 pl-5 text-sm leading-relaxed sm:text-base">
Esempi da personalizzare: dati di navigazione e log tecnici; dati forniti {
volontariamente tramite moduli o chat; eventuali cookie di profilazione (da privacySections.map((s) => (
collegare alla <a class="text-sky-400/90 hover:text-sky-300" href="/cookies" <li>
>informativa cookie</a <a class={link} href={`#${s.id}`}>{s.title}</a>
>). Per ogni trattamento indicare la base giuridica (contratto, legittimo </li>
interesse, consenso, obbligo legale). ))
</p> }
</ol>
<h2>Conservazione e sicurezza</h2> {
<p> privacySections.map((s) => (
Specificare tempi di conservazione per categoria di dati e misure di <section class="mt-10" id={s.id}>
sicurezza adottate (crittografia, controllo accessi, fornitori cloud, sede <h2
dei dati). class="scroll-mt-8 text-lg font-semibold text-nx-fg sm:text-xl"
</p> >
{s.title}
<h2>Diritti degli interessati</h2> </h2>
<p> {s.paragraphs.map((p) => (
Gli interessati possono esercitare i diritti previsti dal Reg. (UE) 2016/679 <p class="mt-3 text-sm leading-relaxed text-nx-muted sm:text-base">{p}</p>
(accesso, rettifica, cancellazione, limitazione, portabilità, opposizione, ))}
revoca del consenso). Dettagli operativi nella pagina <a {s.bullets && s.bullets.length > 0 ? (
class="text-sky-400/90 hover:text-sky-300" <ul class="mt-3 list-disc space-y-2 pl-5 text-sm sm:text-base">
href="/gdpr">GDPR</a {s.bullets.map((b) => (
>. <li class="text-nx-muted">{b}</li>
</p> ))}
</ul>
) : null}
</section>
))
}
</div>
</SubpageLayout> </SubpageLayout>

View File

@ -1,25 +1,69 @@
--- ---
import SubpageLayout from '../layouts/SubpageLayout.astro'; import SubpageLayout from '../layouts/SubpageLayout.astro';
import { termsDocument, termsSections, termsRiferimenti, termsCrossReferences } from '../data/terms';
const link = 'text-sky-400/90 underline-offset-2 hover:text-sky-300 hover:underline';
const lead =
"Si applicano alla navigazione e all'uso del sito informativo pubblico di NexStudio (sede: Bangkok, Thailandia). I contratti d'abbonamento o d'acquisto sui prodotti software restano retti da offerte, ordini o accordi separati. " +
termsCrossReferences.leadNote;
--- ---
<SubpageLayout <SubpageLayout
title="Condizioni duso — NexStudio" title="Condizioni duso — NexStudio"
description="Termini e condizioni duso dei siti e servizi NexStudio." description="Condizioni duso del sito web NexStudio: accettazione, utilizzo lecito, responsabilità, legge applicabile. Bangkok, LexAura e MediAura, servizi B2B per contratto a parte."
heading="Condizioni duso" heading="Condizioni duso"
lead="Bozza: definire condizioni duso del sito, limitazioni di responsabilità, proprietà intellettuale e legge applicabile con supporto legale." lead={lead}
> >
<p> <div>
Questa pagina ospiterà le condizioni duso per il sito <p class="border-l-2 border-sky-500/35 pl-4 text-sm leading-relaxed text-nx-muted">
pubblico e, se del caso, per laccesso a demo o aree riservate. Struttura <span class="font-medium text-nx-fg">Versione</span> {termsDocument.version}
tipica: oggetto, utente, servizi offerti, obblighi dellutente, limitazione <span class="text-nx-muted/80"> · </span>
di responsabilità, sospensione, legge e foro competente. <span class="font-medium text-nx-fg">In vigore dal</span> {termsDocument.inVigoreDal}
</p> </p>
<h2>Collegamenti</h2>
<p> <p class="!mt-5 text-sm text-nx-muted sm:text-base">
<a class="text-sky-400/90 hover:text-sky-300" href="/privacy">Privacy</a> Documenti connessi:{' '}
· {
<a class="text-sky-400/90 hover:text-sky-300" href="/cookies">Informativa cookie</a> termsRiferimenti.map((r, i) => (
· <span>
<a class="text-sky-400/90 hover:text-sky-300" href="/gdpr">Diritti privacy (GDPR)</a> {i > 0 && <span class="text-nx-muted/80"> · </span>}
</p> <a class={link} href={r.href}>{r.label}</a>
</span>
))
}
</p>
<h2 id="indice" class="!mt-8">Indice</h2>
<ol class="!mt-3 list-decimal space-y-1.5 pl-5 text-sm leading-relaxed sm:text-base">
{
termsSections.map((s) => (
<li>
<a class={link} href={`#${s.id}`}>{s.title}</a>
</li>
))
}
</ol>
{
termsSections.map((s) => (
<section class="mt-10" id={s.id}>
<h2
class="scroll-mt-8 text-lg font-semibold text-nx-fg sm:text-xl"
>
{s.title}
</h2>
{s.paragraphs.map((p) => (
<p class="mt-3 text-sm leading-relaxed text-nx-muted sm:text-base">{p}</p>
))}
{s.bullets && s.bullets.length > 0 ? (
<ul class="mt-3 list-disc space-y-2 pl-5 text-sm sm:text-base">
{s.bullets.map((b) => (
<li class="text-nx-muted">{b}</li>
))}
</ul>
) : null}
</section>
))
}
</div>
</SubpageLayout> </SubpageLayout>

View File

@ -240,7 +240,7 @@
align-items: center; align-items: center;
justify-content: center; justify-content: center;
min-height: 3rem; min-height: 3rem;
opacity: 0.72; opacity: 0.76;
transition: opacity 0.2s ease, filter 0.2s ease; transition: opacity 0.2s ease, filter 0.2s ease;
} }
@ -257,27 +257,27 @@
} }
.nx-tech-slider__logo { .nx-tech-slider__logo {
height: 2.5rem; height: 2.9rem;
width: auto; width: auto;
max-width: 8.5rem; max-width: 10rem;
object-fit: contain; object-fit: contain;
} }
@media (min-width: 640px) { @media (min-width: 640px) {
.nx-tech-slider__logo { .nx-tech-slider__logo {
height: 2.875rem; height: 3.25rem;
max-width: 9.5rem; max-width: 11rem;
} }
} }
/* Badge testuale HL7 FHIR: più largo ma stessa altezza riga */ /* Badge testuale HL7 FHIR: più largo ma stessa altezza riga */
.nx-tech-slider__logo--fhir { .nx-tech-slider__logo--fhir {
max-width: 11.5rem; max-width: 13rem;
} }
@media (min-width: 640px) { @media (min-width: 640px) {
.nx-tech-slider__logo--fhir { .nx-tech-slider__logo--fhir {
max-width: 12.5rem; max-width: 14.5rem;
} }
} }