# [Name of the happ] Design Spec
> Architecture Course Template
> **Replace all block comments with the design for your application
> Replace names in [brackets] with the actual names for your design**
> Useful resources
> - HDK API: https://developer.holochain.org/rustdoc/hdk3/
> - Core Concepts: https://developer.holochain.org/docs/concepts/
[TOC]
# Requirements
> What UX / functional requirements does my happ need to satisfy?
# DNAs
> How many DNAs should my happ have? Duplicate the following sections for each one of them
> Is some DNA a template that has to be cloned?
## [Name of the DNA]
> Does this DNA require a membrane proof?
> If so, in which conditions can a member join?
> How many zomes should this DNA contain? Duplicate the following sections for each one of them
### [Name of the zome]
> What entries should this zome define?
> What links should be created between them?
> Are there any relationships with entries from other zomes?
```graphviz
# Replace this graph with your own entry relationship graph
# Every node is an entry in the DHT, and edges are the links betweeen them
# Dashed edges represent embedded references
# Graphviz documentation https://graphviz.org/documentation/
digraph g {
node [
fontsize = "16"
shape = "record"
];
// Maybe this with timestamp mods?
"path1" [label = "{Path | 'all_posts'}"];
"alice" [label="{AgentPubKey | 'ALICE_PUB_KEY'}"]
"post1" [label="{Post | { content | author | timestamp }}"]
"alice"->"post1" [label="authored_post"]
"path1"->"post1"
"post1"->"alice" [style="dashed"]
}
```
#### Validation
> Reference: https://developer.holochain.org/rustdoc/hdk3/prelude/validate/struct.validatedata
Entries
> For each entry type:
> - What are the conditions in which Create, an Update or a Delete is valid?
> Use logic statements to avoid ambiguity
* `[entry_type]`:
* Create is valid if ...
* Update is valid if ...
* Delete is valid if ...
Links
> For each link type:
> - What are the conditions in which CreateLink, or a DeleteLink is valid?
> Use logic statements to avoid ambiguity
* `[link_type]`:
* CreateLink is valid if ...
* DeleteLink is valid if ...
#### [OPTIONAL] Signals
> Does this zome emit any signal when some event happens?
#### [OPTIONAL] Complex flows of information
> Does the design for this zome need to specify any complex information flow (call_remotes, bridging, etc.)?
> If so, fill the sequence diagram below
```mermaid
sequenceDiagram
participant ALICE_ZOME_NAME
participant BOB_ZOME_NAME
ALICE_ZOME_NAME->>BOB_ZOME_NAME: a_sample_function_call()
```