Describe an experience once.
Any renderer runs it.
Seemorq is a spec for writing a whole experience as one file, a definition: what's on each screen, how you get from one to the next, what it remembers, what it can do, and the connectors to the websites or APIs it reads from. A renderer takes the definition and runs it. The renderer knows nothing about the experience.
{ "specVersion": "0.1", "id": "dev.seemorq.hackernews-catchup", "name": "Hacker News Catch-up", "connectors": { "hn": { "site": "https://news.ycombinator.com", "reads": { ··· } } }, "types": { "Story": { "title": "string", "url": "url", ··· } }, "state": { "queue": { "type": "Story[]", "scope": "device" } }, "actions": { "queue": { "append": "state.queue" }, "markRead": { "remove": "state.queue" }, ··· }, "flow": { "start": "front", "screens": { "front": { ··· }, "queue": { ··· }, "story": { ··· } } } }
-
github.com2hShow HN: A renderer that knows nothing about the experience
-
jsonata.org4hJSONata in anger: a year of expressions
-
tlb.org6hThe case for writing products as data
-
vanillaforums.com9hVanilla forums still have the best thread model
A product is a file. Read it, change it, send it to someone.
Definitions an agent can write. Say what you want and get back a couple of pages of JSON rather than a repo you now have to look after.
The sites you already use, your way. Hacker News with a reading list. A forum that tells you which threads moved since you left. Neither site has to change anything.
No surprises. Every connector and every action is in the definition, so you know what it touches before you run it.