D.E.L.P.H.I.

Settings

Everything that has shipped, newest first.

Appearance

Language

Distances

Date & time

Feeds

Every outlet Delphi polls β€” add one, track a topic, repair or retire what has stopped answering.

Notifications

Subscription

I have an invitation code

Account security

Change your password without leaving the app β€” no email needed
Sign out of this browser. Your other signed-in devices stay signed in, and the news cached on this one is erased.
Sign out of every device β€” use this if you've lost a device, or think someone else has been in your account. The button above only affects this browser; this ends every session, including this one.

Settings are saved to your account and follow you to any browser or device β€” change the theme here and you'll find it applied after signing in anywhere else.

This instance

–
articles (24h)
–
countries (24h)
–
sources healthy
–
alert hits unseen

Operator

Manage every account on this server β€” roles, resets, removals

❓ D.E.L.P.H.I. β€” Help

Every task in D.E.L.P.H.I., step by step. Open a heading to see the steps. For what something is, or why it behaves the way it does, switch to the ❓ FAQ tab.

πŸš€ First five minutes
  1. Sign in. You land on 🏠 Home, a board of columns D.E.L.P.H.I. curates for you from everything it has ingested.
  2. Drag the board sideways, or use the bar beneath it, to reach the columns off-screen. Each column scrolls its own articles vertically.
  3. Click any headline to open the story: its summary in full, an extract of the article, when and where it was published, and who else is covering it. Nothing in a column takes you off to the outlet by itself β€” going there is a button inside that view.
  4. Found a Home column you want to keep and edit? Press πŸ“Œ in its header to copy it to πŸ“‹ My feeds.
  5. Press οΌ‹ Create in the header to build your own feed, or turn on an alert that tells you the moment something matches.

The header holds everything else. Click β€Ή at its top to expand it into labelled buttons and reveal the search box, or press \ (backslash) any time you aren't typing in a field.

πŸ‘€ Signing in, verifying, and resetting a password

Create an account: on the sign-in card choose Create one, then give a username (3–32 characters β€” letters, digits, _ . -), an email address, and a password of at least 8 characters. D.E.L.P.H.I. emails you a verification link; open it and you're verified.

Sign in: username or email address, plus your password. Press Enter in the password field instead of reaching for the button.

Forgot your password: choose Forgot password?, enter your account's email address, and open the link that arrives. It takes you straight to a "set a new password" card. Reset links expire, so request a fresh one rather than reusing an old email.

Sign out: πŸ‘€ in the top-right corner opens your account panel; Account security β†’ πŸšͺ Sign out ends this browser's session. To end every signed-in device at once (a lost phone, or someone else in your account), use πŸ”’ Sign out everywhere directly beneath it.

No verification email? Check spam first. If it still hasn't arrived, the server may have no mail configured β€” see the πŸ›  Troubleshooting tab.

🧭 Moving around the board

