Trading System

Screens

Go through success, loading, all expected/unexpected error states, empty states, multiple page stages for each component

  • Links to each major page

  • Use React Router

Login/SignUp (/auth)

  • Using Passport or provider like Auth0 or Okta (recommended because it takes care of a lot of security, logging, etc)

    • OAuth?

    • Twilio for 2FA?

  • Signup flow

    • Discuss with marketing and PM

    • FB Ads/Google Ads tracking for conversions

  • Able to see the stocks page before signup? Any other pages? What are protected pages?

    • Limited dashboard view?

    • Clicking "Buy" starts the signup process

      • What does copy/screen look like? Same as regular flow?

  • What is the expected conversion funnel?

    • What is strategy for testing use segments for conversions

  • Profile Creation

    • risk tolerance, favorite stocks, etc

    • How does this affect features shown to the user?

    • Feature Flagging

Settings

  • Add Bank Account

  • Fund Bank Account

  • Close Account

    • Needs Flow for retention

  • Account Stats

  • Statements (links to pdfs)

  • Logout

Add Bank Account (/bank/add-bank)

  • Available on initial sign up and afterwards from Settings page

  • Using Plaid?

  • KYC? Uploading Docs?

  • Multiple Accounts?

  • Verification? Deposits? Emails that it's verified?

  • Custodial Account - something like Unit?

Deposit/Withdraw Funds (/bank/deposit)

  • Display Clearing Time

  • Amount of Cash in Account Now, Cash Pending

  • Choose Account Source (for multiple accounts)

  • Allow adding cash amount

    • Validation (Min, Max?)

  • Current Transfers? Multiple Transfers ok?

  • Check if $ in account

  • Display when deposit will clear

  • Send email when deposit clears

  • Withdraw Funds

    • pick bank account

    • Validation (too much)

    • Display pending withdrawals and estimated time

    • Email when complete

  • Error if it fails

    • Not enough $?

    • Other

  • Handling bouncing back of funds after clearing?

    • Selling stock, etc, talk to legall

Dashboard (/)

  • Portfolio Over Time Graph - HighCharts

    • Filter 1D, 1W, 3M, 6M, 1Y, ALL

  • Portfolio Total Worth

  • Account Cash Available To Buy

  • Your Stocks

    • List

    • Shares Owned

    • Current Stock Price

    • Current Position $

    • Up/Down over last day

    • Sort By Up/Down in last day, amount

    • Click on stock goes to stock page

    • Basic Line Chart over last 1m

  • Favorite/Watched Stocks (didn't buy yet)

    • Same metrics (- owned)

  • Stock Search

    • Autocomplete with AJAX call

    • Click on stock goes to stock page

  • Stocks By Category

    • List of Categories

    • Click in, lists top stocks

Stock Page

  • Graph over last year

  • Candlestick vs Line

  • How much of the stock you own

  • Stats on stock (highs and lows)

  • Company history and blurbs

  • News feed

  • Follow stock

  • Buy stock

  • Buy/sell history

  • Recommended related stocks

  • Operations

    • Buy: text for how many shares, auto update cash needed, validate that it's not too much

    • Sell

    • Limit

    • Schedule a future purchase

    • Account for pending transactions

    • Confirmation Email

Search for stocks

  • AJAX Search

  • Works like the one in portfolio, probably using same(ish) component

  • Filters like category

History

See history of transactions

Other

  • Explanations of trading

  • Ancillary pages

    • Help and contact

    • Legal pages

  • Landing Pages? Home Page?

  • Models

    • auth: Describes the authorization object, follows Passport or Auth0 standards

    • bank: Describes user's bank account, such as routing, balance, and status information

    • stock: Describes a stock, including current price,

    • portfolio: Describes

      • stocks: in the user's portfolio (stock object)

        • ownershipDetails: additional info on stock related to user (average bought price, total value

      • portfolioStats: describes the portfolio as a whole (stock value, cash value)

    • portfolioHistory: lists the ups and downs of a portfolio over time

    • transactions: Lists transactions a user made

      • doTransaction: allows to perform buy/sell etc txn

    • profile: user details and administrations

API Structure

Common

Standard Errors/Codes:

  • 200: OK, JSON Response

  • 500: Server Error (retry 3x automatically, then fail)

  • 404: Resource not found

  • 403: Unauthorized (redirect to Auth Screen)

  • 400: Known error message (display via Toast)

Common Standards

  • Pagination

    • Results Pointer

    • With offset, if new items are added, it will miss results

  • Query Params

    • Arrays Serialization

  • Wrapping 1st level objects

  • Retry Mechanism

  • Request Tracing (Datadog)

/api/auth

Standard Passport Authentication returning JWT

/api/bank/accounts

GET

  • []

    • uuid

    • bankName: Chase

    • bankRouting: 0000009

    • bankAccountLast4: 0323

    • status: CONNECTED | AWAITING_VERIFICATION | INVALID | FROZEN

    • bankBalance: 32000

POST (follow Plaid's Docs)

DELETE

Query Params:

  • uuid

Res:

  • 200: Deleted

/api/stocks

Describes a stock, including current price,

GET

Query Parms

  • searchString

  • category: Tech | Education | ...

  • Page

Response

  • uuid

  • tickerSymbol

  • stockName

  • stockPrice

  • metadata

    • companyDescription

  • stats

    • lastYearsProfits

/api/portfolio

Used for displaying the user's stock portfolio and basic details

GET

  • cashBalance: 10000

  • buyingPower: 20000

  • currentStockValue: 20000

  • ownedStocks[]:

    • uuid

    • stock

      • uuid

      • tickerSymbol

      • stockName

      • stockPrice

      • metadata

        • companyDescription

      • stats

        • lastYearsProfits

    • ownershipDetails

      • amountShares

      • currentValue

/api/portfolio/portfolio-history

  • []

    • date: 2021-06-07 10:00

    • value: 19000

/api/transactions

GET

  • []

    • triggerDate

    • settlementDate

    • type: STOCK | ACH

    • subType: BUY | SELL | LIMIT WITHDRAWAL | DEPOSIT | BOUNCEBANK

    • status: pending | settled | failed

    • triggeredBy: USER | SYSTEM (margin call)

    • stockDetails

      • dollarAmount

      • stockAmount

      • stockPrice

    • transactionRules

      • type: LIMIT | BUY

      • limitPrice: 300

Last updated