369 lines
15 KiB
HTML
369 lines
15 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<link rel="icon" type="image/svg+xml" href="icon.svg">
|
|
<link rel="alternate icon" href="icon.svg">
|
|
<title>Privacy & Open Source - Valley of the Commons</title>
|
|
<link rel="stylesheet" href="game.css">
|
|
<style>
|
|
/* Override body styles for privacy page to allow scrolling */
|
|
html {
|
|
overflow: auto !important;
|
|
height: auto !important;
|
|
}
|
|
|
|
body {
|
|
overflow: auto !important;
|
|
overflow-x: hidden !important;
|
|
height: auto !important;
|
|
min-height: 100vh;
|
|
min-height: 100dvh; /* Dynamic viewport height for mobile */
|
|
display: block !important;
|
|
align-items: unset !important;
|
|
justify-content: unset !important;
|
|
position: relative !important;
|
|
-webkit-overflow-scrolling: touch; /* Smooth scrolling on iOS */
|
|
}
|
|
|
|
/* Override terminal styles that might interfere */
|
|
.terminal {
|
|
display: none !important;
|
|
}
|
|
|
|
.privacy-container {
|
|
max-width: 800px;
|
|
margin: 0 auto;
|
|
padding: 2rem;
|
|
padding-top: 4rem; /* Space for top links if they exist */
|
|
color: #00ff00;
|
|
font-family: 'Courier New', 'Monaco', 'Menlo', monospace;
|
|
min-height: 100vh;
|
|
min-height: 100dvh;
|
|
}
|
|
|
|
/* Mobile responsive padding */
|
|
@media (max-width: 768px) {
|
|
.privacy-container {
|
|
padding: 1rem;
|
|
padding-top: 3.5rem; /* Space for top links */
|
|
}
|
|
|
|
.privacy-header h1 {
|
|
font-size: 1.3rem;
|
|
}
|
|
|
|
.privacy-section h2 {
|
|
font-size: 1.1rem;
|
|
}
|
|
|
|
.privacy-section h3 {
|
|
font-size: 0.95rem;
|
|
}
|
|
}
|
|
|
|
.privacy-header {
|
|
margin-bottom: 2rem;
|
|
border-bottom: 1px solid #00ff00;
|
|
padding-bottom: 1rem;
|
|
}
|
|
|
|
.privacy-header h1 {
|
|
font-size: 1.5rem;
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
|
|
.privacy-header p {
|
|
color: #666;
|
|
font-size: 0.9rem;
|
|
}
|
|
|
|
.privacy-section {
|
|
margin-bottom: 2rem;
|
|
}
|
|
|
|
.privacy-section h2 {
|
|
font-size: 1.2rem;
|
|
color: #00ff00;
|
|
margin-bottom: 1rem;
|
|
border-left: 2px solid #00ff00;
|
|
padding-left: 1rem;
|
|
}
|
|
|
|
.privacy-section h3 {
|
|
font-size: 1rem;
|
|
color: #fff;
|
|
margin-top: 1.5rem;
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
|
|
.privacy-section p {
|
|
line-height: 1.6;
|
|
margin-bottom: 1rem;
|
|
color: #ccc;
|
|
}
|
|
|
|
.privacy-section ul {
|
|
margin-left: 1.5rem;
|
|
margin-bottom: 1rem;
|
|
color: #ccc;
|
|
}
|
|
|
|
.privacy-section li {
|
|
margin-bottom: 0.5rem;
|
|
line-height: 1.5;
|
|
}
|
|
|
|
.privacy-section code {
|
|
background: #111;
|
|
padding: 0.2rem 0.4rem;
|
|
border: 1px solid #333;
|
|
color: #00ff00;
|
|
font-size: 0.9em;
|
|
}
|
|
|
|
.privacy-section a {
|
|
color: #00ff00;
|
|
text-decoration: underline;
|
|
}
|
|
|
|
.privacy-section a:hover {
|
|
text-decoration: none;
|
|
}
|
|
|
|
.back-link {
|
|
display: inline-block;
|
|
margin-top: 2rem;
|
|
padding: 0.5rem 1rem;
|
|
border: 1px solid #00ff00;
|
|
color: #00ff00;
|
|
text-decoration: none;
|
|
transition: all 0.2s ease;
|
|
}
|
|
|
|
.back-link:hover {
|
|
background: #00ff00;
|
|
color: #000;
|
|
}
|
|
|
|
.highlight {
|
|
color: #00ff00;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.warning {
|
|
color: #ffaa00;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="privacy-container">
|
|
<div class="privacy-header">
|
|
<h1>Privacy & Open Source FAQ</h1>
|
|
<p>Valley of the Commons - Transparency & Open Commons Best Practices</p>
|
|
</div>
|
|
|
|
<div class="privacy-section">
|
|
<h2>Model Choice & AI Infrastructure</h2>
|
|
|
|
<h3>Current Model: Mistral Devstral-2</h3>
|
|
<p>
|
|
We use <span class="highlight">Mistral Devstral-2</span> via
|
|
<a href="https://vercel.com/docs/ai/ai-gateway" target="_blank" rel="noopener">Vercel AI Gateway</a>.
|
|
This is a cost-effective model suitable for MVP testing.
|
|
</p>
|
|
|
|
<h3>Why This Model?</h3>
|
|
<ul>
|
|
<li><strong>Free tier:</strong> Available on Vercel AI Gateway free tier</li>
|
|
<li><strong>Fast response times:</strong> Optimized for real-time dialogue</li>
|
|
<li><strong>Open-source roadmap:</strong> We're committed to migrating to open-weights or self-hosted models</li>
|
|
</ul>
|
|
|
|
<h3>Long-term Vision</h3>
|
|
<p>
|
|
<span class="warning">Note:</span> Some models used in MVP are proprietary APIs.
|
|
Our long-term roadmap includes migration to <strong>open-weights or self-hosted models</strong>
|
|
to align with open commons principles.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="privacy-section">
|
|
<h2>Data Tracking & Privacy</h2>
|
|
|
|
<h3>What We Track</h3>
|
|
<ul>
|
|
<li><strong>Server logs:</strong> Basic request metadata (method, timestamp, message count) for debugging and monitoring</li>
|
|
<li><strong>Shared ideas:</strong> If you choose to share an idea or conversation to GitHub, it becomes part of the public repository</li>
|
|
</ul>
|
|
|
|
<h3>What We Do NOT Save</h3>
|
|
<ul>
|
|
<li><strong>We do NOT save conversations:</strong> Your dialogue with the game master is processed temporarily to generate responses, but we do not store conversations in any database or persistent storage</li>
|
|
<li><strong>We do NOT track conversations:</strong> Conversations exist only in your browser session and are not saved by us</li>
|
|
</ul>
|
|
|
|
<h3>AI Provider Tracking</h3>
|
|
<p>
|
|
<span class="warning">Important:</span> While <strong>we do not save your conversations</strong>, the AI provider
|
|
(Mistral via Vercel AI Gateway) may track conversations according to their own privacy policy.
|
|
We have no control over their data collection practices. For details, see
|
|
<a href="https://mistral.ai/legal/privacy-policy/" target="_blank" rel="noopener">Mistral's Privacy Policy</a>
|
|
and <a href="https://vercel.com/legal/privacy-policy" target="_blank" rel="noopener">Vercel's Privacy Policy</a>.
|
|
</p>
|
|
|
|
<h3>What We Do NOT Track</h3>
|
|
<ul>
|
|
<li><strong>No user accounts:</strong> No registration, no login, no personal profiles</li>
|
|
<li><strong>No cookies:</strong> No tracking cookies, no analytics cookies, no advertising trackers</li>
|
|
<li><strong>No IP logging:</strong> IP addresses are not stored or logged</li>
|
|
<li><strong>No third-party analytics:</strong> No Google Analytics, no Facebook Pixel, no tracking scripts</li>
|
|
<li><strong>No email collection:</strong> The game interface does not collect email addresses</li>
|
|
</ul>
|
|
|
|
<h3>Conversation Handling</h3>
|
|
<p>
|
|
<strong>We do not save conversations.</strong> Conversations exist only in your browser session.
|
|
Messages are sent to the server for AI processing but are <strong>not stored persistently by us</strong>.
|
|
Each conversation is ephemeral and exists only during your active session. When you close your browser,
|
|
the conversation is gone from our systems.
|
|
</p>
|
|
|
|
<h3>When Conversations Are Saved</h3>
|
|
<p>
|
|
Conversations are <strong>only saved</strong> when you explicitly choose to share them to GitHub using
|
|
the "Share to GitHub" feature. This is an opt-in action that you control. Once shared, the conversation
|
|
becomes part of the public repository at <code>build_game/conversations/</code>.
|
|
</p>
|
|
|
|
<h3>Server-Side Processing</h3>
|
|
<p>
|
|
Messages are processed through Vercel serverless functions. Our server logs may contain:
|
|
</p>
|
|
<ul>
|
|
<li>Request metadata (timestamp, method)</li>
|
|
<li>Message count and length (for debugging)</li>
|
|
<li>First/last message previews (first 100 characters, for debugging only)</li>
|
|
</ul>
|
|
<p>
|
|
These logs are <strong>not publicly accessible</strong> and are used only for system monitoring and debugging.
|
|
They do not contain full conversation content and are automatically rotated by Vercel.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="privacy-section">
|
|
<h2>What Is Verifiable on GitHub</h2>
|
|
|
|
<h3>Open Source Repository</h3>
|
|
<p>
|
|
Our entire codebase is open source and available at
|
|
<a href="https://github.com/understories/votc" target="_blank" rel="noopener">github.com/understories/votc</a>.
|
|
</p>
|
|
|
|
<h3>You Can Verify:</h3>
|
|
<ul>
|
|
<li><strong>All client-side code:</strong> HTML, CSS, JavaScript - everything runs in your browser</li>
|
|
<li><strong>Serverless function code:</strong> All API endpoints are open source and auditable</li>
|
|
<li><strong>No hidden tracking:</strong> Review the code yourself - no analytics, no trackers, no data collection</li>
|
|
<li><strong>Data handling logic:</strong> See exactly how messages are processed, sanitized, and sent to AI</li>
|
|
<li><strong>Security measures:</strong> Input sanitization, role whitelisting, turn limits - all visible in code</li>
|
|
<li><strong>Shared ideas:</strong> Ideas shared to GitHub are publicly visible in <code>build_game/ideas/</code></li>
|
|
</ul>
|
|
|
|
<h3>What's Not in the Repository</h3>
|
|
<ul>
|
|
<li><strong>API keys:</strong> Stored securely in Vercel environment variables (never in code)</li>
|
|
<li><strong>Internal thoughts:</strong> Game design notes are in the repo but don't contain user data</li>
|
|
<li><strong>Server logs:</strong> Not committed to the repository</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="privacy-section">
|
|
<h2>Open Source & Open Commons Best Practices</h2>
|
|
|
|
<h3>Our Commitment</h3>
|
|
<p>
|
|
Valley of the Commons follows <strong>open commons</strong> principles:
|
|
</p>
|
|
<ul>
|
|
<li><strong>Transparency:</strong> All code is open source and auditable</li>
|
|
<li><strong>No vendor lock-in:</strong> Using open standards and protocols</li>
|
|
<li><strong>Community ownership:</strong> Ideas shared become part of the public commons</li>
|
|
<li><strong>Minimal data collection:</strong> Only what's necessary for functionality</li>
|
|
<li><strong>User control:</strong> You choose what to share, when to share it</li>
|
|
</ul>
|
|
|
|
<h3>Open Source License</h3>
|
|
<p>
|
|
The codebase is open source. Check the repository for the specific license terms.
|
|
</p>
|
|
|
|
<h3>Contributing</h3>
|
|
<p>
|
|
Contributions, improvements, and audits are welcome. The repository is public and open for
|
|
community participation.
|
|
</p>
|
|
|
|
<h3>Future Improvements</h3>
|
|
<ul>
|
|
<li>Migration to self-hosted or open-weights models</li>
|
|
<li>Enhanced privacy controls</li>
|
|
<li>Optional conversation export (user-controlled)</li>
|
|
<li>Local-first architecture where possible</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="privacy-section">
|
|
<h2>Security Measures</h2>
|
|
|
|
<h3>Input Sanitization</h3>
|
|
<ul>
|
|
<li>Message content is limited to 500 characters per message</li>
|
|
<li>Only 'user' and 'assistant' roles are allowed (prevents system prompt injection)</li>
|
|
<li>Empty messages are filtered out</li>
|
|
</ul>
|
|
|
|
<h3>Rate Limiting</h3>
|
|
<ul>
|
|
<li>Maximum 12 user turns per conversation</li>
|
|
<li>Server-side turn counting (prevents client-side manipulation)</li>
|
|
</ul>
|
|
|
|
<h3>API Security</h3>
|
|
<ul>
|
|
<li>API keys stored in environment variables (never exposed to client)</li>
|
|
<li>Serverless functions handle all sensitive operations</li>
|
|
<li>No CORS for game chat (same-origin only)</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="privacy-section">
|
|
<h2>Your Rights & Control</h2>
|
|
|
|
<h3>You Control:</h3>
|
|
<ul>
|
|
<li><strong>What you share:</strong> Only share ideas you want to make public</li>
|
|
<li><strong>When you share:</strong> Sharing is opt-in, not automatic</li>
|
|
<li><strong>Your conversation:</strong> Conversations are ephemeral - close the browser to end the session</li>
|
|
</ul>
|
|
|
|
<h3>No Account Required</h3>
|
|
<p>
|
|
You can use the game interface without creating an account, providing an email, or any personal information.
|
|
</p>
|
|
|
|
<h3>Questions or Concerns?</h3>
|
|
<p>
|
|
If you have questions about privacy, data handling, or want to report a concern,
|
|
please open an issue on <a href="https://github.com/understories/votc" target="_blank" rel="noopener">GitHub</a>
|
|
or contact the project maintainers.
|
|
</p>
|
|
</div>
|
|
|
|
<a href="game.html" class="back-link">← Back to Game</a>
|
|
</div>
|
|
</body>
|
|
</html>
|
|
|