frontpage.
newsnewestaskshowjobs

Open Source @Github

fp.

Open in hackernews

Ask HN: In your experience, what are sound conventions for e-ink UI development?

30•BoxOfRain•2d ago
TL;DR I'm looking for advice regarding browser-based frontend development from people with practical e-ink UI experience. My specific device is a Bigme Hibreak Pro BW but I'm aiming for relatively broad compatibility.

I've recently switched to a black-and-white e-ink smartphone with the motivation of withdrawing from the attention economy somewhat and it's a genuinely cool piece of hardware. While the majority of my needs are met by this device there are a few things I'd like to have which don't work terribly well with the e-ink screen. I'm planning to implement a couple of projects to fill these gaps, at the moment I'm planning a Lemmy frontend and an OpenRouter frontend specifically for e-ink. Both are to be browser-based rather than native, to maximise compatibility and because I'm much more familiar with the web than Android development.

I would like to study the principles of sound e-ink UI design before approaching these projects to avoid creating unusable slop, in particular I am not entirely sure how to approach treating the refreshes as a first-class aspect of the design when I can't control them from the browser, and how to apply comprehensible UI conventions when a greyscale, high-contrast display is the target.

Some specific problems I have out of the gate are:

* Streaming LLM output to the screen is basically the worst-case scenario for e-ink, I need to buffer it and paint it in chunks without this becoming horrible to use.

* Ghosting is a serious problem, browsing HN on the device is a particularly obvious example. Ideally I want to avoid scrolling as far as possible and rely on pagination instead, which I feel has the potential to become annoying if not done well.

* Given I must rely exclusively on layout and type to carry the UI, what design languages emphasise these qualities best? My gut says the early Mac OS versions wouldn't be a bad place to start, this seems relevant given the display constraints of the early macs.

I would greatly appreciate any advice on the design and implementation of e-ink UIs from people with practical experience in this area. This is purely to scratch a personal itch, once they're nailed down I'll put them out in the wild under the GPL.

Comments

jeffnash•1d ago
If you find out, let me know! I have been working on a port of Excalidraw to my ReMarkable Pro and it's opened my eyes to how much we take for granted in terms of UI interactions when we assume we have a 30+hz screen with no to minimal ghosting. Layout has to become as monotonic as possible, especially in the absence of user interaction; in other words, the app itself should never be doing anything to disrupt prior renders on its own unless you are clearing the whole page. When it is the user interacting with the app, try to minimize the number of intermediate states their interactions produce. This does NOT mean "just don't render those intermediate states", however. It means make the interactions themselves not require intermediate feedback. Essentially, users (and developers) are so accustomed to just being able to manipulate things with no side effects that you have to make every possible interaction as intentional as possible, leaving them less frustrated when they do see a refresh. If an operation is going to cause a refresh, it should happen at a moment the user already understands as a semantic boundary.

You obviously cannot always avoid this, so when there is a hard requirement for continuous feedback, use a degraded/cheap transient representation and refresh at commit of that action. With E-Ink, every interaction has to be a trade off between ghosting and latency. One common pattern I ended up coming back to is intermediate states that optimize for latency at the expense of ghosting until the UI action is 'complete'. This will allow refreshes to be associated with the satisfaction of finality. Funny enough, many of them harken back to old UI paradigms from when computer graphics weren't as powerful as today. When resizing, I simply draw the outline of the shape with a fast update mode that tolerates more ghosting until the user releases their finger or stylus, at which point, after a small lag to account for an 'oops, just a tiny bit bigger/smaller', I do a localized refresh of the union of the old + new area.

The outline itself is deliberately faint, so the refresh doesn't have to be as intense if its a small delta.

For your streaming LLM case, I would recommend doing it in chunks, like you said, perhaps doing a hard refresh of everything but the input box + moving the tail of last sent message + beginning of stream to the top upon send. Of course, this implies that you know exactly how long the response will be, which you don't. The challenge will be coming up with a UI paradigm that doesn't make it look awkward if the response only goes down to the middle of the screen while also nicely doing a clean refresh pre-emptively if it's clear it will overflow and need to move to the top. For the former case, find some way where it looks not completely awkward if it's partial and then do refresh of the chat history area and move it to its proper fitted position once the user clicks on the input box again to type their next reply. For the latter, perhaps embedding some kind of remaining space meter at the bottom that indicates when you'd need to do this move + refresh action (don't directly label it that way) would enable the user to anticipate it more and be less frustrated when it happens, as they are psychologically awaiting the next part of the answer/reasoning, not surprised at a sudden flash.

For the actual streaming, you'll have to ensure that your text alignment works in such a way that once a line is rendered to the screen, its placement is final (in other words, no streaming intra-word, as you need to know if the word will fit in remaining space on the line before rendering it). Basically, avoid retroactive reflow like a PDF document with a fixed layout, not like this text box I am typing in with a resize handle at the lower right. You'll also probably want to disable scrolling during generation as well, or at least make some sort of discrete pagination mechanism for going back and forth.

In any event, I look forward to seeing whatever it is you're building!

freeone3000•40m ago
I’d focus more on print usability and readability guidelines than computer guidelines. 5Hz eink is closer to a moving newspaper than a slow computer.

https://www.mediapoint.com.au/design-tips/composition-layout... might be moderately helpful.

But my advice: do not count on anything refreshing ever. Do not have animations, or transitions. Preload things to the correct spaces, then fill in. Reserve fixed white areas for output, and then fill in with black. (This works much better than the reverse!)

