Built by TH3ONE
–
--:--:--
…
Monitor

Operations overview

Delivery, queue and reputation at a glance · auto-refreshes on the poll cycle

24-hour activity · 15-min buckets

● accepted ● delivered ● bounced ● deferred

Queue & connections

IP health (24 h)

Egress addressIdentitiesDelivered DeferredBouncedSuccess

Sending identities (24 h)

EHLO / subdomainIPDeliv DeferBounceSuccess

Top recipient domains (24 h)

DomainDelivDeferBounce

Bounce classification (24 h)

Recent failures (newest first)

no failures recorded in the last 24h

ISP throttling

System

Send

Identities

Sending domains, DNS publication and the panel host

Automatic DNS publication · Cloudflare

paste an API token once — every domain you add here gets its records (A, SPF, DKIM, DMARC, MX, TLS-RPT) created automatically. The panel only ADDS: existing records of your other websites stay untouched, and the panel can later remove only the records it created itself.

Panel host · HTTPS address

reach the panel with a real address instead of the raw IP: https://panel.yourdomain — the DNS record is created in Cloudflare, a genuine Let's Encrypt certificate is issued with your API token (DNS-01, no port 80 needed, never self-signed), and nginx serves it with automatic renewal. One domain → set up automatically. Several domains → choose here, and you can change or remove it any time.
subdomain:

Sending domains

every row is a sending domain with its own addresses, subdomain block and DMARC policy — add as many as you like (max 50 identities in total).
DomainIdentitiesAddressesDMARC
Advanced — preset server settings (open once if you need a relay)
outbound route (relay / direct)
queue behaviour (applies with APPLY)

DNS records to publish

NameTypeValueWhy

Live DNS status

IdentityAddressA/AAAASPFDKIMDMARCMX
checked live through 1.1.1.1 (TCP, DoH fallback — many providers block plain DNS) · fresh record changes can take up to the record TTL (~1 h) before they show here · MISSING = publish from the sheet on the left

Managed policy

ComponentStatusSize
server-managed configuration — rewritten by APPLY, backed up automatically

Generated sheet (registrar copy)

load the page to generate the sheet…
Send

Campaigns

Performance analytics per campaign · opens, clicks and unsubscribes

Campaign performance

all idle sending completed archived
CampaignState Sent Delivered Del% Bounced Bn% Opens Open% Clicks Click% Unsub Unsub% Funnel
● delivered ● deferred ● bounced click a row for the per-recipient log

Recipient detail — select a campaign above

timeemailstatusidentityresponse
spawns a fresh draft · "{name} · retry" · addressed to the failed + deferred log entries (newest first, cap 2000) — it starts idle, you press Start
Follow-up: max age (days)
the derived audience is a snapshot (audience_override) — it does not auto-update · suppressed and unsubscribed addresses are always excluded · the draft starts idle, you press Start.
archiving is for completed / stopped / failed campaigns — archived ones leave the default lists but stay selectable for follow-ups and compare

Engagement — all campaigns

opens / clicks are attributed to a campaign through the tracking id of every message · unsubscribes are RFC 8058 one-click and auto-suppress the address.
Send

Composer

Draft, audience and delivery run

Composer

click a token to insert it at the cursor — substituted per recipient at send time · subscriber tags render comma-separated
a plain-text part improves delivery

Templates

templates store subject + body + text part · Load fills the form · names must be unique

Audience

subscribers: – · mailing now: – · suppressed: –
adds/removes happen in the SUBSCRIBERS tab

Delivery controls

messages/minute
audience lists
Main (default — every subscriber)
–
off — sends around the clock · server time (UTC)
starts automatically at this time · server time (UTC) — safe mode holds it
off (single subject)
0 drafts

Preflight · campaign readiness

not run
informational only — failing checks don't block save; Start asks once per draft

Run

IDLE

Live results (newest first — last 200)

timeemailstatusidentitySMTP response
Send

Audience

Segments, subscribers, imports and suppression

Segments

Audience lists

Import subscribers (paste)

the scraper writes domain,email rows — upload the file here or point the console at the path on this server (readable folders only). dropping a file on the upload button works too.

Maintenance

tip: bounces and unsubscribes are suppressed automatically

Import history

whensourcelist addeddupesinvalid byaction
undo removes the members a batch added — anyone already in an earlier batch stays

Audience health

not checked yet

Subscribers

#emailnametagslistsengagementadded
page 1 of 1

Suppression list

#emailkindreasonwhenaction
Monitor

Deliverability

DNS, blocklists and destination health · inbox readiness

Identity DNS checks

IdentityAddressA/AAAASPFDKIMDMARCMX
checks run against the authoritative nameservers — results cached 5 min · also verify with sudo ./setup-multi.sh --check-dns

IP reputation & blocklists

