{"id":51461859,"url":"https://github.com/krisyotam/tools","last_synced_at":"2026-07-06T06:01:06.711Z","repository":{"id":358215268,"uuid":"1238311189","full_name":"krisyotam/tools","owner":"krisyotam","description":"personal workshop of small browser-only utilities · krisyotam.com/tools","archived":false,"fork":false,"pushed_at":"2026-05-16T09:37:51.000Z","size":310,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-16T10:38:26.172Z","etag":null,"topics":["agent-driven","browser-tools","claude-code","html-css-js","no-build","personal-utilities","static-site","tools","vanilla-js"],"latest_commit_sha":null,"homepage":"https://krisyotam.com/tools","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/krisyotam.png","metadata":{"files":{"readme":"README.txt","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-14T02:26:36.000Z","updated_at":"2026-05-16T09:37:54.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/krisyotam/tools","commit_stats":null,"previous_names":["krisyotam/tools"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/krisyotam/tools","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krisyotam%2Ftools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krisyotam%2Ftools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krisyotam%2Ftools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krisyotam%2Ftools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/krisyotam","download_url":"https://codeload.github.com/krisyotam/tools/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krisyotam%2Ftools/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35179690,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-06T02:00:07.184Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent-driven","browser-tools","claude-code","html-css-js","no-build","personal-utilities","static-site","tools","vanilla-js"],"created_at":"2026-07-06T06:01:06.162Z","updated_at":"2026-07-06T06:01:06.704Z","avatar_url":"https://github.com/krisyotam.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"tools\n=====\n\nA workshop of small browser-only utilities by Kris Yotam, mounted at\nhttps://krisyotam.com/tools.\n\nEach tool is a single self-contained HTML file. No build step, no framework,\nno runtime dependencies beyond the browser. Visit a tool, use it, close the\ntab. Nothing leaves your machine.\n\n\nLayout\n------\n\n    /\n    ├── README.txt        this file\n    ├── AGENTS.md         the spec — read first if you're editing\n    ├── CLAUDE.md         symlink → AGENTS.md\n    ├── index.html        homepage; renders the table from tools.json\n    ├── tools.json        canonical index of every tool (source of truth)\n    └── tools/\n        ├── word-counter.html\n        ├── base64.html\n        ├── …             one HTML file per tool\n\nThe homepage fetches tools.json at load and renders the rows. Tools live\nin the tools/ subdirectory. nginx serves them at /tools/\u003cslug\u003e with no\n.html extension.\n\n\nWho edits this repo\n-------------------\n\nThis repo is touched only by AI coding agents (Claude Code, Codex CLI,\nthe Claude web app). Kris does not edit these files by hand. He requests\nnew tools by description, an agent reads AGENTS.md, builds the file,\nupdates tools.json, and opens a pull request.\n\nIf you are a human and want to contribute, the path is the same: drive\nan agent against AGENTS.md and let it follow the spec. The spec is strict\nbecause visual coherence is the entire point of this collection.\n\n\nContributing\n------------\n\nBefore opening a pull request:\n\n  1.  Read AGENTS.md in full. It is the authoritative spec for layout,\n      typography, color tokens, theme toggle, footer, file structure,\n      and self-containment rules. Anything that violates it will be\n      rejected.\n\n  2.  Read tools.json. If a tool with the same purpose already exists,\n      don't duplicate it. If it exists as a placeholder, promote it.\n      Otherwise, append a new entry.\n\n  3.  Build the tool inside tools/\u003cslug\u003e.html. Use word-counter.html or\n      escape-entities.html as a structural reference. Inline every\n      style and every script — no companion files, no external CSS\n      beyond Google Fonts, no analytics, no telemetry.\n\n  4.  Update tools.json. Add or promote the matching entry. Keep the\n      keywords array generous (alt-spellings, synonyms, abbreviations)\n      since the homepage filter searches against it. Bump the top-level\n      \"updated\" date.\n\n  5.  Test in your head. Open the file. Does the theme toggle work?\n      Does the back link point to ../? Does the layout hold at 360px?\n      Does the footer floor to the bottom of the viewport on a short\n      page? Does the page work with JS disabled (it does not need to,\n      but it should not crash)?\n\n  6.  Open the pull request. One commit per tool. Imperative, lowercase\n      title:\n\n          add regex tester\n          add hash (sha-256, sha-1, md5)\n          fix word counter mobile layout\n          link uuid tool from index\n\n      The body, if needed, explains the design decision — not the diff.\n      Do not add Claude/Codex co-author trailers.\n\n\nWhat gets rejected\n------------------\n\n  -   Em dashes in prose (use period, semicolon, or parentheses).\n  -   Cards, gradients, shadows, glow rings, or \"modern\" decoration.\n      The repo is monochrome by default. If a tool genuinely needs a\n      color signal, use the krisyotam pastel tokens (see AGENTS.md).\n  -   Tailwind, React, Vue, Svelte, npm, bundlers, build steps.\n  -   Hex or rgb values written directly. Use the HSL tokens.\n  -   External scripts that aren't pinned to a specific version on\n      jsdelivr (or equivalent). The five permitted heavy libraries\n      and their versions are listed in AGENTS.md.\n  -   Sending data to a server. Tools are client-side. A user pastes\n      a secret into the hash tool; the secret never leaves the device.\n  -   Decorative icons next to tool names in the homepage table.\n  -   New top-level files that aren't a tool, index, README, AGENTS.md,\n      CLAUDE.md, tools.json, or .gitignore.\n\n\nNaming\n------\n\nSlugs are lowercase kebab-case and short. Examples:\n\n    base64\n    regex-tester\n    json-yaml\n    qr\n    color-picker\n    word-counter\n\nThe filename is \u003cslug\u003e.html. The URL is /tools/\u003cslug\u003e. There is no\n.html in the URL.\n\n\nCategories\n----------\n\nEvery tool belongs to exactly one category, drawn from:\n\n    text       manipulating, counting, comparing, transforming text\n    encoding   base64, url, hashing, format conversion\n    color      pickers, palettes, contrast, format conversion\n    image      resizing, format conversion, ascii, qr\n    math       calculators, unit conversion, statistics\n    time       timestamps, durations, timezones, calendars\n    dev        regex, json, yaml, diff, uuid, dns, jwt\n    misc       anything that doesn't fit\n\nIf a tool fits two, pick the most specific. If it fits none, propose\nmisc and explain why in the commit message.\n\n\nDeployment\n----------\n\nThe repo is cloned to /mnt/storage/sites/tools/ on a personal server\nand served by nginx at /tools/. A pull on that server is the only\ndeploy step. There is no CI, no build, no preview environment.\n\n\nLicense\n-------\n\nPublic domain. Use, copy, fork, host your own. No warranty.\n\nIf you fork: replace the footer link to point to your own copy. The\ndesign language is mine; please don't ship a clone that pretends to\nbe the original krisyotam.com/tools.\n\n\nContact\n-------\n\nkris.yotam@protonmail.com — or open an issue on github.com/krisyotam/tools.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkrisyotam%2Ftools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkrisyotam%2Ftools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkrisyotam%2Ftools/lists"}