Skip to content

Latest commit

 

History

History
307 lines (250 loc) · 9.2 KB

File metadata and controls

307 lines (250 loc) · 9.2 KB

Development Roadmap

This roadmap is optimized for AI-assisted development with context window efficiency in mind. Each phase is designed to be completable in a single session without requiring extensive context from previous phases.

Principles

  1. Self-contained phases - Each phase has clear inputs/outputs
  2. Minimal cross-phase dependencies - Read file structure, not conversation history
  3. Testable milestones - Each phase ends with something verifiable
  4. Progressive complexity - Simple foundations before complex detection

Phase 1: Project Bootstrap

Session prompt: "Initialize the React Native project with TypeScript, React Native Paper, and the Dangerous Things theme system."

Inputs

  • None (greenfield)

Tasks

  1. Initialize Expo project with TypeScript template
  2. Install core dependencies:
    • @anthropic-dangerous-things/react-native-theme (local link or npm)
    • react-native-paper
    • react-native-safe-area-context
    • @react-navigation/native + @react-navigation/native-stack
    • react-native-nfc-manager
    • expo-font (for Tektur)
  3. Install the DT theme package (@dangerousthings/react-native from npm, or ../dt-design-system/packages/react-native locally)
  4. Use DTThemeProvider from the theme package
    • colors.ts - DT color palette
    • typography.ts - Tektur font setup
    • paperTheme.ts - React Native Paper theme config
  5. Create basic navigation structure:
    • HomeScreen - Mode selection (just "Transponder to Implant" for now)
    • ScanScreen - Placeholder
    • ResultScreen - Placeholder
  6. Wrap app with providers (Paper, Navigation, SafeArea)

Outputs

  • Runnable app on both platforms
  • DT-themed UI with working navigation
  • No NFC functionality yet

Verification

npm run android  # App launches with cyan/yellow theme
npm run ios      # App launches with cyan/yellow theme

Phase 2: NFC Infrastructure

Session prompt: "Implement the NFC service layer with platform permissions and the useScan hook."

Inputs

  • Phase 1 complete (check for src/theme/paperTheme.ts)

Tasks

  1. Configure Android NFC permissions:
    • AndroidManifest.xml - NFC permission + intent filters
    • Min SDK verification (21+)
  2. Configure iOS NFC entitlements:
    • Add NFC capability in Xcode
    • Info.plist - Usage description + AID identifiers
  3. Create NFC service layer (src/services/nfc/):
    • NFCManager.ts - Wrapper with init/cleanup lifecycle
    • platforms.ts - Platform detection utilities
  4. Create scan hook (src/hooks/useScan.ts):
    • States: idle, scanning, success, error
    • Handle tag discovered callback
    • Proper cleanup on unmount
  5. Update ScanScreen to use hook and display raw tag data

Outputs

  • NFC permissions working on both platforms
  • Can detect any NFC tag and show UID
  • Proper scan lifecycle management

Verification

  • Scan any NFC tag → UID displayed
  • Cancel scan → returns to idle state
  • Error states shown for NFC disabled/permission denied

Phase 3: Basic Chip Detection

Session prompt: "Implement NTAG and MIFARE Classic detection with the chip identification framework."

Inputs

  • Phase 2 complete (check for src/hooks/useScan.ts)

Tasks

  1. Define detection types (src/types/detection.ts):
    interface DetectionResult {
      chipType: ChipType;
      chipSubtype?: string;
      isCloneable: boolean;
      confidence: 'high' | 'medium' | 'low';
      rawData: RawTagData;
    }
  2. Create detection framework (src/services/detection/):
    • detector.ts - Main orchestrator
    • types.ts - Chip type enums
  3. Implement NTAG detection (src/services/detection/ntag.ts):
    • Send GET_VERSION (0x60)
    • Parse response for 213/215/216/I2C variants
    • Mark as cloneable
  4. Implement MIFARE Classic detection (src/services/detection/mifare.ts):
    • Check SAK: 0x08 (1K), 0x18 (4K), 0x09 (Mini)
    • Mark as cloneable
    • Note Android-only for sector operations
  5. Update ScanScreen to show detection results

Outputs

  • NTAG213/215/216 correctly identified
  • MIFARE Classic 1K/4K correctly identified
  • Detection results displayed with chip info

Verification

  • Scan NTAG215 → Shows "NTAG215, Cloneable: Yes"
  • Scan MIFARE Classic 1K → Shows "MIFARE Classic 1K, Cloneable: Yes"
  • Scan other tags → Shows "Unknown" with raw data

Phase 4: Advanced Chip Detection

Session prompt: "Add detection for DESFire, MIFARE Plus, SLIX, and JavaCard chips."

Inputs

  • Phase 3 complete (check for src/services/detection/ntag.ts)

