From c8f2de4025ea67b579e66cf608f08a8d35ee4a3c Mon Sep 17 00:00:00 2001 From: Christophe Besson Date: Tue, 11 Aug 2026 11:50:08 +0200 Subject: feat(hub): Phase 10.1–10.4 — Site overlay + admin/moderation UI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Site overlay: landing page, /about, /downloads (dark/light, responsive) - User role column (user/moderator/admin) with config-based admin sync - require_moderator dependency + admin API (8 endpoints: stats, users, groups, audit logs) - Admin SPA panel at #/admin with 5 tabs (stats, users, groups, logs, blocklist) — visible only to moderators/admins - SPA also served at /app/ for Caddy site overlay integration - GET /v1/users/me returns current user role - 15 new tests, 147 total passing Co-Authored-By: Claude Opus 4.6 --- site/about.html | 59 ++++++++++++++++ site/assets/site.css | 192 +++++++++++++++++++++++++++++++++++++++++++++++++++ site/downloads.html | 60 ++++++++++++++++ site/index.html | 54 +++++++++++++++ 4 files changed, 365 insertions(+) create mode 100644 site/about.html create mode 100644 site/assets/site.css create mode 100644 site/downloads.html create mode 100644 site/index.html (limited to 'site') diff --git a/site/about.html b/site/about.html new file mode 100644 index 0000000..512047d --- /dev/null +++ b/site/about.html @@ -0,0 +1,59 @@ + + + + + + About — MeshBay + + + + + + +
+

About MeshBay

+ +

MeshBay is a decentralized, peer-to-peer platform for file sharing, + video streaming, and group messaging. It combines identity federation + (via Mesh Hubs) with truly peer-to-peer data exchange (via Mesh Nodes).

+ +

Architecture

+

The system has three components:

+
    +
  • Mesh Hub — a lightweight identity authority and group registry. + It stores user accounts and group metadata, but never touches content.
  • +
  • Mesh Node — runs on the host user's machine. It stores and serves + all files, streams, and chat messages directly to group members.
  • +
  • Mesh Client — a web browser or Android app. Connects directly to + nodes for all data transfer. The hub is never in the data path.
  • +
+ +

Security

+

Private groups use end-to-end encryption with ChaCha20-Poly1305. + Authentication uses Ed25519 signed JWTs. Key exchange is based on + X25519 ECDH with HKDF. Passwords are hashed with Argon2id (256 MB).

+ +

Open Source

+

MeshBay is open source. The code is available on + GitHub.

+ +

Contact

+

For questions or bug reports, open an issue on the + GitHub issue tracker.

