Before: searchgit only answers live searches; to follow a topic over time you have to redo the same search by hand and remember what you had already seen.
After: the current filters can be scheduled (every N hours, every day, or every week at a given day and time). The server runs them on its own and keeps a snapshot of each run. A new Watch tab lists the scheduled searches with their last run (new / rising counts, next run), and each search has a review page with its run history and three views: New (repositories never returned before by this search), Rising (largest star gains since the previous run) and All. Same look as the search view, light/dark, responsive, English/French.
How: store.go keeps the searches and snapshots as JSON files under DATA_DIR (/data volume in Docker, no new dependency), compares each run with the previous one, and prunes history beyond HISTORY_KEEP. scheduler.go checks every 30 s for due searches, runs them one at a time, retries a few minutes later when the GitHub quota is exhausted, and catches up a run missed while the server was down. saved_api.go adds the /api/saved routes; a new search runs once right away to set the baseline. The binary embeds time/tzdata so TZ works in the Alpine image (compose default Europe/Paris). The filters also gain < 1 week (push, creation) and < 3 / 6 months (creation) for weekly "gems" searches.
Tests: go test -race ./... passes (schedule computation, new/rising comparison, history pruning, API validation, scheduler). The UI has not been exercised in a browser yet: local port binding is blocked where I work, so it needs a deployment of this branch.
Deployment note: docker compose up -d --build creates the searchgit-data volume.
<!-- ccr-projects-attribution -->
_Requested by **Cédric**_
Before: searchgit only answers live searches; to follow a topic over time you have to redo the same search by hand and remember what you had already seen.
After: the current filters can be scheduled (every N hours, every day, or every week at a given day and time). The server runs them on its own and keeps a snapshot of each run. A new **Watch** tab lists the scheduled searches with their last run (new / rising counts, next run), and each search has a review page with its run history and three views: **New** (repositories never returned before by this search), **Rising** (largest star gains since the previous run) and **All**. Same look as the search view, light/dark, responsive, English/French.
How: `store.go` keeps the searches and snapshots as JSON files under `DATA_DIR` (`/data` volume in Docker, no new dependency), compares each run with the previous one, and prunes history beyond `HISTORY_KEEP`. `scheduler.go` checks every 30 s for due searches, runs them one at a time, retries a few minutes later when the GitHub quota is exhausted, and catches up a run missed while the server was down. `saved_api.go` adds the `/api/saved` routes; a new search runs once right away to set the baseline. The binary embeds `time/tzdata` so `TZ` works in the Alpine image (compose default `Europe/Paris`). The filters also gain *< 1 week* (push, creation) and *< 3 / 6 months* (creation) for weekly "gems" searches.
Tests: `go test -race ./...` passes (schedule computation, new/rising comparison, history pruning, API validation, scheduler). The UI has not been exercised in a browser yet: local port binding is blocked where I work, so it needs a deployment of this branch.
Deployment note: `docker compose up -d --build` creates the `searchgit-data` volume.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
A search can now be saved with a schedule (every N hours, daily, or weekly at
a given day and time). An internal scheduler runs it and keeps a snapshot of
the results on a /data volume (JSON files, no new dependency). The new Watch
tab lists the scheduled searches; the review page of each one shows, for any
run of its history, the repositories never seen before and the ones that
gained the most stars since the previous run.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
claudeBot
marked the pull request as work in progress 2026-10-01 16:37:06 +02:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Requested by Cédric
Before: searchgit only answers live searches; to follow a topic over time you have to redo the same search by hand and remember what you had already seen.
After: the current filters can be scheduled (every N hours, every day, or every week at a given day and time). The server runs them on its own and keeps a snapshot of each run. A new Watch tab lists the scheduled searches with their last run (new / rising counts, next run), and each search has a review page with its run history and three views: New (repositories never returned before by this search), Rising (largest star gains since the previous run) and All. Same look as the search view, light/dark, responsive, English/French.
How:
store.gokeeps the searches and snapshots as JSON files underDATA_DIR(/datavolume in Docker, no new dependency), compares each run with the previous one, and prunes history beyondHISTORY_KEEP.scheduler.gochecks every 30 s for due searches, runs them one at a time, retries a few minutes later when the GitHub quota is exhausted, and catches up a run missed while the server was down.saved_api.goadds the/api/savedroutes; a new search runs once right away to set the baseline. The binary embedstime/tzdatasoTZworks in the Alpine image (compose defaultEurope/Paris). The filters also gain < 1 week (push, creation) and < 3 / 6 months (creation) for weekly "gems" searches.Tests:
go test -race ./...passes (schedule computation, new/rising comparison, history pruning, API validation, scheduler). The UI has not been exercised in a browser yet: local port binding is blocked where I work, so it needs a deployment of this branch.Deployment note:
docker compose up -d --buildcreates thesearchgit-datavolume.🤖 Generated with Claude Code