Photo: staff photographer
Local
Example lead headline, set large across the top of the page
A short summary under the headline, written by the desk to tell the reader what happened and why it matters.
Newsroom publishing system
A publishing system we build and run for newsrooms: every story moves from the reporter to the reader through clear stages, and the pages stay fast when the news breaks.
Section AThe front page
The breaking banner, the lead story, the live blog, the opinion column and the correction under a story are all written, checked and published in the same place.
Breaking Example headline: a developing story, updated as it happens 09:42
Photo: staff photographer
Local
A short summary under the headline, written by the desk to tell the reader what happened and why it matters.
Opinion
Gallery
Video
Business
Correction An earlier version of this story gave the wrong date. It was corrected at 11:05
Section BThe workflow
A story never waits in someone's inbox. It sits in a stage, with a name on it, and it moves only when the person allowed to move it does.
Filed2
61Location
Correspondent
Writer
On the desk2
Editor
Desk editor
Ready3
Editor-in-chief
18:00
Publisher
06:00
Publisher
Live2
Publisher
Desk editor
Archive1
Section CRoles and permissions
Every account has a role, and every role has the rights its job needs and no more. A contributor can write; a contributor cannot publish.
| Role | File a story | Edit | Review | Approve | Schedule and publish | Correct after publishing |
|---|---|---|---|---|---|---|
| Correspondent / reporterFiles text, photos, video and the location from the field | Yes | Own stories only | No | No | No | No |
| Writer / editorWrites and edits stories for a section | Yes | Yes | No | No | No | No |
| Desk editor / copy editorReviews, tightens and checks every line | No | Yes | Yes | No | No | Yes |
| Editor-in-chiefApproves what the paper publishes | No | Yes | Yes | Yes | No | Yes |
| PublisherSchedules, publishes and places stories on the page | No | No | No | No | Yes | Yes |
| ContributorWrites for the paper from outside the newsroom | Own stories only | No | No | No | No | No |
YesOwn stories onlyNoThe defaults we start from. Each newsroom sets its own.
Who changed what, and when, is kept for every story: the headline before and after, the photo that was swapped, the minute it went live. Any two versions can be compared, and any earlier version restored.
History of one example story
Section DThe content
Each kind of story has its own form and its own page, and all of them share the same authors, sections, tags and workflow.
Headline, summary, body, photos and captions, with the author and the section.
Raised across the whole site from one switch, and taken down the same way.
Short timed updates on one page, newest first, from several reporters at once.
Photo stories with a caption and a credit on every picture.
Reports and clips with a poster frame, placed inside a story or on their own.
Set apart from the news, with the writer's name and picture.
Every writer has a page with a short biography and everything they have written.
Each story sits in one section and carries the tags that link it to others.
Chosen by the editor or found by tag, at the end of every article.
Right-to-left layout, Arabic type and dates built in from the start, with each story able to carry its translations.
Section EPublishing
A story goes out at the minute it was set for, and in the same moment it reaches the search engines, the feeds, the social networks and the readers' phones.
news-sitemap.xml
Stories from the last two days, listed the way Google News reads them, updated on every publish.
"@type": "NewsArticle"
Headline, author, dates, section and image marked up on every article, so search shows it as news.
/rss/section.xml
One feed for the whole paper and one for each section, for readers and for partners.
og:image · twitter:card
The picture, headline and summary a link shows when it is shared, set by the editor.
web push
Sent by the publisher to the readers who asked for them, never by accident: the story has to be live first.
There is no separate AMP copy to keep in step. The regular page is built to be light and fast, so one version of each story serves every reader.
Section FSpeed and infrastructure
When a big story breaks, readers arrive all at once. The system is built so that almost none of them wait for the database.
Publish or correct the story, its section and the front page are purged from the cache at once
CDN photos resized once to WebP and AVIF at the widths each screen needs
Nginx keeps each published page for a short moment and hands the same copy to every reader who asks in that moment. The reader gets a finished page; PHP and the database are not touched.
When the copy expires, one request is let through to rebuild it while everyone else is served the previous copy. However many readers arrive at once, the page is rebuilt once, not once for each of them.
fastcgi_cache_lock on; fastcgi_cache_use_stale updating;
The moment an editor publishes, updates or corrects a story, the cached copies of that story, its section and the front page are dropped, so the next reader sees the new version.
Editors work outside the cache, on PHP-FPM with Redis beside it. Because readers are served from the cache, a spike on the site does not slow down the people writing it.
Measured on our own servers
The rest of the time is the distance between our servers in Germany and you. That part depends on where you are, so measure it from your own connection.
Measure it from your connectionSection GThe technical sheet
Every part in one table, with a plain fact about the technology behind it, so the editors and the developers read the same page.
| Part | What the system does | Good to know |
|---|---|---|
| What goes out with every story | ||
Google News sitemapnews-sitemap.xml |
Lists the stories from the last two days and is updated on every publish. | Google's format takes up to 1,000 stories per file, each with the publication name, language, date and headline. Older stories are taken out of it. |
Structured dataNewsArticle |
Headline, author, dates, section and image are marked up on every article. | Google reads the author, the published and modified dates, the headline and the image. Dates should carry a time zone. |
Feeds/rss/section.xml |
One feed for the whole paper and one for each section. | A feed is a plain XML file, so readers, apps and partner sites can follow it without an account. |
Social cardsog:image |
The picture, headline and summary a shared link shows, set by the editor. | Networks keep the card they fetched first, so a changed picture can take a while to show on links that are already shared. |
Push notificationsweb push |
Sent by the publisher to readers who asked for them, and only once the story is live. | Browser push works only over HTTPS, through a service worker, and only after the reader has given permission. |
| Speed and infrastructure | ||
Page cacheNginx |
Every published page is kept for a short moment and handed to each reader who asks in it. | With a cache lock, Nginx lets one request rebuild an expired page while the others are served the previous copy. |
| Purge on publish | Publishing, updating or correcting a story drops the cached copies of the story, its section and the front page. | Because only those pages are dropped, the next reader rebuilds what changed and the rest of the site keeps answering from the cache. |
The editors' sidePHP-FPM · Redis |
Editors work outside the cache, with Redis beside PHP-FPM for sessions, queues and cached queries. | Redis keeps its data in memory, so a lookup it can answer never has to reach the database. |
PhotosWebP · AVIF |
Photos are resized once to WebP and AVIF at the widths each screen needs. | Both formats usually make a photo smaller than the same picture saved as a JPEG. |
| One version of each story | There is no separate AMP copy: one light page per story serves every reader. | With one version there is one address to link, to cache and to correct. |
| People and content | ||
| Stages | Nine stages from draft to archive, and the legal and fact check is only used when a story needs it. | A story is always in one stage, and only a person whose role allows it can move it on. |
| Roles | Six starting roles: correspondent, writer, desk editor, editor-in-chief, publisher and contributor. | These are the defaults we start from. Each newsroom sets its own rights. |
| History | Who changed what, and when, is kept for every story. | Any two versions can be compared, and any earlier version restored. |
Languagesdir="rtl" |
Right-to-left layout, Arabic type and dates are built in, and each story can carry its translations. | A page states its reading direction once, on the html element, and the browser lays out the whole page to match. |
| Content forms | Articles, breaking banner, live blogs, galleries, video, opinion, author pages, sections and tags, and related stories share the same authors and workflow. | One workflow for every form means a gallery is approved and corrected the same way as an article. |
Section HHow it gets built
Five steps, the same ones every custom system of ours goes through, with what we ask of you and what you hold at the end of each.
A conversation with your editors, your desk and your publisher, and a written list of what the system must do.
The nine stages and six roles on this page are where we start. We change them to match how your newsroom really works.
A working version on your own data as soon as the first screens exist, not a slideshow.
Changes go in while your team uses it, until the day it runs the newsroom without the old way.
It lives on our servers with backups, monitoring and security updates, and we stay the people you call.
How our custom systems are built What our managed service watches

How many desks and languages you publish in, where your reporters file from, and what you run on today. We quote the system after one conversation about it.