This trove of links is a record of things that are interesting, or meaningful, or relevant in some context.
It's a fairly basic one-page-app webpage, and hopefully straightforward to implement with modest effort and modern tools. By virtue of being a static website, it should require virtually no ongoing cost or maintenance.
trove.saul.pw/puzzles is a list of links tagged '#puzzles'.# Start local server
make serve
# Add a link
make add URL="https://example.com"
# Add a link with title and tags
make add URL="https://example.com" TITLE="Example Site" TAGS="games puzzles"
Or use the script directly:
python3 add_link.py "https://example.com" games puzzles -t "Example Site"
Add links from any page with a browser bookmarklet. Drag the "+ bookmarklet" link from the footer to your bookmarks bar.
Click the bookmarklet on any page → popup opens with URL pre-filled → add tags/notes → submit.
index.html - Static frontendtrove-log.jsonl - Append-only operation log (JSONL format, on links branch)trove_utils.py - Shared Python utilities (load/save/create entries)add_link.py - CLI to add links locallyprocess_issues.py - Process GitHub issue submissionsimport_md_links.py - One-time bulk import from markdown filesMakefile - Build and dev commandsmanage_users.py - CLI to manage users in Netlify TROVE_USERS env varSee TAGS.md for the tag strategy and full tag vocabulary.
make setup
This installs netlify-cli (npm) and pytest (pip).
Users authenticate with a username and password. Credentials are stored in the TROVE_USERS Netlify environment variable.
TROVE_USERS: Comma-separated username:password pairs (e.g., alice:pw1,bob:pw2).env file:
TROVE_USERS=testuser:testpass
make add-user NAME=alice PASS=somepw
make remove-user NAME=alice
make list-users
Submissions create GitHub Issues via a Netlify Function.
repo scope (or public_repo if public repo)GITHUB_TOKEN: Your personal access tokenGITHUB_REPO: owner/repo format (e.g., saul/26-trove).env file:
GITHUB_TOKEN=ghp_your_token_here
GITHUB_REPO=saul/26-trove
The site auto-deploys from the main branch. Environment variables:
TROVE_USERS - Comma-separated username:password pairs for authGITHUB_TOKEN - GitHub PAT for creating issuesGITHUB_REPO - Repository in owner/repo formatSee ARCHITECTURE.md.
I find a puzzle site, go to trove.saul.pw/puzzles, and submit the link.
I'm signed in with my username/password, so the submission goes to a Netlify Function that creates a GitHub Issue.
The next GitHub Action run processes it into trove-log.jsonl and commits, triggering a rebuild.
Python
46.6%
TypeScript
31.6%
HTML
8.7%
CSS
7.4%
JavaScript
3.1%
Makefile
2.6%
This trove of links is a record of things that are interesting, or meaningful, or relevant in some context.
It's a fairly basic one-page-app webpage, and hopefully straightforward to implement with modest effort and modern tools. By virtue of being a static website, it should require virtually no ongoing cost or maintenance.
trove.saul.pw/puzzles is a list of links tagged '#puzzles'.# Start local server
make serve
# Add a link
make add URL="https://example.com"
# Add a link with title and tags
make add URL="https://example.com" TITLE="Example Site" TAGS="games puzzles"
Or use the script directly:
python3 add_link.py "https://example.com" games puzzles -t "Example Site"
Add links from any page with a browser bookmarklet. Drag the "+ bookmarklet" link from the footer to your bookmarks bar.
Click the bookmarklet on any page → popup opens with URL pre-filled → add tags/notes → submit.
index.html - Static frontendtrove-log.jsonl - Append-only operation log (JSONL format, on links branch)trove_utils.py - Shared Python utilities (load/save/create entries)add_link.py - CLI to add links locallyprocess_issues.py - Process GitHub issue submissionsimport_md_links.py - One-time bulk import from markdown filesMakefile - Build and dev commandsmanage_users.py - CLI to manage users in Netlify TROVE_USERS env varSee TAGS.md for the tag strategy and full tag vocabulary.
make setup
This installs netlify-cli (npm) and pytest (pip).
Users authenticate with a username and password. Credentials are stored in the TROVE_USERS Netlify environment variable.
TROVE_USERS: Comma-separated username:password pairs (e.g., alice:pw1,bob:pw2).env file:
TROVE_USERS=testuser:testpass
make add-user NAME=alice PASS=somepw
make remove-user NAME=alice
make list-users
Submissions create GitHub Issues via a Netlify Function.
repo scope (or public_repo if public repo)GITHUB_TOKEN: Your personal access tokenGITHUB_REPO: owner/repo format (e.g., saul/26-trove).env file:
GITHUB_TOKEN=ghp_your_token_here
GITHUB_REPO=saul/26-trove
The site auto-deploys from the main branch. Environment variables:
TROVE_USERS - Comma-separated username:password pairs for authGITHUB_TOKEN - GitHub PAT for creating issuesGITHUB_REPO - Repository in owner/repo formatSee ARCHITECTURE.md.
I find a puzzle site, go to trove.saul.pw/puzzles, and submit the link.
I'm signed in with my username/password, so the submission goes to a Netlify Function that creates a GitHub Issue.
The next GitHub Action run processes it into trove-log.jsonl and commits, triggering a rebuild.
Python
46.6%
TypeScript
31.6%
HTML
8.7%
CSS
7.4%
JavaScript
3.1%
Makefile
2.6%