An interview demonstration project by Ray Li.
This is a React Native / Expo prototype built as an interview demonstration for a mobile-first trading experience. It uses mock market, wallet, watchlist, and portfolio data so the focus can stay on frontend craft, interaction depth, responsive behavior, and the AI-assisted development workflow.
This is not an official brokerage product and does not connect to real trading or brokerage services.
- Repository visibility: public for interview review
- Deployment: Vercel Git Integration from
main - Framework: Expo SDK 55, React Native 0.83, React 19
- Routing: Expo Router file-based routes
- Data: local mock data and local state only
- Verification: TypeScript, Expo web export, and headless browser smoke testing
- Public demo access: Vercel SSO deployment protection disabled
The prototype includes five primary app surfaces:
-
Home
- Cash and Holding
- animated market chart
- Top Movers
- market movement UI
-
Invest
- portfolio asset list
- holding rows
- market values and P/L data
-
Watchlist
- watchlist table
- bid/ask quote display
- market filters
-
Discover
- search
- trending themes
- Top Movers
- financial business article section
-
Search / Wallet
- bottom navigation Search action
- Wallet currency accounts
- Deposit, Withdrawal, and Transfer actions
The app also includes stock/crypto detail pages with chart range controls, contextual menus, a Promo-like trade ticket bubble, Buy/Sell behavior, and local portfolio/wallet updates.
The deployed web app includes an outer preview shell so reviewers can inspect the app without browser devtools:
| Mode | Viewport |
|---|---|
| Phone | 430 x 932 |
| Pad | 768 x 1024 |
| Wide Pad | 1024 x 768 |
The shell renders the app inside an iframe with a real viewport. This avoids the layout issues caused by simply scaling the React Native Web root with CSS.
The visual direction was prepared for the interview demonstration and uses a green primary action/accent color, paired with near-white surfaces, black typography, and red/green market movement states.
The intro page includes a custom ASCII animation that was iterated many times to create a memorable first impression for the demo.
| Area | Technology |
|---|---|
| App framework | Expo SDK 55 |
| UI | React Native 0.83, React 19 |
| Web | React Native Web |
| Routing | Expo Router |
| Animation | React Native Reanimated |
| Icons | lucide-react-native |
| Graphics | react-native-svg |
| Native feel | expo-haptics, expo-blur, expo-glass-effect, expo-symbols |
| Deployment | Vercel |
| Automation | custom headless Chrome smoke test |
.
├── app/ Expo Router screens
│ ├── (tabs)/ Home, Invest, Watchlist, Discover, Wallet/Search
│ ├── instrument/[symbol].tsx stock/crypto detail route
│ ├── +html.tsx web HTML shell
│ └── _layout.tsx root stack and preview shell wrapper
├── assets/ fonts and Expo assets
├── docs/ briefs, metrics, technical notes, email copy
├── scripts/
│ ├── check-market-data.cjs
│ └── verify-web-demo.cjs headless browser smoke test
├── src/
│ ├── components/ reusable UI components
│ ├── data/ mock market/portfolio data
│ ├── design/ design tokens
│ ├── hooks/ local portfolio, viewport, live-market hooks
│ └── utils/ formatting helpers
├── package.json
├── tsconfig.json
└── vercel.json
npm install
npm run webThe local app runs at:
http://localhost:8081
Useful preview URLs:
http://localhost:8081/
http://localhost:8081/?previewMode=pad
http://localhost:8081/?previewMode=widePad
http://localhost:8081/instrument/NVDA
Core checks:
npm run typecheck
npm run export:web
npm run verify:web-demoProduction smoke test:
VERIFY_WEB_BASE_URL=<your-vercel-url> npm run verify:web-demoThe smoke test covers:
- launch splash and enter flow
- Discover page
- Wallet deposit and transfer
- instrument detail trade order
- portfolio update after buy
- sell disabled when no holding exists
- Watchlist route
- desktop iframe shell
- Phone, Pad, and Wide Pad preview modes
- Mobile demo brief
- Figma wireframe brief
- Interview polish roadmap
- Prompt and command log
- Development metrics report
- Technical implementation notes
- Interview demo email
The project was built iteratively with an AI-assisted workflow:
- Figma Make and Figma references for visual exploration
- Codex skills such as
$figma:figma-use,$grill-me, and$grill-with-docs - parallel agent workstreams for implementation, investigation, and validation
- repeated local browser review
- automated smoke tests through
scripts/verify-web-demo.cjs - GitHub and Vercel integration for public review
- Dedicated landscape tablet mode with a two-column layout and touch-optimized information density.
- Dark mode and more personalization settings.
- Professional trader charting, especially candlestick/K-line chart views.
- All market and account data is mocked.
- No real trading orders are sent.
- No API secrets or private account data are stored in the repository.
package.jsonremains markedprivateto prevent accidental npm publishing; this is independent of the GitHub repository visibility.