# Known limits

## Browsers

The browser tests run in Chromium, Firefox and WebKit, in the `en-GB`
locale and the `Europe/Lisbon` time zone. The admin and the news need a
browser with custom elements and `Intl.DateTimeFormat`.

## Databases

Tayori runs on PostgreSQL and SQLite. MySQL is not supported: the
segments are a PostgreSQL array, and a JSON array in SQLite.

## Many entries

Reading the news is a query by publication time, with the segments in
the database; the admin's list of entries loads them all, with a search
and filters. Thousands of entries are fine; the admin has no paging yet.

## Unread

Tayori keeps one time for each reader, not a row for each entry: it
knows what was published since the reader last looked, not which entries
they read. The count stops at 99.

## Scheduling

A scheduled entry is published at its time (it shows to readers from
then on); its announcement (to open pages and the notifier) comes within a
minute on the node that reaches it first, or at once on the node of the
admin who scheduled it. What it sends (emails, webhooks, the notifier)
is retried by Oban when Tayori has it, and is lost with the node that
sends it when it has not: see [Notifications](notifications.md).

## Time zones

The admin picks a time in their browser's time zone when your app has a
time zone database (`tz` or `tzdata`); else in UTC, and the editor says
so.

## The JSON API

It reads the reader from your app's session, on your app's origin. On
another origin (the `:embed` feature), from a token your server signs,
valid for a day: a reader's segments are those of when it was signed.
The element asks the count every few minutes; it has no socket. See
[Any frontend](any_frontend.md).

## AI

The model's answer is a suggestion; it can be wrong. Tayori asks it never
to invent a detail, and puts nothing in an entry the admin did not
accept.

## Search on SQLite

The search ignores case. On SQLite it does so for ASCII letters only:
"ação" finds "ação" and "Ação" only where the accented letters have the
same case. PostgreSQL has no such limit.
