# Fuzzy Dice :: Tech Spec
411
* https://github.com/adrai/flowchart.js
## 1. 2FA Auth
**Legend**:
* **Webpage**: ideally a static web page which has code for checking for a Metamask wallet or other.
* **2FA_host**: a Cloudflare worker that receives json API requests to start 2FA authentication process using the user ETH* address.
* **KV_store**: a Cloudflare key-value datastore that stores the secret keys for each user.
```sequence
Webpage->2FA_host: Address
2FA_host-->KV_store: Address and 2FA secret
2FA_host-->Webpage: QR code
Note left of Webpage: Scan with\nGoogle Auth
Webpage->2FA_host: Address + code
2FA_host-->KV_store: Lookup and verify
Note right of 2FA_host: Set account as active
2FA_host-->Webpage: Display result
```
## 2. Website
The website has a **/url** path where the login UX takes place. Upon initial load of the page, the user sees a call to action to login with Metamask.
```flow
st=>start: 0-User at login page
cond1(align-next=no)=>condition: Is Web3
connected?
op1=>operation: 1-Metamask setup
op2=>operation: 2-Web3 available
cond2=>condition: Is 2FA
connected?
op3=>subroutine: 3-Generate QR code
* User scans QR
* Verify PIN
op4=>operation: 4-Create/fund wallet
op5=>inputoutput: 5-Launch ready
e=>end: === Session running ===
st->cond1->op1->op2->cond2->op3->op4->op5->e
cond1(no)->op1
cond1(yes)->op2
cond2(no)->op3
cond2(yes)->op4
```
### Description
0. The `/login` page will check if the user is already logged in and if an account exists.
* API: /check takes an account address and checks if an account exists in the KV datastore.
```json
// False
{
"result": false,
"data": null
}
```
1. Wallet `/login/connect` instructions are displayed and helps the user get started. Add section
2. Display Web3 success page and **Continue** button.
3. 2FA not connected.
* `/login/scan:` Generate QR code and ask user to scan. Display CTA button to **Continue**.
* `/login/verify`: Request PIN input from user and CTA button to **Verify**. Also display other account options.
4. The `/user/home` page shows the user balances for ETH and related L2 tokens.
* This main page should be used to show user authorizations, recent transactions, etc.
* A `/user/wallet` page could be useful
5. Display `/launch` main page which has various options for user to begin a session.