<!doctype html>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>developer.rjperna.org</title>
<style>
  :root { color-scheme: light dark; }
  body {
    font: 15px/1.65 system-ui, -apple-system, "Segoe UI", sans-serif;
    max-width: 46rem;
    margin: 0 auto;
    padding: 3rem 1.5rem 5rem;
    color: #1c1b22;
    background: #f6f6f8;
  }
  @media (prefers-color-scheme: dark) {
    body { color: #fbfbfe; background: #1c1b22; }
    code { background: #3a3944 !important; }
    .card { background: #2b2a33 !important; border-color: #52525e !important; }
    a { color: #6aa4e0; }
  }
  h1 { font-size: 1.3rem; margin: 0 0 0.3rem; letter-spacing: -0.01em; }
  .sub { color: #5b5b66; margin: 0 0 2rem; }
  h2 { font-size: 1rem; margin: 2rem 0 0.6rem; }
  .card {
    background: #fff;
    border: 1px solid #d9d9de;
    border-radius: 10px;
    padding: 1rem 1.1rem;
    margin-bottom: 0.7rem;
  }
  .card p { margin: 0.3rem 0 0; color: #5b5b66; font-size: 0.9rem; }
  code {
    background: #ebebef;
    padding: 0.12em 0.4em;
    border-radius: 4px;
    font-size: 0.88em;
  }
  .empty { opacity: 0.55; }
  footer { margin-top: 3rem; color: #5b5b66; font-size: 0.85rem; }
</style>

<h1>developer.rjperna.org</h1>
<p class="sub">Self-hosted browser and mail extensions. Nothing here is a public download page — these are update endpoints that the applications poll on their own.</p>

<h2>Thunderbird / Betterbird</h2>

<div class="card">
  <strong>Send to Notion</strong>
  <p>Clips messages into a Notion database — full body, attachments, classification and summaries generated locally.</p>
  <p>Update manifest: <code>/thunderbird/send-to-notion/updates.json</code></p>
</div>

<h2>Chrome</h2>

<div class="card empty">
  <strong>Nothing here yet</strong>
  <p>A self-hosted Chrome extension needs a packed <code>.crx</code> and an <code>updates.xml</code> under <code>/chrome/</code>, plus an enterprise policy on the machine — Chrome will not auto-install from outside the Web Store otherwise.</p>
</div>

<footer>
  <p><code>/send-to-notion/</code> is a legacy path kept so copies installed from the old <code>addons.rjperna.org</code> address can find their way across. It can be deleted once nothing polls it.</p>
</footer>