Tasks

  1. Implement ISO 14443-4 detection (src/services/detection/iso14443.ts):
    • Parse ATS/historical bytes
    • Route to specific detectors based on signatures
  2. Implement DESFire detection (src/services/detection/desfire.ts):
    • Identify via ATS signature
    • Send GET_VERSION for EV1/EV2/EV3 determination
    • Mark as non-cloneable
  3. Implement MIFARE Plus detection:
    • Security level detection if possible
    • Mark as non-cloneable
  4. Implement ISO 15693 detection (src/services/detection/iso15693.ts):
    • Get system info command
    • Identify SLIX/SLIX2 variants
    • Mark as cloneable
  5. Implement JavaCard detection (src/services/detection/javacard.ts):
    • Parse historical bytes for JCOP signature
    • GET DATA for CPLC
    • AID probing for installed applets
    • Mark as non-cloneable
  6. Handle platform differences gracefully:
    • iOS: Use ISO 7816 wrapped commands
    • Android: Use native tech classes

Outputs

  • All target chip types detected
  • DESFire version (EV1/2/3) identified
  • JavaCard identification via CPLC
  • Platform-appropriate detection paths

Verification

  • Scan DESFire EV2 → Shows "MIFARE DESFire EV2, Cloneable: No"
  • Scan SLIX → Shows "SLIX, Cloneable: Yes"
  • Scan J3R180 → Shows "JCOP4 (J3R180), Cloneable: No"

Phase 5: Product Matching

Session prompt: "Create the product catalog and matching algorithm, then build the results UI."

Inputs

  • Phase 4 complete (check for src/services/detection/javacard.ts)

Tasks

  1. Define product types (src/types/products.ts):
    interface Product {
      id: string;
      name: string;
      compatibleChips: ChipType[];
      description: string;
      features: string[];
      formFactor: 'x-series' | 'flex' | 'other';
    }
  2. Create product catalog (src/data/products.ts):
    • xNT (NTAG216)
    • xEM (T5577 - for EM/HID cloning)
    • NExT (NTAG216 + T5577)
    • xSIID (NTAG I2C + LED)
    • xDF2 (DESFire EV2)
    • flexDF2 (DESFire EV2 flex)
    • xMagic (MIFARE Classic + Gen2 Magic)
    • Apex (J3R180)
    • Apex Flex (J3R180 flex)
    • SLIX implants if available
  3. Implement matching algorithm (src/services/matching/matcher.ts):
    • Match by chip type
    • Rank by feature parity
    • Handle cloneable vs native matches
  4. Create result components (src/components/results/):
    • TransponderInfo.tsx - Detected chip details
    • ProductMatch.tsx - Matching product card
    • NoMatchFound.tsx - Conversion service link
  5. Update ResultScreen with full flow

Outputs

  • Complete transponder-to-implant matching
  • Product cards with descriptions
  • "No match" redirects to dngr.us/conversion

Verification

  • Scan NTAG215 → Shows xNT, NExT as matches
  • Scan MIFARE Classic → Shows xMagic as match
  • Scan unknown chip → Shows conversion link

Phase 6: Polish & UX

Session prompt: "Add animations, error handling, and final UI polish for production readiness."

Inputs

  • Phase 5 complete (check for src/services/matching/matcher.ts)

Tasks

  1. Add scan animations:
    • Pulsing scan indicator
    • Success/failure transitions
    • Card detection feedback
  2. Implement comprehensive error handling:
    • NFC disabled state
    • Permission denied flow
    • Tag lost during scan
    • Unsupported tag graceful fallback
  3. Add educational content:
    • Chip type explanations
    • Cloneability explanations
    • "Why can't this be cloned?" info
  4. UI refinements:
    • Beveled corner components (DT style)
    • Proper loading states
    • Empty states
  5. Platform testing:
    • Test all chip types on Android
    • Test all chip types on iOS (within CoreNFC limits)
    • Edge case handling

Outputs

  • Production-ready UX
  • Helpful error messages
  • Educational chip information
  • Consistent DT branding throughout

Verification

  • Full flow feels polished
  • Errors are helpful, not cryptic
  • Works offline
  • Matches DT website aesthetic

Future Phases (Post-MVP)

Phase 7: "ID an Implant" Mode

Details TBD with employer

Phase 8: Scan History

  • Local storage of past scans
  • Favorites/bookmarks

Phase 9: Store Integration

  • Direct product links (when store is live)
  • Pricing display

Session Recovery Guide

If starting a new session mid-project:

  1. Check current state:

    ls src/services/detection/  # Which detectors exist?
    ls src/data/                 # Product data present?
  2. Identify phase:

    • No src/ → Start Phase 1
    • No useScan.ts → Start Phase 2
    • No ntag.ts → Start Phase 3
    • No javacard.ts → Start Phase 4
    • No products.ts → Start Phase 5
    • All present → Phase 6 or done
  3. Read CLAUDE.md for technical context

  4. Use phase-specific prompt from this document