← projects

project

Mão Dupla — Chrome Extension to Manage Instagram Followers

at Personal project

Mão Dupla — Chrome Extension to Manage Instagram Followers

An open-source extension that shows who doesn't follow you back and tracks what changed between one refresh and the next.

What it is

A Chrome extension (Manifest V3) that also works in Edge and Brave. From the user's own Instagram account, it shows who they follow without being followed back, who unfollowed, who is new, and who left the "following" list. It lets you follow and unfollow straight from the list, one by one or through a queue. It's an open-source project (MIT license), with version 2.0.0 published and a .zip installer on the Releases page.

How it works

The extension injects functions into the Instagram tab where the user is already logged in, through chrome.scripting, and consumes the site's internal API by mimicking its requests. Everything runs locally in the browser: there's no server, it never asks for a password, and it doesn't send data to anyone. The lists are cached locally and each refresh is compared with the previous one, which makes it possible to show changes over time.

Features

  • Real-time list loading with a progress bar, and comparison of each refresh against the previous one.
  • Checks "left" alerts directly against Instagram before showing them, to avoid false positives.
  • Follow and unfollow queues with a random pause between actions. The queue stops by itself and locks for 6 hours if Instagram limits the account.
  • Export and import of everything as a .zip (full JSON plus one CSV per tab), to carry the data from one computer to another.
  • Custom interface: sidebar, cards with photo and verified badge, search, and configurable pagination.
  • Accessibility: visible keyboard focus, screen-reader labels, and "reduce motion" support.

Tech Stack

  • Plain JavaScript, no dependencies or build step
  • Chrome Extensions (Manifest V3) and chrome.scripting
  • localStorage for the local cache
  • GitHub Actions for the automated release

Technical Highlights

  • Wrote the .zip generator and reader from scratch, including the CRC32 calculation, without any libraries
  • Reuses the session already open in the browser, without storing cookies, tokens, or passwords
  • Validates data on import, discarding photo links that aren't from Instagram
  • Verifies each suspicious alert directly against Instagram to eliminate false positives
  • Queue with a random pause and an automatic lock when Instagram limits the account
  • Automated release: when a tag is created, the workflow checks the manifest version, packages the zip, and publishes the release

How it was built

Built by me with the help of Claude AI, which helped me investigate how the site works and write and test the code.

This site uses essential cookies (theme, preferences) and, with your permission, analytics cookies (Google Analytics) to understand how the site is used. learn more