unashamed/ai
All projects · Chrome extension
Chrome extension · Facebook groups

Facebook Group: Player Wanted Alerts

Watches one Facebook group's chronological feed and, the moment a new post appears from a team looking for fill-in players, fires a loud desktop notification that tells you what time the game is and how many players they need. Optionally, the same alert as a push to your phone. Built for a Wellington indoor football group; the group id is configurable.

Version1.2.0
Permissionsstorage, notifications, alarms, offscreen
Runs onfacebook.com/groups/*, HTTPS, top frame
NetworkNone, unless you turn on phone push

What it does

1:30pm today — 2 players needed
1 female + 1 male · Div 3 · free
Posted by Daniel Harrold · NEC FC need 2x players for today's game at 1.30PM - FREE
  1. Reads the group feed you already have open (or opens it briefly in a background tab) and pulls out each post's id, author, text and age.
  2. Classifies the post. Only "a team needs fill-in players" posts alert. It stays quiet for players looking to join a team, posts already sorted or cancelled, and anything with no kick-off time in it.
  3. Extracts the useful bits: kick-off time, day, number of players, whether they want a specific gender or a goalkeeper, division and cost.
  4. Alerts once, obviously. A sticky Chrome notification that stays until you deal with it, a three-beep chime, and a red badge on the toolbar icon. Clicking it opens the post.
  5. Optionally pushes it to your phone via ntfy. Off by default, and the only thing this extension ever sends anywhere.

Only new posts, never a backlog

Keeping the feed fresh

If the group is open in a tab, that tab is reloaded on a timer (default every 3 minutes) unless it currently has focus, in which case it is just re-scanned. If no group tab is open, background check (on by default) opens the group in an inactive tab, reads it, and closes it about a minute later.

Phone push (optional)

Chrome only alerts the machine it runs on. Also alert my phone sends the same alert through ntfy, a free pub/sub notification service with no account and no signup: your desktop publishes to a topic, the ntfy app on your phone is subscribed to it and rings. Setup is about two minutes: install the ntfy app, click Generate a topic in the popup, subscribe to that topic in the app, switch the option on, and Test phone push.

The topic name is both the address and the password. ntfy.sh has no accounts; anyone who knows or guesses your topic can read every alert you receive (including, by default, the post text with team and poster names) and send you fake alerts. That is why the popup generates a 20-character random topic instead of letting you type "football". You can also turn Include the post text off, self-host ntfy (HTTPS only), or use an access token on a protected topic. All three are supported.

What it can touch

Manifest entryWhy it is there
permissions: ["storage"]Your settings (chrome.storage.sync) and the seen-post set plus recent alert list (chrome.storage.local).
permissions: ["notifications"]The entire feature is a desktop notification.
permissions: ["alarms"]An MV3 service worker is killed within seconds of going idle; chrome.alarms is the only supported way to poll on a schedule.
permissions: ["offscreen"]Service workers have no DOM and cannot play audio. A tiny offscreen document exists purely to sound the chime.
host_permissionsNone. Not requested, not needed.
optional_host_permissions: ["https://ntfy.sh/*"]Phone push only. Optional: not granted at install, requested the moment you switch phone push on, revocable any time from chrome://extensions. One origin, no wildcards. Leave phone push off and it is never granted.
content_scripts.matches: ["https://www.facebook.com/groups/*"]HTTPS only, and only group pages. Your home feed, Messenger, Marketplace, profiles and every other site are never touched.
content_scripts.all_frames: falseTop-level document only.
content_security_policyscript-src 'self'; object-src 'self'; base-uri 'none': no remote code, no eval, no inline script.

The tabs permission is deliberately not requested even though the extension reloads, creates and closes tabs: those specific calls don't need it, and it would grant read access to the URL and title of every tab you have open.

What data it reads, stores or sends

What it does not do

Honest limitations

Tests

From chrome-extensions/:

node tests/parser.test.mjs    # 175 checks over 60+ real posts from the group
node tests/push.test.mjs      # 54 checks on the ntfy payload builder + retries
node tests/owasp-audit.mjs    # static security audit of every extension here

Install

  1. Download or clone the repo.
  2. Open chrome://extensions and turn on Developer mode (top right).
  3. Click Load unpacked and choose the chrome-extensions/facebook-group-player-wanted-alerts folder.
View the source and README →

Then allow notifications for Chrome if macOS or Windows prompts. On macOS also set System Settings → Notifications → Google Chrome to Alerts (not Banners) so the alert stays on screen, and click Test alert in the popup to confirm the notification and chime both land.