Skip to content

feat(home): crypto listings screen with logos, MMKV cache and component conventions#5

Merged
gedu merged 14 commits into
mainfrom
feat/home-crypto-list
Apr 7, 2026
Merged

feat(home): crypto listings screen with logos, MMKV cache and component conventions#5
gedu merged 14 commits into
mainfrom
feat/home-crypto-list

Conversation

@gedu

@gedu gedu commented Apr 6, 2026

Copy link
Copy Markdown
Owner

Closes #1

Summary

  • Builds the Home screen with a crypto listings FlatList, BTC hero section, and per-coin logo images
  • Caches coin logo URLs in MMKV (v4 API) to avoid redundant network requests
  • Replaces deprecated ThemedText / ThemedView with project-owned Text / View primitives
  • Pins Node to 20.15.0, adds iOS bundleIdentifier + Android package, and adds react-native-nitro-modules as peer dep for MMKV v4

Changes

File / Area What changed
app/(tabs)/index.tsx Home screen — FlatList coin list, BTC hero, API key validation
components/ CoinRow, CoinLogo, HeroSection — top-level components, props-driven
hooks/useCoinLogos.ts Fetches + caches logo URLs in MMKV (persist across cold starts)
storage/ Migrated to MMKV v4 API (createMMKV, remove)
components/text.tsx Replaces deprecated ThemedText (deleted)
components/view.tsx Replaces deprecated ThemedView (deleted)
app.json Added bundleIdentifier (iOS) and package (Android)
package.json Scripts → expo run:*, added react-native-nitro-modules
.nvmrc Pinned to 20.15.0
.claude/skills/react-native/SKILL.md Documented 3 new conventions (see below)

Conventions documented in this PR

Three new rules added to the React Native skill — all applied in the code above:

  1. Component Definition Location — components are always top-level in their own file, never defined inside another component body (React Compiler identity + testability)
  2. FlatList Pure Callbacks at Module LevelkeyExtractor / getItemLayout defined at module scope, not inside the component
  3. Percentage Heights in Scroll Containersheight: '25%' resolves to 0 inside FlatList / ScrollView; use useWindowDimensions instead

Test plan

  • expo run:ios — home screen loads, coins render with logos
  • Kill and reopen app — logos load instantly from MMKV cache (no flicker)
  • Remove API key — validation error state shown correctly
  • Dark / Light mode toggle — themed primitives render correctly

📸 Screenshot: add a device screenshot here before merging.

@gedu gedu merged commit 17dd3c3 into main Apr 7, 2026
1 check passed
@gedu gedu self-assigned this Apr 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Create a new expo app

1 participant