Haphaestus TV Browser

Haphaestus will be a web browser, built upon Rhapsode's infrastructure, specifically designed for use via TV remotes with minimal button presses. Aiming to show the great potential of a simpler, JavaScript-free web.

Unlike other smart TV browsers Haphaestus does not attempt to translate your TV remote input into mouse and keyboard events for the sake of any prescriptive (via JavaScript) behaviour of the webpages you're viewing. Instead treating the webpage as a static menu of links, with pagination in place of scrolling.

Goals

Simplicity
In an era where modern browsers have become incredribly complex in their persuit of turning a document publishing system into an application delivery platform, Haphaestus aims to be simpler & easier to adapt to your individual needs by focusing on the reading experience.
Privacy
By being willing break web compatibility Haphaestus can take its privacy protections to new heights. No trackers can run on it by design.
Modularity
Software developers will be able to pick up Haphaestus's individual components (collectively termed the Argonaut Stack) & use them for their own purposes.
Internationalization
Haphaestus aims to support as many written languages as possible, taking precedance over simplicity.
Accessibility
Haphaestus and its siblings aim to show that without websites prescribing how to achieve their communication ends, the exact same Web can be presented over practically any medium.

Components

Haphaestus is assembled out of multiple, independantly repurposable, Haskell modules:

HURL
Haskell URL Resolver
Haskell Stylist
CSS Engine
Typograffiti
Text renderer
Balkón (in-progress)
Text layout
CatTrap (in-progress)
Paragraph/box layout

& more to come...

Third-Party Components

Haphaestus makes use of several pre-existing Haskell modules, mostly to to handle parsing:

HTML Conduit & XML Conduit
HTML/XML parsers
Haskell CSS Syntax
CSS lexer
HTTP Client TLS
HTTP implementation
Network URI
URI parser
Text
More efficient Haskell text encoding
ByteString
Chunks of binary data
gl
Hardware-accelerated rendering

As well as, to aid internationalization goals, the preeminant font libraries:

Harfbuzz (custom bindings)
Text shaping
Fontconfig (custom bindings)
Fontfile lookup
FreeType
Font decoding & rasterization
LibICU
Unicode processing
Plans

Building on Rhapsode's URL resolver & CSS engine as well as the HTML parser it uses in Haskell, Haphaestus will be developed roughly along the following roadmap:

  1. Layout, paginate, & render paragraphs of text (in-progress)
  2. Backgrounds & borders
  3. Rich Layout
  4. Navigate links
  5. Webforms
  6. Browser chrome
  7. Bonus features

These plans are extremly rough, take with a huge grain of salt.

In more detail...

Rendering paragraphs

Inline-text will be implemented with the aid of FontConfig, HarfBuzz, & FreeType from GNOME's widely-used text rendering stack.

Backgrounds & borders

This would be hardware-accelerated with OpenGL & GLSL to avoid messier optimizations elsewhere, with a possible fallback to Pixman.

Rich Layout

Haskell's immutability would make it trivial to utilize all your CPU cores for webpage layout. The CSS position property will not be supported as its mostly used by webpages to harm their own legibility.

Navigate Links

Webforms

This would be implemented as a locally-run serverside webapp lowering webforms into hyperlinks the rest of Haphaestus can handle.

Browser chrome

This'll mostly be another locally-run serverside webapp serving as a root to the tree-history (described earlier), with a couple of its pages tied to dedicated TV remote buttons.

Bonus features

These are features I might implement, but are a little beyond what's needed for TVs.