Funding opportunities, travel grants, and resources for early career researchers.
ECRcentral is a community-maintained, open-source database of funding opportunities, travel grants, and scientific resources for early career researchers (ECRs) worldwide. The site is fully static, hosted on GitHub Pages, and free to maintain — every entry is a YAML file that anyone can contribute to via a GitHub Pull Request.
Live site: https://ecrcentral.org GitHub: https://github.com/ecrcentral/ecrcentral.github.io
Tech stack:
- Frontend: Astro + TypeScript + CSS
- Search: MiniSearch (client-side)
- Content: YAML (one file per record)
- Hosting: GitHub Pages (free)
- CI/CD: GitHub Actions
- Node.js 20+
- Python 3.11+
pip install pyyaml jsonschema
git clone https://github.com/ecrcentral/ecrcentral.github.io
cd ecrcentral
# Install frontend dependencies
cd apps/web && npm install && cd ../..
# Build JSON artifacts from YAML content
make build
# Start development server
make devVisit http://localhost:4321
- Find the YAML file in
data/entries/{type}/{slug}.yaml - Edit the file
- Run
make validateto check for errors - Run
make buildto regenerate JSON artifacts - Open a Pull Request
- Create a new YAML file following the schema in
data/schema/ - Use the existing entries as examples
- Run
make validateandmake build - Open a Pull Request
Use our GitHub Issue Forms:
Generates JSON artifacts from YAML content:
make build
# Runs: build_records.py, build_facets.py, build_search_index.py, build_homepage_featured.pymake validate
# Runs: validate_yaml.py, validate_taxonomies.py, validate_duplicates.pymake build-site
# Equivalent to: make build && cd apps/web && npm run buildSee docs/data-model.md for full field reference.
| Type | Directory | Count | Schema |
|---|---|---|---|
| Funders | data/entries/funders/ |
~656 | data/schema/funder.schema.json |
| Fundings | data/entries/fundings/ |
~856 | data/schema/funding.schema.json |
| Travel Grants | data/entries/travel-grants/ |
~179 | data/schema/travel-grant.schema.json |
| Resources | data/entries/resources/ |
~178 | data/schema/resource.schema.json |
slug— unique identifier used in URLs (e.g.,embo-scientific-exchange-grants)status—active,expired,archived,draftreview_status—approved,pending,rejectedfeatured— shown on homepage whentruefunders— array of funder slugs (referencesdata/entries/funders/)
The site deploys automatically to GitHub Pages when code is pushed to main.
GitHub Actions workflows:
- validate.yml — runs on every push/PR: validates YAML, checks taxonomy references, detects duplicates
- build.yml — builds JSON artifacts and Astro site
- deploy-pages.yml — deploys to GitHub Pages on
main
make build-site
# Then upload apps/web/dist/ to any static hostFunder logos should be placed in apps/web/public/logos/funders/ named as {funder-slug}.{ext}.
See docs/contribution-guide.md for detailed contributing instructions.
All contributions are welcome! ECRcentral is community-maintained — the more contributors, the better the data quality.
MIT — see LICENSE
ECRcentral content (YAML files in data/entries/) is shared under CC BY 4.0.