A React + GitHub Actions service that tracks your GitHub followers / following, stores history in JSON, and highlights cleanup candidates.
- Demo: https://github-friends.nlo.ovh/
- Russian docs:
README_RU.md
- Collects
followersandfollowingsnapshots on a schedule (every 6 hours by default). - Stores historical JSON snapshots in the repository (
public/data/). - Builds event history:
follower_gainedfollower_lostyou_followedyou_unfollowed
- Builds practical cleanup reports:
Not Followback(you follow them, they do not follow back)Followers(they follow you, you do not follow them)Friends(mutual follows + last contribution activity)Unfollow candidates:- Not Followback for 7+ days
- Friends inactive for 60+ days
- Accounts that unfollowed you and are marked as deleted
- Tabs:
Unfollow candidates,Not Followback,Followers,Friends,Recent events. - Sorting for key columns (waiting time, followed-since, days since last contribution).
- Per-tab display limits (
10/25/50/100/500). - Page settings (gear icon):
- default records count
- language switch (
Englishdefault,Russianoptional) - local exclusions list
- No database required: JSON files are committed by workflow and served via GitHub Pages.
public/data/latest.json- latest raw snapshotpublic/data/events.json- event historypublic/data/follow-tracker.json- per-user follow state trackingpublic/data/reports.json- precomputed UI reportpublic/data/ignore.json- ignore list source for snapshot logicpublic/data/activity-cache.json- cached mutual activitypublic/data/snapshots/*.json- historical snapshots
npm install
npm run devGH_USERNAME=<your_login> \
GITHUB_TOKEN=<github_pat> \
FOLLOW_BACK_WINDOW_DAYS=7 \
FRIEND_INACTIVE_DAYS=60 \
ACTIVITY_REFRESH_HOURS=24 \
DATA_RETENTION_DAYS=90 \
npm run snapshot- Trigger:
- schedule:
17 */6 * * * - manual (
workflow_dispatch)
- schedule:
- Runs
npm run snapshot - Commits updated JSON under
public/data - Builds and deploys GitHub Pages in the same workflow run
- Auto-cleans old data:
- removes snapshot files older than
DATA_RETENTION_DAYS(default: 90) - trims event history and activity cache entries older than
DATA_RETENTION_DAYS
- removes snapshot files older than
- Trigger: push to
main+ manual run - Builds Vite app and deploys to GitHub Pages
- Resolves
VITE_BASE_PATHautomatically for custom domain vs repo pages
In Settings -> Secrets and variables -> Actions:
- Variable:
GH_USERNAME(optional; fallback isgithub.repository_owner) - Secret:
GH_PAT(optional; fallback isgithub.token)
- Enable Pages in
Settings -> Pages - Set source to
GitHub Actions - Keep
public/CNAMEfor custom domain deployments
If deploy returns Failed to create deployment (404), Pages is usually not enabled yet.
Project icons are stored in public/favicons/ and wired in index.html.
Use at your own risk. There is no guarantee that automation patterns or API usage will not trigger GitHub limits/restrictions.
If you discover a vulnerability, see SECURITY.md.
MIT License. See LICENSE.
