.github/workflows | ||
.vscode | ||
bin | ||
src/Ema | ||
.ghcid | ||
.gitignore | ||
CHANGELOG.md | ||
ema.cabal | ||
flake.lock | ||
flake.nix | ||
hie.yaml | ||
LICENSE | ||
README.md | ||
shell.nix |
ema
ema is a WIP next-gen Haskell static site generator that is change-aware. In addition to static site generation, it provides a live server that hot-reload's on code or data change1.
The ultimate goal of ema is to make it possible to easily implement your own neuron, or just about any app that creates a browser view of arbitrarily changing data (on disk, database, or whatever). ema is designed to facilitate creation of apps whose data is normally edited via traditional mechanisms (eg: text editor) but rendered as a delightful web page - so as to provide an economical read-only view, of your data, on desktop & mobile.
The simplest ema app looks like this:
main :: IO ()
main = do
let name :: Text = "Srid"
runEmaPure $ \() ->
encodeUtf8 $ "<b>Hello,</b> " <> name
Hacking
Open in VSCode, and run the build task.
TODO
- MVP
- Implement hot reload, and ditch browser-sync
- server to client refresh
- client to server reconnect (on ghcid reload, or accidental client disconnect)
- or, investigate https://hackage.haskell.org/package/ghci-websockets
- Example: filesystem watcher
- position re: hakyll
pre-announce,
- refactor and simplify
- examples
- documentation (howto)
doc notes,
- use async:race to avoid ghcid ghosts
- at most one ws client supported right now
- tailwind + blaze-html layout (BlazeWind?) for no-frills getting started
-
At the moment, only data change triggers a true hot reload; but code change triggers reload via a full page refresh in the browser, which creates a subtle flicker. Ideally this should be improved somehow, possibly by persisting the server and websocket across ghci(d) restarts (cf. ghci-websockets). ↩︎