# dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github architecture

> Architecture diagram of the GitHub repository dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-05-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github
- Repository: https://github.com/dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github

## Overview

This repository appears to be a very small, single-purpose Python tool rather than a multi-service application. The whole system is likely centered in `muhahaha.py`, with `requirements.txt` providing the runtime dependencies and `README.md` documenting the behavior.

The main entry point is probably a single script that drives the full workflow end to end: connect to GitHub, inspect a target user’s following list, classify usernames, and print a percentage result. There is no evidence of separate packages, background workers, databases, or web servers.

A useful way to diagram it is as three internal stages inside one script. First is GitHub data collection: the tool “stalks” a GitHub following page, so it likely fetches or scrapes the list of accounts a target user follows. Second is AI-based classification: the README says it uses Claude to identify “feminine usernames,” so the script probably sends candidate names to Anthropic’s Claude API and receives a label or score. Third is aggregation/reporting: it computes the percentage of followed accounts that match the feminine classification and returns that to the user.

The boundary between GitHub and the local program is important. The script likely acts as a client consuming GitHub profile/following data, either through HTTP scraping or browser-like requests. That means the GitHub side is an external data source, not a local subsystem.

The boundary between the script and Claude is also important. Claude is the only clearly implied external AI service. The classification step is not happening locally; the script depends on an API call out to Anthropic, then uses the model’s output as a decision input.

The README’s note about “pretends to be a normal browser” suggests the script may include request headers, session handling, or other anti-bot evasion behavior. Architecturally, that means the data collection layer is probably not a simple API call; it is likely wrapped in a browser-emulation or stealth HTTP client layer.

The output path looks simple: after collection and classification, the script computes a ratio and reports a percentage. There is no sign of persistence, dashboards, or downstream integrations. The program likely exits after printing the result.

Operationally, the whole repo depends on two external systems only: GitHub for source data and Claude for classification. That makes the architecture a thin orchestration layer around external services, with very little internal state.

For an architecture diagram, the cleanest representation is: user launches `muhahaha.py` → script fetches a GitHub following page → script sends usernames or profile identifiers to Claude → script aggregates model judgments → script returns a percentage to the user.

Because the repository contains only one Python file plus dependency metadata, the architecture is intentionally minimal. Most of the “system” is in how that script coordinates I/O, rather than in multiple internal modules or service boundaries.

Main entry points: [`muhahaha.py`](https://github.com/dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github/blob/main/muhahaha.py) (muhahaha.py), [`README.md`](https://github.com/dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github/blob/main/README.md) (README), [`requirements.txt`](https://github.com/dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github/blob/main/requirements.txt) (Requirements)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_repo["Repository"]
  node_script["muhahaha.py<br/>orchestrator<br/>[muhahaha.py]"]
  node_docs["README<br/>documentation<br/>[README.md]"]
  node_deps["Requirements<br/>dependencies<br/>[requirements.txt]"]
  node_stealth["Browser mimic<br/>http client<br/>[muhahaha.py]"]
  node_collect["Following scrape<br/>collector<br/>[muhahaha.py]"]
  node_classify["Name classify<br/>classifier<br/>[muhahaha.py]"]
  node_aggregate["Percentage calc<br/>aggregator<br/>[muhahaha.py]"]
  node_report["Result output<br/>printer<br/>[muhahaha.py]"]
end

node_user(("User<br/>operator"))
node_github[("GitHub<br/>external source")]
node_claude[("Claude API<br/>external ai")]

node_user -->|"run"| node_script
node_docs -.->|"describe"| node_script
node_deps -.->|"support"| node_script
node_script -->|"uses"| node_stealth
node_stealth -->|"fetches"| node_github
node_script -->|"drives"| node_collect
node_collect -->|"reads"| node_github
node_script -->|"drives"| node_classify
node_classify -->|"calls"| node_claude
node_classify -->|"feeds"| node_aggregate
node_aggregate -->|"formats"| node_report
node_report -->|"shows"| node_user

click node_script "https://github.com/dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github/blob/main/muhahaha.py"
click node_docs "https://github.com/dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github/blob/main/README.md"
click node_deps "https://github.com/dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github/blob/main/requirements.txt"
click node_stealth "https://github.com/dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github/blob/main/muhahaha.py"
click node_collect "https://github.com/dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github/blob/main/muhahaha.py"
click node_classify "https://github.com/dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github/blob/main/muhahaha.py"
click node_aggregate "https://github.com/dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github/blob/main/muhahaha.py"
click node_report "https://github.com/dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github/blob/main/muhahaha.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_script,node_docs,node_deps,node_stealth,node_collect,node_classify,node_aggregate,node_report toneBlue
class node_user,node_github,node_claude toneNeutral
```

## Components

### Repository

Core local files that define and document the tool.

- [muhahaha.py](https://github.com/dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github/blob/main/muhahaha.py): orchestrator · Single entry point that coordinates scraping, classification, and reporting. · `muhahaha.py`
- [README](https://github.com/dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github/blob/main/README.md): documentation · Explains behavior, intent, and usage of the tool. · `README.md`
- [Requirements](https://github.com/dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github/blob/main/requirements.txt): dependencies · Lists Python runtime dependencies used by the script. · `requirements.txt`
- [Browser mimic](https://github.com/dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github/blob/main/muhahaha.py): http client · Fetches GitHub pages with browser-like behavior and request handling. · `muhahaha.py`
- [Following scrape](https://github.com/dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github/blob/main/muhahaha.py): collector · Extracts the accounts a target user follows on GitHub. · `muhahaha.py`
- [Name classify](https://github.com/dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github/blob/main/muhahaha.py): classifier · Sends candidate usernames to Claude and interprets the response. · `muhahaha.py`
- [Percentage calc](https://github.com/dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github/blob/main/muhahaha.py): aggregator · Combines classification results into a final percentage. · `muhahaha.py`
- [Result output](https://github.com/dellamora/webscraper-to-identify-which-girls-and-how-many-of-them-my-boyfriend-follows-on-github/blob/main/muhahaha.py): printer · Prints the computed percentage for the user. · `muhahaha.py`

### Other components

- **User**: operator · Runs the script and reads the final percentage result.
- **GitHub**: external source · Source of following-list data for the target account.
- **Claude API**: external ai · Anthropic service used to classify usernames or profiles.

## Connections

- User → muhahaha.py: run · Launches the tool.
- README → muhahaha.py: describe · Documents the expected behavior and intent.
- Requirements → muhahaha.py: support · Provides runtime packages used by the script.
- muhahaha.py → Browser mimic: uses · Sets up browser-like request behavior.
- Browser mimic → GitHub: fetches · Retrieves GitHub following data.
- muhahaha.py → Following scrape: drives · Coordinates collection of followed accounts.
- Following scrape → GitHub: reads · Pulls target-user following information from GitHub.
- muhahaha.py → Name classify: drives · Hands collected usernames to the classification stage.
- Name classify → Claude API: calls · Queries the Claude API for label decisions.
- Name classify → Percentage calc: feeds · Passes classification outcomes onward.
- Percentage calc → Result output: formats · Turns results into a final percentage output.
- Result output → User: shows · Presents the computed result to the user.
