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)