For quite long running processes, it might be worth having it behind a second page load.

longnguyen•16m ago
Not a web UI, but I recently built this[0] for my Boox Note Air 5c tablet. You may find it useful (check the source code in GitHub)

[0]: https://inka.page

Magnitude 7.4 Earthquake – 5 km S of San José del Palmar, Colombia

https://earthquake.usgs.gov/earthquakes/eventpage/us6000tjl2/executive
49•Bender•1h ago•14 comments

Meta Muse Glimmer – Open weights 30B local coding model

https://research.meta.ai/blog/introducing-muse-glimmer-open-agentic-model
678•riordan•6h ago•378 comments

Exploiting System Management Mode with a very long interrupt

https://github.com/xoreaxeaxeax/smiiiiiiiiiiiiiiii
23•WhiteDawn•51m ago•4 comments

Mars Bar from 1991 found – and it's 20g bigger than today's

https://www.bbc.com/news/articles/c1j1kjy7gewo
140•RickJWagner•1h ago•149 comments

Kinney Drugs pulls back AI phone assistant after hundreds of customer complaints

https://www.wcax.com/2026/08/07/kinney-drugs-pulls-back-ai-phone-assistant-after-hundreds-custome...
32•kotaKat•1h ago•18 comments

50k Boat Names

https://www.beautifulpublicdata.com/boat-names/
99•jonathanmkeegan•3h ago•53 comments

Squeak/Smalltalk 6.1 Release Notes

https://squeak.org/release_notes/6.1/
103•fniephaus•4h ago•52 comments

Launch HN: Stoa Markets (YC S26) – A Marketplace for GPUs and AI Servers

https://www.stoaexchange.com
5•erenberke•19m ago•0 comments

GLP-1 drugs linked to bigger jump in women’s employment than a college degree

https://finance.yahoo.com/healthcare/articles/harvard-study-links-glp-1-123000637.html
61•metadat•52m ago•36 comments

Show HN: Ante, a coding agent in a single binary that runs offline

https://github.com/AntigmaLabs/ante
16•ubermon•55m ago•6 comments

Docker Sandboxes – Disposable, isolated sandboxes for AI agents

https://www.docker.com/products/docker-sandboxes/
483•etoxin•10h ago•298 comments

Sonic Pi v5 Released

https://www.patreon.com/samaaron/posts/sonic-pi-v5-166001392
12•samaaron•3d ago•2 comments

Ask HN: In your experience, what are sound conventions for e-ink UI development?

32•BoxOfRain•2d ago•4 comments

Mistral Patent for "Code implemented tool calls"

https://patentsgazette.uspto.gov/week26/OG/html/1547-5/US12670045-20260630.html
123•theanonymousone•3h ago•109 comments

Midlife Vascular Risk Burden and Dementia-Free Survival Years

https://www.neurology.org/doi/10.1212/WN9.0000000000000152
11•bookofjoe•1h ago•2 comments

Why Addresses Have Numbers

https://thehistoricalinsights.page/2026/06/why-addresses-have-numbers.html
10•historical1234•41m ago•3 comments

Over 181,000 AI meeting recordings left wide open in note taking app

https://bobdahacker.com/blog/tldv-hack
325•colesantiago•4h ago•107 comments

Parametron: 50s Japanese computer that uses neither transistors nor vacuum tubes

https://ethw.org/Milestones:Parametron,_1954
113•xeonmc•6h ago•33 comments

Back to the Future of Handwriting Recognition

https://jackschaedler.github.io/handwriting-recognition/
8•at1as•56m ago•2 comments

Itadakimasu: A Word You Say to the Food, Not the Cook

https://thetokyohermit.substack.com/p/itadakimasu-a-word-you-say-to-the
37•surprisetalk•1h ago•12 comments

Every Company Needs a Cassandra

https://sunilpai.dev/posts/every-company-needs-a-cassandra/
11•mattzcarey•2h ago•12 comments

Exploring Claude/GPT Knowledge Cutoffs and Pre-Training Timelines

https://blog.sshh.io/p/exploring-claudegpt-knowledge-cutoffs
11•sshh12•2h ago•1 comments

There Is No "Done": Reflections on a Completed at Thru-Hike (2022)

https://thetrek.co/appalachian-trail/there-is-no-done-reflections-on-a-completed-at-thru-hike/
10•mooreds•2h ago•0 comments

What Happened to HackerOne?

https://blog.teknogeek.io/posts/what-happened-to-hackerone/
341•hipparchus•14h ago•180 comments

Tail-call optimization in C is relatively recent

https://lwn.net/Articles/1034703/
80•prakashqwerty•5h ago•52 comments

Run Android ARM64 VR APKs on Apple Vision Pro

https://github.com/shinyquagsire23/Klepton
150•LorenDB•13h ago•47 comments

An Interesting Fourier Transform – 1/F Noise

https://www.dsprelated.com/showarticle/40.php
99•q7m•3d ago•20 comments

How Blackwing Pencils are Made [video]

https://www.youtube.com/watch?v=fow-LsdaH2E
68•NaOH•5d ago•32 comments

Show HN: Voice driven murder mystery, Interview AI suspects with your voice

https://www.whodunnitai.com/
173•MrRowTheBoat•13h ago•71 comments

AI Fortunes Are Reviving an Old Debate About Private Power

https://ai-updates.net/ai-fortunes-philanthropy-private-power/
12•ashurandi•3h ago•4 comments