---
tags: v3, hub
---
# Hub UX Design Review
- Test out with Figma prototypes for card and table view, but we're going to start with building the table view
## Table List View UX
- List of DAOs and DAO data for each DAO that you're a member of
- Start with what you're a member of and then expand to all DAOs for exploration
- DAOs (sorted by name)
- Proposals (count)
- Vaults
- Members (count)
- Power (voting power)
- Network
- Delegate address (clickable)
- Add delegate (in future)
- Proposals, name, and delegate address are clickable and
- User profile is least interactive portion in the Hub, so should be a lower priority when looking at your own Hub
- Useful if viewing *someone else's* profile
- Hierarchy: Navigation -> List view -> Profile
- Deprioritized the Haus Price Component
- Least important for a user since primary purpose is interacting with DAOs, not viewing Haus price data (but this is important from a product point of view)
- Clickable actions:
- name -> homepage
- proposals -> DAO proposal list
- delegate -> (in the future) open a modal and view/change delegate
- Delegate next to name: shows if you're a Delegate of a DAO (could also be an icon)
- Proposals:
- Count is *Active Proposals* and shows the sum of all active proposals for the DAO, and then clicking directs into the DAO's proposals page
- Could also add another for showing *All Proposals* if folks think this is useful
- Members:
- Members are the larger umbrella, so likely should include both shareholders and loot holders
- How do we want to think about this?
- Shares and loot columns being ERC20s can now be translatable to other DAOs
- Functionality:
- Filters
- Sort by table header
- **Infinite scroll over pagination**
- Default to this but we may want to use pagination in other instances
- Giant, unbounded lists should default to infinite scroll, but there may be other bounded lists that are smaller where we may want to use pagination instead
- Search:
- Optimizing around search fields, so may want to include this in Alpha
- Which field? Search DAO name for Alpha, but could be useful to search for users, tags, or other metadata
## Meta Navigation Dropdown
- Navigation between apps
- **Dropdown** menu in Navigation -- Search (navigate to DAO page), Hub, Explore, Summoner, Core UI, Yeeter, etc.
- Context sensitive menu populated with apps and Search field which goes directly to DAOs
- Molecule:
- App Icon + App Name
- Color themes:
- Each app could have its own primary color scale
- Hub: Crimson
- Explore: Indigo
- DAO names by address
- Used in the Hub and the Search
- Searchable list from DAOs that a user is in
- What happens if a user isn't connected?
## Card View UX
- What is the value of the Card View?
- Still being explored and validated via user testing
## Molecules
- DAO avatar + name
- Table view: [React Table](https://react-table.tanstack.com/)
## Questions
- Connecting to Hub: how do we want to look for someone else's profile?
- Add a route and populate based on looking up someone's address
- Dashboard/Profile:
- Personal view: Dashboard
- Proposal data, more personal and sensitive
- Public view: Profile
- Which DAOs person is in / DAOs both in, etc.
- Need ability to look up via address and populate the Profile/Dashboard
- Put Explore into the Hub? Should this be its own app?
- Clicking on `Explore ___ DAOs` would pull up *all* DAOs instead of the user's DAOs
- Does this toggle back to "See my DAOs" when in Exploring?
- Remove *Power* and *Delegate* and maybe then include total proposals instead of active proposals
- Use same data but show differently based on self vs. all DAOs
- Won't have avatars until there is more of a Core UI for metadata
- Fall back to Blockie in the meantime
## DAO Price Component
- Is this deprioritized? Product strategy conversation
- Keep the data for now as we build the Alpha, and then build the component UI at a later point (this can be open to feedback from the product strategy based on business priority)
- Adding HAUS token visibility can be useful to include
- Balancing the incentives between users and business/product strategy
## Profile
- Store user preferences in a DAOhaus Ceramic schema
- Edit Preferences
- If they don't have a profile set, we'd create a DID for them
- Update, but can't make it destructive
- Updating and adding is fine, but removing is not
## Notes (5/4/22)
- Updated cards, but we can probably split the table one out
- Keating still working on Jest
- Haus Price Data:
- Break this up based on what we need for the DAO table itself since we'd need some price data
- DAO Tables:
- Make multiple tickets for the data aggregations
- Pagination, Search and filtering are separate tickets
- `getMembershipsByAddress`
- Cross chain query getting all DAOs for a specific user
- name, network, all proposals
- Will need a way to filter by active proposals (get a count of active proposals)
- difficulty with some of these queries, such as DAOs with a field of proposals is that the Graph limits these at 100
- initial build this'll be ok `dao.proposal` but we may want to look into having an aggregate on the DAO of proposal count in the Graph
- Do we want a Lambda that does this processing ahead of time?
- Active Proposals:
- 3 queries combined together
- date is after voting starts and before grace ends
- after grace passed and not processed
- potentially unsponsored?
- needs processing
- is it still active if you've already taken an action?
- Search and Filter in the frontend
- Will need to load all the data up front even though we're doing pagination
- Won't have all of these, will need to do a query per chain an combine
- Queries are too complex or the data is already hydrated, so we'll need to create a **Lambda** for this
- Index this into something easier to query
- Has these fields so we can query by them
- Vault total
-
- Members
-
- Power
- Query by user address and support filtering on all the fields
- orderBy and search on them, and pagination
## Lambda
- Runs on a schedule and queries all DAOs across networks
- Calculates aggregate numbers and put into Skynet: vault total, member count, active proposal count, and drops this to Skynet
- Use a Postgres or MongoDB that stores all the fields we need -- will be centralized but anyone can access it
- Make it easier for us to query and for folks to search and filter
- Querying a centralized service, but the data itself is decentralized
- If our infrastructure goes down folks can't access it
- If we don't want hosted services it would make sense to cut features or load everything up front
- What are the tradeoffs we'd want?
- Querying cross chain and then aggregating, filtering, and searching on frontend may be performance hit to load all of this via the frontend
- Can offload some of this processing to a Lambda
- When frontend calls to get all DAOs for a Member, need to use Graph to get all DAOs for a Member, hydrate with the hydrated JSON data from Skynet to fill in the other fields
- Change UI to either be 1 chain at a time or not support filtering and sorting?
- Name is in a sub field so we can't sort on that either
- View that's only Gnosis Chain:
- Support filtering on any non-aggregate field
- Delegate?
- Lambdas:
- Runs on schdule calculating things not in subgraph and drops a JSON file into Skynet with keys of every DAO address
- Another lambda that frontend hits and gets all DAOs by user address
- List of user's memberships by DAO address -> grab the Skynet JSON file and then hydrates with the aggregages, and then the frontend will handle the filtering and data
- Explore All will be problematic with this
- Handle everything in frontend and have the Lambdas calculate the aggregate fields
- Document the Lambdas and make it easy for anyone to deploy -- anyone should be able to run their own DAOhaus, so anything we run we'd want to be public and have documentation around
- Explore All:
- What will we do with this?
- What's our strategy for the larger data sets?
## Cards to Create
- Searching
- Filtering
- Lambda to index DAO Hub data
- Runs on schedule
- Queries all DAOs and calculates:
- Proposals
- Active proposals
- Vaults
- Member count
- Network (hydrated)
- Stores in Skynet
- Lambda endpoint
- Hit with Member address and will return all the DAOs based on address and hydrates with Skynet cache with all aggregate indexed data and returns to the frontend
- Scaffold the Lambdas are separate packages in the monorepo
- `functions` folder
- https://github.com/HausDAO/daohaus-monorepo/tree/lambda-test/apps/haus-price
- Pagination
- Separate story for pagination, and prioritize it as we need
- Look at infinite scroll React Table?
- Look into decentralized network providers:
- https://www.golem.network/platform
- https://akash.network/about