Her sprit was weak, but knew the work of her hands.
Fixer, weaver, lover, spy. (🔞)
| 🏳️🌈 | ⚧ ⚢ ⚤ ♡∞ |
| Pronouns | she/her |
| Web | https://millenomi.name/ |
| Header | https://unsplash.com/photos/8gPev-y29WQ |
Her sprit was weak, but knew the work of her hands.
Fixer, weaver, lover, spy. (🔞)
| 🏳️🌈 | ⚧ ⚢ ⚤ ♡∞ |
| Pronouns | she/her |
| Web | https://millenomi.name/ |
| Header | https://unsplash.com/photos/8gPev-y29WQ |
I really wanted the app to _feel good_, because a dataset without a good frontend is like a library without librarians. So I went all out with adoption of things like zoom transitions and a range of idiom-specific cleanup choices.
I even added some small amount of discovery. Right now it's searching eBooks.com, which is the place that's most likely to have DRM-free epubs of current books.
One thing I've been feverishly working on that I really wanted is stars — starring a book means that it is shown on the Index page and kept separate from casual downloads.
Stars also sync over through any shared folder (in this case, Syncthing) to any other device running the app, and are downloaded automatically on all of them.
And of course, neither of these approaches produces a traditional Mac settings/preferences panel, so for there it has to be rewritten to use TabView.
You _could_ ship a NavigationSplitView there, but I find that System Settings is a terrible experience all around, one that justifies itself out of sheer density and navigation depth; if you don't have that, a settings panel is a much better way to go, IMO.
Unfortunately, this targets iOS 18, where NavigationSplitView is basically broken across a range of basic adaptations.
So I rewrote it as a NavigationStack for there. Still some breakage (note the back button), but usable.
It's sparse, and it used to be just a single .grouped Form with sections, but it looked ugly as heck. But to do it right I had to write its structural harness three times.
Once 'the right way'; on iOS 26, NavigationSplitView works correctly across idioms and adaptations, and so we can just use that.