---
# nuzlocke-tracker-p74f
title: Genlocke transfer UI
status: completed
type: feature
priority: normal
created_at: 2026-02-09T07:42:33Z
updated_at: 2026-02-09T10:20:53Z
parent: nuzlocke-tracker-25mh
blocking:
    - nuzlocke-tracker-lsc2
---

After completing a genlocke leg, the user selects which surviving Pokemon to carry forward to the next leg. Transferred Pokemon appear as egg encounters in the next run.

## Flow

### Transfer Step (between legs)
1. User completes a leg (beats the Champion / enters Hall of Fame)
2. A transfer screen is shown, displaying all surviving Pokemon from the completed leg
3. User selects which Pokemon to transfer (typically up to 6, the HoF team)
4. Selected Pokemon are "bred" — they'll appear as level 1 eggs/starters in the next leg
5. The transfer is recorded and the next leg's run is started

### Transfer Records
- Each transfer links a source encounter (from the completed leg) to a new egg encounter (in the next leg)
- The new encounter in the next leg should:
  - Be the base form of the evolutionary line (e.g., Charizard → Charmander egg)
  - Have a special status/flag indicating it's a genlocke transfer (not a wild encounter)
  - Optionally keep the same nickname
  - Not count against any route's first-encounter rule

### UI Components
- Transfer selection screen: grid of surviving Pokemon with checkboxes
- Show each Pokemon's sprite, nickname, species, and level
- "Transfer Selected" button to confirm
- Option to skip transferring (transfer none) for added challenge

## Backend
- `POST /api/v1/genlockes/{id}/legs/{leg_id}/transfer` — Accept list of encounter IDs to transfer
- Creates `GenlockeTransfer` records linking source encounters to new egg encounters
- Auto-creates the egg encounters in the next leg's run

## Data Model
- `GenlockeTransfer` table: from_leg_id, to_leg_id, from_encounter_id, to_encounter_id
- Egg encounters need a way to be distinguished from regular encounters (possibly a flag or encounter method)

## Checklist
- [ ] Create `GenlockeTransfer` SQLAlchemy model (from_leg_id, to_leg_id, from_encounter_id, to_encounter_id)
- [ ] Create Alembic migration for the GenlockeTransfer table
- [ ] Add logic to resolve a Pokemon's base form from its evolutionary chain (e.g., Charizard → Charmander)
- [ ] Implement `GET /api/v1/genlockes/{id}/legs/{leg_order}/survivors` — return surviving (non-fainted) encounters from a completed leg
- [ ] Implement `POST /api/v1/genlockes/{id}/legs/{leg_order}/transfer` — accept encounter IDs, create GenlockeTransfer records, create egg encounters in the next leg's run
- [ ] Build the transfer selection screen: grid of surviving Pokemon with checkboxes, sprites, nicknames, and levels
- [ ] Add a "Transfer Selected" confirmation action and a "Skip" option
- [ ] Wire up the transfer screen to appear after leg completion (integrate with leg progression flow)
- [ ] Ensure transferred egg encounters don't count against route first-encounter rules
- [ ] Add TypeScript types for transfer API request/response