{
"path": "/3mfffllhq5c25",
"site": "at://did:plc:aurnkk6uy6axy66uqaq6dqy6/site.standard.publication/3m6gjuzizxc27",
"tags": [],
"$type": "site.standard.document",
"title": "Baby's First claude skill: tools.jakesimonds.com deploy",
"content": {
"$type": "pub.leaflet.content",
"pages": [
{
"id": "019c81b7-2a2f-7dd5-8567-77d99cebab72",
"$type": "pub.leaflet.pages.linearDocument",
"blocks": [
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 1,
"facets": [
{
"index": {
"byteEnd": 21,
"byteStart": 0
},
"features": [
{
"uri": "https://tools.jakesimonds.com",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "tools.jakesimonds.com deploy"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.image",
"image": {
"$type": "blob",
"ref": {
"$link": "bafkreifaxl4rz6gsnnneugwo5e6h7cvid2e5c75ejqgvsaem33psxcsrgy"
},
"mimeType": "image/png",
"size": 40419
},
"aspectRatio": {
"width": 1072,
"height": 450
}
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 50,
"byteStart": 42
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#bold"
}
]
}
],
"plaintext": "At .claude/skills/deploy-tool you'll find SKILL.md: "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.code",
"plaintext": "\n---\nname: deploy-tool\ndescription: Deploy a vanilla JS project to tools.jakesimonds.com\ndisable-model-invocation: true\nallowed-tools: Read, Glob, Grep, Bash\nargument-hint: [tool-name]\n---\n\nDeploy the current project's static files to tools.jakesimonds.com.\n\n## Steps\n\n1. **Determine the tool name** from $ARGUMENTS. If not provided, use the current directory name.\n\n2. **Identify the static files** to deploy. Look for the servable directory — typically `web/` or the root if HTML files are at the top level. Copy only what's needed to serve the app: HTML, CSS, JS files. Skip: node_modules, tests, specs, fixtures, markdown files, config files, .git, package.json, etc.\n\n3. **Copy files** into `/Users/jakesimonds/Documents/jake-tools/<tool-name>/`, creating the directory if it doesn't exist. If it already exists, replace the contents (this is a redeploy).\n\n4. **Update the root index** at `/Users/jakesimonds/Documents/jake-tools/index.html` — add a link for the new tool if one doesn't already exist. Keep it simple: `<a href=\"<tool-name>/\"><tool-name></a>`. Maintain alphabetical order.\n\n5. **Commit** in the jake-tools repo:\n ```\n cd /Users/jakesimonds/Documents/jake-tools && git add -A && git commit -m \"deploy: <tool-name>\"\n ```\n\n6. **Deploy** to Cloudflare Pages:\n ```\n wrangler pages deploy /Users/jakesimonds/Documents/jake-tools --project-name jake-tools --commit-dirty=true\n ```\n\n7. **Report** the live URL: `https://tools.jakesimonds.com/<tool-name>/`"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 29,
"byteStart": 24
},
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
]
},
{
"index": {
"byteEnd": 124,
"byteStart": 115
},
"features": [
{
"uri": "https://localhost",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "When I decide the world needs to see my latest vanilla JS vibe project (or if I just get tired of booting it up on localhost and iteration feels done-ish), I can go to the directory that hosts the project, boot up Claude, and then run: "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.code",
"plaintext": "/deploy-tool my-awesome-vanilla-JS-project"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 120,
"byteStart": 75
},
"features": [
{
"uri": "https://jakesimonds.com/my-awesome-vanilla-JS-project",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "And that's it! Unless it hits some unforseen snag, the tool will deploy to jakesimonds.com/my-awesome-vanilla-JS-project :D "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"index": {
"byteEnd": 81,
"byteStart": 49
},
"features": [
{
"uri": "https://tools.simonwillison.net/",
"$type": "pub.leaflet.richtext.facet#link"
}
]
}
],
"plaintext": "( tools.{domain} is a pattern I am stealing from https://tools.simonwillison.net/. I think it's a good 2026 agentic coding pattern...have an informal repository of projects. I need to steal more ideas from Simon Willison, he's great.) "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": ""
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 1,
"facets": [],
"plaintext": "My mental model of a 'Skill'"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "It's just markdown. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Markdown for the context window that I can evoke by running a slash command. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "So me running /deploy-tool name-of-project just throws the markdown in .claude/skills/project-name/SKILL.md into the context window. And I save having to repeatedly tell LLM the same thing. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": "Maybe there's more to it I'm missing? As always, I welcome correction. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [],
"plaintext": ""
}
}
]
}
]
},
"bskyPostRef": {
"cid": "bafyreigocxijo4d7arqofkbpbibi52vzlt7i5t3m5tawjgssxp4sh2mgla",
"uri": "at://did:plc:aurnkk6uy6axy66uqaq6dqy6/app.bsky.feed.post/3mffflpomkc25",
"commit": {
"cid": "bafyreihjq3eh3yubtuxuj2mmgnngxmiazdw6uh5e462xklvqtky4kww35u",
"rev": "3mffflpso3p2g"
},
"validationStatus": "valid"
},
"description": "(I'm the baby. Waah.) ",
"publishedAt": "2026-02-21T19:53:07.446Z"
}