# WIP: Tape Identifier Dropzone

**Branch:** `feature/software-hashes`
**Started:** 2026-02-17
**Status:** Complete

## Plan

Implements the tape identifier feature from [docs/plans/tape-identifier.md](tape-identifier.md).

Drop a tape file on the /zxdb page → client computes MD5 + size → server action looks up `software_hashes` → returns identified ZXDB entry.

### Tasks

- [x] Add `lookupByMd5()` to `src/server/repo/zxdb.ts`
- [x] Create `src/utils/md5.ts` — pure-JS MD5 for browser
- [x] Create `src/app/zxdb/actions.ts` — server action `identifyTape`
- [x] Create `src/app/zxdb/TapeIdentifier.tsx` — client component with dropzone
- [x] Insert `<TapeIdentifier />` into `src/app/zxdb/page.tsx`
- [ ] Verify on http://localhost:4000/zxdb

## Progress Log

### 2026-02-17T00:00
- Started work. Continuing on `feature/software-hashes` at `e27a16e`.

### 2026-02-17T00:01
- All implementation complete. Type check passes. Ready for visual verification.

## Decisions & Notes

- Uses RSC server actions (not API routes) to discourage bulk scripting.
- MD5 computed client-side; file never leaves the browser.
- No new npm dependencies — pure-JS MD5 implementation (~130 lines).
- TapeIdentifier placed between hero and "Start exploring" grid in a row layout with explanatory text alongside.

## Blockers

None.

## Commits

fc513c5 - wip: start tape identifier — init progress tracker
8624050 - feat: add tape identifier dropzone on /zxdb