Egress addressSpamhaus ZENBarracuda SpamBarrelSORBSVerdict
Spamhaus refuses queries from public resolvers (1.1.1.1 / 8.8.8.8) and answers "query blocked" instead of a verdict - check it from your own resolver or on spamhaus.org. A listing here is a reputation blocker: fix it before sending.

Destination health (who is refusing us)

DomainDelivDefer BncBnc%Verdict

Failure categories (24 h)

critical = bounce rate ≥ 10% · fix that domain first

Latest refusal samples

no failures recorded in the last 24h

Warm-up playbook (2026)

day 1-2    : ~150-300 msgs / address      (spread over the day)
day 3-5    : ~600-1200 msgs / address
week 2     : double every 2 days to steady state
watch      : IP health table — pause any address with rising 5xx
rules      : real subject lines · working unsubscribe · no misleading headers
             keep list hygiene (this panel auto-suppresses bounces)
Monitor

Alerts

Rules, channels and notification history

Active alerts

Rules

OnAlertMetricThreshold SeverityCurrent
the engine re-evaluates every 60 seconds and fires a notification when a rule changes state (ok → firing → ok).

Notification channels · webhook & e-mail

the e-mail is delivered through your own private relay (authenticated SMTP) — no third party involved.

Telegram

1) open @BotFather → /newbot → copy the token · 2) send your bot a message (or add it to the channel) · 3) get your chat id from @userinfobot → paste it above. The token stays on the server — the browser only ever sees the last four characters.

Alert history

timealertseverityvalue statenotified
Operate

Operations

Diagnostics, safe mode and message queues

Diagnostics — nothing is sent unless you press the button

injects one message through the local SMTP listener with DKIM signing and queueing — it is never sent automatically, not at boot, not on a schedule.
bounces leftover test messages (probe/mail-tester) that are stuck in the scheduled queue because port 25 is blocked. Only test queues are touched.

Production readiness

State storage

—

Safe mode

OFF
Safe mode stops every campaign immediately — the cursor, the counts and the queue stay intact, so switching it off resumes exactly where it stopped.

Warm-up mode

OFF
While warm-up mode is on, delivery and connection rates are halved for the first 14 days of a new address or server. Destination profile behaviour stays identical — switching it off restores full rates.

Message queues

QueueMessages
PURGE bounces every message of that queue immediately (AdminBounce) and stops new arrivals for 5 seconds.

Administrative rules

loading…

Panel doctor — self-diagnostics

not run yet — checks storage, services, certificate, queue and reachability
repairs:
every repair asks for confirmation and lands in the audit trail. Resync re-imports only legacy files that are newer than the stored documents (degraded-window recovery).

Backup & restore

backups carry every stored document, the audit trail and a redacted config copy.
restore replaces the documents present in the zip and leaves everything else alone; the console config file is never restored (config stays managed by Settings) and the audit trail is append-only. In postgres mode also run pg_dump for a full binary backup.

Console preferences

auto refresh
preferences live in this browser only · the console remembers the last view you opened.

Telegram

not configured
alerts that fire, campaigns that start or finish and the optional daily digest are pushed to your chat. Configure it under Alerts.

Managed configuration

select an item…
policy and console configuration live server-side — this list shows placement and size only
Operate

Settings

Console configuration, self-update and restarts — admin only

Console configuration

engine-wide sends per UTC day; when the cap is reached, sending campaigns auto-pause with a CAP badge until the next day or until the cap is raised. Test sends never count.
tracking — — read-only here; it follows the sending domain settings in Identities.
send_test flag
leave masked/empty to keep the stored dsn · a test connect never saves anything · a saved dsn change needs the restart (a bad dsn falls back to file mode, the panel stays up)
Saving rewrites the console configuration — a timestamped backup copy is kept first — and restarts the console. This page reconnects automatically when the panel is back. Telegram has its own card under Operations (configure in Alerts).

Console update

loading…
the bash installer is only needed for the first deployment — updates, configuration and maintenance live here. A failed validation never touches the running files, and every accepted swap keeps a rolling backup under state/backups/ (last 5 kept).

Danger zone

a console restart takes ~2 seconds and this page reconnects on its own; an engine restart bounces in-flight deliveries back to the spool recovery. Both actions are audited.
Operate

Team & audit

Operators, roles and the audit trail

My account · change password

use at least 10 characters — a mix of upper/lowercase, digits and symbols reads “strong”.
changing the password keeps this session signed in and signs your other sessions out. Every role can change their own password here; the team table below is admin-only.

Team & access

UserRoleStatusCreated

Add operator

every mutating action is written to the audit trail below.

Audit trail

timeactoractiontargetdetail
Monitor

Events

Sends and engagement tracking

–
opens (total)
–
clicks (total)
–
unsubscribes (total)

Recent events (sends / tracking)

timekinddetailresponse

Raw delivery-log failures (24 h)

none
↑ ↓ navigate ↵ run esc close ctrl k palette r refresh
the owner account is created automatically on the first sign-in · roles: viewer · operator · admin