Docs/ Platform & apps

Performance & local-first

Sub-100ms interactions via local-first caching and virtualised lists.

Aiemaily is built around a local-first architecture: your inbox paints from a local cache before the network responds, then syncs in the background — making interactions feel instant even on slow connections.

Local metadata cache

When you open your inbox, Aiemaily renders from a locally stored metadata cache — sender, subject, date, read state, labels — before a single network byte has returned. The server response arrives shortly after and any changes (new mail, status updates) merge in silently.

This pattern means the inbox is never a blank loading state. Even on a congested network, you can start triaging immediately.

Cache vs. offline

The metadata cache is an in-memory and session-storage structure, not a persistent disk cache. It makes loading fast; for true offline reading see 'Installable PWA & offline'.

Virtualised lists

No matter how many thousands of threads are in a mailbox, the DOM only ever contains the rows visible in the viewport plus a small overscan buffer. Rows outside the viewport are recycled as you scroll.

This keeps scroll frame-rate smooth and memory usage constant — a mailbox with 50 000 threads behaves identically to one with 50.

What virtualisation means in practice
Threads in inbox50 000
DOM nodes rendered at any moment~40–60 rows
Memory growth as inbox growsConstant
Scroll performance60 fps target

Realtime sync

Aiemaily maintains a persistent realtime connection (via Appwrite Realtime) so new mail, label changes, and read-status updates propagate to every open surface the instant they are recorded on the server.

There is no polling interval. The inbox updates live — a new message appears in your thread list within moments of arriving, without requiring a refresh.

Multiple devices, one view

Archive a message on your phone and it disappears from your laptop's inbox in real time. Read state and AI decisions sync the same way.

Optimistic updates

Actions like archiving, labelling, starring, or marking read are applied locally and reflected in the UI immediately — before the server confirms them. If the server rejects an action (e.g. a network error), the UI rolls back and shows a retryable error.

This eliminates the latency of waiting for a round trip on every interaction, keeping common gestures feeling instant.

Asset and font loading

Critical CSS is inlined in the initial HTML payload; non-critical styles are deferred. Fonts are subset to the characters needed for each locale, reducing transfer size. Route-based code splitting ensures you only load the JavaScript required for the current view.

Aiemaily targets a Largest Contentful Paint under one second on a standard broadband connection and sub-100 ms response time for all in-app interactions once loaded.

Frequently asked

Ready to try it?

Start free