1
1
mirror of https://github.com/srid/ema.git synced 2024-12-01 23:23:42 +03:00
ema/README.md

42 lines
1.8 KiB
Markdown
Raw Normal View History

2021-04-19 17:48:00 +03:00
# 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 change[^1].
2021-04-19 17:48:00 +03:00
2021-04-19 18:36:51 +03:00
The ultimate goal of ema is to make it possible to easily implement your own [neuron](https://neuron.zettel.page/), 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.
2021-04-19 18:18:38 +03:00
The simplest ema app looks like this:
```haskell
main :: IO ()
main = do
let name :: Text = "Srid"
runEmaPure $ \() ->
encodeUtf8 $ "<b>Hello,</b> " <> name
```
2021-04-19 18:07:52 +03:00
[^1]: 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](https://github.com/j-mueller/ghci-websockets)).
2021-04-19 18:07:52 +03:00
## Hacking
Open in VSCode, and run the build task.
## TODO
- [x] MVP
2021-04-19 22:34:10 +03:00
- [x] Implement hot reload, and ditch browser-sync
2021-04-19 18:07:52 +03:00
- [x] server to client refresh
- [x] client to server reconnect (on ghcid reload, or accidental client disconnect)
- [x] or, investigate https://hackage.haskell.org/package/ghci-websockets
2021-04-19 18:07:52 +03:00
- [ ] Example: filesystem watcher
- [ ] position re: hakyll
2021-04-19 18:07:52 +03:00
pre-announce,
2021-04-19 18:07:52 +03:00
- [ ] refactor and simplify
- [ ] examples
- [ ] documentation ([howto](https://documentation.divio.com/))
2021-04-19 18:07:52 +03:00
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