Thanks for your interest in contributing! This guide will help you get started.
gitfirst/
├── index.html # Main frontend (single page app)
├── style.css # All styles
├── app.js # All JavaScript
├── data/
│ ├── generated.json # Auto-generated repo + issue data
│ ├── tags.json # Auto-generated language tags
│ └── labels.json # Beginner-friendly issue labels to track
├── gfi/
│ └── populate.py # Python script that fetches data from GitHub
└── .github/
└── workflows/
└── refresh.yml # GitHub Actions — runs populate.py every hour
No build step needed. Just serve the folder:
python -m http.server 3000Then open http://localhost:3000.
- Python 3.12+
- uv — install with:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
- A GitHub Personal Access Token with
public_reposcope
-
Install dependencies
uv sync --all-extras
-
Set your GitHub token
$env:GH_ACCESS_TOKEN = "your_token_here"
-
Run the script
uv run python gfi/populate.py
This will:
- Search GitHub for public repos with beginner-friendly issues
- Fetch the top 500 repos sorted by stars
- Write fresh
data/generated.jsonanddata/tags.json
-
Refresh the browser to see updated data
A GitHub Actions workflow (.github/workflows/refresh.yml) runs populate.py every hour. It:
- Searches all of GitHub for repos with beginner-friendly issue labels
- Commits updated JSON files to the repo
- Vercel detects the commit and redeploys the site automatically
No manual intervention needed after initial setup.
To track additional beginner-friendly labels, add them to data/labels.json:
{
"labels": [
"good first issue",
"your-new-label"
]
}- Fork the repo
- Create a new branch for your changes
- Make your changes and test locally
- Submit a pull request with a clear description
If you use AI tools when contributing:
- Disclose AI usage in your pull request description
- Review and test all AI-generated code before submitting
- Ensure accuracy — don't submit code you haven't verified works
Low-quality AI-generated PRs will be closed without review.