Coding assistants make it easy to add another button, card, or form field. Three different situations can look the same in a pull request: an accidental copy, an intentional variant, and two components that share a shape but do different jobs. Similarity alone cannot tell those apart. A frontend tech lead or design-system maintainer still has to inspect the code, decide what to keep, and turn that decision into cleanup work. DupeDetective is a web app for that review. The reviewer starts a scan from a public GitHub repository URL or a ZIP upload. For GitHub, they can pin a branch or commit; the scan records the resolved commit SHA. A ZIP is identified by a content hash. Each scan is its own session. A new scan starts with no decisions from an earlier one, and the site never writes back to the scanned repository. Analysis is deterministic. A Babel parser finds React function, arrow, and class components in JavaScript and TypeScript. Pairs are scored with fixed weights: JSX element tree (35), prop-name overlap (25), event-handler overlap (15), nesting depth (10), shared class names (10), and component name (5). A token that appears everywhere counts for less than a rare one. Components join a group while the average stays at 28 or above. A group score is the average of every pair in the group. Forty or higher reads as Strong. Scores only order the queue. They are not a duplicate verdict. The reviewer compares members side by side: source paths, prop signatures, the matched signals in plain language, and a best-effort preview. The preview runs in a sandboxed iframe with editable mock props generated from declared types. If a preview fails, the group stays reviewable from the source. For each group they choose one component to keep, which members merge into it, and which stay separate. A merge requires a note. Keep separate does not create cleanup work. The site then writes a Markdown backlog and a copyable repair instruction for that scan. The instruction names the component to keep, the components to replace, the components to leave unchanged, the behavior to preserve, and suggested checks. The reviewer pastes it into IBM Bob, or any other coding agent, and marks the migration complete only after they confirm the work. What makes this different is the split of labor. Detection stays repeatable and explainable, so a person can disagree with a match. The coding agent enters only after that decision, with a bounded task instead of a vague request to clean up duplicates. The target user is a senior frontend engineer reviewing a React codebase that grew faster than its design system.
Category tags: