Skip to content

Commit 22b12df

Browse files
author
wisedev
committed
feat: add privacy policy
1 parent e3b7c7b commit 22b12df

3 files changed

Lines changed: 144 additions & 1 deletion

File tree

frontend/src/app/pages/home/home.html

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -629,7 +629,7 @@ <h1 class="hero-title"><span class="htt-desktop">What can I help you<br></span><
629629
</div>
630630
</div>
631631

632-
<p class="input-hint">MaIN.NET is open source — responses are AI-generated for guidance only.</p>
632+
<p class="input-hint">MaIN.NET is open source — responses are AI-generated for guidance only. <button type="button" class="privacy-link" (click)="openPrivacy()">Privacy</button></p>
633633
</div>
634634
</div>
635635

@@ -744,4 +744,42 @@ <h1 class="hero-title"><span class="htt-desktop">What can I help you<br></span><
744744
</div>
745745
</div>
746746
}
747+
748+
@if (privacyOpen()) {
749+
<div class="privacy-overlay" (click)="closePrivacy()">
750+
<div class="privacy-modal" (click)="$event.stopPropagation()">
751+
<div class="privacy-header">
752+
<span class="privacy-title">Privacy</span>
753+
<button type="button" class="arc-run-modal-close" (click)="closePrivacy()" title="Close">
754+
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
755+
</button>
756+
</div>
757+
<div class="privacy-body">
758+
<p>This site does not track you. No cookies are set. No analytics run. Here's what actually happens when you use it:</p>
759+
760+
<div class="privacy-section">
761+
<span class="privacy-label">Bot protection</span>
762+
<p>Cloudflare Turnstile runs a silent challenge before your first message. It processes your IP address and basic browser signals to distinguish humans from bots. No personal profile is built. <a href="https://www.cloudflare.com/privacypolicy/" target="_blank" rel="noopener">Cloudflare's privacy policy</a> applies.</p>
763+
</div>
764+
765+
<div class="privacy-section">
766+
<span class="privacy-label">Conversations</span>
767+
<p>Messages you send are forwarded to an AI model (Gemini by default) to generate responses. Conversation content is not stored on our servers after your session ends. The AI provider's data handling applies to content in transit.</p>
768+
</div>
769+
770+
<div class="privacy-section">
771+
<span class="privacy-label">Local storage</span>
772+
<p>Your theme preference and recent conversation titles are saved in your browser's local storage. This data never leaves your device.</p>
773+
</div>
774+
775+
<div class="privacy-section">
776+
<span class="privacy-label">Logs</span>
777+
<p>Standard server logs (timestamps, IP addresses, request paths) are retained for security and debugging. They are not shared or sold.</p>
778+
</div>
779+
780+
<p class="privacy-footer-note">Questions? Open an issue on <a href="https://github.com/mobitouchOS/MaIN.NET" target="_blank" rel="noopener">GitHub</a>.</p>
781+
</div>
782+
</div>
783+
</div>
784+
}
747785
</div>

frontend/src/app/pages/home/home.scss

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2872,6 +2872,103 @@ $agent-colors: (
28722872
}
28732873
}
28742874

2875+
// ── Privacy modal ───────────────────────────────────────────────────────────
2876+
2877+
.privacy-link {
2878+
background: none;
2879+
border: none;
2880+
padding: 0;
2881+
color: var(--text-subtle);
2882+
font-size: inherit;
2883+
cursor: pointer;
2884+
text-decoration: underline;
2885+
text-underline-offset: 2px;
2886+
transition: color 0.15s ease;
2887+
2888+
&:hover { color: var(--text-muted); }
2889+
}
2890+
2891+
.privacy-overlay {
2892+
position: fixed;
2893+
inset: 0;
2894+
z-index: 80;
2895+
display: flex;
2896+
align-items: center;
2897+
justify-content: center;
2898+
padding: 20px;
2899+
background: rgba(0, 0, 0, 0.6);
2900+
backdrop-filter: blur(4px);
2901+
animation: fadeReveal 0.2s ease both;
2902+
}
2903+
2904+
.privacy-modal {
2905+
width: 100%;
2906+
max-width: 520px;
2907+
max-height: 85vh;
2908+
overflow-y: auto;
2909+
border-radius: var(--radius-md);
2910+
border: 1px solid var(--border-accent);
2911+
background: var(--bg-card);
2912+
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
2913+
}
2914+
2915+
.privacy-header {
2916+
display: flex;
2917+
align-items: center;
2918+
justify-content: space-between;
2919+
padding: 16px 20px 14px;
2920+
border-bottom: 1px solid var(--border);
2921+
}
2922+
2923+
.privacy-title {
2924+
font-size: 14px;
2925+
font-weight: 600;
2926+
color: var(--text);
2927+
}
2928+
2929+
.privacy-body {
2930+
padding: 20px;
2931+
display: flex;
2932+
flex-direction: column;
2933+
gap: 16px;
2934+
font-size: 13px;
2935+
line-height: 1.6;
2936+
color: var(--text-muted);
2937+
2938+
a {
2939+
color: var(--accent);
2940+
text-decoration: none;
2941+
&:hover { text-decoration: underline; }
2942+
}
2943+
2944+
p { margin: 0; }
2945+
}
2946+
2947+
.privacy-section {
2948+
display: flex;
2949+
flex-direction: column;
2950+
gap: 4px;
2951+
padding: 12px 14px;
2952+
border-radius: var(--radius-sm);
2953+
background: var(--bg-glass);
2954+
border: 1px solid var(--border);
2955+
}
2956+
2957+
.privacy-label {
2958+
font-size: 11px;
2959+
font-weight: 600;
2960+
text-transform: uppercase;
2961+
letter-spacing: 0.06em;
2962+
color: var(--accent);
2963+
}
2964+
2965+
.privacy-footer-note {
2966+
font-size: 12px;
2967+
color: var(--text-subtle);
2968+
text-align: center;
2969+
padding-top: 4px;
2970+
}
2971+
28752972
// ── Mobile / Tablet ──────────────────────────────────────────────────────────
28762973

28772974
@media (max-width: 768px) {
@@ -3063,4 +3160,8 @@ $agent-colors: (
30633160

30643161
// ── File tiles ──
30653162
.ft-header { font-size: 11.5px; padding: 7px 10px; }
3163+
3164+
// ── Privacy modal ──
3165+
.privacy-overlay { padding: 0; align-items: flex-end; }
3166+
.privacy-modal { width: 100%; max-width: 100%; border-radius: 20px 20px 0 0; }
30663167
}

frontend/src/app/pages/home/home.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ export class Home implements OnDestroy {
199199
hoveredAgent = signal<AgentDefinition | null>(null);
200200
displayedAgent = signal<AgentDefinition>(AGENTS[0]);
201201
agentGuideOpen = signal(false);
202+
privacyOpen = signal(false);
202203
guideAgent = signal<AgentDefinition | null>(null);
203204
messages = signal<ChatMessage[]>([]);
204205
inputText = signal('');
@@ -324,6 +325,9 @@ export class Home implements OnDestroy {
324325

325326
closeAgentGuide() { this.agentGuideOpen.set(false); }
326327

328+
openPrivacy() { this.privacyOpen.set(true); }
329+
closePrivacy() { this.privacyOpen.set(false); }
330+
327331
toggleGuideAgent(agent: AgentDefinition) {
328332
this.guideAgent.set(this.guideAgent()?.id === agent.id ? null : agent);
329333
}

0 commit comments

Comments
 (0)