Feature (Phase 2): Implement named ingestion sources (RSS feeds, GitHub markdown/YAML lists, Apify actors) & deadline expiry rules
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 5/5
- 预计耗时
- 一周以上
- 新手友好度
- 18/100
- Issue 类型
- 功能
- 描述清晰度
- 基本清楚
- 活跃度
- 活跃
- 技术栈
- github, typescript
调研方向
Start with src/lib/ingestion/sources/index.ts, which exports SOURCES = [], then read src/lib/ingestion/run-ingestion.ts and src/app/api/cron/link-health/route.ts. This is a broad tracking issue spanning many adapters, so a newcomer should pick one slice, such as the past-deadline drop in run-ingestion.ts, and confirm scope with maintainers first. Done means the slice works and has unit tests.
由索引模型根据 Issue 内容生成。
描述
Description
Tracked from docs/2026-09-18-improvement-plan.md (§4 Phase 2) and docs/2026-09-18-github-resource-repos.md. Complements #40 with the concrete source adapters, parsers, and deadline-expiry rules from the Sept 18 research sweep.
Currently, the ingestion pipeline scaffolding (src/lib/ingestion/, /api/cron/ingest-resources, /admin/ingestion) is built, but src/lib/ingestion/sources/index.ts exports SOURCES = [].
Concrete Sources to Implement (src/lib/ingestion/sources/)
1. Free RSS & JSON Feeds (plain fetch)
- Opportunity Desk (
https://opportunitydesk.org/feed/): scholarships, fellowships, grants, contests; extract deadline from description text via regex. - Scholars4Dev (
https://www.scholars4dev.com/feed/): international scholarships with deadline data. - Brabble.ai JSON/RSS (
https://brabble.ai/): India-centric hackathons, competitions, and coding contests with structured closing dates (with attribution).
2. GitHub Resource Lists (docs/2026-09-18-github-resource-repos.md)
Build two generic parsers (Markdown Table parser and Markdown Link List / YAML parser) with GitHub Commits API change-detection:
yashisrani/List-of-OpenSource-Programs(YAML/Markdown with stipends & timelines)ayush-sleeping/Every-Open-Source-Programs(month-by-month tables)deepanshu1422/List-Of-Open-Source-Internships-Programssdhutchins/awesome-edu-perks(tag US/Global region)- Official GitHub Student Developer Pack partner page (
https://education.github.com/pack)
3. Apify Actor Sources (APIFY_TOKEN via run-sync-get-dataset-items)
saadithya/scholarships-competitions-internships-extractor: normalizedYYYY-MM-DDdeadlines across Scholarships, Fellowships, Internships.gabrielaxy/hackathon-aggregator: Devpost, Devfolio, ETHGlobal, DoraHacks start/end dates (kind = 'program').solidcode/unstop-scraper/dami_studio/unstop-scraper: filter strictly toscholarship+hackathon+ named flagship internships (respecting the "not a job board" non-goal).blackfalcondata/internshala-scraper: filter strictly to curated flagship programs (InStep, TCS Research, Microsoft, Amazon), not the firehose.
Pipeline & Link-Health Rules
- Drop past deadlines at fetch time: In
run-ingestion.ts, any candidate withdeadline < now()is dropped before inserting intoingestion_candidates. - Link-health deadline expiry (
src/app/api/cron/link-health/route.ts):- If a live resource has
deadline < now()and norecurrence, automatically flipstatus = 'expired'. - If a live resource has
deadline < now()withrecurrence, cleardeadline = nulland keep its"reopens ~month"recurrence label active.
- If a live resource has
Acceptance Criteria
-
SOURCESinsrc/lib/ingestion/sources/index.tsincludes working adapters for RSS feeds, GitHub markdown/YAML lists, and Apify actors (whenAPIFY_TOKENis set). - Candidates with
deadline < now()are dropped during ingestion. - Link-health cron expires non-recurring past-deadline resources and resets recurring past-deadline resources.
- Unit tests cover the markdown table parser, RSS deadline extractor, past-deadline filtering, and recurrence rollover.
Files Involved
src/lib/ingestion/sources/index.tssrc/lib/ingestion/sources/*.ts(new adapters)src/lib/ingestion/run-ingestion.tssrc/app/api/cron/link-health/route.tsvercel.json
- 主要语言
- TypeScript
- 星标
- 1
- 派生
- 6
- 平均合并
- 23 小时 53 分钟
- 30 天内合并 PR
- 27
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
Your-Voldemort/StudentStack 的其他 Issue
-
enhancement
难度 4/5 3-5 天 新手友好度 25/100
Your-Voldemort/StudentStack#84 ·
维护者通常 1 天内回复
-
enhancement
难度 5/5 一周以上 新手友好度 12/100
Your-Voldemort/StudentStack#82 ·
维护者通常 1 天内回复
-
enhancement
难度 4/5 一周以上 新手友好度 22/100
Your-Voldemort/StudentStack#79 ·
维护者通常 1 天内回复
-
Feature (Phase 1): Extend resources schema for opportunities (kind, opensAt, recurrence, amount, provider, eligibility)可能已有人在做 @Cipher-Shadow-IR 今天认领。 未关闭enhancement
难度 4/5 3-5 天 新手友好度 35/100
Your-Voldemort/StudentStack#78 · 1 条评论 ·
维护者通常 1 天内回复
-
enhancement
难度 5/5 一周以上 新手友好度 20/100
Your-Voldemort/StudentStack#42 ·
维护者通常 1 天内回复
查看 Your-Voldemort/StudentStack 的全部 Issue
相似的 Issue
-
docs(api): openapi.yaml still documents gif-tools optimize colors as 2-256 instead of 2, 4, 16, 256未关闭area: backend documentation priority: low
难度 2/5 1-3 小时 新手友好度 84/100
snapotter-hq/SnapOtter#2919 ·
维护者通常 1 天内回复
-
accepted :+1: bug db/redis
难度 2/5 1-3 小时 新手友好度 76/100
beekeeper-studio/beekeeper-studio#4882 · 1 条评论 ·
维护者通常 1 天内回复
-
ready-for-triage
难度 2/5 1-3 小时 新手友好度 72/100
konflux-ci/konflux-ui#1630 · 1 条评论 ·
维护者通常 2 天内回复
-
难度 2/5 1-3 小时 新手友好度 67/100
ahmedkhaleel2004/gitdiagram#233 ·
-
难度 2/5 1-3 小时 新手友好度 72/100
simkimsia/netlify-axi#19 ·
维护者通常 1 天内回复