Odel
Built with Jon — Hidden Profit Tools

Built with Jon — Hidden Profit Tools

@jonathanmalkin1HTMLUpdated 1w ago

Read-only tools for finding where a small business leaks deals, time, and cash.

Server endpointStreamable HTTPProbe failed

This is the third-party server itself — Odel doesn't run it. Hitting this URL directly talks straight to the upstream server with no auth or proxying. Connect through Odel to front it with managed auth.

builtwithjon.com

Personal site for Jonathan Malkin. AI builder, solo founder.

Built with Astro v6. Hosted on Cloudflare Workers as jonathanmalkin-site. Zero JavaScript by default.

Local Preview

From this repo:

npm run build
npm run preview

Deploy

Live deploys require both steps:

git push origin main
npm run build
find dist -name .DS_Store -delete
wrangler deploy

Do not pass --assets or --name. wrangler.jsonc owns the Worker and asset routing, including run_worker_first for the MCP endpoint. CLI asset flags can replace that configuration and cause static assets to intercept POST /mcp.

In the broader Active-Work workspace, use Scripts/deploy-website.sh to run the push, build, cleanup, and Wrangler deploy sequence.

GitHub push alone does not publish the live site.

IndexNow

After a deploy that changes one or more canonical, indexable pages, notify IndexNow with only those URLs:

npm run indexnow:submit -- https://builtwithjon.com/articles/example/

The script verifies that the deployed key file is live before it submits. Preview the exact bounded payload without any network call with:

npm run indexnow:submit -- --dry-run https://builtwithjon.com/articles/example/

It rejects other origins, query strings/fragments, and noindex/private routes. HTTP 200 means IndexNow received the notification; HTTP 202 means it received it and key validation is pending. Neither response guarantees that a search engine will index the URL.

See Also