# [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() ```