Switch boards with the buttons at the top left: 🏠 Home (Delphi's curated columns), πŸ“‹ My feeds (the ones you built), and one button per πŸ› Pantheon you belong to.

Scroll sideways by dragging the gold bar under the board, clicking anywhere on its track to jump, or rolling a mouse wheel over the board. The bar hides itself when every column already fits.

Search everything from the box in the header: type and press Enter and the results arrive as a temporary column at the left of the board. It accepts plain words or full Boolean syntax. Press βœ• in that column's header to dismiss it, or empty the box and press Enter.

Read the tiles along the top: articles in the last 24 hours, countries covered in the last 24 hours, how many sources polled cleanly, and how many alert hits you haven't looked at yet.

πŸ“° Reading an article row

Each row carries the headline, then a line of markers:

  • An importance chip β€” β–² Critical, β—† High, ● Notable or β—‹ Routine β€” carrying the score itself.
  • The outlet, the country the story is about, and when it was published, in whichever timestamp format you chose in Settings.
  • Its categories, and β€’ open β€” the story itself is one click away, with Β· event beside it when other outlets are covering the same thing.
  • πŸ“ a place name when the article falls inside one of your favourite locations.
  • 🌐 translated from XX when it was written in another language.
  • πŸ”’ on a paywalled outlet. Open the row and the story's own view offers πŸ”“ archive.ph, a readable snapshot instead of the paywall.

Clicking a row never leaves D.E.L.P.H.I. It opens the story in Story Focus, and the outlet's own page is a marked button in there β€” so a stray click can't send you to a page you hadn't decided to visit.

🌱 Starting from an empty board

A brand-new account has nothing in πŸ“‹ My feeds, and the board offers two ways out:

  • Create your first feed opens the wizard.
  • Add starter feeds builds four ready-made columns β€” Top events worldwide, Conflict & disasters, Business & economy, and Science & technology β€” so you have something to read, and something to take apart, while you learn the wizard. They are ordinary feeds: rename, retune, or delete them freely.

The third option is to browse 🏠 Home and press πŸ“Œ on any column you like the look of, which copies it to My feeds as your own.

πŸ“‹ Creating a feed

Press οΌ‹ Create in the header. Make sure the toggle at the top of the wizard reads πŸ“‹ Feed, then work through the four steps β€” you can jump between them with the numbered tabs, and everything except the name is optional.

  1. Topic. Name the feed (this is the column header, so make it one you'll recognize). Add keywords β€” press Enter after each; an article matching any of them qualifies. Add exclude keywords to drop matches containing them. For anything more precise, write a Boolean search β€” the row checks it as you type and says whether it is valid. + Add another Boolean search gives the feed a second, separate search β€” matches from all of them fill the same column.
  2. Where. Pick countries (Ctrl or ⌘-click for several; none means everywhere), and/or press Draw area on map and draw a polygon, rectangle or circle. Draw as many areas as you like β€” an article inside any of them matches.
  3. Refine. Categories, source scope, platforms, languages, a recency window, an explicit date range, a minimum importance, and Pull only from specific sources.
  4. Review. Read the summary of everything you set, press Preview matches for a live count, choose newest first or importance, and optionally tick 🧡 Group similar articles into events and πŸ•° Hide events with no recent updates. Press Save.

The new column appears at the end of πŸ“‹ My feeds.

πŸ”” Creating an alert

Press οΌ‹ Create and set the toggle to πŸ”” Alert. Steps 1–3 are identical to a feed β€” an alert is the same set of criteria, watching instead of waiting. Step 4 offers different options:

  • Alert active β€” untick to silence it without deleting it.
  • βœ‰οΈ Email me when this fires β€” one digest per batch of matches, to your account's address.
  • πŸ”— Webhook URL β€” matching hits are POSTed as JSON, for Slack, Discord, or anything of your own. It must start with http:// or https://.

Keep alerts narrow. A broad alert fires constantly and stops meaning anything; that's what a feed is for.

✎ Editing, converting, and deleting a feed or alert

Edit: press ✎ in a feed's column header, or ✎ beside an alert in the πŸ”” panel. The wizard reopens with everything filled in; change what you want and press Save changes.

Convert: while editing, flip the πŸ“‹ Feed / πŸ”” Alert toggle at the top. Every criterion carries over and saving completes the conversion β€” a feed you keep checking becomes an alert that checks for you, or the reverse.

Delete: the red Delete button at the bottom of the wizard, or πŸ—‘ beside an alert in the πŸ”” panel. Deleting a feed doesn't touch the articles β€” they belong to the shared database, not to your column.

↔ Arranging the board

Reorder: grab a column by its header β€” anywhere that isn't a button β€” and drag it left or right. The board opens a gap where the column will land, so you can see the new arrangement before you let go. Holding the column against either edge of the board scrolls it, so you can reach a position that is off screen. The order is saved to your account when you let go.

Resize: drag a column's right edge β€” a gold line marks it when your pointer is on it β€” anywhere between 240 and 1000 pixels wide. Double-click that edge to return the column to the default width. ⇔ in the header flips between the standard and wide widths in one click.

On a wide or ultrawide monitor the columns share out whatever space is left rather than leaving it empty on the right β€” they widen from 360 pixels up to 560, and past that the remaining space is split evenly on both sides. Any column you have sized yourself keeps exactly the width you gave it and takes no part in that, so a board you have arranged stays arranged. Add more feeds and they fill the extra width instead.

Resize from the keyboard: Tab to a column's right edge and use ← and β†’ (hold Shift for larger steps), or Home to reset it.

Refresh one column: ⟳ in its header re-runs just that feed's search. The heavier ⟳ Refresh now β€” which polls every source β€” is in πŸ‘€ Settings β†’ πŸ›  Troubleshooting.

Take a column away as a file: – in its header offers five formats. πŸ“Š Excel gives a workbook with the header frozen and filters switched on β€” the two things anyone does to a sheet before they can use it. πŸ“„ Word gives a readable brief with a heading per story, so Word's navigation pane lists the headlines. πŸ“‹ CSV opens anywhere, πŸ“ Markdown suits a wiki or a report you're writing, and 🧾 JSON carries every field for a script.

An export reaches back further than the column shows β€” up to 500 articles against the forty on screen β€” and it exports what the feed matches now, in your reading language, not what happens to be scrolled into view. Home's columns and a Pantheon's shared columns export too, even though you don't own them.

Copy a column you don't own: πŸ“Œ on a Home column or on anything shared with a Pantheon puts an editable copy in πŸ“‹ My feeds.

πŸ“– Reading a story in Story Focus

One story, one view. A report nobody else has picked up and a story forty outlets are carrying are the same thing at different distances, so both open here β€” the report you picked, and the whole story around it when other outlets have it.

  1. Click any headline β€” on a board, in search results, in the alerts panel, or in the story's own timeline. Enter or Space does the same on the row your keyboard is on. A grouped event card opens the same view at the latest report.
  2. It opens with the headline, an importance chip, the country and categories, how many outlets are carrying it, and a line saying which outlet published this report and exactly when β€” the full date, not just "3h ago".
  3. Below that: the publisher's summary in full (a column truncates it), then From the article, an extract of the body D.E.L.P.H.I. fetched. Long pieces are cut, and the view says so.
  4. A map of the places the story names β€” every report's places when several outlets are on it.
  5. Every report on this lists the whole story newest-first, the one you are reading marked. Click another to move to it, in place.
  6. Covered by lists the outlets; Related stories links to what D.E.L.P.H.I. considers adjacent, and opens them here too.
  7. Details gives the publication time in UTC, when D.E.L.P.H.I. collected it, the outlet's reach and platform, the places named, and the importance out of 100.
  8. β­³ Export at the bottom takes the whole story away as a file β€” the report you opened first, then every other outlet carrying it, in the same five formats a column offers. A story nobody else has picked up exports as itself.
  9. Open original β†— at the bottom goes to the outlet β€” the only thing here that leaves D.E.L.P.H.I. On a paywalled outlet, πŸ”“ archive.ph sits beside it.

Esc closes it. Opening a story marks it read: it dims everywhere it appears, straight away and on every device you sign in from, so a second pass over the board shows you only what you haven't triaged. Hover a dimmed row to read it at full strength.

πŸ—Ί Drawing areas on the map
  1. In the wizard's Where step, press Draw area on map.
  2. Choose a shape from the tools at the top left of the map β€” polygon, rectangle, or circle β€” and draw it. For a polygon, click each corner and click the first point again to close it.
  3. Draw more shapes if you want. They combine as "or": an article inside any one of them matches. The summary beside the button counts them.
  4. To remove one, use the map's delete tool and click the shape. Clear area removes all of them at once.

The map needs internet access for its background tiles. Without it you'll get a message instead of a map β€” every other filter still works.

πŸ“ Keeping a list of favourite locations

Add one: open the πŸ—Ί Atlas board, go to the πŸ“ Locations tab, press οΌ‹ New location and start typing in the search box. Suggestions appear as you type: cities and countries D.E.L.P.H.I. ships come first and instantly, and a street address, a town or a district is looked up through OpenStreetMap and listed below them, marked πŸ“. Each suggestion says where it is, so two towns with the same name are easy to tell apart. ↓ and ↑ move through the list, Enter takes one, Esc puts it away β€” or click the map for a spot with no name at all. Then set the radius with the slider, give it a name, and press Save location.

From then on, any article D.E.L.P.H.I. places inside that radius carries a πŸ“ badge everywhere it appears β€” in every feed and alert, not only its own. All your locations also share a single πŸ“ Favourite Locations feed β€” one column carrying news near any of them, however many you keep β€” created the first time you save one.

Saving a place also starts collecting news about it. Delphi adds a local news search for the place you picked, so the column fills with coverage of it rather than only catching whatever the global catalog happened to gather. Rename the place and the search moves with it; delete the location and it goes away.

A story counts as being about your location if it names the place in its headline or summary, or if Delphi can place it inside the radius from the towns and cities it recognises. The name matters most: Delphi recognises around 600 cities by position, so anywhere smaller is found by name β€” which is why the place you pick keeps its own name even if you rename the location to β€œHome”.

Clicking a bare spot on the map still works, but it has no name to search for or match on, so it can only rely on the towns Delphi already recognises nearby. Picking from the search box is the stronger choice.

Edit one: press Edit beside it in Saved locations, change the name, the point, or the radius, and save. The shared feed follows the change; the other locations in it are untouched.

Share one: press πŸ› beside it and pick a Pantheon β€” the location then flags news for every member of that group.

Delete one: πŸ—‘ beside it. The feed keeps covering whatever locations are left, and only goes away with the last of them.

πŸ“‘ Managing sources

Open πŸ‘€ Settings and press πŸ“‘ Sources. The list runs to hundreds of outlets, so start by typing in the filter box β€” it matches name, country, language, platform, scope, category, who added it, and health, and every word you type narrows the list further.

Add an outlet by hand: press βž• Add source. Give it a name and the URL of its RSS or Atom feed, then set the platform, scope, country, language and categories that feeds and alerts filter on, and tick πŸ”’ Paywalled if its articles are locked. Press Add source.

Track a topic: type it in the Track a topic… box and press πŸ“° Press for worldwide press coverage, or πŸ’¬ Social for Reddit and Mastodon feeds on it.

Edit one: ✎ on its row opens every field in place. ⏸ pauses polling without deleting it (β–Ά resumes), and πŸ—‘ deletes the source and its articles.

Fix a broken one: a red dot means the last poll failed β€” hover it for the exact error. Press πŸ”§ to make D.E.L.P.H.I. hunt for the outlet's real feed and switch to it.

Sources are shared by everyone on this server. Adding, editing, or deleting one affects every account here.

πŸ“‘ Restricting a feed or alert to chosen outlets
  1. In the wizard's Refine step, open Pull only from specific sources.
  2. Search for an outlet by name, country, language, platform or scope.
  3. Tick the ones you want. They appear as chips above the list and stay there when you change or clear the search.
  4. Select shown takes everything currently matching your search β€” the way to grab a whole group, such as every Japanese outlet, at once. Clear empties the selection.

A restricted feed carries a πŸ“‘ badge in its header naming the outlets. Leave the selection empty and the feed considers everything.

The outlet list is fetched while you work, so the first editor you open in a session may show Loading the outlet list for a moment on this step. Every other part of the wizard is usable meanwhile, and the list stays loaded for the rest of the session.

πŸ”” Working through alert hits

Open the πŸ—Ί Atlas board β€” the πŸ”” Alerts tab is the one it opens on. The number on the Atlas button counts hits you haven't seen, and the top of the tab lists the ones inside whatever the map is currently showing, grouped by the watched place they landed in.

  • Each alert lists its recent hits, newest first, with a thumbnail and its importance. Click one to read the article. The alert's own header counts how many you haven't seen.
  • πŸ‘ marks every hit on that alert as seen, clearing its counter once you've triaged it.
  • πŸ—Ί Map at the top plots where hits happened, against the areas the alerts watch.
  • ✎ edits the alert, πŸ› shares it with a Pantheon, and πŸ—‘ deletes it.
πŸ› Setting up a Pantheon

Create one: open the πŸ› Pantheons board, press πŸ› New Pantheon, name it, optionally describe it, choose πŸ”’ Private (invitation only) or 🌐 Public (anyone can join), and press Create.

Invite people: reopen it, go to the Members tab, and enter a username or email address. They accept from the πŸ› panel on their own account.

Accept an invitation: the πŸ› button shows a count when you have one. Open the panel and press Accept under Invitations.

Join a public one: find it under Public Pantheons and press Join.

Share something: press πŸ› on any of your feeds, alerts, or favourite locations and pick the Pantheon. A copy appears on that Pantheon's board for every member, tagged with your name. Your original stays yours.

Manage roles: on the Members tab, an owner can promote members to admin, or transfer ownership by promoting someone to owner. The Access tab restricts who may invite and who may share.

Leave or delete: Leave at the bottom of the dialog for members and admins; owners must transfer ownership first, or use Delete Pantheon to close it for everyone.

πŸ¦‰ Athena β€” mapping what your group has covered

Athena is a board inside every Pantheon. It answers the question a stack of weekly reports cannot: not what did we say in March, but what have we been circling for three months without noticing β€” and what has gone quiet.

Open it: go to πŸ› Pantheons, open one, and press πŸ¦‰ Athena in the bar at the top. πŸ“‹ Shared feeds in the same place takes you back.

1. Make your themes. The board starts empty on purpose β€” the vocabulary is your group's, not ours. Go to 🏷 Themes, give each one a name, optionally a domain to group it under (each domain takes a colour on the grid), and optionally some keywords so uploads can suggest it. Owners and admins manage the list; every member can file against it.

2. File a document. Press οΌ‹ File a document and choose a .docx, .md or .txt. Bold headings become topics, "Heading: a line about it" works too, and any links become sources. A review step then shows everything it found with suggested themes β€” tick the ones that are right, untick the ones that are not, and edit any title β€” and nothing is filed until you press File it.

3. Read the grid. β–¦ Coverage is themes down the side and weeks across the top. Each cell is how many topics in that period carried that theme, shaded so the busy stretches stand out; press one to see exactly which topics were behind it. Group by switches between week, fortnight and month, and From/To narrow the range.

The other two views: πŸ”— Sources groups every link you have filed by the site it came from, most-cited first β€” a different question from what you wrote about, and often a more uncomfortable one. πŸ“„ Documents lists what has been filed, who filed it, and lets you remove one.

Your documents never leave your browser. The file is opened, read and discarded on your own machine; only the topics, themes and links you confirmed are sent to Delphi. The original is never uploaded and never stored.

πŸ‰ Typhon β€” live hazards on the map

Typhon draws what is happening right now β€” fires, air quality, earthquakes, storms, floods, volcanoes, droughts and severe weather β€” on the πŸ—Ί Atlas map, beside your watched places and alert hits.

Switch layers on: the panel on the right of Atlas has two collapsible folders. πŸ—Ί Base map picks the ground; πŸ‰ Typhon holds one switch per kind of hazard, with a switch above them all that turns the lot on or off at once. Both folders remember whether you left them open.

Fires have a shape. Where the agencies have flown a perimeter, Atlas draws the real mapped boundary. Where they have not β€” which is most fires β€” you get a dashed circle showing the approximate area burned, worked out from the reported acreage. It says which you are looking at when you press it. Outlines load from about the zoom of a large state and in; further out they would be smaller than the dot on top of them.

Get told when a fire is near a place you watch: open πŸ“ Locations on Atlas, edit a place, and set a wildfire distance. Any fire reported inside that ring raises an alert and draws as a πŸ”₯ flame instead of a dot. Tick email me to have it reach you when Delphi is closed. Air quality has no ring and never notifies β€” it is a value that exists everywhere rather than an event, so it is shown on the place instead.

Air quality on a watched place appears on its row and in its map popup, and always says what it rests on: an average of the monitors within five kilometres, or the nearest one with its distance stated.

πŸ‘€ Setting up how Delphi looks and behaves

Press πŸ‘€ in the top-right corner. Everything here is saved to your account and follows you to any browser or device.

  • Theme β€” dark, light, or match your system.
  • Compact mode β€” hides summaries and thumbnails to fit more headlines on screen.
  • Reading language β€” articles in other languages are translated into it. Choose "Original languages" to switch translation off.
  • Timestamp format β€” relative ("2h ago"), local time, UTC, or a military date-time group.
  • Hide events with no updates for β€” the staleness threshold used by feeds that tick πŸ•°.
  • Toast position β€” which corner notifications appear in.
  • Alert sound volume β€” 0 silences it. πŸ”” Test notification plays one so you can set the level.
  • Desktop notifications β€” alert pop-ups from your browser while this tab is in the background. Your browser will ask permission the first time.

The Help section at the bottom reopens this dialog, and πŸ†• What's new shows the full release history, newest first β€” the same list that appears by itself when something has shipped since your last visit.

⟳ Pulling news in now

⟳ Refresh on a column polls every news wire immediately, plus a bounded slice of the local city feeds. Use it after adding a source or a topic tracker.

⟳ in a column header re-runs that one feed's search against what has already been ingested. It is instant, and it's what you want when you've just changed a feed's criteria.

Neither is normally necessary. Sources refresh continuously on their own cadence, and the board updates itself as articles arrive.

Once the board you are looking at has finished loading, D.E.L.P.H.I. quietly loads the other boards behind it β€” one column at a time, so it never competes with what's on screen β€” which is why switching between 🏠 Home, πŸ“‹ My feeds and a πŸ› Pantheon is usually instant.

Columns are also kept on your own computer, so reopening Delphi paints the board from local storage before it asks the server anything β€” and the news you last saw stays readable even when the server is unreachable. That copy is bounded, belongs to your account alone, and is erased when you sign out.

🚫 "That password is one of the most common in use"

Delphi checks new passwords against the ten thousand most common ones β€” the list attackers work through first β€” and refuses them. It also catches the padded versions, so password, Password123 and P@ssw0rd1 are all the same answer.

This isn't about mixing in symbols. The reason is simpler: most break-ins aren't someone guessing your password, they're someone replaying an address and password taken from a different site that got breached. A password nobody else has ever used can't arrive that way.

What works: a few unrelated words β€” quartz-heron-lantern β€” or whatever your password manager generates. Both are accepted; the words are just easier to type on a phone. Delphi also refuses passwords containing your own username or email name, and ones that are only digits.

πŸ”‘ How do I change my password?

πŸ‘€ Settings β†’ Account security β†’ Change password. You'll need your current one, then the new one twice. No email involved, so it works even on a server with no mail configured.

Delphi asks for the current password even though you're already signed in, and that's the point of it rather than a nuisance: being signed in isn't proof you're the owner β€” it could be a laptop left unlocked. Without that check, a moment's access to your screen would be enough for somebody to set a new password and keep you out for good.

Your other devices are signed out when it succeeds. This browser isn't β€” you just proved you know the password.

Forgotten it entirely? Sign out, then use Forgot password? on the sign-in screen instead.

πŸ”’ Someone else may have been in my account

Go to πŸ‘€ Settings β†’ Account security β†’ Sign out everywhere. That ends every signed-in browser and phone on your account β€” including any you no longer have, and any that isn't yours. Signing out from πŸ‘€ in the corner only forgets this browser, which does nothing about a session somewhere else.

Then change your password using Forgot password? on the sign-in screen. Changing it also signs out every device, so doing both is belt and braces β€” either one on its own is enough to end the other sessions.

Your feeds, alerts, Pantheons, and settings are untouched by either. You'll just sign in again.

πŸ‘‹ Why was I signed out when nothing was wrong?

Sessions last 30 days, so one may simply have run its course. Three other things end one deliberately: you used Sign out everywhere, your password was changed (by you or an operator), or an operator suspended the account. Delphi says which of those it was on the sign-in screen rather than leaving you guessing.

An update that changes how sessions work will also sign everyone out once. That is deliberate and safe β€” it's the only way to be sure no older session survives the change.

πŸ” What only an operator can do

Most of Delphi is shared on purpose: the article database and the source catalog belong to everyone on this server, and any signed-in account can add a source or correct one. A few things are held back to operators, because they affect every reader at once and one machine serves all of them.

  • Deleting a source. It removes the outlet for everybody and takes its articles with it, with no undo. Anyone can ⏸ disable a source instead, which has the same effect on a board and can be reversed.
  • Rebuilding events, re-classifying or re-detecting languages across the archive, backfilling article text, and seeding the city catalog β€” each walks or rewrites every article stored, which would leave the server answering nobody while it ran.

⟳ Refresh now deliberately stays open to everyone: it is the one thing you can do about a feed that looks stale, only one poll runs at a time, and it is rate-limited rather than restricted.

πŸ›‘ Why some addresses are refused

Adding a source, or pointing an alert at a webhook, asks the server to fetch a URL on your behalf β€” and a server can reach addresses your browser never could, including the machine it runs on and anything else on its private network. Delphi therefore only fetches from public internet addresses, and says so plainly if you paste something else.

The check is repeated on every redirect, not just when you save, because a public address can answer with "go here instead". Feeds are also only fetched over the standard web ports.

If you are self-hosting and genuinely want Delphi to read a feed on your own network, that is a change to the server's code rather than a setting β€” deliberately, because the same switch would let every account on your server do it too.

πŸ›  Operator console

Operators β€” accounts named in the server's NEWS_ADMIN_USERS setting, or promoted by another operator β€” get an Operator section at the foot of πŸ‘€ Settings, with a πŸ›  Operator console button that lists every account on this instance. Nobody else sees that section.

  • Search by username or email.
  • Verify forces an email address to verified when the mail never arrived.
  • Make operator grants operator access; Demote takes it away. The last operator can't be demoted, and neither can you demote yourself.
  • Suspend blocks an account from signing in and ends the session it already has; Reinstate restores it.
  • Reset password sets a new one for someone locked out.
  • Delete removes the account with its feeds and alerts. Pantheons it owned pass to the next most senior member rather than being destroyed.
  • Devices lists what an account is being used on β€” the kind of device, its platform and browser β€” marking which are in use right now and when the others were last seen.
  • Device limit caps how many devices the account may be used on at the same time. Leave it empty to follow the server-wide default (NEWS_DEVICE_LIMIT); 0 means no limit.
  • Sign out devices clears the list and ends every session on the account. Use it when somebody is locked out by the limit and can't receive the emailed link β€” a lost phone, for instance, holds its slot until it falls quiet.

"In use" is not "signed in". A sign-in lasts thirty days, so counting those would report a phone somebody used once last month. Each row counts devices something has actually arrived from in the last few minutes; close a laptop and it stops counting shortly after. Several tabs on one machine count as one device. A browser whose site data has been cleared, or a private window, looks like a device that has never been seen before β€” devices are recognised by an identifier the browser stores, not by fingerprinting it.

Somebody who hits the limit is told which limit they hit and offered a link, by email, that signs the account out everywhere so they can start again on the device in their hand.

Accounts designated in NEWS_ADMIN_USERS can't be suspended or deleted from here β€” change the server setting instead.

⌨ Keyboard
  • Enter β€” in the search box, run the search; in the sign-in and add-source forms, submit them; in a keyword box, add the keyword.
  • Esc β€” close the add-source dialog.
  • Tab β€” move between controls. Whatever has focus is outlined in gold.
  • ← β†’ Home β€” resize the column whose edge has focus.

What the parts of D.E.L.P.H.I. are, and why they behave the way they do. For the steps to actually do something, switch to the πŸ“– How to tab.

πŸ“‹ Feeds vs πŸ”” Alerts β€” what's the difference?

Both use the same criteria (keywords, Boolean searches, countries, categories, map areas, importance…). The difference is posture:

A feed is a place you look. It's a column on your board that always shows the current matching articles, sorted and optionally grouped into events. Nothing interrupts you.

An alert looks for you. Articles are tested against your active alerts as they arrive β€” continuously, not on a fixed schedule, since each source refreshes on its own cadence. A hit is pushed live to the dashboard β€” toast, sound, bell counter, optional desktop notification β€” and stored in the alert's history with a map of where hits happened.

Rule of thumb: broad topics you check on your schedule β†’ feed. Narrow, time-critical triggers ("anything Critical inside this drawn box") β†’ alert.

Out-of-app delivery. An alert can also reach you when the dashboard is closed: tick βœ‰οΈ Email me (a digest to your account address each time it fires β€” needs server SMTP configured) and/or set a πŸ”— webhook URL to POST the matching hits as JSON (for Slack/Discord/your own service). Both batch per firing, so a busy alert can't flood you.

Convert any time. Both are built in the same wizard β€” pick with the πŸ“‹ Feed / πŸ”” Alert toggle at the top. Open an existing feed or alert with ✎ and flip that toggle to turn one into the other; every criterion carries over, and Save completes the conversion.

↔ Where column widths are stored, and why it matters

A column's width is a reading preference, not a property of the feed, so it is kept on your account alongside the theme and the timestamp format. Two consequences follow. It travels with you to any browser or device you sign in from. And widening a column on a Pantheon's shared board widens it for you alone β€” nobody else's layout moves, even though you are all reading the same shared feed.

Widths run from 240 to 1000 pixels. Below 240 a headline stops fitting on two lines; above 1000 a column stops being a column.

πŸ“‘ What restricting a feed to specific sources does

By default a feed or alert considers everything D.E.L.P.H.I. has ingested. Naming sources turns that around: only those outlets are searched. It is a filter like any other, so it combines with the rest rather than overriding them β€” a feed restricted to three outlets and asking for the keyword "flood" returns flood coverage from those three outlets, not everything they publish.

That makes an over-restricted feed the commonest cause of an empty column. If a feed you've narrowed to a handful of outlets stays quiet, it usually means those outlets haven't published anything matching, not that ingestion is broken.

If a source is later deleted, feeds pointing at it simply stop matching it; they don't silently widen to everything.

⚑ Why switching boards is instant

Delphi keeps the last contents of every column you've seen, and repaints from that the moment you switch, refreshing behind it. So a board you have already read comes back immediately rather than reloading in front of you.

It also warms the boards you aren't looking at. When the visible board has finished loading, the others are fetched in the background β€” one request at a time, where the board on screen gets two, and never before the visible one is done. Switching away stops it. A column fetched in the last couple of minutes is left alone, so moving back and forth between boards costs nothing.

Some of the work happens on your machine rather than the server, which is why parts of Delphi respond with no delay at all. Your browser decides which articles are near a πŸ“ favourite location, and which events are too stale to show β€” both are questions about data it already holds. So adding a location badges the articles already on screen, and changing the staleness threshold re-filters the board, without fetching anything.

This is why a switch can show news a few seconds old. Nothing is hidden by it: new articles push a refresh of the visible board as they arrive, the column's own ⟳ always re-queries, and so do ⟳ Refresh, saving an edit to a feed, and changing the staleness threshold.

🏷 What the rating beside an outlet's name means

Some headlines carry a small chip naming how reliable the outlet that filed them is considered to be β€” βœ“ Generally reliable, ? No consensus, ! Generally unreliable, ⚠ Deprecated or ⚠ Blacklisted.

It is not Delphi's judgement. The ratings come from Wikipedia's perennial sources list, a public list maintained by the Wikipedia community where every entry links to the discussion that produced it. The chip is a link: click it and you can read the argument and disagree with it. Delphi is passing on somebody else's published finding, with attribution, and is not asserting anything of its own about any outlet. The list is used under its CC BY-SA 4.0 licence.

No chip means nobody has assessed that outlet β€” never that it failed. The list covers roughly 620 publishers, which is a small fraction of the thousands Delphi reads. Most articles will never carry one.

On a feed card only the warnings appear. A chip reading "Generally reliable" beside every headline from a major paper is noise, and noise is what stops warnings being read β€” so favourable ratings are shown when you open a story, where you have gone to ask about that one article.

Political bias is deliberately not shown. There is no free, auditable source for it. The best-known one is one person's opinions, which its own site describes as "not a tested scientific method", and a label that changes how you read the news should be better founded than that. Factual reliability is a question with published reasoning behind it; political lean, for now, is not.

🌱 How Delphi decides a website is a news outlet

When an outlet Delphi has never seen turns up publishing in someone else's coverage, Delphi looks for that outlet's own feed and adds it β€” which is how the catalog grows toward wherever the news actually comes from. The risk is obvious: a ticketing calendar, a shop and a jobs board all publish feeds with exactly the shape of a news feed, and one of them (a record label's concert calendar) really did become a "national news" source and put gig listings into an energy feed.

So before adopting anything, Delphi reads the feed:

  • Dates in the future. An article is published when it is written, so a news feed is always in the past. An events platform dates each entry by when the event happens. This one needs no vocabulary in any language, so it works as well on a Japanese ticketing site as an English one.
  • Where the links point. A feed where nine in ten links go to /tickets/, /products/ or /jobs/ is not a newspaper. Judged as a proportion, because a real paper has an events section and an obituaries page and links into both.
  • What the text says. "Buy tickets", "add to cart", "apply now", prices.
  • Whether the headlines were written or generated. Real headlines share very few words with each other; ones built from a template share almost all of them.

Two of those signals are needed to decline a feed β€” one is not enough to overrule an outlet. Every auto-added source is also re-read about once a month as it is polled, so anything adopted under the older rules gets caught too. A source that fails is switched off, not deleted, with the reason in its status line in the Sources panel, and a source you added yourself is never switched off this way β€” you chose it, and this is a heuristic.

πŸ“Š How importance scoring works

Every article gets a transparent 0–100 score β€” no black box. It adds up:

  • Source reach β€” base score by scope: international 45, national 35, local 25; major wires (tier 1) +8, niche/local outlets (tier 3) βˆ’4. So the outlet decides 32 points across the whole catalog, and everything below decides up to 60. That is deliberate, and it has been both ways: reach was narrowed to a 15-point spread for a while, so that a local paper's report of two people dead could outrank a wire's council meeting. It is back to 32 because the narrow version made the minimum-importance slider β€” the filter every feed and alert uses β€” much worse at its job: with every outlet scoring within a few points of every other, a floor could no longer tell "an outlet worth reading has this" from "something on the internet has this". The cost is the old one: routine wire copy sits just under Home's Top stories threshold, and a single local report has to earn its way up there through breaking signals or corroboration.
  • Breaking signals β€” weighted terms in the headline/summary ("breaking", "earthquake", "state of emergency", "assassination"…, recognized in English and a multilingual core so foreign coverage scores too), capped at +30.
  • Geographic breadth β€” a story implicating two or more countries +6.
  • Corroboration β€” +8 for each additional outlet reporting a similar headline within 48h, capped at +24. Many independent outlets = the story matters.

Tiers: β–² Critical β‰₯ 80 Β· β—† High 60–79 Β· ● Notable 40–59 Β· β—‹ Routine < 40. An event's importance is its highest-scoring report. Filter any feed or alert with the minimum-importance slider.

And then it fades. That total is what a story was worth when it broke; what it is worth now falls as the story goes quiet. Nothing moves for the first six hours, and after that a score gives up half the distance to its floor roughly every two days. Without this a floor of 60 slowly fills with whatever was urgent last week, because two articles scored on different days were being compared as though they were not.

Age is counted from the last time the story was added to, not from when each article was filed β€” so coverage from Monday holds its value while the story is still running, and only starts falling once nobody is filing on it. That lift expires after two weeks, because coverage from three weeks ago is old coverage even when the story continues.

A score never falls below 40% of where it started, so the archive stays searchable: a Critical story from last year still outranks a routine one, and a search with a high floor still finds it. An article carries both numbers β€” what it is worth now, and what it scored when it broke.

🧡 Events, Story Focus, and dimming

Coverage of the same story from different outlets is clustered into an event (headline similarity, 72-hour rolling window). Feeds with "group into events" show one card per story with a report/source count. Clustering also uses language-invariant anchors β€” canonical city names (recognized across scripts, e.g. 東京 β†’ Tokyo) and significant numbers (a magnitude, a toll) β€” so a story's coverage in its own language groups with the English coverage, not as a separate event.

An event is not a separate thing to read: it is what a story looks like once more than one outlet has it. So there is one Story Focus either way β€” a headline opens at that report, a grouped card opens at the latest one β€” carrying the report you are reading plus, when others have it, the map, the timeline of every report, the outlets covering it and related stories. Opening a story marks its event read: it dims everywhere it appears (hover to read at full strength), on your account and on every device you sign in from.

Staleness: a feed can enable πŸ•° "Hide events with no recent updates" (wizard, Review step); the threshold is yours, in πŸ‘€ Settings. Hiding is display-only β€” clustering keeps attaching new similar reports to hidden events, so an event that gets an update reappears immediately with its complete timeline. Feeds can also be pinned to an explicit date range in the wizard's Refine step.

πŸ” Boolean searching β€” operators and the builder

Boolean searching uses operators to define relationships between keywords β€” requiring all terms, allowing any synonymous terms, or excluding unwanted concepts β€” instantly narrowing or broadening results. Searches match the article's headline, summary, and fetched body text.

  • AND (or just spaces) β€” narrows: all terms must be present.
  • OR (or |) β€” broadens: results may feature any of the terms.
  • NOT (or -term) β€” excludes words to remove irrelevant results.
  • "quotation marks" β€” exact phrase, in the exact order.
  • ( parentheses ) β€” group terms to control the search logic.

("supply chain" OR semiconductor) AND (china OR taiwan) NOT rumor β€” smart quotes pasted from elsewhere are cleaned up automatically.

Two more operator types: wildcards β€” strik* matches strike/strikes/striking, organi?ation matches one character (both work inside phrases; at least two literal characters required) β€” and proximity: earthquake NEAR/5 tokyo matches when the terms sit at most 5 words apart in either order (NEAR alone means NEAR/10; chains like a NEAR/3 b NEAR/3 c check each adjacent pair). Google writes proximity as earthquake AROUND(5) tokyo; both spellings work.

Order matters sometimes. NEAR ignores which term comes first. ONEAR/3 does not β€” Boeing ONEAR/3 crash is a crash of a Boeing, while crash ONEAR/3 Boeing is a crash into one. If you already write PRE/3 (LexisNexis) or W/3 (Factiva), both mean the same thing here.

Field operators point a term at one part of the article instead of all of it, which is the sharpest tool here for a query that keeps collecting the wrong thing:

  • intitle:solar β€” only the headline. A story that is about something says so there, so this is the strongest filter available; intitle:"solar farm" takes a phrase.
  • intext:solar β€” only the summary and the fetched body, never the headline.
  • inlede:solar β€” the headline, the summary and the opening of the article, and nothing after that. A news story says what it is about at the top; a word appearing two thousand words down is usually background, a "related" rail, or the page's own menu. This is the sharpest filter here after intitle:, and unlike intitle: it still finds a story whose headline is a pun.
  • source:Reuters β€” the publication's name.
  • site:bbc.co.uk β€” the site it was published on, and -site:example.com excludes one. www. is ignored.

Everything else in a search reads the article and nothing but the article β€” never the outlet's name, the web address, or the section it was filed under. source: and site: are the two exceptions, and they are exceptions because you typed them.

~word (synonyms) is not supported and says so rather than matching nothing: there is no thesaurus here, so write the alternatives yourself β€” (academic OR scholarly).

AND binds tighter than OR, as it does everywhere else. So "data center" OR datacenter NOT sports reads as "data center" OR (datacenter AND NOT sports) β€” the exclusion covers the second alternative and nothing else, and sports coverage matching the first one still arrives. Write ("data center" OR datacenter) NOT sports to exclude from all of it. The builder marks this one in amber as you type; it is a note, not an error, because sometimes it is exactly what you meant.

Searches read the whole article, not just what you can see on the card β€” a term buried in the body counts. So a story opened from one of your own feeds says why it is there: which of that feed's words are in it, where, how many times, and the sentence it sits in. When nothing in the headline or summary put it there the line turns amber, which usually means the words are in the page's own furniture rather than the reporting.

Passing mentions are dropped. A bare word can be in an article without the article being about it β€” a football kit colour called "Solar Yellow", a song called "Innocent Wind", a road called Coal Heritage Trail. The boolean is right and the result is useless, and no list of word senses can settle it, because the meaning is in the sentence. So a single word has to be prominent to count: named in the headline or summary, or said at least twice, or turning up alongside another of your terms. Quoted phrases are exempt β€” somebody who wrote "shale gas" has already been specific. Tick πŸͺΆ Keep passing mentions in the builder to switch it off for a feed that is deliberately hunting for rare single mentions.

A feed can hold several searches β€” each runs separately, all fill the same feed. Each row validates as you type, so a stray bracket is caught before you save rather than after.

🌍 Where the news comes from

A hand-curated catalog of around ninety sources across every continent β€” international wires, national outlets, local papers β€” plus the social platforms that publish open feeds: Reddit, Bluesky, Mastodon and YouTube. X, Facebook and Instagram publish none, so they can't be ingested. Feeds and alerts can filter by platform.

Local coverage for ~500 major cities worldwide. Each city has a local-news source of its own β€” that city's Google News edition, in the country's language β€” so filtering to a place, or drawing it on the map, surfaces genuinely local reporting rather than the national view of it. Auto-discovery then grows each city's real outlets, its newspapers and stations, into first-class sources over time.

Polling is continuous, not one big sweep. News wires refresh every few minutes and the city feeds every hour or two, less often for a city that has been quiet, with requests to any shared host paced so nothing arrives in a burst. Self-hosting? NEWS_SEED_CITIES=0 skips the city feeds, and NEWS_CITY_INTERVAL and NEWS_POLL_TICK tune the cadence.

None of it needs anyone signed in. The server polls whether or not a dashboard is open, and alerts reach your inbox while you are away. The columns on 🏠 Home are the same for every reader, so they are worked out as the news lands rather than when you ask β€” which is why Home is ready the moment you sign in, even on a device that has never opened D.E.L.P.H.I.

Saving a feed or alert with queries/keywords also creates a Google News tracker (the πŸ” checkbox) that ingests worldwide press coverage of your topic, so matches aren't limited to the catalog. Track topics manually in Sources (πŸ“° Press / πŸ’¬ Social), edit sources in place, and watch their health dots: green = last poll OK, red = the error is in the tooltip.

Anyone can add an outlet whose RSS or Atom feed they know, and it is polled on the same schedule as everything else. A URL that turns out not to be a feed doesn't disappear: the source stays in the list marked broken, where repair can work on it.

The catalog grows itself. Google News coverage names the outlet behind every story; when a cycle sees an outlet Delphi doesn't have, it looks for that outlet's own feed (homepage autodiscovery, then common feed paths), validates it, and adds it as a source β€” tagged auto-discovered in Sources, up to a few per cycle. Outlets without a usable feed are remembered and left alone. Set NEWS_AUTO_DISCOVER=0 on the server to turn this off; delete or disable any auto-discovered source you don't want.

And it prunes itself. A source that fails five polls in a row stops being one. If it never carried a single story it is deleted outright β€” a catalog that grows by itself otherwise fills with feeds that 404 and gets re-asked forever. If it published, it is retired instead: no longer polled, marked 🚫 in Sources, everything it gathered still readable, and β–Ά puts it back if the feed returns. Sources somebody added by hand are always retired rather than deleted. Automatic repair gets its attempt first, so a feed that merely moved is rewired rather than dropped.

A feed answering isn't the same as a feed carrying news. One that has been polled and never produced an article is marked πŸ•Έ nothing yet β€” search Sources for silent to list them, or retired for the ones that have stopped. πŸ‘€ Settings β†’ Service health counts both, which is how you tell a catalog of a thousand working sources from a thousand rows.

For matching, each new article's page is fetched once and reduced to text, so criteria see the whole story, not just the headline.

πŸ“ Favourite locations are a standing interest rather than a filter. A place plus a radius marks matching articles everywhere they appear β€” in every feed and alert, not only the location's own β€” so a story you would otherwise have skimmed past in a general column announces itself. They also share one πŸ“ Favourite Locations column, whose areas are OR'd β€” so watching a dozen places costs one column, not a dozen. Place lookup answers from D.E.L.P.H.I.'s own gazetteer first β€” about 480 cities and 154 countries, instantly and without asking anyone else. Anything it doesn't know (a street address, a town, a district) is looked up through OpenStreetMap and listed below the local matches, marked πŸ“ and credited. That request is made by this server, never by your browser, so the outside service sees D.E.L.P.H.I. and not you. Self-hosting and would rather it never happened? NEWS_GEOCODER=off keeps everything local, and NEWS_NOMINATIM_URL points at your own instance.

Paywalled outlets. Mark a source πŸ”’ paywalled when adding or editing it (the article page is behind a paywall, but the RSS feed's headlines and summaries usually aren't). Delphi then ingests those headlines and summaries β€” enough to match feeds and alerts on β€” but skips fetching the locked article body, so nothing is polluted with paywall stubs. A row from a paywalled source is marked πŸ”’, and opening it offers πŸ”“ archive.ph beside the outlet's own link β€” typically a readable snapshot of the story.

Retention: articles are kept for 30 days by default, then pruned to keep the system fast (self-hosting: NEWS_RETENTION_DAYS, 0 = keep forever). Date-range feeds can only reach back as far as retention.

πŸ—Ί What a map area actually matches

An area is the strictest filter D.E.L.P.H.I. offers: only news it can geolocate inside the shape matches. Location comes from the places named in the article, falling back to the outlet's own country when the text names nowhere in particular.

Geotagging covers all 154 countries plus ~480 major world cities, native-script names included, so 東京 and Ψ§Ω„Ω‚Ψ§Ω‡Ψ±Ψ© are recognized as readily as their English spellings. (That figure is separate from the ~500 city sources above: one is what Delphi can recognize in an article, the other is what it subscribes to.) A city with no exact coordinates sits at its country's centre β€” approximate on the map, but never in the wrong country.

Areas work identically for alerts, which is where they earn their keep: "tell me about anything Critical inside this box" is the classic use.

🌐 Translation

Pick a reading language in πŸ‘€ Settings (defaults to your browser's). Articles in other languages are machine-translated on the fly and marked "🌐 translated from XX"; translations are cached so each article is translated once. Choose "Original languages" to turn it off.

Each article's language is detected from its text, not taken from its source's setting β€” so a foreign-language story from an English-tagged aggregator or an auto-discovered outlet still translates correctly. (If a translation call to the provider fails, the original is shown; it retries on the next load.)

πŸ‰ Why does a fire show a circle instead of its outline?

Because nobody has flown it yet. The federal agencies map a perimeter for fires big enough to be worth the flight, and most fires never are. Rather than show nothing, Delphi draws a dashed circle showing the approximate area burned, worked out from the reported acreage.

The two are deliberately drawn differently and they are different claims. A mapped perimeter is solid: it says where the fire's edge is. The circle is dashed and hollow: it says how much has burned and nothing at all about the shape, or which way the fire has run. A hundred-thousand-acre fire is a circle about eleven kilometres across, and the real burn is never that neat.

A perimeter is also not as live as the fire it belongs to. Acreage updates with every situation report; the outline updates when somebody flies it, which for a big fire is roughly nightly. The popup gives the outline's own date for that reason.

🌫 Why does an air reading say "not an official AQI"?

Because it was worked out here rather than published by an agency, and the difference is worth knowing.

Inside the United States, readings come from AirNow β€” the EPA's own regulatory monitors, reporting a finished AQI on the published scale. Those say AQI 42 Β· Good with no caveat.

Everywhere else, readings come from OpenAQ, which aggregates government monitors worldwide but publishes a raw measurement rather than an index. Delphi converts it using the EPA's breakpoint table β€” but that table is defined over a 24-hour average for particulates and an 8-hour average for ozone, and what we have is one recent reading. The category is meaningful; the number is not the official AQI, so it says so.

Community sensors (PurpleAir, where an operator has supplied a key) say more than that. A light-scattering sensor on somebody's fence over-reads, and over-reads more in damp air, so the EPA's published humidity correction is applied and the popup shows the raw figure beside the corrected one. Sensors the network itself doubts, and sensors indoors, are dropped. Where a regulatory monitor is in range of your place, it always wins β€” the community network's value is coverage between the good instruments, not a rival reading beside one.

Two scales are never averaged together. A place reports one network, and says which.

πŸ¦‰ What does Athena actually count, and who can see it?

It counts topics you filed, tagged with themes you chose. Nothing is inferred from your news feeds and nothing is counted that a person did not confirm β€” the upload step suggests themes from your keywords, and every suggestion is a toggle you press before anything is saved. A coverage figure is only worth reading if somebody agreed to the tags behind it.

Everyone in the Pantheon can see what has been filed and file their own. Owners and admins manage the theme list, because a theme is what the figures are counted in and renaming one silently changes every number on the board. You can remove a document you filed; an admin can remove any.

The documents themselves are never stored. A .docx is a zip of XML, and both halves are unpacked in your own browser. Only the structure you confirmed is sent. The original is never uploaded and never stored β€” Delphi holds no copy of it and there is nothing to download back.

Deleting a theme removes it from every topic already tagged with it, and its column of figures goes too. That is not recoverable β€” the tag is gone, not hidden.

πŸ‰ Why is a Typhon layer empty?

An empty layer and a broken one used to look identical, so the map now says which it is directly under the switches, and πŸ‘€ Settings β†’ 🩺 Instance carries the same in one line.

The usual reasons: nothing reported in this view (the honest and most common one β€” pan or zoom out); this instance has no API key for that provider, which an operator fixes in a minute; the provider could not be reached; or the whole feature is switched off with NEWS_HAZARDS=0.

Wildfires are United States only, from the federal interagency feed, and the layer's label says so. Earthquakes, storms, floods, volcanoes and droughts are worldwide. Severe weather is United States only and only the warnings that carry an actual polygon, which is the sharp-edged half β€” tornado, severe thunderstorm, flash flood.

Community air sensors only appear near a saved place. That network has tens of thousands of sensors and Delphi asks only about the ground around locations somebody is watching, so a cluster of them by your places and none elsewhere is correct rather than a fault.

πŸ› Pantheons β€” organizations that share feeds and alerts

A Pantheon is an organization inside Delphi β€” a named group of accounts with a board of its own, sitting in the view switcher beside 🏠 Home and πŸ“‹ My feeds.

Sharing copies rather than moves. Sharing a feed, alert, or favourite location puts a copy on the Pantheon's board for every member, tagged with who shared it; your original stays yours and the two are independent from then on. Shared alerts fire live for all members, and their history β€” including what has been marked seen β€” is shared triage rather than one person's. Any member can πŸ“Œ a shared feed to take an editable copy back to their own board.

Visibility & access limits: a Pantheon is πŸ”’ private (invitation only) or 🌐 public (listed in the panel's directory, anyone can join). Owner and admins can also restrict who can invite and who can share to admins only. Roles: πŸ‘‘ owner (settings, roles, delete, ownership transfer), πŸ›‘ admins (invite, manage members, edit/remove anything shared), πŸ‘€ members. Editing or removing a shared item is limited to whoever shared it plus owner/admins.

πŸ” Accounts, privacy, and what's shared

Private to your account: feeds, alerts and their history, viewed-event dimming β€” unless you deliberately share them with a Pantheon. Sign in with username or email from any device.

Shared by everyone on this server: the article database and the source catalog β€” one ingestion pipeline feeds all users, and any user can add or edit sources. Display preferences (theme, timestamps, sound, reading language) are saved to your account and follow you across devices.

πŸ†• Staying current β€” the automatic guide and the What's-new popup

This dialog opens by itself on your first visit, and again whenever you return after a week or more away, showing the πŸ“– How to tab β€” a quick refresher costs nothing.

If anything shipped since you last saw it, a πŸ†• What's new popup lists every update you missed, grouped by date (miss three updates, see all three). This works live: sessions that are already open β€” even idle in a background tab β€” get the popup within minutes of an update landing, no re-login needed. Delphi tracks exactly which entries each account has been shown, so it works across devices and catches same-day changes.

Both are always available on demand: ❓ in the top-right corner opens this help, and πŸ‘€ β†’ Help has the same buttons.

Start from the symptom. Each heading is something you might be seeing; underneath is why it happens and what to do.

Poll every news wire now Delphi polls continuously on its own β€” wires about every 5 minutes, city feeds every 90. This asks for all of them at once, which is worth doing when a story is breaking or a feed you have just built looks empty.
πŸ“‹ A feed or column is empty

Open it (✎) and use Preview matches while removing one filter at a time β€” the culprit is usually an over-tight combination rather than any one criterion. For niche topics make sure the πŸ” worldwide-coverage box is ticked, then press ⟳ Refresh now above and give it a cycle or two.

Restricting to specific sources is the commonest single cause: it combines with your other filters rather than replacing them, so a feed narrowed to three outlets and asking for a keyword returns only that keyword from those three outlets.

If the column says every match has been hidden as stale, that is the πŸ•° setting β€” raise or clear Hide events with no updates for in πŸ‘€ Settings.

πŸ•° Nothing new is arriving

Check the articles (24h) and sources healthy tiles at the top of the board. A tile reading …/N means the first poll since startup has not finished yet.

Articles older than 30 days are removed to keep the archive fast, so a feed about something that has gone quiet empties out over time rather than keeping its old coverage.

⟳ says a poll is already running: the rolling poller is mid-cycle. Only one runs at a time, so results land when the one in flight finishes β€” usually within seconds.

πŸ”” An alert never fired

Alerts are tested as articles arrive, not retroactively. A new alert says nothing about what is already in the archive β€” to see whether its criteria are right, open it with ✎ and use Preview matches, which runs them against everything already ingested.

Confirm the alert is active, and remember that every criterion has to match at once: an alert with a keyword and a country and a minimum importance fires only on articles satisfying all three.

Emails not arriving: out-of-app delivery needs SMTP configured on the server. Without it, βœ‰οΈ Email me stays silent and the alert still fires normally in the dashboard.

πŸ“‘ A source shows a red dot

Hover it in Sources for the exact error, and note that Delphi tries to fix these itself. After two failed polls with a permanent-looking error (403/404, "not a feed", parse errors), it hunts for the outlet's real feed β€” homepage autodiscovery, common feed paths, then a Google News feed scoped to the outlet's domain as a last resort β€” validates the candidate, and switches over (marked "πŸ”§ repaired"; the original URL is kept in the tooltip).

Press πŸ”§ on any failing source to force an attempt right now. 429 just means the host is rate-limiting and backs off on its own. If repair finds nothing, the outlet is likely gone β€” edit the URL in place or delete the source.

πŸ” A search finds less than you expected

Quoted phrases match exactly, on whole words β€” "crypto mine" will not match "crypto mining". Use * for a word stem (crypto*) or list the variants with OR.

Delphi searches only what it has ingested from its own sources, and matches the headline, the feed's summary, and the article body where it could be fetched. Paywalled outlets are stored headline-only by design, so their coverage matches on the headline alone.

βŒ› "Failed to load" on a column

The server didn't answer within 30 seconds and that column had nothing cached to fall back on. A column that has loaded before keeps its last contents and says they're stale instead, so this is what a first load looks like when the server is struggling.

Every response carries a Server-Timing header with how long the server itself took β€” visible in your browser's network panel β€” and the server logs a warning for any request over 3 seconds (NEWS_SLOW_REQUEST_S), naming the path. If every path is slow, the machine is short of CPU; if one is, that feed's criteria are expensive. Self-hosting on a shared vCPU is the usual answer: continuous ingestion spends the burst allowance and everything is throttled after that.

⚠ An error message with a reference code

When Delphi hits a bug it can't handle, it writes the failure to the server's log with a short code and shows you the same code β€” for example (reference 4f2a1c). Quote it when reporting the problem and whoever runs this server can find the exact failure, with its full stack trace, instead of guessing from a description.

A message like that always means nothing was saved. It is safe to try the same thing again; if it fails the same way twice, the second reference is worth quoting too, because it proves it is repeatable rather than a one-off.

The code identifies one moment in the log and nothing else β€” it is not an account number and reveals nothing about you.

⚑ "Live updates are disconnected"

Delphi holds an open connection to the server so alerts can arrive the moment they fire. If that connection drops, this banner appears above the board β€” and while it is showing, alerts will not reach this tab and columns stop refreshing by themselves.

Brief drops are normal and silent: deploying an update severs the connection, as does a laptop going to sleep. The banner only appears after several failed reconnections, which means something is actually wrong β€” usually the server restarting, a proxy that closes idle connections, or a network that blocks streaming responses.

Reloading the page is the fix in nearly every case. News is still being collected on the server throughout, so nothing is missed permanently β€” the board catches up as soon as it reconnects.

βœ‰οΈ Emails aren't arriving

Verification and password-reset messages need SMTP configured on the server. If it isn't, Delphi says so where you asked rather than pretending a message is on its way, and new accounts are verified automatically instead.

If mail is configured but nothing arrives, an operator can see the reason under Service health in the operator console β€” it names which setting the relay objected to (credentials, the From address, the port and encryption combination) rather than only recording it in the log.

Reset links are valid for one hour. Requesting a new one invalidates nothing, so if you're unsure how old a link is, just ask for another.

↔ A column won't resize

Columns are dragged by their right edge only. Take hold of the right border of the column you want to change β€” the line lights up gold when you are on it β€” and drag. Double-click that edge to reset the column to the default width, or focus it and use the arrow keys (hold Shift for bigger steps).

Widths run from 240 to 1000 pixels, and are saved to your account rather than to the feed, so they follow you between devices and never move anyone else's layout on a shared Pantheon board.

πŸ†• What's new

D.E.L.P.H.I. β€” Digital Exploration and Layout for Publicly Harvested Intelligence

D.E.L.P.H.I.

No account? Create one Β· Forgot password?

Back to sign in

Already registered? Sign in

⚠ Live updates are disconnected. Alerts won't reach this tab, and the board won't refresh by itself, until the connection is back. Delphi is still collecting news on the server β€” reloading usually fixes it.
What your alerts have found inside the view.
Your alerts
Reports from inside the places the map is showing.
Your places

Elsewhere

…or click the map

πŸ—Ί Base map
πŸ‰ Typhon

Your dashboard is empty

Create a feed to start monitoring news β€” filter by country, category, keywords, Boolean searches, importance, or an area you draw on the map. Or open 🏠 Home for Delphi's curated overview, and press πŸ“Œ on any column there to make a copy of it your own.

Sources

πŸ¦‰ Athena

A Pantheon is an organization inside Delphi: invite other accounts and share feeds and alerts with everyone in it. Each one gets its own board beside 🏠 Home and πŸ“‹ My feeds.

Public Pantheons

Invitations

Your Pantheons

πŸ›  Operator console

Every account on this instance. An operator is either named in the server's NEWS_ADMIN_USERS setting β€” those accounts can't be demoted, suspended, or deleted from here β€” or promoted by another operator below.

Service health

One-off: rewrite the database so deleted news gives its disk space back. Only needed on databases made before Delphi set this up at creation. The site is unresponsive while it runs β€” minutes on a large archive β€” so pick a quiet moment.
Download the part of the database that cannot be collected again: accounts, columns, alerts, pantheons, watched places and hand-added outlets. The news itself is not included β€” the feeds provide that. The file contains password hashes and alert webhook addresses, so keep it somewhere you would keep the database.

Access & payment

…

Invitations

A code that lets whoever redeems it use Delphi for nothing, permanently. Hand it over however you like β€” the link below fills it in for them. Revoking a code stops it being used again; it does not take access away from anyone who already used it (do that on the account).

Accounts

New feed

What should this watch for? A name and a couple of keywords are enough to start; Boolean searches are there when you need to be precise. Only the name is required β€” leave the rest empty and the feed matches all the news there is.

Boolean searches (optional β€” AND or spaces narrow, OR broadens, NOT or -term excludes, "quotes" match exact phrases, parentheses group; plus strik* wildcards, NEAR/5 (or AROUND(5)) proximity, and intitle: / intext: / source: / site: to aim a term at one part of the article. Each search runs separately; matches from all of them populate this one feed)

Narrow to places β€” or skip this step entirely for worldwide coverage. Countries match where the news is about (mentioned places or the outlet's home). Drawing on the map is the strictest filter: only news geolocated inside the shape matches.

Geographic area
No area set

Optional refinements. Anything left untouched stays wide open.

Source scope
Platforms
Languages Recency window
Date range (optional β€” both ends included; narrows further alongside the recency window rather than replacing it)
Pull only from specific sources (optional β€” all sources)

Check the summary, preview the live match count, pick how it displays, and save.

Sort by

Add a source

Delphi polls the feed on its own schedule and adds whatever it publishes. If the URL turns out not to be a feed, the source is left in place and marked broken β€” πŸ”§ in the list tries to find the outlet's real feed.

Check before filing

πŸ¦‰ Athena

Athena maps what your group has actually covered. File the reports you write and the source notes behind them, tag each item against themes of your own choosing, and the coverage grid shows how often each theme has come up, week by week.

It answers the question a stack of weekly reports cannot: not what did we say in March, but what have we been circling for three months without noticing β€” and what has gone quiet.

How it works

  1. Make your themes. The board starts empty on purpose β€” the vocabulary is yours, not ours. Group them into domains (Reputation, Policy, whatever you track) and each domain takes a colour on the grid.
  2. File a document. Drop in a .docx, .md or .txt. Its headings become topics and its links become sources. Themes are suggested from the keywords you gave them, and you confirm every one before anything is filed.
  3. Read the grid. Themes down the side, weeks across the top, one cell per intersection. Press a cell to see exactly which topics were behind it.

Your documents never leave your browser. The file is opened, read and discarded on your own machine; only the topics, themes and links you confirmed are sent to Delphi. Everyone in this Pantheon can see what has been filed and file their own.

New Pantheon

Members share feeds and alerts here. A Pantheon gets its own board beside 🏠 Home and πŸ“‹ My feeds, and shared alerts fire for everyone in it.

Only the owner and admins can change these.

Change password

Your other signed-in devices will be signed out β€” that is usually the reason for changing a password. This browser stays signed in, because you have just proved the current one.

Story

From the article

Extract only β€” open the original for the rest.

Every report on this

Covered by

Related stories

Details

πŸ”“ archive.ph Open original β†—