Show HN: Runik – Turn fan wikis into e-reader dictionaries

github.com

2 points by skoutXII 10 hours ago

Hey HN!

As a reader of epic fantasy and sci-fi, I often find myself reaching for my phone to look up an obscure side character — or the difference between “Genebackis” and “Genebaris”. So I built runik to bring in-world definitions directly onto my e-reader and stay immersed in the story.

Runik parses the contents of fan wikis into Kobo and Kindle compatible dictionaries. It uses the device’s built-in word lookup feature, so there’s no jailbreaking required and definitions can be used offline.

It’s still in early development and is built with Go (Wails) + Svelte + Dictutil — feedback is appreciated!

Note: Kindle support requires kindlegen, which comes bundled with the Kindle Previewer app (details in the README).

https://runik.app/ https://github.com/Runik-3/core

skoutXII 9 hours ago

Some technical details for the curious:

- Runik originally started as a webapp but I rewrote it as a desktop app for performance and hosting cost reasons. Working with the Wails framework has been great coming from a web background.

- There’s no web scraping under the hood — runik uses the wiki’s public API to fetch content.

- The biggest challenge has been parsing content itself. Content varies in quality and the markup can be inconsistent. There wasn’t really an off-the-shelf wikitext parser for Go, so I took it as a challenge to write my own (still incomplete) wikitext parser.

- Kindle support, despite requiring proprietary software (kindlegen) to compile a valid dictionary, was surprisingly easier to implement than kobo support. Kobo requires the words to be organized into a trie and encrypted. Fortunately, there's a great tool called dictutil (https://github.com/pgaskin/dictutil) that handles most of that! Kobo also doesn’t allow for custom dictionary names, hence the awkward dicthtml-[r] prefix if you use a kobo.

Over the next year I’m looking to, improve parsing, include definition formatting options, and add support for more devices.