NFT Store UI HLD
The high level design for the NFT Store user interface.
Last updated
The high level design for the NFT Store user interface.
Last updated
NFTs (Non-Fungible Tokens) are quickly becoming an integral part of crypto-economies. With Peerplays aimed to become a foundational blockchain, NFTs need to be a large focus of its offerings. Additionally, Peerplays is uniquely suited to overcome many of the worst obstacles of NFT mass adoption: high transaction costs, slow network speeds, and limited storage capacity.
The overall goal of the Peerplays NFT Store project is to develop a user interface to enable users to easily perform NFT related operations on the Peerplays blockchain.
The purpose of this High Level Design (HLD) document is to provide a concise and combined overview of the separate, more detailed, Low Level Design and Functional Specification documents to facilitate the sharing of information about this system. To find more information about the complete system design, see the Supporting & Reference Docs > NFT Store docs in the Peerplays Developer Documentation Portal.
The NFT Store objects could be thought of like this:
The NFT Store contains many Creators
.
A Creator
can own many Galleries
, Collections
, and NFTs
.
A Gallery
can contain many Collections
and NFTs
.
A Collection
can contain many NFTs
.
Figure 3 is a visual representation of the points above. The NFT Store is structured this way to provide a framework that is built with two important concepts at its core:
Consistency with industry standards, thereby meeting consumer expectations and instantly providing a familiar experience.
Giving Creators the flexibility to make unique, and branded, shopping experiences for their customers.
Creators are the enjoyers who come to make, buy, sell, and auction NFTs. They need a place to display their NFTs in a way that makes sense to potential buyers. A creator
object is not yet defined on the blockchain, however, it may be possible to simply use the account
object that is already defined.
A creator object could be developed like this:
App settings like notification and display settings will need to be stored off-chain in local (in browser) storage. This is to prevent needless blockchain transactions.
Galleries can also be thought of as storefronts, showcases, shops, etc. These are meant to represent the highest level of branding and can provide a very customized, unique, and polished feel for customers. Like entering a store in a shopping mall or plaza, galleries can be used to contain the broadest categories of NFTs that still belong together. A gallery
object is not yet defined on the blockchain.
A gallery object could be developed like this:
Collections are essentially sets of related NFTs. Collections are meant for narrower categories so that the NFTs within are closely related. A collection
object is not yet defined on the blockchain.
A collection object could be developed like this:
NFTs are the discrete units of sale. They may exist as one-offs that don't belong to any collection. More often they can relate closely together as a collection. NFTs are already defined as objects on the blockchain. They allow the creator to set custom permissions and even to edit their metadata.
Additional fields that might be standard in the NFT Store, such as the NFT description, category, and custom key-value pair parameters, could be stored in the token_uri
field of the minted NFT or the base_uri
field of the NFT Metadata object already defined on the blockchain. These fields are simple string fields and could accommodate JSON objects with such info.
Example | Creator | Gallery | Collection | NFT |
Clothing Shop in a Mall (Real life analogy) | GAP | GAP Store#1125 | Baby Clothes | Baby Boys Faded Jeans size 2T |
NFT Store | Hiltos | Collectable Cards | Horse Race Card Game | Black Beauty first edition |
NFT Store | Hiltos | Collectable Cards | Blockchain RPG Card Game | Longsword +2 |
NFT Store | Hiltos | My First NFT just for fun! |
Several user personas have been identified to facilitate the development of the NFT Store design. While the personas demonstrate how people of various backgrounds may interact with the system, three main user classes represent the discrete roles users in the system can have. These user classes are as follows:
Client
Tenant(s)
Enjoyer(s)
These classes represent a hierarchy of system permissions:
The Client is the system owner. This is the individual or organization who downloads, configures, installs, and operates an instance of the NFT Store software. The Client has set out to meet a specific goal using the NFT Store system. As such, they can customize the configuration to suit their own business goals. Depending on the configuration, the Client can operate the NFT Store as a solution to many different use cases.
Allowing no tenancy, the Client takes on the role of the (only) Tenant. This means the Client is the only NFT producing account in the instance. This is effectively an online retail store.
If the Client allows a few select Tenants, they can set up a strictly controlled marketplace. This is useful for curated or niche markets like commodities markets, dropshipping, affiliate marketing, or dealer sales. There are many use cases for this type of configuration and is best for complex or multi-party businesses.
Lastly the Client can allow all users to be Tenants automatically. This would create an open market where all users can freely produce NFTs.
See Figure 5 below for an example showing how permissions could work.
A Tenant is a user which can produce NFTs. These users need to be able to manage their NFT permissions and their store front. Tenants create, mint, sell, and auction NFTs.
Enjoyers (customers) have the lowest level of permissions. Enjoyers can bid on or buy NFTs from Tenants. Enjoyers can create a profile and manage the NFTs they own. Depending on the configuration set by the Client, and the NFT permissions granted by the Tenant, the Enjoyer may be able to participate in a secondary market by selling or trading the NFTs they bought earlier.
The Enjoyer is the base role in the system. All logged in users have Enjoyer level permissions as a minimum.
The NFT Store server-side security will be accomplished through the use of SSL encryption and other server security best practices. Transactions on the blockchain are secured by public-private key encryption.
User accounts are issued and maintained on the blockchain through the PeerID system integration. Each creator must have a unique account registered in the Peerplays blockchain. Unauthenticated enjoyers can browse the NFT Store, but can't transact with the blockchain and are therefore required to log in to buy/sell/bid, create/edit NFTs, create galleries and collections, or manage their profile.
Creator passwords are not stored on the network or PeerID system. Instead, the PeerID system can transact on behalf of the enjoyer using custom permission encrypted public-private key pairs and OAuth access tokens.
All NFT Store pages consist of:
the site header
the page body
the site footer
The site header contains the Peerplays NFT Store identification using Peerplays branding guidelines. It also contains the main navigation menu, basic account functions, and a search bar.
The page body contains the content of the specific page.
The site footer contains marketing content, social media site links, broader scope of navigation, and links to legal documents such as privacy policy and terms of service, if required.
All object lists (NFTs, Creators, Transactions, Galleries, Collections, etc.) will provide the basic functions for various view options:
List view / grid view / detail view
sorting / filtering / searching
pagination / number of items per page
The NFT Store homepage, or landing page, is the page at the root domain that enjoyers will first visit. This page is used to provide initial site navigation, marketing content, featured content, starting points for enjoyers, and helpful resources. The homepage can include a call to action, search bar, list of available categories, and the login function. The color scheme and graphical design of the homepage (and all NFT store pages) should align with Peerplays branding guidelines.
The login function will be managed with the PeerID system integration. Logging out invalidates the OAuth token thereby requiring another log in to access enjoyer data once again. The login / logout function should always be available to the enjoyer in the main nav menu.
The new account creation function will be managed with the PeerID system integration. Creating a new account should be available to unauthenticated enjoyers from the main nav menu.
When logged in, an enjoyer can view and edit their own profile and settings.
Public profile fields the enjoyer can edit:
Publicly displayed username
Description / Bio (free text field)
Profile pictures (avatar, banner, background, etc.)
Social media profile links
Email notification settings include:
When an item is sold
When a bid is received on an item
When a watched item price changes
When an auction expires
When you are outbid in an auction
When the metadata changes on an owned NFT
When you buy an item
To receive the Peerplays newsletter
Display settings include:
dark mode / light mode
display language
It's also possible to view the profiles of other enjoyers. This displays their owned NFTs, NFT Collections, NFT Stores, account activity, public profile info, and activity relating to the logged in enjoyer (if any).
Transaction lists should be available on the profiles of creators. These will list transaction histories from the perspective of the creator rather than the perspective of the NFT. This should provide the same information available in other transaction lists, like:
transaction type (transfer, sold, auctioned, minted)
transaction participants
transaction date, block number
transaction item (the NFT)
transaction price, if applicable
transaction currency (PPY, BTC, USD)
Creating an NFT using the CLI Wallet program is a multi-step process. This process gets more complex if applying custom permissions to the NFTs. The most complex workflow consists of the following steps:
Create an Account Role. This requires...
the name of the new role
any additional metadata you need to store
the list of operations to allow for the new role
the list of accounts that are applied to this role
the timestamp for when this role expires
Create an NFT Metadata object using the new Account Role. This requires...
the name of the NFTs that will be created with this metadata
the symbol of the NFTs that will be created with this metadata
the URI of the NFTs that will be created with this metadata
the account name of the revenue partner (who gets royalties on all sales)
the revenue split amount (the percentage of the sales that go to the revenue partner)
if the minted NFTs are transferable
if the minted NFTs are sell-able (or auction-able)
the Account Role id from step 1
And finally, create the NFT. This requires...
the account of the owner of the Metadata from step 2
the Metadata id from step 2
the owner of the minted NFT
the approved account of the minted NFT (usually the owner)
the URI of this specific minted NFT
This requires three operations on the blockchain and a lot of information gathering. The workflow steps can be recreated, and the required information simplified, as a single GUI page in the NFT Store. The necessary details can be entered by the creator on one page. Then the workflow can follow the appropriate steps, in order, behind the scenes.
To maintain user-friendliness, the NFT Store UI can combine the concepts of the Account Role, NFT Metadata, and NFT minting operations into a unified "NFT Template" or similar idea. The NFT Store can also provide pre-populated input fields (drop-downs, radio buttons, etc.) with valid data to avoid data validation issues, malicious inputs, and messy / accidental inputs.
Editing an NFT or set of NFTs can also be a single page. Similar to creating an NFT, editing an NFT can be presented as editing a unified "NFT Template" or similar. Special care must be given to educating creators as to how editing NFTs can effect people who own minted NFTs from their metadata. This concept is very different from Ethereum based NFTs! For example, Account Roles do expire and may need to be updated later. Also, revenue share and permission settings on the metadata can be changed.
A list of owned NFTs must be provided for the creator and others to view. This list helps the creator manage their NFTs and others to browse. From this list creators can quickly get basic info about their NFTs, list them for sale/auction, kick off a search for similar NFTs, and mark their favorite NFTs.
Specifically, the list view should offer the following for each item in the list:
NFT name (or symbol)
the creator's nickname and link to their profile
collection name with link to the collection (if applicable)
function to favorite / un-favorite
a thumbnail image
link to the details page for this NFT
a quick menu:
List it for sale / auction (if owned by the logged in creator)
Buy it now / make a bid (if owned by another creator)
Search for similar NFTs
The list of NFTs on offer is one of the most important pages of the NFT Store. It displays all the NFTs that are currently on offer (for sale or for auction). This page shows all NFTs together as a generic NFT Store gallery. Creators, galleries, and collections become facets of the sort, filter, and search functions of this page. Enjoyers browsing the NFTs on offer page can also use commonly found NFT metadata parameters to customize their search.
The NFT Details page will provide all the NFT's information, including but not limited to:
NFT name
NFT symbol
NFT description
NFT category
Creator name(NFT metadata owner)
avatar icon
Owner name(NFT instance owner)
avatar icon
NFT URI
NFT image, video, music, 3D model, etc. (the payload)
if the NFT has unlock-able data
stake NFT info (if applicable)
NFT age and maturity date
claimed rewards / unclaimed rewards
voting power
stake quantity and currency
Peerplays community (if applicable)
revenue partner
revenue split
if transfers are allowed
if selling is allowed
account role owner
account role name
account role permissions
account role accounts
account role custom metadata
when the account role expires
NFT custom metadata (custom parameters)
if the NFT belongs to a collection, and which one
if the NFT belongs (directly) to a gallery, and which one
This page should be equipped to display the intended payload of the NFT. For example, if the NFT contains a video, the video should be displayed in a video player.
In addition to the NFT specific information, pricing and other market information should be available. This should include:
lifetime transactions of this NFT
transaction type (transfer, sold, auctioned, minted)
transaction participants
transaction date, block number
transaction price, if applicable
transaction currency (PPY, BTC, USD)
Price & volume history
Estimated value
Estimated popularity
A variety of functions should also be available on this page as well:
favorite / un-favorite function
sharing options
add to / remove from collection
add to / remove from gallery
listings of this NFT for sale
with an option to buy
offers to buy this NFT
list of other NFTs in the same collection
Collections can be created to group related NFTs together. A creator can give the collection a title, description, a banner and thumbnail image, and select its appropriate categories. This is like a display you would find in a supermarket for a brand of candy bar. There may be multiple flavors but they are all the same brand and have the same marketing message.
Galleries can be created to group similar collections and/or distinct NFTs. A creator can give the gallery its own title, description, banner and thumbnail image. Since galleries are the top level of hierarchy, they don't get categories. They can contain collections and NFTs with multiple different categories. Continuing the supermarket analogy, a gallery would represent a whole department within the store. This is like the whole candy isle with all its different brands and marketing messages.
Editing collections and galleries is a simple matter of giving creators a form to change their existing information.
NFTs can be added and removed from collections.
NFTs and collections can be added and removed from galleries.
These pages display the collections or galleries owned by a given creator. Much like the list of NFTs, basic information should be displayed about each item in the list.
title
images
categories (for collections)
owner name
number of contained NFTs
The collection or gallery details page would be the display of the collection or gallery itself. These pages would display the contents of the given collection or gallery along with their branding. The lists of NFTs provided by these pages offer robust sorting, filtering, and searching, just like the overall NFTs on offer page but specific to the collection or gallery.
Links to help documents should be provided from the navigation menu. Pages within the NFT Store can also be available to support NFT Store branding on help documents. Documents should provide help in a variety of formats, such as:
FAQs
User Guides on specific topics (like creating an NFT, buying an NFT, wallet info, etc.)
Conceptual guides (like What is an NFT, Why I should buy an NFT, etc.)
Security information (like known NFT scams and how to avoid them, reporting bad activity, etc.)
Video guides (use universal design theory, like providing captions or transcripts, etc.)
P2P help forums or Stack Overflow-like Q&A portals