Feature (Phase 2): Implement named ingestion sources (RSS feeds, GitHub markdown/YAML lists, Apify actors) & deadline expiry rules
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 18/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- github, typescript
- Área
- backend, data-engineering
Línea de trabajo
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.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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
- Lenguaje dominante
- TypeScript
- Estrellas
- 1
- Forks
- 6
- Merge medio
- 23 h 53 min
- PR fusionados (30 d)
- 27
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de Your-Voldemort/StudentStack
-
enhancement
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
Your-Voldemort/StudentStack#84 ·
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 5/5 Más de una semana Aptitud para principiantes 12/100
Your-Voldemort/StudentStack#82 ·
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 4/5 Más de una semana Aptitud para principiantes 22/100
Your-Voldemort/StudentStack#79 ·
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
Your-Voldemort/StudentStack#78 ·
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
Your-Voldemort/StudentStack#42 ·
Los mantenedores suelen responder en 1 día
Todos los issues de Your-Voldemort/StudentStack
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
ccch1mneyyy/dsh-TUI#1631 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
MiniMax-AI/minimax-code#507 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
-
Transient OAuth login failure persists in getLoginStatus and masks active account in dashboardQuizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. Abiertoaccount-pool bug gui
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
lidge-jun/opencodex#7378 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
Admin search throws for permissions added through Admin.generalIndexItems('permissions', ...)Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día