The owner's decision (2026-10-10): help is needed by almost every
section, not by Overview and Outbound alone. The Help mockup had six
topics while other screens already linked to topics it did not have
(#dmarc, #inbound).
- src/help.html: seventeen topics in five boxes - Overview (checks,
certificate, rdns), Outbound (dns, apps, limits, log, queue, dmarc),
Inbound (inbound, upstream, recipients, filter), Server (backup,
users, settings), Account (account) - one paragraph each, and the
side menu lists them by group.
- A box head gets the sp-help link where a topic now exists: health,
out-domain-settings, out-app, out-log, out-message, out-queue, the
three DMARC screens, in-domains, in-domain, backup, users, user,
settings. No link on boxes that explain themselves (confirmations,
the shown-once password, sign-in) and at most one per box.
- outlines.json regenerated (check.py --write): only help changed -
Outbound holds six topics, and Inbound, Server and Account are new
boxes. 0 violations.
The dns, dmarc and account topics describe the report-address scheme the
owner decided the same day (no reports / the SelfPost address / a typed
address, no user default); the account and out-domain-settings mockups
are redrawn for it in the change that follows.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
65 lines
4.5 KiB
HTML
65 lines
4.5 KiB
HTML
<!-- title: prod-server · example.org | section: outbound | page: domains -->
|
|
<div class="sp-head">
|
|
<div class="sp-grow">
|
|
<p class="sp-kicker"><a href="out-domains.html">Outbound domains</a> / <a href="out-domain.html">example.org</a> / Applications /</p>
|
|
<h1 class="title is-3 sp-mono">prod-server</h1>
|
|
<p class="sp-lead">1 102 messages in 30 days · peak 96 msg/h · average 1.5 msg/h. The same form, empty, adds a new application.</p>
|
|
</div>
|
|
<div class="buttons">
|
|
<a class="button" href="out-app-created.html"><i class="ti ti-key"></i>New password</a>
|
|
<a class="button is-danger is-light" href="#"><i class="ti ti-trash"></i>Delete</a>
|
|
</div>
|
|
</div>
|
|
|
|
<form class="sp-form" method="post" action="out-domain.html">
|
|
<div class="columns">
|
|
<div class="column is-4">
|
|
<div class="box">
|
|
<div class="sp-box-head"><span class="sp-no">01</span><h2>Sender</h2></div>
|
|
<div class="sp-box-body">
|
|
<div class="field"><label class="label" for="login">Login</label>
|
|
<div class="control"><input class="input sp-mono" id="login" name="login" value="prod-server" autocomplete="off" spellcheck="false" required></div>
|
|
<p class="help">Unique across domains; letters, digits, <code>.</code> <code>-</code> <code>_</code>.</p></div>
|
|
<div class="field"><label class="label" for="amode">May send as</label>
|
|
<div class="control"><div class="select is-fullwidth"><select id="amode" name="mode"><option selected>Any address of the domain</option><option>Specific addresses (list)</option></select></div></div></div>
|
|
<div class="field"><label class="label" for="addresses">Addresses</label>
|
|
<div class="control"><textarea class="textarea" id="addresses" name="addresses" rows="3" placeholder="alerts@example.org" disabled></textarea></div>
|
|
<p class="help">One per line. Used only with a list.</p></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="column is-4">
|
|
<div class="box">
|
|
<div class="sp-box-head"><span class="sp-no">02</span><h2>Client IP allow-list</h2><div class="sp-end"><span class="tag is-light">off</span></div><a class="sp-help" href="help.html#apps" title="What an application is"><i class="ti ti-help-circle"></i></a></div>
|
|
<div class="sp-box-body">
|
|
<div class="field"><label class="checkbox"><input type="checkbox" name="auth_ip_restrict"> Restrict to listed IPs</label></div>
|
|
<div class="field"><label class="label" for="ips">Allowed client IPs</label>
|
|
<div class="control"><textarea class="textarea sp-mono" id="ips" name="auth_allowed_ips" rows="3" placeholder="203.0.113.10"></textarea></div>
|
|
<p class="help">A login from anywhere else is refused with a 4xx at <code>MAIL FROM</code>. A sending control, fail-open — not an authentication boundary.</p></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="column is-4">
|
|
<div class="box">
|
|
<div class="sp-box-head"><span class="sp-no">03</span><h2>Rate limit</h2><div class="sp-end"><span class="tag is-success is-light">active</span></div><a class="sp-help" href="help.html#limits" title="Levels 1 and 2"><i class="ti ti-help-circle"></i></a></div>
|
|
<div class="sp-box-body">
|
|
<div class="field"><label class="label" for="rmode">Limit mode</label>
|
|
<div class="control"><div class="select is-fullwidth"><select id="rmode" name="rl_mode"><option>Use the domain limit</option><option selected>Manual</option><option>Auto (from statistics)</option></select></div></div></div>
|
|
<div class="sp-pair">
|
|
<div class="field"><label class="label" for="max">Messages (max 600)</label><div class="control"><input class="input" id="max" name="max_messages" type="number" min="1" max="600" value="200"></div></div>
|
|
<div class="field"><label class="label" for="win">Window, s</label><div class="control"><input class="input" id="win" name="window_seconds" type="number" min="1" value="3600"></div></div>
|
|
</div>
|
|
<p class="help">Overrides the domain limit (288 / h) for this application; may be higher or lower, never above level 1.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="buttons">
|
|
<button type="submit" class="button is-primary">Save application</button>
|
|
<a class="button is-text" href="out-domain.html">Cancel</a>
|
|
</div>
|
|
</form>
|