---
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