ItsGoin v0.3.2 — Decentralized social media network
No central server, user-owned data, reverse-chronological feed. Rust core + Tauri desktop + Android app + plain HTML/CSS/JS frontend. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
commit
800388cda4
146 changed files with 53227 additions and 0 deletions
183
download-page.html
Normal file
183
download-page.html
Normal file
|
|
@ -0,0 +1,183 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>DistSoc — Download</title>
|
||||
<style>
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body { font-family: 'Segoe UI', system-ui, sans-serif; background: #f9fafb; color: #1f2937; line-height: 1.6; padding: 2rem 1.5rem; }
|
||||
.container { max-width: 600px; margin: 0 auto; }
|
||||
h1 { font-size: 1.6rem; font-weight: 700; margin-bottom: 0.25rem; }
|
||||
.subtitle { color: #6b7280; font-size: 0.9rem; margin-bottom: 0.5rem; }
|
||||
.updated { color: #9ca3af; font-size: 0.8rem; margin-bottom: 2rem; }
|
||||
.downloads { display: flex; gap: 1rem; flex-wrap: wrap; margin-bottom: 2rem; }
|
||||
.download-btn {
|
||||
display: inline-block;
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
padding: 0.85rem 2rem;
|
||||
border-radius: 10px;
|
||||
font-size: 1.1rem;
|
||||
font-weight: 600;
|
||||
transition: filter 0.2s;
|
||||
}
|
||||
.download-btn:hover { filter: brightness(0.9); }
|
||||
.download-btn span { font-size: 0.85rem; font-weight: 400; opacity: 0.8; display: block; margin-top: 0.15rem; }
|
||||
.btn-android { background: #2563eb; }
|
||||
.btn-linux { background: #16a34a; }
|
||||
h2 { font-size: 1.15rem; margin: 1.5rem 0 0.75rem; color: #111827; }
|
||||
.platform { background: white; border: 1px solid #e5e7eb; border-radius: 10px; padding: 1.25rem 1.5rem; margin-bottom: 1.25rem; }
|
||||
.platform-label { font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.08em; font-weight: 700; margin-bottom: 0.75rem; }
|
||||
.label-android { color: #2563eb; }
|
||||
.label-linux { color: #16a34a; }
|
||||
.steps { list-style: none; padding: 0; counter-reset: step; }
|
||||
.steps li {
|
||||
counter-increment: step;
|
||||
padding: 0.65rem 0 0.65rem 2.5rem;
|
||||
position: relative;
|
||||
border-bottom: 1px solid #f3f4f6;
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
.steps li:last-child { border-bottom: none; }
|
||||
.steps li::before {
|
||||
content: counter(step);
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0.65rem;
|
||||
width: 26px;
|
||||
height: 26px;
|
||||
border-radius: 50%;
|
||||
color: white;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 0.8rem;
|
||||
font-weight: 700;
|
||||
}
|
||||
.platform-android .steps li::before { background: #2563eb; }
|
||||
.platform-linux .steps li::before { background: #16a34a; }
|
||||
.steps li strong { color: #111827; }
|
||||
code { background: #f3f4f6; padding: 0.15rem 0.4rem; border-radius: 4px; font-size: 0.88rem; }
|
||||
.note {
|
||||
background: #fef3c7;
|
||||
border: 1px solid #fde68a;
|
||||
border-radius: 8px;
|
||||
padding: 0.75rem 1rem;
|
||||
font-size: 0.88rem;
|
||||
color: #92400e;
|
||||
margin-top: 0.75rem;
|
||||
}
|
||||
.changelog {
|
||||
background: white;
|
||||
border: 1px solid #e5e7eb;
|
||||
border-radius: 10px;
|
||||
padding: 1.25rem 1.5rem;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
.changelog h2 { margin-top: 0; }
|
||||
.changelog ul { padding-left: 1.25rem; margin-top: 0.5rem; }
|
||||
.changelog li { margin-bottom: 0.4rem; font-size: 0.93rem; }
|
||||
.changelog .date { font-size: 0.82rem; color: #6b7280; margin-bottom: 0.5rem; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h1>DistSoc</h1>
|
||||
<p class="subtitle">Available for Android and Linux</p>
|
||||
<p class="updated">Last updated: March 10, 2026</p>
|
||||
|
||||
<div class="downloads">
|
||||
<a href="distsoc.apk" class="download-btn btn-android">
|
||||
Android APK
|
||||
<span>distsoc.apk — 140 MB</span>
|
||||
</a>
|
||||
<a href="distsoc_0.1.0_amd64.AppImage" class="download-btn btn-linux">
|
||||
Linux AppImage
|
||||
<span>distsoc_0.1.0_amd64.AppImage — 85 MB</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="platform platform-android">
|
||||
<div class="platform-label label-android">Android</div>
|
||||
<ol class="steps">
|
||||
<li><strong>Download the APK</strong> — Tap the button above. Your browser may warn that this type of file can be harmful — tap <strong>Download anyway</strong>.</li>
|
||||
<li><strong>Open the file</strong> — When the download finishes, tap the notification or find <code>distsoc.apk</code> in your Downloads folder and tap it.</li>
|
||||
<li><strong>Allow installation</strong> — Android will ask you to allow installs from this source. Tap <strong>Settings</strong>, toggle <strong>"Allow from this source"</strong>, then go back and tap <strong>Install</strong>.</li>
|
||||
<li><strong>Launch the app</strong> — Once installed, tap <strong>Open</strong> or find DistSoc in your app drawer.</li>
|
||||
</ol>
|
||||
<div class="note">
|
||||
<strong>Note:</strong> If you don't see the "Allow from this source" prompt, go to <strong>Settings → Apps → Special access → Install unknown apps</strong> and enable it for your browser.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="platform platform-linux">
|
||||
<div class="platform-label label-linux">Linux (AppImage)</div>
|
||||
<ol class="steps">
|
||||
<li><strong>Download the AppImage</strong> — Click the button above to download.</li>
|
||||
<li><strong>Make it executable</strong> — Open a terminal and run:<br><code>chmod +x distsoc_0.1.0_amd64.AppImage</code></li>
|
||||
<li><strong>Run it</strong> — Double-click the file, or from the terminal:<br><code>./distsoc_0.1.0_amd64.AppImage</code></li>
|
||||
</ol>
|
||||
<div class="note">
|
||||
<strong>Note:</strong> If it doesn't launch, you may need to install FUSE:<br><code>sudo apt install libfuse2</code> (Debian/Ubuntu) or <code>sudo dnf install fuse</code> (Fedora).
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="changelog">
|
||||
<h2>Changelog</h2>
|
||||
<div class="date">March 10, 2026 (v2)</div>
|
||||
<ul>
|
||||
<li><strong>Anchor advertised address</strong> — Anchors now advertise their stable bind address in the initial exchange, so peers always store the correct reconnection address instead of stale iroh-discovered IPs.</li>
|
||||
<li><strong>Observed address notification</strong> — Every peer tells its new mesh partner "I see you at <ip:port>" during initial exchange — a lightweight STUN-like "who am I" on every connection.</li>
|
||||
</ul>
|
||||
<div class="date">March 10, 2026</div>
|
||||
<ul>
|
||||
<li><strong>UPnP port mapping</strong> — Devices behind NAT routers automatically request a port forward via UPnP, becoming directly reachable without manual configuration.</li>
|
||||
<li><strong>Auto-anchor promotion</strong> — Devices with a successful UPnP mapping self-declare as anchors, improving bootstrap diversity for all peers.</li>
|
||||
<li><strong>Hole punch fix</strong> — Target-side hole punch connections were silently discarded; now properly registered as sessions so both sides of a NAT punch succeed.</li>
|
||||
</ul>
|
||||
<div class="date">February 24, 2026 (v2)</div>
|
||||
<ul>
|
||||
<li><strong>Request Referrals button</strong> — On-demand anchor referral requesting in Network Diagnostics. Helps cycle out stale peers and discover current ones without waiting for the 10-minute automatic cycle.</li>
|
||||
<li><strong>Docker bridge IP filtering</strong> — Relay introductions no longer leak Docker bridge IPs (172.17.x.x, 172.18.x.x), fixing connection failures through anchors running in Docker.</li>
|
||||
<li><strong>Keepalive fix</strong> — Sender-side last_activity update prevents false zombie detection on connections where we send keepalives but the remote stops responding.</li>
|
||||
<li><strong>Message threads</strong> — DM conversations grouped by partner with expandable thread view.</li>
|
||||
<li><strong>Mesh/reach diagnostics</strong> — Peer cards show reach level badges (Mesh/N1/N2/N3) in diagnostics.</li>
|
||||
</ul>
|
||||
<div class="date">February 24, 2026</div>
|
||||
<ul>
|
||||
<li><strong>Audience request button</strong> — "Ask to join audience" button on followed peers in the People tab. Shows status badges (requested/approved) for existing requests.</li>
|
||||
<li><strong>DMs filtered from feed</strong> — Direct messages no longer appear in the Feed tab; they show only in the Messages tab.</li>
|
||||
<li><strong>Peer bios displayed</strong> — Bio text now shown below peer names in People tab (peers list and follows list).</li>
|
||||
<li><strong>People tab auto-refresh</strong> — Follows, peers, and audience now refresh every 10 seconds, so display names update automatically after profile sync.</li>
|
||||
<li><strong>Button feedback</strong> — Diagnostics Refresh button now shows loading state and toast confirmation on completion.</li>
|
||||
</ul>
|
||||
<div class="date">February 23, 2026</div>
|
||||
<ul>
|
||||
<li><strong>Fix connection lock contention</strong> — QUIC connect attempts no longer block all other tasks (diff cycle, accept loop, keepalive, rebalance). Previously one unreachable peer could freeze the entire node for 60+ seconds.</li>
|
||||
<li><strong>Image attachments display</strong> — Fixed Content Security Policy blocking blob: URLs, so image attachments now render in post previews and feeds.</li>
|
||||
<li><strong>Non-blocking startup</strong> — Referral peer connections now run in the background instead of blocking node startup.</li>
|
||||
<li><strong>Connect timeout</strong> — 15-second cap on connection attempts during rebalance prevents prolonged lock holding.</li>
|
||||
<li><strong>Android foreground service</strong> — Mesh connections stay alive when the app is in the background.</li>
|
||||
</ul>
|
||||
<div class="date">February 20, 2026</div>
|
||||
<ul>
|
||||
<li><strong>IPv4-mapped address fix</strong> — Anchor's dual-stack socket reported peer addresses as IPv4-mapped IPv6 (e.g. [::ffff:1.2.3.4]) which IPv4-only clients couldn't reach. Now normalized to plain IPv4, fixing hole punching through NAT.</li>
|
||||
<li><strong>Mesh keepalive</strong> — 30-second lightweight pings on mesh connections prevent zombie detection from killing idle connections and keep NAT UDP mappings alive. Zombie timeout raised from 2 to 10 minutes.</li>
|
||||
<li><strong>Audience management</strong> — People tab now shows pending and approved audience members with Approve/Deny/Remove actions.</li>
|
||||
<li><strong>Network diagnostics overhaul</strong> — Summary grid showing connection breakdown (Preferred/Local/Wide) and N2/N3 reach counts. Mesh connections list with slot badges. Peer cards replace flat list. 10-second auto-refresh while open.</li>
|
||||
<li><strong>Manual rebalance</strong> — Trigger immediate mesh rebalancing from Settings for debugging.</li>
|
||||
<li><strong>Reset all data</strong> — Danger Zone in Settings to clear all local data (posts, peers, blobs) while preserving identity key. Takes effect on restart.</li>
|
||||
</ul>
|
||||
<div class="date">February 19, 2026</div>
|
||||
<ul>
|
||||
<li><strong>Reactive mesh growth loop</strong> — New peers connect within seconds instead of waiting up to 10 minutes. After each new connection, the node immediately seeks the most diverse next peer using N2 candidate scoring.</li>
|
||||
<li><strong>Anchor matchmaking only</strong> — Anchors now exclusively matchmake (introduce peers) and never proxy bytes. Clearer separation of relay vs. introduction roles.</li>
|
||||
<li><strong>Parallel hole punching</strong> — NAT traversal now tries all known addresses simultaneously, retrying every 2 seconds for a 30-second window. Both sides begin attempting to reach each other from the moment of introduction.</li>
|
||||
<li><strong>Relay-observed address injection</strong> — Anchor now injects each peer's real public address (as seen from the QUIC connection) into introductions. Fixes NAT-to-NAT hole punching where peers only knew each other's private LAN addresses.</li>
|
||||
<li><strong>Growth loop introduction fallback</strong> — When the growth loop's direct connect to an N2 peer fails (NAT), it now requests an introduction through the reporting peer for bilateral hole punching.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Add table
Add a link
Reference in a new issue