itsgoin/website/contribute.html
Scott Reimers a41b11c0b8 v0.3.5: Private blob encryption, blob prefetch, intent-based filtering, crypto refactoring
Private blob encryption:
- Encrypted posts (Friends/Circle/Direct) now encrypt attachment blobs with same CEK
- Public blobs unchanged, CID computed on ciphertext for private
- decrypt_blob_for_post/get_blob_for_post for transparent decryption on retrieval

Blob prefetch:
- Pull cycle and sync_with eagerly fetch missing blobs after post sync
- prefetch_blobs_from_peer scans for missing attachments, fetches via fallback chain
- Runs outside conn_mgr lock at Node level

Crypto refactoring:
- Extracted: encrypt/decrypt_bytes_with_cek, wrap/unwrap_cek_for_recipients
- unwrap_cek_for_recipient, unwrap_group_cek, random_cek
- encrypt_post_with_cek, encrypt_post_for_group_with_cek variants
- All existing functions refactored to delegate, 19 crypto tests pass

Intent-based filtering:
- intent_kind field on PostDto ("public"/"friends"/"circle"/"direct"/"unknown")
- Feed/MyPosts filter on intentKind !== 'direct' instead of visibility
- Messages filter with backward-compatible fallback for pre-intent posts
- get_post_intent storage method

IPC updates:
- resolve_blob_data helper using get_blob_for_post with network fallback
- sanitize_download_filename prevents path traversal
- get_blob_path accepts optional post_id_hex

Website:
- Mobile hamburger nav on all pages
- Mesh/Non-mesh N1 labels in network diagnostics

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 12:44:07 -04:00

113 lines
6.2 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Contribute — ItsGoin</title>
<meta name="description" content="Help build ItsGoin. Open source decentralized social media that needs developers, testers, and ideas.">
<link rel="stylesheet" href="style.css">
</head>
<body>
<nav>
<a href="index.html" class="logo">ItsGoin</a>
<button class="menu-toggle" onclick="this.parentElement.querySelector('.links').classList.toggle('open')" aria-label="Menu">&#9776;</button>
<div class="links">
<a href="index.html">About</a>
<a href="tech.html">How It Works</a>
<a href="design.html">Design</a>
<a href="download.html">Download</a>
<a href="contribute.html" class="active">Contribute</a>
<a href="https://discord.gg/pCjMbY9PmN">Discord</a>
</div>
</nav>
<div class="container">
<section>
<h1 style="font-size: 2rem; font-weight: 800; letter-spacing: -0.03em; margin-bottom: 0.25rem;">Help build ItsGoin</h1>
<p>ItsGoin is an open source project that welcomes contributors of all kinds.</p>
</section>
<section>
<h2>The honest story</h2>
<p>ItsGoin was built by a network/tech web dev and junior programmer who's been vibe-coding well beyond his skill level with the help of AI. The architecture is ambitious &mdash; a fully decentralized social network with mesh routing, NAT traversal, envelope encryption, and a CDN tree &mdash; and it actually works.</p>
<p>But "works" and "works well" are different things. The codebase needs experienced eyes. There are rough edges, performance opportunities, and entire planned features that need real expertise to do right.</p>
<p>If you find that interesting rather than terrifying, you're exactly who we need.</p>
</section>
<section>
<h2>Where to start</h2>
<div class="card">
<h3 style="color: var(--accent);">Read the design</h3>
<p>The <a href="design.html">design document</a> is comprehensive &mdash; it covers every protocol message, every architectural decision, and what's planned next. Start here to understand what you're looking at.</p>
</div>
<div class="card">
<h3 style="color: var(--green);">Browse the code</h3>
<p>The full source is on our self-hosted Forgejo instance. Fork it, poke around, open issues, submit pull requests.</p>
<p style="margin-top: 0.5rem;"><a href="https://git.itsgoin.net/Sologretto/itsgoin" class="btn btn-primary">git.itsgoin.net</a></p>
</div>
<div class="card">
<h3 style="color: var(--amber);">Join the conversation</h3>
<p>The Discord is where we discuss design decisions, report bugs, coordinate work, and generally hang out. It's small right now &mdash; that means your voice matters more.</p>
<p style="margin-top: 0.5rem;"><a href="https://discord.gg/pCjMbY9PmN" class="btn btn-secondary">Join Discord</a></p>
</div>
</section>
<section>
<h2>What we need help with</h2>
<div class="card">
<h3>Rust developers</h3>
<p>The core library (<code>crates/core</code>) is ~15K lines of Rust handling networking, sync, encryption, and storage. If you know Rust and are interested in P2P systems, there's plenty to dig into &mdash; performance tuning, error handling, protocol edge cases.</p>
</div>
<div class="card">
<h3>Frontend developers</h3>
<p>The UI is plain HTML/CSS/JS with no build step &mdash; intentionally simple. But simple doesn't mean it can't be better. The frontend talks to the Rust backend through Tauri IPC commands.</p>
</div>
<div class="card">
<h3>Testers</h3>
<p>Download the app, use it with friends, and tell us what breaks. Real-world testing across different networks, NAT types, and devices is invaluable. Bug reports on the Forgejo issue tracker or Discord are hugely helpful.</p>
</div>
<div class="card">
<h3>Security reviewers</h3>
<p>We're doing envelope encryption, group keys, ed25519 signatures, X25519 DH key exchange. If you have cryptography experience, we'd love a review of the implementation.</p>
</div>
<div class="card">
<h3>Documentation &amp; ideas</h3>
<p>Not a coder? That's fine. Help improve docs, suggest features, find UX problems, write tutorials. Every perspective helps.</p>
</div>
</section>
<section>
<h2>Tech stack</h2>
<div class="card">
<table>
<tr><th>Component</th><th>Technology</th></tr>
<tr><td>Core library</td><td>Rust (~15K lines)</td></tr>
<tr><td>P2P networking</td><td>iroh 0.96 (QUIC + mDNS)</td></tr>
<tr><td>Storage</td><td>SQLite</td></tr>
<tr><td>Encryption</td><td>ChaCha20-Poly1305 + X25519</td></tr>
<tr><td>Desktop/mobile</td><td>Tauri v2</td></tr>
<tr><td>Frontend</td><td>Plain HTML/CSS/JS (no framework, no build step)</td></tr>
<tr><td>Platforms</td><td>Android, Linux (AppImage)</td></tr>
<tr><td>Code hosting</td><td><a href="https://git.itsgoin.net/Sologretto/itsgoin">Forgejo (self-hosted)</a></td></tr>
</table>
</div>
</section>
<section>
<h2>License</h2>
<p>ItsGoin is licensed under <strong>Apache 2.0</strong>. Use it, fork it, build on it. The only requirement is that you keep the license notice.</p>
</section>
</div>
<footer>
<p>ItsGoin &mdash; Apache 2.0 License &mdash; <a href="https://itsgoin.com">itsgoin.com</a> &middot; <a href="https://discord.gg/pCjMbY9PmN">Discord</a> &middot; <a href="https://git.itsgoin.net/Sologretto/itsgoin">Source Code</a></p>
</footer>
</body>
</html>