diff --git a/src/css/custom.css b/src/css/custom.css index 6f001ef..fe24816 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -1,358 +1,305 @@ -/* ── Rug Munch Media — Dark Theme ─────────────────────────────── */ -/* Colors: bg=#0A0A0F, card=#111118, text=#E8E8ED, green=#00FF88, alt=#00FF88, red=#FF3355 */ +/* ── Rug Munch Media — Dark Professional Theme ───────────────── */ +/* Colors: bg=#0A0A0F, card=#111118, text=#E8E8ED, green=#00FF88, red=#FF3355 */ -@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;700&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500;700&display=swap'); +/* ── Root Variables ─────────────────────────────────────────── */ :root { --rmi-bg-primary: #0A0A0F; --rmi-bg-secondary: #111118; --rmi-bg-tertiary: #16161F; + --rmi-bg-elevated: #1A1A26; --rmi-border: #222233; + --rmi-border-hover: #00FF88; --rmi-text-primary: #E8E8ED; --rmi-text-secondary: #888899; --rmi-text-muted: #555566; - --rmi-accent-yellow: #00FF88; - --rmi-accent-green: #00FF88; - --rmi-accent-red: #FF3355; - --rmi-accent-blue: #3399FF; + --rmi-accent: #00FF88; + --rmi-accent-glow: rgba(0,255,136,0.15); + --rmi-accent-subtle: rgba(0,255,136,0.06); + --rmi-red: #FF3355; --rmi-font-body: 'Inter', system-ui, -apple-system, sans-serif; --rmi-font-mono: 'JetBrains Mono', 'Fira Code', monospace; + --rmi-radius: 10px; + --rmi-radius-sm: 6px; + --rmi-shadow: 0 4px 24px rgba(0,0,0,0.3); + --rmi-shadow-hover: 0 8px 40px rgba(0,0,0,0.5); + --rmi-transition: 0.2s cubic-bezier(0.4, 0, 0.2, 1); } -/* ── Docusaurus overrides ────────────────────────────────────── */ - +/* ── Base ────────────────────────────────────────────────────── */ html { font-family: var(--rmi-font-body); background: var(--rmi-bg-primary); + scroll-behavior: smooth; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } body { background: var(--rmi-bg-primary); color: var(--rmi-text-primary); font-family: var(--rmi-font-body); + font-size: 16px; + line-height: 1.6; } -/* Navbar */ +/* ── Navbar ──────────────────────────────────────────────────── */ .navbar { - background: rgba(10, 10, 15, 0.85); - backdrop-filter: blur(16px); - -webkit-backdrop-filter: blur(16px); - border-bottom: 1px solid var(--rmi-border); - box-shadow: none; + background: rgba(10, 10, 15, 0.88); + backdrop-filter: blur(20px) saturate(180%); + -webkit-backdrop-filter: blur(20px) saturate(180%); + border-bottom: 1px solid rgba(0, 255, 136, 0.08); + box-shadow: 0 1px 0 rgba(0,0,0,0.3); + height: 56px; +} + +.navbar__brand { + font-weight: 700; + letter-spacing: -0.02em; + margin-right: 24px; } .navbar__title { font-weight: 700; letter-spacing: -0.02em; - color: #00FF88 !important; + color: var(--rmi-accent) !important; font-size: 1.05rem; + transition: opacity var(--rmi-transition); } +.navbar__title:hover { opacity: 0.8; } .navbar__link { font-weight: 500; - font-size: 0.9rem; + font-size: 0.88rem; + color: var(--rmi-text-secondary) !important; + transition: color var(--rmi-transition); + padding: 8px 14px; + border-radius: var(--rmi-radius-sm); } - .navbar__link:hover, .navbar__link--active { - color: var(--rmi-accent-yellow) !important; + color: var(--rmi-accent) !important; + background: var(--rmi-accent-subtle); } -/* Main content */ -.main-wrapper { - background: var(--rmi-bg-primary); -} - -/* Links */ -a { - color: var(--rmi-accent-yellow); - transition: color 0.15s ease; -} -a:hover { - color: var(--rmi-accent-yellow); -} - -/* Headings */ +/* ── Typography ──────────────────────────────────────────────── */ h1, h2, h3, h4, h5, h6 { font-family: var(--rmi-font-body); font-weight: 700; letter-spacing: -0.02em; color: var(--rmi-text-primary); + line-height: 1.2; +} +h1 { font-size: 2.6rem; font-weight: 800; letter-spacing: -0.03em; } +h2 { font-size: 1.75rem; font-weight: 700; } +h3 { font-size: 1.25rem; font-weight: 600; } +h4 { font-size: 1.05rem; font-weight: 600; } +p { color: var(--rmi-text-secondary); line-height: 1.7; } + +/* ── Links ───────────────────────────────────────────────────── */ +a { + color: var(--rmi-accent); + text-decoration: none; + transition: all var(--rmi-transition); +} +a:hover { + color: var(--rmi-accent); + text-decoration: underline; + text-underline-offset: 3px; } -h1 { font-size: 3rem; font-weight: 800; } -h2 { font-size: 2rem; } -h3 { font-size: 1.5rem; } - -/* Code */ -code, pre { - font-family: var(--rmi-font-mono) !important; -} - -pre { - background: var(--rmi-bg-tertiary) !important; - border: 1px solid var(--rmi-border); - border-radius: 8px; -} - +/* ── Code ────────────────────────────────────────────────────── */ code { + font-family: var(--rmi-font-mono) !important; background: var(--rmi-bg-tertiary); border: 1px solid var(--rmi-border); border-radius: 4px; - padding: 2px 6px; - color: var(--rmi-accent-yellow); + padding: 2px 7px; + font-size: 0.88em; + color: var(--rmi-accent); +} +pre { + background: var(--rmi-bg-tertiary) !important; + border: 1px solid var(--rmi-border); + border-radius: var(--rmi-radius); + box-shadow: var(--rmi-shadow); +} +pre code { + background: none; + border: none; + padding: 0; + color: var(--rmi-text-primary); } -/* Cards */ -.card, .article-card { +/* ── Cards ──────────────────────────────────────────────────── */ +.card { background: var(--rmi-bg-secondary); border: 1px solid var(--rmi-border); - border-radius: 12px; - padding: 24px; - transition: border-color 0.2s ease, transform 0.2s ease; + border-radius: var(--rmi-radius); + padding: 28px; + box-shadow: var(--rmi-shadow); + transition: all var(--rmi-transition); } -.card:hover, .article-card:hover { - border-color: var(--rmi-accent-yellow); +.card:hover { + border-color: var(--rmi-border-hover); + box-shadow: var(--rmi-shadow-hover), 0 0 0 1px var(--rmi-accent-glow); transform: translateY(-2px); } -/* Footer */ -.footer { - background: var(--rmi-bg-secondary) !important; - border-top: 1px solid var(--rmi-border); -} -.footer__title { - font-weight: 600; - color: var(--rmi-text-primary); -} -.footer__link-item { - color: var(--rmi-text-secondary); - transition: color 0.15s ease; -} -.footer__link-item:hover { - color: var(--rmi-accent-yellow); -} -.footer__copyright { - color: var(--rmi-text-muted); - font-size: 0.8rem; -} - -/* Tables */ +/* ── Tables ──────────────────────────────────────────────────── */ table { border-collapse: separate; border-spacing: 0; width: 100%; border: 1px solid var(--rmi-border); - border-radius: 8px; + border-radius: var(--rmi-radius); overflow: hidden; } thead th { - background: var(--rmi-bg-tertiary); + background: var(--rmi-bg-elevated); color: var(--rmi-text-primary); font-weight: 600; + font-size: 0.85rem; + text-transform: uppercase; + letter-spacing: 0.05em; + padding: 14px 18px; border-bottom: 1px solid var(--rmi-border); } tbody td { background: var(--rmi-bg-secondary); color: var(--rmi-text-secondary); - border-bottom: 1px solid var(--rmi-border); -} -tbody tr:last-child td { - border-bottom: none; + padding: 12px 18px; + border-bottom: 1px solid rgba(34,34,51,0.5); + font-size: 0.9rem; } +tbody tr:last-child td { border-bottom: none; } +tbody tr:hover td { background: var(--rmi-bg-tertiary); } -/* Blog */ -.blog-list-page h2 { - font-size: 1.5rem; +/* ── Footer ──────────────────────────────────────────────────── */ +.footer { + background: var(--rmi-bg-secondary) !important; + border-top: 1px solid rgba(0,255,136,0.06); + padding: 60px 0 40px; } -.blog-post-page h1 { - font-size: 2.5rem; - line-height: 1.2; -} - -/* Pagination */ -.pagination-nav__link { - background: var(--rmi-bg-secondary); - border: 1px solid var(--rmi-border); - border-radius: 8px; -} -.pagination-nav__link:hover { - border-color: var(--rmi-accent-yellow); -} -.pagination-nav__label { - color: var(--rmi-text-primary); -} - -/* Sidebar */ -.menu__link { - color: var(--rmi-text-secondary); -} -.menu__link:hover, -.menu__link--active { - color: var(--rmi-accent-yellow); -} -.theme-doc-sidebar-container { - border-right: 1px solid var(--rmi-border) !important; -} - -/* Scrollbar */ -::-webkit-scrollbar { width: 8px; } -::-webkit-scrollbar-track { background: var(--rmi-bg-primary); } -::-webkit-scrollbar-thumb { background: var(--rmi-border); border-radius: 4px; } -::-webkit-scrollbar-thumb:hover { background: var(--rmi-accent-yellow); } - -/* Selection */ -::selection { - background: var(--rmi-accent-yellow); - color: var(--rmi-bg-primary); -} - -/* ── Custom Components ───────────────────────────────────────── */ - -/* Hero section */ -.rmi-hero { - background: linear-gradient(180deg, var(--rmi-bg-primary) 0%, #0d0d18 50%, var(--rmi-bg-primary) 100%); - padding: 100px 0 80px; - text-align: center; - position: relative; - overflow: hidden; -} - -.rmi-hero::before { - content: ''; - position: absolute; - top: 0; left: 0; right: 0; bottom: 0; - background: - radial-gradient(ellipse at 30% 20%, rgba(0,255,136,0.06) 0%, transparent 50%), - radial-gradient(ellipse at 70% 80%, rgba(0,255,136,0.04) 0%, transparent 50%); - pointer-events: none; -} - -.rmi-hero-title { - font-size: 3.5rem; - font-weight: 800; - letter-spacing: -0.03em; - color: var(--rmi-text-primary); - margin-bottom: 12px; - line-height: 1.1; -} - -.rmi-hero-subtitle { - font-size: 2rem; - font-weight: 700; - color: var(--rmi-accent-yellow); - margin-bottom: 16px; - letter-spacing: -0.02em; -} - -.rmi-hero-tagline { - font-size: 1.1rem; - color: var(--rmi-text-secondary); - max-width: 600px; - margin: 0 auto; - line-height: 1.6; -} - -/* Product cards */ -.rmi-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); - gap: 24px; - margin: 40px 0; -} - -.rmi-product-card { - background: var(--rmi-bg-secondary); - border: 1px solid var(--rmi-border); - border-radius: 12px; - padding: 28px; - transition: all 0.2s ease; - position: relative; -} - -.rmi-product-card:hover { - border-color: var(--rmi-accent-yellow); - transform: translateY(-3px); - box-shadow: 0 8px 32px rgba(0,255,136,0.06); -} - -.rmi-product-card--coming-soon { - border-color: var(--rmi-accent-yellow); -} - -.rmi-product-card h3 { - font-size: 1.25rem; - font-weight: 700; - margin-bottom: 8px; - color: var(--rmi-text-primary); -} - -.rmi-product-card .rmi-badge { - display: inline-block; - font-size: 0.7rem; +.footer__title { font-weight: 700; + font-size: 0.82rem; text-transform: uppercase; letter-spacing: 0.08em; - padding: 4px 10px; - border-radius: 4px; - margin-bottom: 12px; - opacity: 0.9; -} - -.rmi-badge--live { - background: rgba(0,255,136,0.08); - color: var(--rmi-accent-yellow); - border: 1px solid rgba(0,255,136,0.20); -} - -.rmi-badge--coming { - background: rgba(0,255,136,0.08); - color: var(--rmi-accent-yellow); - border: 1px solid rgba(0,255,136,0.20); -} - -.rmi-product-card p { - font-size: 0.9rem; - color: var(--rmi-text-secondary); - line-height: 1.6; + color: var(--rmi-text-primary); margin-bottom: 16px; } +.footer__item { margin-bottom: 8px; } +.footer__link-item { + color: var(--rmi-text-secondary); + font-size: 0.85rem; + transition: color var(--rmi-transition); +} +.footer__link-item:hover { + color: var(--rmi-accent); + text-decoration: none; +} +.footer__copyright { + color: var(--rmi-text-muted); + font-size: 0.78rem; + margin-top: 32px; + padding-top: 24px; + border-top: 1px solid var(--rmi-border); +} -/* Buttons */ +/* ── Scrollbar ───────────────────────────────────────────────── */ +::-webkit-scrollbar { width: 6px; height: 6px; } +::-webkit-scrollbar-track { background: var(--rmi-bg-primary); } +::-webkit-scrollbar-thumb { + background: var(--rmi-border); + border-radius: 3px; +} +::-webkit-scrollbar-thumb:hover { background: var(--rmi-accent); } + +/* ── Selection ───────────────────────────────────────────────── */ +::selection { + background: rgba(0,255,136,0.3); + color: var(--rmi-text-primary); +} + +/* ── Focus ───────────────────────────────────────────────────── */ +:focus-visible { + outline: 2px solid var(--rmi-accent); + outline-offset: 3px; + border-radius: 4px; +} + +/* ── Reduced Motion ──────────────────────────────────────────── */ +@media (prefers-reduced-motion: reduce) { + *, *::before, *::after { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + } +} + +/* ── Sidebar ─────────────────────────────────────────────────── */ +.menu__link { + color: var(--rmi-text-secondary); + font-size: 0.88rem; + border-radius: var(--rmi-radius-sm); + transition: all var(--rmi-transition); +} +.menu__link:hover { color: var(--rmi-text-primary); background: var(--rmi-bg-tertiary); } +.menu__link--active { color: var(--rmi-accent) !important; background: var(--rmi-accent-subtle); } +.theme-doc-sidebar-container { border-right: 1px solid var(--rmi-border) !important; } + +/* ── Blog ────────────────────────────────────────────────────── */ +.article-card { + background: var(--rmi-bg-secondary); + border: 1px solid var(--rmi-border); + border-radius: var(--rmi-radius); + transition: all var(--rmi-transition); +} +.article-card:hover { + border-color: var(--rmi-border-hover); + box-shadow: var(--rmi-shadow-hover); +} + +/* ── Buttons ─────────────────────────────────────────────────── */ .rmi-btn { - display: inline-block; + display: inline-flex; + align-items: center; + gap: 8px; font-weight: 600; font-size: 0.9rem; - padding: 10px 24px; - border-radius: 8px; + padding: 12px 28px; + border-radius: var(--rmi-radius-sm); cursor: pointer; - transition: all 0.15s ease; + transition: all var(--rmi-transition); text-decoration: none; font-family: var(--rmi-font-body); + letter-spacing: -0.01em; } - .rmi-btn--primary { - background: var(--rmi-accent-yellow); - color: var(--rmi-bg-primary); + background: var(--rmi-accent); + color: var(--rmi-bg-primary) !important; border: none; + box-shadow: 0 0 20px rgba(0,255,136,0.15); } .rmi-btn--primary:hover { - background: #ffe033; - color: var(--rmi-bg-primary); + background: #1aff9a; + color: var(--rmi-bg-primary) !important; + box-shadow: 0 0 32px rgba(0,255,136,0.3); + transform: translateY(-1px); text-decoration: none; } - .rmi-btn--secondary { background: transparent; color: var(--rmi-text-primary); border: 1px solid var(--rmi-border); } .rmi-btn--secondary:hover { - border-color: var(--rmi-accent-yellow); - color: var(--rmi-accent-yellow); + border-color: var(--rmi-accent); + color: var(--rmi-accent); text-decoration: none; } - .rmi-btn--ghost { background: transparent; color: var(--rmi-text-secondary); @@ -360,146 +307,73 @@ tbody tr:last-child td { padding: 8px 16px; } .rmi-btn--ghost:hover { - color: var(--rmi-accent-yellow); + color: var(--rmi-accent); text-decoration: none; } -/* Repo links grid */ -.rmi-repo-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); - gap: 16px; - margin: 24px 0; +/* ── Badges ──────────────────────────────────────────────────── */ +.rmi-badge { + display: inline-flex; + align-items: center; + gap: 6px; + font-size: 0.68rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.08em; + padding: 4px 12px; + border-radius: 4px; +} +.rmi-badge--live { + background: rgba(0,255,136,0.1); + color: var(--rmi-accent); + border: 1px solid rgba(0,255,136,0.2); +} +.rmi-badge--coming { + background: rgba(0,255,136,0.06); + color: var(--rmi-accent); + border: 1px solid rgba(0,255,136,0.15); } -.rmi-repo-link { - background: var(--rmi-bg-tertiary); - border: 1px solid var(--rmi-border); - border-radius: 8px; - padding: 16px; - text-align: center; - transition: all 0.2s ease; -} - -.rmi-repo-link:hover { - border-color: var(--rmi-accent-yellow); - transform: translateY(-2px); -} - -.rmi-repo-link h4 { - font-size: 0.9rem; - margin-bottom: 4px; - font-weight: 600; -} - -.rmi-repo-link span { - font-size: 0.75rem; - color: var(--rmi-text-muted); -} - -/* Forgejo icon in navbar */ -.navbar-forgejo-link::before { - content: '⊞'; - margin-right: 4px; - font-size: 1.1em; -} - -/* Status dot animation */ +/* ── Status Dot ──────────────────────────────────────────────── */ @keyframes pulse-green { - 0%, 100% { opacity: 1; } - 50% { opacity: 0.4; } + 0%, 100% { opacity: 1; transform: scale(1); } + 50% { opacity: 0.4; transform: scale(0.8); } } .rmi-status-live { display: inline-block; - width: 8px; - height: 8px; - background: var(--rmi-accent-yellow); + width: 7px; + height: 7px; + background: var(--rmi-accent); border-radius: 50%; - margin-right: 6px; + box-shadow: 0 0 8px var(--rmi-accent); animation: pulse-green 2s ease-in-out infinite; } -/* Timeline (for about page) */ -.rmi-timeline { - position: relative; - padding-left: 32px; - margin: 40px 0; -} -.rmi-timeline::before { - content: ''; - position: absolute; - left: 8px; - top: 0; - bottom: 0; - width: 2px; - background: var(--rmi-border); -} -.rmi-timeline-item { - position: relative; - margin-bottom: 32px; -} -.rmi-timeline-item::before { - content: ''; - position: absolute; - left: -28px; - top: 4px; - width: 12px; - height: 12px; - background: var(--rmi-accent-yellow); - border-radius: 50%; - border: 2px solid var(--rmi-bg-primary); -} -.rmi-timeline-item h4 { - font-size: 0.8rem; - text-transform: uppercase; - letter-spacing: 0.1em; - color: var(--rmi-accent-yellow); - margin-bottom: 4px; -} -.rmi-timeline-item p { - font-size: 1rem; - color: var(--rmi-text-secondary); +/* ── Forgejo Icon ────────────────────────────────────────────── */ +.navbar-forgejo-link::before { + content: '⊞'; + margin-right: 5px; + font-size: 1.1em; + font-weight: 700; } -/* Responsive — Mobile First ──────────────────────────────────── */ +/* ── Responsive ──────────────────────────────────────────────── */ @media (max-width: 996px) { - .rmi-hero { padding: 60px 20px 40px; } - .rmi-hero-title { font-size: 2rem; } - .rmi-hero-subtitle { font-size: 1.25rem; } - .rmi-hero-tagline { font-size: 0.95rem; } - .rmi-grid { grid-template-columns: 1fr; } - h1 { font-size: 2rem !important; } - h2 { font-size: 1.5rem !important; } - .navbar__title { font-size: 0.9rem; } + h1 { font-size: 2rem; } + h2 { font-size: 1.4rem; } + .navbar { height: 52px; } + .footer { padding: 40px 0 30px; } } - @media (max-width: 480px) { - .rmi-hero-title { font-size: 1.6rem; } - .rmi-hero-subtitle { font-size: 1.1rem; } - .rmi-product-card { padding: 20px; } - .rmi-btn { padding: 8px 18px; font-size: 0.8rem; } - table { font-size: 0.8rem; } - thead th, tbody td { padding: 8px 10px; } - .footer { padding: 24px 16px; } - .footer__links { flex-direction: column; gap: 24px; } + h1 { font-size: 1.6rem; } + h2 { font-size: 1.2rem; } + h3 { font-size: 1.05rem; } + body { font-size: 15px; } + .rmi-btn { padding: 10px 22px; font-size: 0.85rem; } } -/* Smooth transitions for all interactive elements */ -a, button, .rmi-product-card, .rmi-repo-link, .card { - transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); -} - -/* Focus styles for accessibility */ -:focus-visible { - outline: 2px solid var(--rmi-accent-yellow); - outline-offset: 2px; - border-radius: 4px; -} - -/* Reduced motion */ -@media (prefers-reduced-motion: reduce) { - *, *::before, *::after { - animation-duration: 0.01ms !important; - transition-duration: 0.01ms !important; - } +/* ── Print ───────────────────────────────────────────────────── */ +@media print { + .navbar, .footer, .theme-doc-sidebar-container { display: none; } + body { background: white; color: black; } } diff --git a/src/pages/build.tsx b/src/pages/build.tsx index ec3580e..0bc5ab7 100644 --- a/src/pages/build.tsx +++ b/src/pages/build.tsx @@ -4,18 +4,10 @@ import Link from '@docusaurus/Link'; const active = [ { name: 'rmi-backend', desc: 'RMI Backend — FastAPI, 410+ routes, 32 token detectors, wallet forensics', lang: 'Python', rad: 'z39AoyTctFAhNdA17ouoxGmMbSzRS' }, { name: 'rmi-frontend', desc: 'RMI Frontend — React 19, Vite, Tailwind, Radix', lang: 'TypeScript', rad: 'z233BhVGiPF9ZvBRoowpBap1ieebr' }, + { name: 'degenfeed-web', desc: 'DegenFeed — Multi-protocol social aggregator (Nostr, Farcaster, Bluesky, Mastodon, Lens, Threads, RSS)', lang: 'TypeScript', rad: 'z4HA4VujocEo1b3jTFwNk5qEGgF3V' }, { name: 'pryscraper', desc: 'Pry — Web scraper, 190+ endpoints, MCP server, Cloudflare bypass', lang: 'Python', rad: 'z1esLwZc3HHxjgYcdKkQhVLu5bcs' }, { name: 'walletpress', desc: 'WalletPress — 55-chain wallet engine, WordPress plugin, x402 marketplace', lang: 'Python', rad: 'z2s2wiPPHJXx2prvP5nPVgpkkzjwz' }, - { name: 'degenfeed-web', desc: 'DegenFeed — Multi-protocol social aggregator (Nostr, Farcaster, Bluesky, Mastodon, Lens, Threads, RSS)', lang: 'TypeScript', rad: 'z4HA4VujocEo1b3jTFwNk5qEGgF3V' }, { name: 'cryptorugmunch-com', desc: 'This website — Docusaurus 3, black + neon green, Cloudflare Pages', lang: 'TypeScript', rad: '' }, - { name: 'rmi-docs', desc: 'Product documentation — architecture, ADRs, MCP docs, FAQ, audit reports', lang: 'Docs', rad: '' }, - { name: 'rmi-rag', desc: 'Retrieval-augmented generation — AI-powered risk explanations', lang: 'Python', rad: '' }, -]; - -const infra = [ - { name: 'standards', desc: 'Fleet standards — AGENTS.md, CONVENTIONS.md, TOOLCHAIN.md, GUARDRAILS.md, templates', lang: 'Docs', rad: 'z4WHF6sDhmfqQvmigQSPYezNgy9c6' }, - { name: 'fleet-infra', desc: 'Infrastructure as code — nginx, systemd, docker-compose, scripts, cron', lang: 'Shell', rad: 'zAZaNc5wuKbh7ySJJsxBprguyUNd' }, - { name: 'fleet-template', desc: 'Canonical repo scaffold — pre-commit, CI/CD, Makefile, .agentrules template', lang: 'Meta', rad: 'z2WWhLuxRETPfnDp8TkUGFFi43JFK' }, ]; const legacy = [ @@ -78,13 +70,6 @@ export default function Build() { {legacy.map(r => )} -
-

- Infrastructure, internal tooling, and service configurations are managed in private repositories - accessible to authorized contributors. Public products are listed above. -

-
-

Four-Way Decentralized Backup