---
# System prepended metadata

title: '[Name of the happ] Design Spec'

---

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