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