mirror of
https://github.com/wilsonfreitas/awesome-quant.git
synced 2026-08-20 15:28:07 +00:00
Replace Quarto site with static HTML generator
- Add site/generate.py: static site with search, filtering, sorting, dark mode - Add site/static/style.css and main.js for the new frontend - Extend parse.py: fetch CRAN published dates, PyPI release dates, and discover GitHub repos from CRAN pages as fallback data sources - Migrate from Poetry to uv (pyproject.toml + uv.lock) - Update CI workflow to use uv and generate.py pipeline - Add CONTRIBUTING.md with entry format guidelines - Add "Submit a Project" button to site nav - Update review-pr skill with all accepted entry formats - Update CLAUDE.md to reflect new architecture - Remove Quarto files (_quarto.yml, *.qmd, sync-site skill, poetry.lock) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
157e6cbd79
commit
5a6f90cc85
@@ -13,9 +13,9 @@ A companion website is generated from this data and deployed to GitHub Pages.
|
||||
The pipeline works as follows:
|
||||
|
||||
1. **`README.md`** — The source of truth. All library entries follow the format: `- [name](url) - Description.`
|
||||
2. **`parse.py`** — Parses `README.md`, extracts GitHub repo URLs, fetches last commit dates via the GitHub API (using `PyGithub` with multithreading), and writes `site/projects.csv`.
|
||||
3. **`site/`** — A [Quarto](https://quarto.org/) website project (`_quarto.yml`) that renders `projects.csv` into an interactive table. Output goes to `site/docs/`.
|
||||
4. **CI** (`.github/workflows/build.yml`) — Runs daily and on push to `master`: runs `parse.py`, renders the Quarto site, and deploys to GitHub Pages via `gh-pages` branch.
|
||||
2. **`parse.py`** — Parses `README.md`, extracts GitHub/CRAN/PyPI URLs, fetches last commit dates and stars via the GitHub API (using `PyGithub` with multithreading), and writes `site/projects.csv`.
|
||||
3. **`site/generate.py`** — Reads `projects.csv` (or parses `README.md` directly) and generates a static HTML site with search, filtering, sorting, and dark mode.
|
||||
4. **CI** (`.github/workflows/build.yml`) — Runs daily and on push to `main`: runs `parse.py`, runs `site/generate.py`, and deploys to GitHub Pages via `gh-pages` branch.
|
||||
|
||||
Supporting scripts:
|
||||
- `cranscrape.py` — Scrapes CRAN package pages to find associated GitHub repos; writes `cran.csv`.
|
||||
@@ -24,21 +24,29 @@ Supporting scripts:
|
||||
## Commands
|
||||
|
||||
```bash
|
||||
# Install dependencies (uses Poetry, requires Python 3.11+)
|
||||
poetry install --no-root
|
||||
# Install dependencies (uses uv, requires Python 3.11+)
|
||||
uv sync --no-install-project
|
||||
|
||||
# Run the parser (requires GITHUB_ACCESS_TOKEN env var)
|
||||
GITHUB_ACCESS_TOKEN=<token> poetry run python parse.py
|
||||
GITHUB_ACCESS_TOKEN=<token> uv run python parse.py
|
||||
|
||||
# Render the Quarto site (requires Quarto + R with knitr/rmarkdown/DT)
|
||||
quarto render site
|
||||
# Generate the static site
|
||||
uv run python site/generate.py
|
||||
```
|
||||
|
||||
## Contributing Entries
|
||||
|
||||
Each entry in `README.md` must follow the pattern:
|
||||
See `CONTRIBUTING.md` for full guidelines. Accepted entry formats:
|
||||
|
||||
```
|
||||
- [Project Name](https://url) - Short description ending with a period.
|
||||
- [Project Name](https://github.com/owner/repo) - Description ending with a period.
|
||||
- [Project Name](https://site.com) - Description ending with a period. [GitHub](https://github.com/owner/repo)
|
||||
- [Package Name](https://cran.r-project.org/package=pkg) - Description ending with a period.
|
||||
- [package-name](https://pypi.org/project/pkg/) - Description ending with a period.
|
||||
```
|
||||
|
||||
Entries are grouped under language headings (##) and category subheadings (###). `parse.py` relies on this exact regex pattern to extract entries: `^\s*- \[(.*)\]\((.*)\) - (.*)$`
|
||||
CRAN and PyPI entries may optionally append `[GitHub](url)` after the description.
|
||||
|
||||
Entries are grouped under language headings (`##`) and category subheadings (`###`). Commercial/proprietary projects go under `## Commercial & Proprietary Services`.
|
||||
|
||||
`parse.py` relies on this regex to extract entries: `^\s*- \[(.*)\]\((.*)\) - (.*)$`
|
||||
|
||||
Reference in New Issue
Block a user