# Forum happ
> Note: this is a very minimal design for an application. Usually you'll need more DNA/zomes and complexity to cover all that you need to cover your use case
[TOC]
# Requirements
- Normal post sharing app, with no upvoting of any kind
- Only authors can update their posts
- UI should be able to query by time range
# DNAs
## Forum DNA
- Membrane: open membrane, anyone can join.
### Posts zome
Entry Relationship Diagram:
```graphviz
digraph g {
node [
fontsize = "16"
shape = "record"
];
// Maybe this with timestamp mods?
"path1" [label = "{Path | 'all_posts'}"];
"path2" [label = "{Path | 'all_posts.2021'}"];
"path3" [label = "{Path | 'all_posts.2021.01'}"];
"path4" [label = "{Path | 'all_posts.2021.01.18'}"];
"path5" [label = "{Path | 'all_posts.2021.01.19'}"];
"path1"->"path2" [label="child"]
"path2"->"path3" [label="child"]
"path3"->"path4" [label="child"]
"path4"->"path5" [label="child"]
"alice" [label="{AgentPubKey | 'ALICE_PUB_KEY'}"]
"post1" [label="{Post | { content | author | timestamp }}"]
"post2" [label="{Post | { content | author | timestamp }}"]
"alice"->"post1" [label="authored_post"]
"alice"->"post2" [label="authored_post"]
"path4"->"post1"
"path5"->"post2"
"post1"->"alice" [style="dashed"]
"post2"->"alice" [style="dashed"]
}
```
When querying by time, you can first get all the paths that are
#### Validation
Entries
* `posts`:
* Create:
* Check that the author of the element matches the author field inside the post entry. is valid if the post's author is signing the entry
* Update or Delete:
* Check that is valid if the author of the update or delete element matches the author of the original element. action is the author of the original post
Links
* `path->post`:
* CreateLink and DeleteLink:
* Get target post of link
* Check that post.author matches link.author
#### Signals
- Every time someone likes your post, the UI will receive a signal:
```
{
"post_hash": <POST_HASH>,
"agent_pub_key": <AGENT_PUB_KEY>,
"action": "LIKE"
}
```