Skip to content
Mera News

Architecture

Mera splits work between your phone and a few services. The phone holds what's personal. The services hold news, accounts and billing.

The parts

PartWhat it doesSource
Mera appHolds your facts, topics, feed and chats. Chooses and ranks. Runs the encryption.Source-available
Inference gatewayChecks your session and passes encrypted AI requests to NEAR AI.Repository public
NEAR AIRuns AI models inside secure hardware. Operated by NEAR AI.Third party
Auth serviceSigns phones in, holds accounts, serves the public publication list.Private
GraphQL APITakes topic text, returns articles. Serves World, Search and publication pages.Private
News preparationReads publishers' feeds and prepares articles.Private

Mera's services run on Google Cloud. The public hostnames are graphql.mera.news, auth.mera.news and inference.mera.news. This website is served separately and takes no part in the app's data flow.

How a feed update works

  1. Topics. Your phone turns your facts into short topic phrases, on the phone or in Private cloud. The phrases are stored on the phone.
  2. Request. The phone sends those phrases to the GraphQL API, with any countries you follow for top headlines.
  3. Candidates. The server answers with article identifiers.
  4. Articles. The phone asks for the articles it doesn't already have, by identifier. The server counts how many it delivered that day, for your plan. It doesn't store which ones.
  5. Ranking. Your phone ranks each candidate against your profile and writes a short note, on the phone or in Private cloud.
  6. Feed. The results are saved on the phone. The server never sees a score or a note.

When you tap through, the publisher's page opens in an in-app browser.

Silent push notifications can wake the app to do this in the background. In Private cloud, the phone prepares and encrypts the work itself. With On this phone, ranking happens when you open the app.

The server boundary

The steps that prepare news on the server aren't documented here. Only what crosses the boundary is.

DirectionAt the server boundary
Into MeraPublishers' RSS and Atom feeds
In from your phoneTopic text, country scopes, paging cursors, article identifiers
Out to your phoneArticle identifiers, then article records such as headline, link, image address, publication, country, language and the feed's description, which is used to judge relevance and never shown

The feed request format has no field for your facts, places or topic weights, and widening it would be a privacy change. A topic phrase can still name a place, as "Amsterdam local news" does. You can read the format in schema.gql in the app repository.

How an AI request works

  1. The phone fetches the public key of the model's secure environment.
  2. It encrypts the message content to that key on the phone.
  3. It sends the request to the gateway with your session token.
  4. The gateway checks the token and forwards the request to NEAR AI without reading the content.
  5. The secure environment decrypts, runs the model and encrypts the reply back to your phone.

Private inference covers this in depth, including what isn't checked.

Other requests that reach a server

A few features send readable text or an article identifier, because of what they do:

  • Web search in chat sends search words through the gateway to a search provider.
  • Search in the app sends what you type to the GraphQL API.
  • Place search sends what you type to find a city.
  • Fact checks send short search words or an article identifier.
  • Opening an article asks for its related coverage. From World, Search, a shared link or a followed story, it also fetches the article by identifier.

What's stored where covers each one.

What the server is built not to do

  • No collection links a user to a topic. Topics are text-keyed and have no owner field.
  • No collection links a user to an article.
  • No behavioural analytics run in the app or on the server. Mera's internal numbers come only from what it already keeps to run the product, such as daily usage counts.

These are design rules for code that isn't public yet. See Known gaps.