feat(CC-088): add Family OS placeholder (privacy principles + architecture + module plan)

This commit is contained in:
admin-valentin 2026-08-02 17:44:58 +00:00
parent a8564e0b5f
commit c6b5a4ec39

View file

@ -0,0 +1,83 @@
'use client';
import Link from 'next/link';
const FAMILY_MODULES = [
{ label: 'Membri familie', icon: '👨‍👩‍👧‍👦', desc: 'Profil, consimțământ, relație', planned: true },
{ label: 'Politici pentru minori', icon: '🛡️', desc: 'GDPR Art. 8 — consimțământ parental', planned: true },
{ label: 'Obiective comune', icon: '🎯', desc: 'Goals partajate la nivel familie', planned: true },
{ label: 'Buget familie', icon: '💰', desc: 'Cheltuieli comune, planificare', planned: true },
{ label: 'Documente familie', icon: '📁', desc: 'Acte, asigurări, contracte casă', planned: true },
{ label: 'Calendar familie', icon: '📅', desc: 'Evenimente comune, scadențe', planned: true },
{ label: 'Sănătate familie', icon: '❤️', desc: 'Consulturi, vaccinuri, urgențe', planned: true },
{ label: 'Education kids', icon: '📚', desc: 'Progres școlar, activități', planned: true },
];
const PRIVACY_PRINCIPLES = [
{ title: 'Consimțământ separat per persoană', desc: 'Fiecare adult din familie trebuie să consimtă explicit. Nu există consimțământ implicit prin relație familială.' },
{ title: 'Protecție specială minori (GDPR Art. 8)', desc: 'Pentru copii sub 16 ani, consimțământul aparțin exclusiv părintelui/tutorelui legal. Datele minorilor sunt tratate cu restricții mai stricte.' },
{ title: 'Drept la ștergere individual', desc: 'Fiecare persoană poate solicita ștergerea datelor proprii fără a afecta datele altui membru.' },
{ title: 'Izolare date pe persoană', desc: 'CEO OS nu amestecă datele tale personale cu datele membrilor familiei — fiecare are propriul spațiu GDPR.' },
{ title: 'Acces granular', desc: 'Controlezi ce date partajezi cu ce alt membru. Un copil nu vede datele financiare ale părinților, și invers.' },
];
export default function FamilyOSPage() {
return (
<div className="max-w-3xl space-y-6 p-6">
<div>
<h1 className="font-display text-2xl font-semibold text-ink">Family OS</h1>
<p className="text-sm text-ink-faint mt-1">Orchestrarea vieții de familie date, consimțăminte și politici separate per persoană.</p>
</div>
<div className="card p-4 bg-warn/5 border-warn/30 space-y-2">
<p className="text-xs font-semibold text-warn">Modul în dezvoltare A3 prioritate</p>
<p className="text-xs text-ink-faint">
Family OS necesită un sistem de entități noi (FamilyMember, ConsentPolicy) și implementarea GDPR Art. 8
pentru protecția minorilor. Modulul va fi disponibil în iterația A3.
Principiile de mai jos sunt definitive și nu vor fi modificate la lansare.
</p>
</div>
{/* Privacy principles — fixed, not planned */}
<div className="space-y-3">
<p className="text-xs font-semibold uppercase tracking-wider text-ink-faint">Principii de privacy nemodificabile</p>
{PRIVACY_PRINCIPLES.map((p) => (
<div key={p.title} className="card p-4 border-l-4 border-l-primary/40">
<p className="text-sm font-semibold text-ink">{p.title}</p>
<p className="text-[10px] text-ink-faint mt-1">{p.desc}</p>
</div>
))}
</div>
{/* Modules grid */}
<div className="space-y-2">
<p className="text-xs font-semibold uppercase tracking-wider text-ink-faint">Module planificate</p>
<div className="grid gap-2 sm:grid-cols-2">
{FAMILY_MODULES.map((m) => (
<div key={m.label} className="card p-3 flex items-center gap-3 opacity-60">
<span className="text-xl shrink-0">{m.icon}</span>
<div>
<p className="text-sm font-medium text-ink">{m.label}</p>
<p className="text-[10px] text-ink-faint">{m.desc}</p>
</div>
<span className="ml-auto text-[9px] bg-warn/10 text-warn rounded px-1.5 py-0.5 shrink-0">A3</span>
</div>
))}
</div>
</div>
{/* Architecture note */}
<div className="card p-4 bg-primary/5 border-primary/20 space-y-2">
<p className="text-xs font-semibold text-ink">Arhitectură planificată</p>
<div className="text-[10px] text-ink-faint space-y-1 font-mono">
<p>Tables: family_members, family_policies, family_consents, family_events</p>
<p>Roluri: family_admin, adult_member, minor_member</p>
<p>Consent: per-member, per-data-category, with expiry</p>
<p>Isolation: separate RLS policies per family_member_id</p>
</div>
</div>
<Link href="/dashboard/life" className="text-xs text-primary hover:underline"> Life OS Overview</Link>
</div>
);
}