+
+ + + + + diff --git a/site/assets/site.css b/site/assets/site.css new file mode 100644 index 0000000..032450f --- /dev/null +++ b/site/assets/site.css @@ -0,0 +1,192 @@ +/* MeshBay site overlay — landing, about, downloads */ + +:root { + --bg: #f8fafc; + --bg-card: #ffffff; + --text: #0f172a; + --text-secondary: #475569; + --text-dim: #94a3b8; + --border: #e2e8f0; + --accent: #0ea5e9; + --accent-hover: #0284c7; + --accent-text: #ffffff; + --nav-bg: #0f172a; + --nav-text: #e2e8f0; + --nav-brand: #38bdf8; + --shadow: 0 1px 3px rgba(0,0,0,0.08); + --shadow-lg: 0 4px 16px rgba(0,0,0,0.1); +} + +@media (prefers-color-scheme: dark) { + :root { + --bg: #0f172a; + --bg-card: #1e293b; + --text: #f1f5f9; + --text-secondary: #94a3b8; + --text-dim: #64748b; + --border: #334155; + --nav-bg: #020617; + --shadow: 0 1px 3px rgba(0,0,0,0.3); + --shadow-lg: 0 4px 16px rgba(0,0,0,0.3); + } +} + +*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } + +body { + font-family: system-ui, -apple-system, sans-serif; + background: var(--bg); + color: var(--text); + line-height: 1.6; + min-height: 100vh; +} + +a { color: var(--accent); text-decoration: none; } +a:hover { text-decoration: underline; } + +/* ── Nav ─────────────────────────────────────────────────────────────────── */ + +.site-nav { + background: var(--nav-bg); + color: var(--nav-text); + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 24px; + height: 52px; +} + +.site-nav-brand { + font-size: 1.25rem; + font-weight: 700; + color: var(--nav-brand); + text-decoration: none; +} + +.site-nav-links { display: flex; gap: 20px; } + +.site-nav-links a { + color: var(--nav-text); + font-size: 0.9rem; + opacity: 0.85; + transition: opacity 0.15s; +} +.site-nav-links a:hover { opacity: 1; text-decoration: none; } + +/* ── Hero ────────────────────────────────────────────────────────────────── */ + +.hero { + text-align: center; + padding: 80px 24px 60px; + max-width: 720px; + margin: 0 auto; +} + +.hero h1 { + font-size: 2.5rem; + font-weight: 800; + margin-bottom: 12px; + letter-spacing: -0.02em; +} + +.hero .tagline { + font-size: 1.15rem; + color: var(--text-secondary); + margin-bottom: 32px; +} + +.hero .cta { + display: inline-block; + background: var(--accent); + color: var(--accent-text); + padding: 12px 32px; + border-radius: 8px; + font-size: 1rem; + font-weight: 600; + transition: background 0.15s; +} +.hero .cta:hover { background: var(--accent-hover); text-decoration: none; } + +/* ── Feature cards ───────────────────────────────────────────────────────── */ + +.features { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); + gap: 24px; + max-width: 840px; + margin: 0 auto; + padding: 0 24px 60px; +} + +.feature-card { + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: 12px; + padding: 28px 24px; + box-shadow: var(--shadow); +} + +.feature-card .icon { + font-size: 2rem; + margin-bottom: 12px; +} + +.feature-card h3 { + font-size: 1.1rem; + margin-bottom: 8px; +} + +.feature-card p { + color: var(--text-secondary); + font-size: 0.92rem; +} + +/* ── Content page ────────────────────────────────────────────────────────── */ + +.page { + max-width: 680px; + margin: 0 auto; + padding: 48px 24px; +} + +.page h1 { font-size: 2rem; margin-bottom: 16px; } +.page h2 { font-size: 1.3rem; margin: 32px 0 12px; } +.page p { margin-bottom: 16px; color: var(--text-secondary); } +.page ul { margin: 0 0 16px 24px; color: var(--text-secondary); } +.page li { margin-bottom: 8px; } + +.page .pkg-table { + width: 100%; + border-collapse: collapse; + margin-bottom: 24px; +} +.page .pkg-table th, +.page .pkg-table td { + text-align: left; + padding: 10px 14px; + border-bottom: 1px solid var(--border); +} +.page .pkg-table th { font-weight: 600; } + +/* ── Footer ──────────────────────────────────────────────────────────────── */ + +.site-footer { + text-align: center; + padding: 32px 24px; + border-top: 1px solid var(--border); + color: var(--text-dim); + font-size: 0.85rem; +} + +.site-footer a { color: var(--text-secondary); } + +/* ── Responsive ──────────────────────────────────────────────────────────── */ + +@media (max-width: 600px) { + .hero h1 { font-size: 1.8rem; } + .hero { padding: 48px 16px 40px; } + .features { padding: 0 16px 40px; } + .site-nav { padding: 0 16px; } + .site-nav-links { gap: 12px; } + .site-nav-links a { font-size: 0.82rem; } +} diff --git a/site/downloads.html b/site/downloads.html new file mode 100644 index 0000000..7602fdb --- /dev/null +++ b/site/downloads.html @@ -0,0 +1,60 @@ + + + + + + Downloads — MeshBay + + + + + + +
+

Downloads

+ +

MeshBay packages will be available through standard package managers. + Package repositories are being set up.

+ +

Web Client

+

No installation needed. Open the + web app in any modern browser (Chrome, Firefox, Edge, Safari).

+ +

Server Packages

+ + + + + + + + + + +
PackagePlatformStatus
meshbay-hubFedora / RHEL (RPM)Coming soon
meshbay-hubUbuntu / Debian (DEB)Coming soon
meshbay-nodeFedora / RHEL (RPM)Coming soon
meshbay-nodeUbuntu / Debian (DEB)Coming soon
+ +

Android

+

An Android client is planned. It will be available as an APK download + and eventually on F-Droid.

+ +

Source Code

+

Clone the repository from + GitHub + and follow the instructions in the README.

+
+ + + + + diff --git a/site/index.html b/site/index.html new file mode 100644 index 0000000..39339e0 --- /dev/null +++ b/site/index.html @@ -0,0 +1,54 @@ + + + + + + MeshBay — Decentralized P2P Platform + + + + + + +
+

MeshBay

+

Decentralized peer-to-peer file sharing, video streaming, and group messaging.

+ Open App +
+ +
+
+
🌐
+

Peer-to-Peer

+

Files and messages transfer directly between users. + No central server stores or relays your data.

+
+
+
🔒
+

End-to-End Encrypted

+

Private groups use strong encryption (ChaCha20-Poly1305, Ed25519). + Only group members can read the content.

+
+
+
🏠
+

Self-Hostable

+

Run your own hub and nodes. The software is open source + and designed for home servers and small communities.

+
+
+ + + + + -- cgit v1.2.3