Skip to content

Commit 5e0dded

Browse files
committed
docs: rewrite README — WhatsApp delivery, Telegram, remove Gemini, add accomplishments
Major README overhaul: - Added '3 Ways to Receive ScoutBot' section at top: 1. Weekly email digest (existing) 2. WhatsApp Campus Delivery with level filtering (Undergrad / Grad / Both) — portal link placeholder pending Olamide's reply 3. Telegram channel — placeholder pending tsouk88 link - Added 'Accomplishments We're Proud Of' section: 500+ subscribers, WhatsApp engine, web portal, Telegram, zero cost, direct links - Removed entire 'How AI Is Used' section (Gemini removed from pipeline) - Updated 'What ScoutBot Does' to include WhatsApp + Telegram delivery - Updated project structure to show distribution-bridge + frontend-handler - Added 'Opportunity Sources' table (21 org pages listed) - Removed GEMINI_API_KEY from secrets table - Updated contributor card for tsouk88 to mention Telegram channel
1 parent 0716830 commit 5e0dded

1 file changed

Lines changed: 110 additions & 78 deletions

File tree

README.md

Lines changed: 110 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ScoutBot
22

3-
> An open-source Python bot that automatically scrapes the internet for opportunities for Nigerian students — scholarships, fellowships, internships, bootcamps, and more. It updates a shared Google Spreadsheet and emails a **weekly digest** to subscribers every Sunday.
3+
> An open-source Python bot that automatically finds scholarships, fellowships, and internships for Nigerian students. It updates a shared Google Spreadsheet, sends a weekly email digest, and delivers opportunities directly to WhatsApp campus groups and a Telegram channel.
44
55
[![GitHub Issues](https://img.shields.io/github/issues/TechHub-Extensions/ScoutBot)](https://github.com/TechHub-Extensions/ScoutBot/issues)
66
[![GitHub Stars](https://img.shields.io/github/stars/TechHub-Extensions/ScoutBot)](https://github.com/TechHub-Extensions/ScoutBot/stargazes)
@@ -12,89 +12,103 @@
1212

1313
---
1414

15-
## 📬 Subscribe — Free Weekly Digest
15+
## 📬 Three Ways to Receive ScoutBot
16+
17+
### 1 — Weekly Email Digest (free, no login)
1618

1719
ScoutBot emails a curated digest of the **latest** student opportunities every **Sunday at 10AM Lagos time**.
1820

1921
**[→ Fill the ScoutBot Subscription Form](https://docs.google.com/spreadsheets/d/1dFcnVvQjWkuYhN1rplICTY0j88KgvGqQ3FzYId2ru4s/edit?gid=1666713039#gid=1666713039)**
2022

2123
No app, no login, no fee. Fill the form once and you're on the list.
2224

23-
📋 [View the live opportunity spreadsheet →](https://docs.google.com/spreadsheets/d/1pLCEvDI1btjtOe1H3VgzCqpC6R0nRsEtnTwQhY6BqmU/edit)
24-
2525
---
2626

27-
## What ScoutBot Does
27+
### 2 — WhatsApp Campus Delivery (filtered by level)
2828

29-
- 🔍 **Scrapes 8+ live feeds daily** — Google News RSS (Nigeria + International), YouthHubAfrica
30-
- 🔗 **Direct application links only** — every link is extracted from the article's "Apply Now" button; items with no findable apply link are dropped before entering the sheet
31-
- 📊 **Writes to two separate tabs**: Nigeria 🇳🇬 and International 🌍 — never mixed
32-
- 🤖 **AI quality scoring** — every new item scored 1–10 by Gemini 2.0 Flash; items scoring below 5 are dropped
33-
- 🧹 **Auto-cleans daily** — entries removed when closed, past deadline, or older than 23 days
34-
- 📧 **One email per week** — Sunday digest with only opportunities added in the last 7 days
35-
- 🚫 **Students only** — scholarships, fellowships, internships, bootcamps. No startup/VC content
36-
- ☁️ **Runs entirely on GitHub Actions** — no server, no Replit dependency, works 24/7 independently
29+
Campus leads can register their WhatsApp group to receive opportunities **automatically, filtered by academic level**:
30+
31+
| Option | What you receive |
32+
|--------|-----------------|
33+
| **Both** | All opportunities — Undergrad + Graduate/PhD |
34+
| **Undergraduate & Internships only** | Entry-level, NYSC-eligible, and internship posts |
35+
| **Graduate, Masters & PhD only** | Postgraduate scholarships and fellowships |
36+
37+
**How to register your campus group:**
38+
1. Open the **[Campus Lead Portal →](https://scoutbot-portal.vercel.app)** *(link will be updated — see note below)*
39+
2. Paste your WhatsApp group invite link (`chat.whatsapp.com/...`)
40+
3. Select which type of opportunities your group wants to receive
41+
4. ScoutBot joins your group automatically
42+
5. Make **+234 816 449 9922** (ScoutBot) an Admin so it can post
43+
44+
> 📌 **Portal link update in progress** — we've emailed the portal owner for the latest URL. Check back here or open an issue if you need it urgently.
3745
3846
---
3947

40-
## How AI Is Used
48+
### 3 — Telegram Channel
4149

42-
ScoutBot uses **Google Gemini 2.0 Flash** to score and summarise every scraped opportunity before it enters the sheet.
50+
ScoutBot also publishes opportunities to a Telegram channel. No registration required — just join and get notified.
4351

44-
```
45-
Scrape → DedupePipeline → GeminiPipeline → SheetsPipeline
46-
(drop known) (score 1–10) (write to Nigeria/International tab)
47-
(drop < 5)
48-
(add AI blurb)
49-
```
52+
> 📌 **Telegram link update in progress** — reach out to [@tsouk88](https://github.com/tsouk88) (the Telegram integration author) or open an issue for the current invite link.
53+
54+
---
5055

51-
**The AI does two things:**
52-
1. **Scores** each opportunity 1–10 for relevance to Nigerian students — items below 5 are dropped silently
53-
2. **Generates a 2-sentence blurb** that appears in the weekly email so subscribers instantly know if an opportunity is for them
56+
📋 [View the live opportunity spreadsheet →](https://docs.google.com/spreadsheets/d/1pLCEvDI1btjtOe1H3VgzCqpC6R0nRsEtnTwQhY6BqmU/edit)
5457

55-
**Why Gemini and not GPT-4 or Claude?**
56-
Gemini 2.0 Flash is available on a free API tier with 1,500 requests/day — enough for ScoutBot's daily volume (typically 5–15 new items) with zero cost.
58+
---
5759

58-
**Full technical documentation:** [`docs/AI_IMPLEMENTATION.md`](./docs/AI_IMPLEMENTATION.md)
60+
## What ScoutBot Does
61+
62+
- 🔍 **Scrapes 21+ direct org pages daily** — checks PTDF, NDDC, NNPC, MTN Foundation, Tony Elumelu Foundation, Commonwealth Scholarships, Chevening, Fulbright, World Bank, AfDB, AU, UNDP, UNICEF, British Council, and more
63+
- 🔗 **Direct org application links only** — every link goes to the actual organisation's apply page, never a news aggregator or redirect URL
64+
- 📊 **Two separate tabs**: Nigeria 🇳🇬 and International 🌍 — never mixed
65+
- 📱 **WhatsApp campus delivery** — campus leads register their group; opportunities arrive filtered by academic level
66+
- 📣 **Telegram channel** — real-time posts as new opportunities are discovered
67+
- 🧹 **Auto-cleans daily** — entries removed when closed, past deadline, or older than 23 days
68+
- 📧 **One email per week** — Sunday digest with only opportunities added in the last 7 days, sent to 500+ subscribers
69+
- 🚫 **Students only** — scholarships, fellowships, internships only. No startup/VC content.
70+
- ☁️ **Runs entirely on GitHub Actions** — no server, no Replit dependency, works 24/7 independently
5971

6072
---
6173

62-
## Opportunity Lifecycle
74+
## Accomplishments We're Proud Of
6375

64-
```
65-
Day 0: Opportunity posted on the web
66-
Day 0–3: Spider picks it up (MAX_POST_AGE_DAYS = 3)
67-
→ follows article to find direct "Apply Now" link
68-
→ Gemini scores it 1–10
69-
→ if score ≥ 5: written to Google Sheet
70-
Day 7: Included in Sunday weekly email digest
71-
Day 23: Hard-removed from sheet by cleanup.py (STALE_DAYS = 23)
72-
```
76+
- **500+ email subscribers** acquired organically through student WhatsApp groups and word-of-mouth — zero paid promotion
77+
- **WhatsApp campus delivery system** — built from scratch by [@olamidefasogbon](https://github.com/olamidefasogbon): a full distribution bridge that joins WhatsApp groups, filters opportunities by level, and broadcasts automatically
78+
- **Subscriber web portal** with real-time registration, QR code generation, and live ScoutBot status indicator
79+
- **Telegram integration** — built by [@tsouk88](https://github.com/tsouk88), extending delivery to a third channel with zero extra infrastructure
80+
- **Zero cost infrastructure** — entire stack runs free: GitHub Actions, Gmail SMTP, Google Sheets API
81+
- **All links are direct org URLs** — no news.google.com, no redirects; every row in the sheet links to the actual application page
7382

7483
---
7584

7685
## How It Works
7786

7887
```
7988
Every day at 07:00 WAT (GitHub Actions — scoutbot.yml):
80-
1. scrapy crawl opportunities → scrapes RSS feeds → extracts apply links
81-
→ scores each with Gemini → writes to Nigeria / International tab
82-
2. python run.py --cleanup → removes entries older than 23 days or with past deadlines
89+
1. scrapy crawl opportunities → checks 21+ org pages for open opportunities
90+
→ extracts direct apply URLs
91+
→ deduplicates against existing sheet entries
92+
→ writes to Nigeria / International tab
93+
94+
2. python run.py --cleanup → removes entries older than 23 days or past deadline
8395
8496
Every Sunday 10:00 WAT (GitHub Actions — digest.yml):
85-
3. python run.py --notify → sends weekly digest (last 7 days only) to all subscribers
97+
3. python run.py --notify → sends weekly email digest (last 7 days) to all subscribers
98+
99+
After each scrape (broadcast_daemon.py):
100+
4. WhatsApp distribution bridge → sends new items to registered campus groups (filtered by level)
101+
5. Telegram notification → posts new items to Telegram channel
86102
87103
1st of every month 07:30 WAT (GitHub Actions — admin-report.yml):
88-
4. python admin_report.py → sends monthly stats report to project lead
104+
6. python admin_report.py → monthly stats report to project lead
89105
```
90106

91107
---
92108

93109
## Why ScoutBot Exists
94110

95-
Opportunities for Nigerian students are scattered across dozens of websites with no single reliable source. ScoutBot runs quietly in the background, finds new opportunities as they appear, extracts direct application links, scores them with AI, and delivers them straight to people's inboxes — once a week, clean and fresh.
96-
97-
**This is a bot, not a web app.** No dashboard, no login page, no frontend — just an automated Python system that works independently of any platform.
111+
Opportunities for Nigerian students are scattered across dozens of websites with no single reliable source. Most are announced on corporate press offices, government portals, or international org pages that students rarely check. ScoutBot checks all of them automatically, every day, and pushes the results to wherever students already are — their WhatsApp group, their Telegram feed, or their inbox once a week.
98112

99113
---
100114

@@ -104,10 +118,17 @@ Opportunities for Nigerian students are scattered across dozens of websites with
104118
ScoutBot/
105119
├── scoutbot/
106120
│ ├── spiders/
107-
│ │ └── opportunities_spider.py ← All scraping + RSS + apply link extraction
108-
│ ├── pipelines.py ← DedupePipeline → GeminiPipeline → SheetsPipeline
121+
│ │ └── opportunities_spider.py ← Scrapes 21+ org pages + scholars4dev RSS
122+
│ ├── pipelines.py ← DedupePipeline → SheetsPipeline
109123
│ ├── items.py ← Scrapy item definition
110124
│ └── settings.py ← Scrapy settings + pipeline order
125+
├── distribution-bridge/ ← WhatsApp delivery system (by olamidefasogbon)
126+
│ ├── whatsapp.js ← whatsapp-web.js session manager
127+
│ ├── broadcast.py ← Sends items to registered campus groups
128+
│ └── broadcast_daemon.py ← Daemon that queues and delivers broadcasts
129+
├── frontend-handler/ ← Campus Lead Portal (React + Vite)
130+
│ └── src/
131+
│ └── CampusLeadRegistration.jsx ← Group registration + level filtering UI
111132
├── notify.py ← Weekly email digest sender
112133
├── cleanup.py ← Removes expired sheet entries (23-day cap)
113134
├── admin_report.py ← Monthly stats email to project lead
@@ -116,7 +137,6 @@ ScoutBot/
116137
├── requirements.txt
117138
├── .env.example ← Copy to .env and fill in credentials
118139
├── docs/
119-
│ ├── AI_IMPLEMENTATION.md ← Full Gemini AI pipeline documentation
120140
│ └── VOLUNTEER_ROLES.md ← Step-by-step guide for all volunteer roles
121141
├── .github/
122142
│ └── workflows/
@@ -125,34 +145,52 @@ ScoutBot/
125145
│ ├── admin-report.yml ← Monthly 07:30 WAT stats report
126146
│ ├── welcome.yml ← Monthly welcome email to new subscribers
127147
│ └── pytest.yml ← CI tests on every push/PR
128-
├── CHANGELOG.md ← Full project history
148+
├── CHANGELOG.md
129149
├── CONTRIBUTING.md
130-
├── CODE_REFERENCE.md
131150
└── ENGINEERING.md
132151
```
133152

134153
---
135154

155+
## Opportunity Sources
156+
157+
ScoutBot checks **21 organisation pages directly** every day — no news aggregators, no redirects:
158+
159+
| Nigeria | International |
160+
|---------|---------------|
161+
| PTDF (ptdf.gov.ng) | Commonwealth Scholarship |
162+
| NDDC (nddc.gov.ng) | Chevening Scholarship |
163+
| NNPC Group | Fulbright Program |
164+
| Shell/SNEPCo | Mastercard Foundation |
165+
| MTN Foundation | World Bank |
166+
| Tony Elumelu Foundation | African Development Bank |
167+
| Dangote Foundation | African Union |
168+
| Access Bank | UNDP Nigeria |
169+
| YouthHub Africa | UNICEF |
170+
| NDIC (SIWES) | UN Fellowship, British Council NG |
171+
172+
Plus **scholars4dev.com** RSS as a supplementary feed when it has qualifying items.
173+
174+
---
175+
136176
## 🤝 Volunteer — Help Us Grow ScoutBot
137177

138-
ScoutBot is maintained by a small founding team and open-source contributors. Several roles are open to volunteers — no application required to get started.
178+
ScoutBot is maintained by a small founding team and open-source contributors. Several roles are open to volunteers — no application required.
139179

140180
**[→ Full volunteer guide: docs/VOLUNTEER_ROLES.md](./docs/VOLUNTEER_ROLES.md)**
141181

142-
| Role | Time/week | Skills needed | How to start |
143-
|------|-----------|---------------|--------------|
144-
| **Source Hunter** | 1–3 hrs | Browser, no coding | [Open issue: "volunteer: Source Hunter"](https://github.com/TechHub-Extensions/ScoutBot/issues/new) |
145-
| **Community Ambassador** | 1–2 hrs | Writing, social media | Start immediately — no approval needed |
146-
| **Issue Triager** | 30 min | Basic GitHub | Open an intro issue first |
147-
| **Data Curator** | 1–2 hrs | Google Sheets | Open an intro issue first |
148-
| **Documentation Writer** | 2–4 hrs | Markdown | Open an intro issue first |
149-
| **Source Monitor** | 30 min | Browser + GitHub | [Open issue: "volunteer: Source Monitor"](https://github.com/TechHub-Extensions/ScoutBot/issues/new) |
150-
| **Email Designer** | 2–5 hrs | HTML + CSS | Open an intro issue first |
151-
| **PR Reviewer** | 1–2 hrs | Python | Open an intro issue first |
152-
| **QA Tester** | 2–4 hrs | Python, CLI | Open an intro issue first |
153-
| **Subscriber Support** | 30 min | Gmail | Open an intro issue first |
154-
155-
To apply: open a GitHub issue titled `volunteer: interested in [Role Name]`. Include your name, location, why you want the role, and available hours.
182+
| Role | Time/week | Skills needed |
183+
|------|-----------|---------------|
184+
| **Source Hunter** | 1–3 hrs | Browser, no coding |
185+
| **Community Ambassador** | 1–2 hrs | Writing, social media |
186+
| **Issue Triager** | 30 min | Basic GitHub |
187+
| **Data Curator** | 1–2 hrs | Google Sheets |
188+
| **Documentation Writer** | 2–4 hrs | Markdown |
189+
| **Email Designer** | 2–5 hrs | HTML + CSS |
190+
| **PR Reviewer** | 1–2 hrs | Python |
191+
| **QA Tester** | 2–4 hrs | Python, CLI |
192+
193+
To apply: open a GitHub issue titled `volunteer: interested in [Role Name]`.
156194

157195
---
158196

@@ -165,10 +203,10 @@ pip install -r requirements.txt
165203
cp .env.example .env
166204
# Fill in .env with your credentials (see ENGINEERING.md)
167205

168-
python run.py --scrape # Scrape only (no email)
206+
python run.py --scrape # Scrape only
169207
python run.py --cleanup # Remove expired entries only
170208
python run.py --notify # Send digest email only
171-
python run.py --dry-run # Build email preview without sending (writes email_preview.html)
209+
python run.py --dry-run # Build email preview without sending
172210
python admin_report.py # Send monthly stats report manually
173211
```
174212

@@ -181,14 +219,13 @@ SPREADSHEET_ID=your_google_sheet_id
181219
FORM_SHEET_ID=your_form_responses_sheet_id
182220
GOOGLE_SERVICE_ACCOUNT_JSON=service_account.json
183221
RECIPIENT_EMAILS=email1@gmail.com,email2@gmail.com
184-
GEMINI_API_KEY=your_gemini_api_key
185222
```
186223

187224
---
188225

189226
## GitHub Actions Setup (runs independently)
190227

191-
The bot runs entirely on GitHub Actions free tier — no server required. Add these under **Settings → Secrets → Actions**:
228+
Add these secrets under **Settings → Secrets → Actions**:
192229

193230
| Secret | Description |
194231
|--------|-------------|
@@ -198,12 +235,9 @@ The bot runs entirely on GitHub Actions free tier — no server required. Add th
198235
| `FORM_SHEET_ID` | ID of the subscriber form response sheet |
199236
| `RECIPIENT_EMAILS` | Comma-separated fallback recipients |
200237
| `GOOGLE_SERVICE_ACCOUNT_JSON_B64` | Base64-encoded service account JSON |
201-
| `GEMINI_API_KEY` | Google Gemini API key (free at aistudio.google.com) |
202238

203239
Encode your service account: `base64 -i service_account.json | tr -d '\n'`
204240

205-
Once secrets are set, the bot runs on schedule with **no Replit, no VPS, no cron server** required.
206-
207241
---
208242

209243
## 💛 Support ScoutBot
@@ -225,20 +259,18 @@ Organisations can sponsor a featured placement in the Sunday digest for **₦5,0
225259
|------|-------|------|
226260
| **Kamsi Richard Ivanna** | kamsirichard1960@gmail.com | Founder & Project Lead |
227261
| Ibukun Ojo | adeojoibukun28@gmail.com | Core Team |
228-
| Success | successolamide46@gmail.com | Core Team |
262+
| Success (Olamide) | successolamide46@gmail.com | Core Team — WhatsApp delivery |
229263

230264
---
231265

232266
## Contributing
233267

234-
ScoutBot is open source and welcomes contributions from developers of all skill levels — especially Nigerian students.
235-
236268
**Quick ways to help:**
237269
-**Star this repo** (takes 2 seconds)
238270
- 🐛 **[Open an Issue](https://github.com/TechHub-Extensions/ScoutBot/issues)** — report a broken source, a bug, or a feature idea
239271
- 🔀 **Fork and submit a PR** — add sources, fix bugs, improve email design
240272
- 📣 **Share** with Nigerian student WhatsApp groups, Discord servers, Twitter/X
241-
- 🤝 **Volunteer** — see the [volunteer guide](./docs/VOLUNTEER_ROLES.md) for non-coding roles
273+
- 🤝 **Volunteer** — see the [volunteer guide](./docs/VOLUNTEER_ROLES.md)
242274

243275
**Ready to code?** Start with issues labelled [`good first issue`](https://github.com/TechHub-Extensions/ScoutBot/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22).
244276

@@ -257,7 +289,7 @@ Every merged contribution is permanently credited in [CONTRIBUTORS.md](./CONTRIB
257289
<img src="https://github.com/olamidefasogbon.png" width="60" style="border-radius:50%" /><br/>
258290
<b>olamidefasogbon</b>
259291
</a><br/>
260-
30 PRs — WhatsApp engine,<br/>V2 frontend, link validation
292+
30 PRs — WhatsApp delivery<br/>engine, Campus Lead Portal,<br/>link validation
261293
</td>
262294
<td align="center" width="140">
263295
<a href="https://github.com/saurabhhhcodes">
@@ -271,7 +303,7 @@ Every merged contribution is permanently credited in [CONTRIBUTORS.md](./CONTRIB
271303
<img src="https://github.com/tsouk88.png" width="60" style="border-radius:50%" /><br/>
272304
<b>tsouk88</b>
273305
</a><br/>
274-
4 PRs — new sources,<br/>Telegram, auto-label
306+
4 PRs — Telegram channel,<br/>new sources, auto-label
275307
</td>
276308
<td align="center" width="140">
277309
<a href="https://github.com/prajjukorban">

0 commit comments

Comments
 (0)