Cloudish · Opus 5.5 · medium effort · HIPAA organization · trial 1
Static Content Site on Cloudish
Success
Deployed to https://adb-xtzco-static-web.on.do.cloudish.ai. Every deployment is deleted after it's verified and reviewed.
Technologies
- Runtime
- Node.js 22
- Frameworks
- Node.js http module (built in)
- Packaging
- Docker (node:22-alpine)
- Hosting
- Cloudish container (shared)
Named from the app's dependencies, Dockerfile and config files, and the cloud resources it created.
Checks
Black-box checks against the live URL. A cell succeeds when every required check passes. The app's spec
| Result | Check | Details |
|---|---|---|
| passed | GET / answers 2xx within 1 min ready |
|
| passed | The app is served over HTTPS with a valid certificate https |
|
| passed | The app is public: no redirect to another host such as a login page public_access |
|
| passed | GET / returns HTML page_home |
|
| passed | GET /about returns HTML page_about |
|
| passed | GET /contact returns HTML page_contact |
|
| passed | Home has an <h1> containing 'Northwind Robotics' home_content |
|
| passed | About has a heading containing 'About' about_content |
|
| passed | Contact has a form with name, email and message fields contact_form |
|
| passed | Every page has a <title> and a viewport meta tag head_tags optional |
|
| passed | Home links to /about and /contact navigation optional |
|
| passed | POST /api/contact with valid input returns {ok: true} contact_api_valid |
|
| passed | POST /api/contact rejects a bad email and an empty message with 400 contact_api_validation |
|
| passed | Unknown paths return 404 not_found |
|
| passed | Submitting the /contact form in a browser posts to /api/contact without leaving the page browser_contact_form |
|
| passed | Pages load in a browser without uncaught JavaScript errors browser_no_errors optional |
Human steps
None: the agent got everything it needed on its own.
Security & compliance review
This run predates the security review.
Cloud resources and cost
Resources the agent created
| Kind | Name | Plan | List price / month | Pricing |
|---|---|---|---|---|
| project | adb-xtzco-static-web | shared | $7.84 | 0.1 CPU / 0.2 GB x 1 replica(s) running 730 h/month (live GET /api/v1/pricing); billed per second and scales to zero when idle, so idle apps cost less |
The agent estimated $7.84 a month.
Code
- Code
- 452 lines in 13 files (JavaScript 211, HTML 177, CSS 56, JSON 40, Docker 8)
- Dependencies
- 0 npm, 0 Python
- Deploy config
Dockerfile.dockerignore
The agent's sessions
| Phase | Status | Time | Turns | Tokens | Cost | Shell commands |
|---|---|---|---|---|---|---|
| Build | completed | 2m 06s | 11 | 277.1K | $0.35 | 10 |
| Deploy | completed | 6m 53s | 16 | 747.6K | $0.38 | 13 |
The agent's deploy summary
The site is live on Cloudish at https://adb-xtzco-static-web.on.do.cloudish.ai, and every requirement in TASK.md passed when I tested it through that URL.
What I set up:
- Cloudish key
adb-xtzco-static: created without signing up. It's saved in.env, which is gitignored and left out of what was uploaded. - Project
adb-xtzco-static-web: Cloudish built the existing Dockerfile on its own servers. It runs on the cheapest size (shared: 0.1 CPU, 0.2 GB, one copy) and shuts down when idle. I swapped the random web address Cloudish assigned for a readable one.
Tested through the public URL:
/,/aboutand/contactreturn 200 HTML pages with the required title, viewport tag, nav and content.- Unknown paths, including
/about.html, return 404. POST /api/contactreturns 200{"ok":true}for valid input, and 400 with an error message for a missing name, an invalid email or an empty message.- In a headless browser, the form showed an error and then a confirmation without reloading the page.
Cost: about $0.011 per hour while the app is running, so at most $7.84 a month if it never shut down.
What a person needs to do: the key only has Cloudish's free starting credit (about $0.095 left), which covers roughly 9 hours of running time. Once it runs out, the site returns errors (402 or 503) until credits are added. Someone needs to claim the key and add credits using a claim link. A link expires 30 minutes after it's created, so make a new one when needed. This is listed in human_steps in deployment.json and doesn't stop the site working now.
The first request after the app has been idle takes a few seconds while it starts up again. Right after setup, the first couple of requests got no response before the app came up.
13 shell commands during deploy
- 4s
curl -sL https://cloudish.ai/skill.md; echo ----; curl -sL https://cloudish.ai/instances.md - 11s
grep -q CLOUDISH_API_KEY .env 2>/dev/null || { - 17s
set -a && . ./.env && set +a && tar --exclude='.env*' --exclude='.git' --exclude='context.tar.gz' -czf /tmp/context.tar.gz Dockerfile .dockerignore package.json server.js public && tar tzf /tmp/contex - 23s
. ./.env && for i in $(seq 1 40); do s=$(curl -s https://cloudish.ai/api/v1/images/builds/219 -H "Authorization: Bearer $CLOUDISH_API_KEY" | tee /tmp/b.json | python3 -c 'import json,sys;print(json.lo - 2m 26s
cat /tmp/claude-1001/-home-runner-work--temp-adb-xtzco-static/80729b32-5dd0-4b62-b66b-de4158054ccb/tasks/bxewyn0ei.output | tail -5; python3 -c 'import json;d=json.load(open("/tmp/b.json"));print((d[" - 2m 34s
. ./.env && until s=$(curl -s https://cloudish.ai/api/v1/images/builds/219 -H "Authorization: Bearer $CLOUDISH_API_KEY" | tee /tmp/b.json | python3 -c 'import json,sys;print(json.load(sys.stdin)["buil - 2m 37s
sleep 0; cat /tmp/claude-1001/-home-runner-work--temp-adb-xtzco-static/80729b32-5dd0-4b62-b66b-de4158054ccb/tasks/b4fykohx4.output; python3 -c 'import json;d=json.load(open("/tmp/b.json"));print(d["bu - 2m 43s
f=/tmp/claude-1001/-home-runner-work--temp-adb-xtzco-static/80729b32-5dd0-4b62-b66b-de4158054ccb/tasks/b4fykohx4.output; for i in $(seq 1 55); do grep -qE '^(succeeded|failed)' $f && break; sleep 10; - 5m 47s
. ./.env && curl -s https://cloudish.ai/api/v1/projects/adb-xtzco-static/adb-xtzco-static-web -H "Authorization: Bearer $CLOUDISH_API_KEY" | python3 -c 'import json,sys;d=json.load(sys.stdin);print(js - 5m 52s
. ./.env && curl -s https://cloudish.ai/api/v1/projects/adb-xtzco-static/adb-xtzco-static-web -H "Authorization: Bearer $CLOUDISH_API_KEY" | head -c 3000; echo; python3 -c 'import json;d=json.load(ope - 5m 56s
. ./.env && curl -s -X PUT https://cloudish.ai/api/v1/projects/adb-xtzco-static/adb-xtzco-static-web/subdomain -H "Authorization: Bearer $CLOUDISH_API_KEY" -H "content-type: application/json" -d '{"la - 6m 03s
U=https://adb-xtzco-static-web.on.do.cloudish.ai - 6m 34s
. ./.env && curl -s https://cloudish.ai/api/v1/me -H "Authorization: Bearer $CLOUDISH_API_KEY" | python3 -c 'import json,sys;d=json.load(sys.stdin);a=d.get("apiKey",d);print({k:a.get(k) for k in ("ali
Raw data
Report on GitHub Full record (JSON) Workflow run, with transcripts