---
# System prepended metadata

title: Daohaus Stack Research
tags: [v3]

---

---
tags: v3
---

# Daohaus Stack Research

### Langauge
- Solution: Typescript
- Type generation
    - Prisma - https://www.prisma.io/
    - graphql-request
    - nexus https://nexusjs.org/ 

### State Management

##### Options
- React Context
- Redux (Toolkit)
- Xstate
- https://hackmd.io/LGbjTXfTR5CZbgJDnDNzkg
- Soft Solution: Redux 

###### Must haves
- Immutable
- Framework agnostic

###### Evaluation
- Create a simple app for each option - Jord/Keating
    - load data
    - make tx/poll/refresh data
- Understand/document main patterns used for each - Keating
- Explore other platforms - Dekan
    - gnosis safe
- Document pros/cons


### Testing Framework

#### Options
- Jest
- Chai
- Mocha
- React testing library
- Cypress
- How far do we want to go?
    - Maybe have a mental framework
        - Unit testing in utils
        - Have it enforced at the CI level
        - Testing will help code reuse, and file structure and organization will help as well

**Next steps**
- What and when should things be tested?

###### Must haves
- UI/rendering testing capabilities

###### Evaluation
- Understand/document main patterns used for each
- Document pros/cons


### Bundling

#### Options
- Next
- CRA
- Custom Webpack?
    - Seems like this is needed
- Vite
- Custom esbuild

**Next Steps**
- Would it be worth testing a couple of these?
    - People are leaning towards CRA then custom webpack if needed or Vite with potentially custom esbuild if needed
    
###### Must haves
- Easy contributor on-boarding

###### Evaluation
- Learning
- Find some web3 examples



### Routing
- Solution: CSR
    - React router v6?


### Styles
- CSS-in-JS


#### Evaluation
- Explore https://reach.tech/ vs. totally custom
    - other options like this that provide a baseline set of components we can style?


#### Package manager
- Lerna
- nx
- yarn spaces

##### Nx
These aren't mutually exclusive nx can be used alongside yarn spaces or lerna. It is more than a monorepo package manager. So, maybe we should adopt and then use either lerna or yarn spaces fro node_modules dedupliccation. Recommendation is to go this route if we do a monorepo

##### Turbo 
- https://github.com/vercel/turborepo

##### What do we want
- Minimal headache
- Rad style might be good with nx


#### Component Library
- reach-ui
  - https://reach.tech/ 
- Stiches
    - https://github.com/modulz/stitches
- reackit
    - https://reakit.io/docs/button/
- Radix
    - https://www.radix-ui.com/
- List with a good ranking
    - https://dev.to/chetan_atrawalkar/25-top-react-ui-component-library-1m68

**Criteria**
- https://hackmd.io/rXcu5eQ3TAKu3PHopSfR2A

We need more explanation

#### Linter/Formatter
- prettier and eslint
- Do we want to update our rules?
    - Reuse the same rules? Or/And remove overrides

**Decision**: We will make decisions as we setup the repo



### Backend

### subgraphs
- look into curated instances
- look into hosting our own node

### functions/lambdas
- language
    - does typescript make sense here? 
    - or something more available in functions linkmnode?
- deployed easily where and how?
    - currently aws lambdas, what are some other weasiy solutions like vercel?
    - need for api endpoints

### s3 alternative
- plan an experiment/test over the next couple of weeks
    - https://hackmd.io/QDALCjN_SeGq86-DsDkRkw
    - how about textile?


### airtable alternative
- revist ceramic ideas/options
    - moloch:did vs. safe:did or other?


### move legos outside the app
- security model

### Experiments
https://hackmd.io/wpI8-jVcQ_261_xvO6RgHA




