ShipLock · tinkerers ·
Ollama, a token and a curl walk into a bar
You do not need the dashboard, or a cloud AI. A local model writes the file, one request puts it online, and the links come back in the reply.
1. A token
In the dashboard, open Agents & tokens and make a token and tick deploy and admin (admin is what makes share links). It is shown once. Keep it in your shell:
export SL=https://shiplock.app
export T=sl_your_token_here
2. A local model writes the app
Our instructions are a system prompt that teaches the one pattern ShipLock apps use. With Ollama:
curl -s https://shiplock.app/PROMPT.md -o PROMPT.md
ollama run qwen2.5-coder:14b "$(cat PROMPT.md)
A sign-up sheet for the litter pick: name, street, and a note. Only the owner can read the list." > app.html
Open app.html in a browser first. If the model wrapped it in a code fence, strip the first and last lines. Bigger models do noticeably better here; the tiny ones tend to lose the thread halfway through a page.
3. Publish
curl -s -F file=@app.html -F name="Litter pick" -H "Authorization: Bearer $T" $SL/api/deploy
The reply has the app's address and its id. It is private until you make a link:
curl -s -X POST -H "Authorization: Bearer $T" -H "Content-Type: application/json" \
-d '{"role":"submit","label":"the street"}' $SL/api/apps/APP_ID/grants
That returns the add-only link to put in the group chat. Change the file, run the deploy line again with -F appId=APP_ID, and the same links show the new version.
Reading the data back
Every app has a small database behind /_sl/db/. Make yourself an edit link and use its token from a script:
curl -s -H "X-SL-Token: THE_TOKEN_FROM_YOUR_EDIT_LINK" https://litter-pick.shiplock.app/_sl/db/entries
Rows come back as JSON. A cron job that pulls them into a spreadsheet is ten lines.