Realm
v0
gno.land/r/moul/reactions/v0
Render
Reactions
A reaction block any realm can embed. One line in your Render, no state on your side, and readers get one-click reactions keyed on the page they are looking at.
It is not a comment system, on purpose. There is no text field anywhere, which is what lets it run with no moderation: a closed palette, one reaction per address per page, changeable and removable.
It looks like this
last 🚀 by g1manfre…dlf5 · 1 reaction
That block is live and it is this realm's own page. Click one.
Add it to your realm
import "gno.land/r/moul/reactions/v0"
func Render(path string) string {
return body + reactions.RenderBlock()
}
That is the whole integration. RenderBlock takes no argument because it does not need one: a plain read exported by one realm and called by another opens no realm frame, so it sees YOUR path and uses it as the page key. Nothing to register, nothing to configure.
For one block per article rather than one per realm, name the page yourself with the path you already serve:
return body + reactions.RenderBlockFor("gno.land/r/you/blog:" + path)
Reactions are recorded here, not in your realm, so redeploying yours never loses them.
The palette
| key | |
|---|---|
up | 👍 |
heart | 💜 |
fire | 🔥 |
party | 🎉 |
rocket | 🚀 |
eyes | 👀 |
Six, and the set is closed. React aborts on anything else, which is the entire moderation policy.
The board
| page | reactions | last |
|---|---|---|
| gno.land/r/moul/home | 1 | 🚀 g1manfre…dlf5 |
| gno.land/r/moul/reactions/v0 | 1 | 🚀 g1manfre…dlf5 |
Transactions
| Hash | Block | Time | Msg | Caller | Status |
|---|---|---|---|---|---|
| A4289A4BC0…B7725A7E | 407,831 | 12d ago | Call React | g1manfre…dlf5 | ok |
| 27E29B21CE…FC18F811 | 407,713 | 12d ago | Call React | g1manfre…dlf5 | ok |
| E1F61CC111…5F5A08B3 | 405,686 | 12d ago | EnablePkg | — | ok |
| 9113484098…5570632E | 405,674 | 12d ago | AddPackage | — | ok |
Calls, deploys, and child packages in indexed history.