Try   HackMD

Immutable comment system and react component

name

Emitter

DUCE
DAOHAUS universal comment emitter
Decentralized universal comment emitter

tech

poster.sol
daohaus sdk
react comonent

schema

content: value, // content of the post (markdown)
version: "0.0.01", // version of the schema or maybe the post?
context: "post", // root | reaction, reply (always should have parent)
sender: address, // sender of post
image: image || "", // external image/link
created: Date.now() / 1000, // creation time
id: uuid, // unique id / salt
domain: TARGET.DOMAINID, // app / dao (maybe set at factory)
scope?: 12 // proposal id type data
tag: encodedData, // encoded tag for verification
parent: "", // if reply or reaction / parent tag

notes

Poster.sol has 2 string fields content and tag. Content should contain a json string with content and meta data around a post. the tag can be a unique hash created from msg.sender, uuid and doaminid. this way a content string could be verified by the tag.

channels

a factory should deploy a standard wrapper around Poster.sol (channel emmiter). this way every channel is its own contract, it could have tag generation logic, also could be used for role/token gatting, fees, relayers or other nuonces. Channel can have different meta data: title/topic/etc. Channels could have a owner (DAO)

a channel would probably have a domain of a DAO or a more general app. could be scopped to more specific things

post

A post can have a context of parent or child(anything string)
A root post is top level content.
A child (reaction/reply) and requires a parent

indexing:

because of the channel emmiter contract indexing is scopped and in may case could be done client side. Could be a good usecase for a subgraph if multiple popular channels.

because this is uses poster under the hood all data can be easily indexed, the contract wrapper allows further easy scoping

post verification

a post need to be able to be verified as coming from a signer and is unique

// TODO
  // add uuid and sender address to content and tag
  // this is added in the contract as well
  // allows to verify that the content was created by the sender
  // uuid is a salt for a unique hash
  // this does not prevent a user from submitting the same salt again
  //  - maybe this is a feature for delete/edit, only using the most recent
  // const tag = `${TARGET.DOMAINID}:${uuid}:${address}

Emiiter WTF UI

emiiter.wtf is a simple mico blog site
a post can be made by any address
a post can get a upddot or downdoot (increment totals, only one per account)
a post can have a reply

ipfs deploy - nobunny can take it down

other potential actions

  • bookmark // easy access in future
  • go to external link // link out to external ref in post
  • share // permalink to dedicated page
  • go to replys // dedicated page for post and replys
  • tip // sender address to send a tip to (alternate dao treasury)
  • launch dao // launch a DAO and NFT for tips

new channel summoner

channel explorer

DAOhaus emiiter react component

  • should tak a contract, domain and scope
  • install as npm package

all on chain and no dependencies?

doesn't this require signatures and cost gas? thats the point
has no way to censor content or block spam? thats the point

tips

any post can recieve a tip. tips could include stable or haus. there should be a splits to eco fund, product fund and OP. there could also be a burn of haus/duce for rev share.

updoots / tipdoots

fee to OP, share to early adopters
fee to DAO treasury? OP choice on withdraw

batch actions

keep a ui element on the bottom of page or something. allows users to periodically commit all changes with single signature (ups/comments/replys/etc)