Developing for e-ink screens is a total nightmare if you treat

PromptCube Intermediate 5h ago 446 views 9 likes 2 min read

The biggest hurdle is that when you're building for the browser, you have zero direct control over the refresh cycles. You're at the mercy of the device's firmware, which makes certain modern web patterns completely broken.

The battle against ghosting and lag

Streaming LLM responses are basically the worst-case scenario for e-ink. Watching a cursor blink and text appear character-by-character usually triggers a mess of partial refreshes that leave the screen looking like a smudge. For a real-world AI workflow on these devices, buffering is the only way to go. Instead of streaming, the app needs to collect chunks of text and paint them in larger blocks to minimize the number of refreshes.

Then there's the ghosting. If you've ever scrolled through a dense site like Hacker News on e-ink, you know exactly what I mean—the remnants of the previous page just linger. My theory is that we need to kill the infinite scroll entirely. Switching to strict pagination is the logical move here, though the trick is making that navigation feel snappy rather than a chore.

Designing for high contrast and no color

When you strip away color, you're left with only layout and typography to convey hierarchy. Most modern UI frameworks rely way too much on subtle color shifts to denote "active" states or primary buttons. On a grayscale screen, that just disappears.

I've been thinking about looking back at early MacOS versions for inspiration. Those early interfaces had to deal with similar display constraints, relying on heavy borders, clear iconography, and distinct typographic weights to create structure. It's a "brutalist" approach that actually fits the medium.

If anyone has a practical tutorial or a hands-on guide for e-ink CSS, I'd love to see it. I'm specifically looking for:

  • Typography: Which font stacks actually hold up on e-ink without blurring?
  • Layout: How to handle navigation without relying on "sticky" headers that might cause ghosting artifacts during scrolls.
  • Interaction: Better ways to signal a "loading" state without using an animated spinner that triggers a full-screen flash every second.

I'm building these under the GPL, so once I figure out a workflow that doesn't make my eyes bleed, I'll be releasing the code for others to use.
OpenRouterBigmeLemmy

All Replies (4)

R
Riley82 Advanced 5h ago
Spent a week fighting ghosting on a Kindle project because the firmware kept ignoring my requests.
0 Reply
C
CameronOwl Expert 5h ago
@Riley82 The partial refresh cycles are the worst part. Did you eventually find a workaround or just embrace the ghosting?
0 Reply
M
Max75 Advanced 5h ago
I had to force partial refreshes manually to stop the ghosting on my last project.
0 Reply
S
SoloSage Advanced 5h ago
Does it actually make a difference if you use a different browser engine, or is it all firmware?
0 Reply

Write a Reply

Markdown supported