Changelog
What changed, when it changed, and what it was fixing.
Product and corpus changes a person using Press Hub would notice. Counts are the figures measured at the time of the change, not current totals.
Less legal furniture, same disclosures
The footer had grown two columns of policy links and a registered company address under every table. The documents that repeated each other have been merged, and what is left sits behind one short row.
- The footer is three columns — Explore, Company, Help — with a single Privacy · Terms · Legal row underneath. /legal still indexes every document.
- The website terms are now a section of /terms; export, deletion and the US state-law position are sections of /privacy. The sending policy and the AI transparency page are unchanged.
- The Γ.Ε.ΜΗ. number and registered seat left the copyright line. They are on /legal-notice, one click away from every page.
The legal set, the company pages, and who operates Press Hub
Press Hub had a product and no published policies. It now has the full document set, and the operator is named: Press Hub is run by Entro314 Labs, a single-member private company registered in Greece (Γ.Ε.ΜΗ. 193782603000).
- A legal index at /legal, a complete company disclosure at /legal-notice, and hello@pressdb.co as the direct contact address.
- A privacy notice written around the three groups this product actually affects — account users, journalists held in the corpus, and recipients of campaign mail — plus /for-journalists, which states the same facts from the other side.
- An AI transparency page, because the planner and the drafting tools are generative-AI surfaces. Its central claim is one the architecture already enforced: the model chooses filters, the database returns people, and no journalist identity ever reaches a model provider.
- A sending and use policy, terms, website terms, cookie policy, accessibility statement, subprocessor list, DPA status, data-portability page, this changelog with an RSS feed, and company pages for method, brand and careers.
The send engine can be resumed, and suppressions have owners
A send that dies halfway through is the normal case, not the exceptional one, so the machinery was rebuilt around that assumption rather than around a happy path.
- The recipient row is written before the provider is called, so a failure between the two leaves it pending for the next tick rather than losing it.
- Progress is derived from the log rather than stored in a cursor — there is no position left to corrupt.
- Suppressions carry the owner that created them, and an operator opt-out outranks any later automated verdict.
Bounces from hand-sent mail reach the register
An address that bounced outside a campaign used to be invisible to the corpus, so the same dead mailbox could be picked again by the next audience.
- Provider bounce and complaint events are written back to the contact record, not only to the campaign that triggered them.
- A dead address is shown with its state rather than hidden: a visible dead end beats invisible missing data.
Press planning, and AI only where it earns its place
A planning surface that answers the question that comes before the list: what am I announcing, to whom, and in what order. It proposes segments and prices each one against the live corpus.
- Every count the assistant quotes comes from the same function the campaign composer uses at send time, so a planning number and a send number are comparable.
- The assistant is given counts, vocabulary and outlet identity — never a journalist’s name, role or address.
- Nothing it can do sends: no tool writes a recipient, moves a campaign out of draft, verifies a sender, or touches the suppression list.
- Where arithmetic beats a model, no model is called — narrowing an audience in the composer is four counting queries and nothing else.
Which of these 45,698 outlets actually matter
Half the corpus had no contact at all, and deciding which outlets deserved attention was alphabetical. Prominence blends four open datasets into one number and makes the list orderable.
- Scored as a percentile of the corpus rather than as a raw global rank, so "top decile of what we hold" is a sentence an operator can act on.
- A country-relative variant exists because a global cut buries every national title outside the anglosphere.
- "Not measured" stays null rather than becoming zero — those are different facts and call for different actions.
- Outlets hosted on tenant platforms are excluded, so a podcast does not inherit its landlord’s authority.
Subjects reach the filters, and the journals come out of the press lists
Medium and provenance were the only classifications available, and neither answers the question a press list actually starts from: which outlets cover this subject.
- A controlled subject vocabulary at outlet level, filterable, and reported by the same audience breakdown as every other subtraction.
- Roughly 2,400 scholarly journals imported as "magazine" are now tagged and can be dropped from a press audience in one move — tagged rather than deleted, because a journal is a legitimate target for a research announcement.
- Unclassified stays unclassified. A wrong subject is invisible until somebody builds an audience on it.
Real domain authentication, and Amazon SES alongside Resend
Sending from a domain you have not proven you control is the fastest way into a spam folder, so the sender identity became a verified object rather than a text field.
- Domain verification state is tracked per sender, and preflight blocks a send from an unverified one.
- Two delivery providers are supported, with their bounce, complaint and delivery events normalised into one recipient log.
Every address states what is known about it
Addresses had mixed treatments across the product and none at all in some tables. They now share one vocabulary, with an explanation attached to each state.
- Verified, unverified, pattern-derived and failing are distinguished everywhere an address renders.
- Pattern-derived addresses — guessed from an outlet’s domain, never observed — are labelled so they can be excluded from any audience that has not been verified.
Press Hub sends press releases
The corpus answered "who should I tell?". This answered "tell them, and prove what happened" — with consent and audit in the schema rather than added afterwards.
- One append-only row per campaign and address, carrying the token behind its own one-click unsubscribe.
- The audience resolves at send time, never at schedule time, so somebody who unsubscribed in between cannot receive the mail.
- A preflight check returns block, warn or ok before anything leaves; an embargo outranks everything, including an operator pressing send.
- Every policy decision writes an immutable audit row for an allow as well as a block.