<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>sigh.dev - Scott Cooper&apos;s dev blog - #ai</title><description>sigh.dev is Scott Cooper&apos;s dev blog about TypeScript, React, San Francisco, and the web. - Posts tagged with &quot;ai&quot;</description><link>https://sigh.dev/</link><item><title>You can just port things to Cloudflare Workers</title><link>https://sigh.dev/posts/you-can-just-port-things-to-cloudflare-workers/</link><guid isPermaLink="true">https://sigh.dev/posts/you-can-just-port-things-to-cloudflare-workers/</guid><description>Vibecoding, Vibeporting?</description><pubDate>Sun, 25 Jan 2026 08:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This January I decided to double down on using up my &lt;a href=&quot;/posts/addicted-to-free-ai-credits/&quot;&gt;free ai credits&lt;/a&gt; by building a few projects on Cloudflare Workers. I’ve always really liked the idea of this platform that has cheap/free resources, but every time I build larger things on it I run into limits that make me frustrated and move to cheap vps hosting like fly.io or DigitalOcean.&lt;/p&gt;
&lt;p&gt;Is vibeporting a word? Maybe it should be?&lt;/p&gt;
&lt;h1&gt;&lt;a href=&quot;#datasette-ts&quot;&gt;Datasette-ts&lt;/a&gt;&lt;/h1&gt;
&lt;img alt=&quot;Datasette running on Cloudflare Workers | A port of Datasette to Cloudflare Workers&quot; loading=&quot;lazy&quot; width=&quot;1964&quot; height=&quot;1272&quot; src=&quot;/_astro/datasette.lR6-YtED_233bVL.webp&quot; srcset=&quot;/_astro/datasette.lR6-YtED_DHcnO.webp 640w, /_astro/datasette.lR6-YtED_1lQtBx.webp 750w, /_astro/datasette.lR6-YtED_ZYtjVw.webp 828w, /_astro/datasette.lR6-YtED_Z1T6aTX.webp 1080w, /_astro/datasette.lR6-YtED_Z1WrAH6.webp 1280w, /_astro/datasette.lR6-YtED_16XG7w.webp 1668w, /_astro/datasette.lR6-YtED_233bVL.webp 1964w&quot; /&gt;
&lt;p&gt;Over holiday break, I was reading some of &lt;a href=&quot;https://simonwillison.net/&quot; target=&quot;_blank&quot;&gt;Simon Willison’s posts about AI&lt;/a&gt; and I checked where it’s currently possible to deploy it. You can deploy it pretty much everywhere but NOT on Cloudflare Workers, due to workers not really supporting much of Python’s ecosystem. I pointed Codex with GPT-5.2 Codex high/medium at the Datasette repo and had it break it down into README tasks and slowly do them one at a time. I’m not yet convinced by the crazy subagent stuff or that worktrees are worth it.&lt;/p&gt;
&lt;p&gt;As I got into it, it was clear I needed to narrow down the scope. Mr. Willison has built a very mature project that has a plugin system and a ton of features built-in and it depends on subdependencies that he also has published like sqlite-utils. Obviously, what I wanted is something that feels similar and runs on Cloudflare Workers. I picked up Drizzle, Hono, and Alchemy to handle Cloudflare deployments. I chose not to rebuild the frontend as a React SPA instead rendering something similar to the original Jinja templates using Hono’s JSX.&lt;/p&gt;
&lt;p&gt;Anyway, it ends up working pretty well. You can see a live demo at &lt;a href=&quot;https://datasette-legislators.sigh.dev/&quot; target=&quot;_blank&quot;&gt;datasette-legislators.sigh.dev&lt;/a&gt; and the source is available below. I can’t say the code is in a good state, but it lives here &lt;a href=&quot;https://github.com/scttcper/datasette-ts&quot; target=&quot;_blank&quot;&gt;https://github.com/scttcper/datasette-ts&lt;/a&gt;.&lt;/p&gt;
&lt;h1&gt;&lt;a href=&quot;#sesnoop&quot;&gt;SESnoop&lt;/a&gt;&lt;/h1&gt;
&lt;img alt=&quot;SESnoop running on Cloudflare Workers | A port of Sessy to Cloudflare Workers&quot; loading=&quot;lazy&quot; width=&quot;2712&quot; height=&quot;2030&quot; src=&quot;/_astro/sesnoop.C6_5umH9_6I98D.webp&quot; srcset=&quot;/_astro/sesnoop.C6_5umH9_Z7vDFx.webp 640w, /_astro/sesnoop.C6_5umH9_Z24bGBN.webp 750w, /_astro/sesnoop.C6_5umH9_1wFp8k.webp 828w, /_astro/sesnoop.C6_5umH9_Z8l2QN.webp 1080w, /_astro/sesnoop.C6_5umH9_ZhGSUF.webp 1280w, /_astro/sesnoop.C6_5umH9_Z1FyIf3.webp 1668w, /_astro/sesnoop.C6_5umH9_umF3j.webp 2048w, /_astro/sesnoop.C6_5umH9_Z1aKnlE.webp 2560w, /_astro/sesnoop.C6_5umH9_6I98D.webp 2712w&quot; /&gt;
&lt;p&gt;Another Cloudflare Worker port, this time of a Rails app called &lt;a href=&quot;https://sessy.do&quot; target=&quot;_blank&quot;&gt;Sessy&lt;/a&gt;. I decided to rename it because I was going for a different vibe. I send a bunch of emails via SES for xmplaylist.com and I was looking into running Sessy to handle the bounces and complaints, however I can’t get myself to think about Ruby for more than 1 minute. So again I pointed Codex at the Sessy repo and a few other Cloudflare/Hono example repos and had it build out a monorepo where the worker handles the api and Cloudflare assets serves a React SPA frontend.&lt;/p&gt;
&lt;p&gt;I think what was hard to reel in was how much frontend it was willing to build before I could stop it and start bringing in shadcn components. Like it made a bunch of select components and things that were generally pretty ugly. So then you have to tell it to replace all the ugly things with premade shadcn + baseui components.&lt;/p&gt;
&lt;p&gt;This project took a bit more work to get working outside of pointing AI at the code. It made a number of Cloudflare mistakes, tests were difficult to get working 100% correctly. One example was that it put the webhook at &lt;code&gt;/webhook&lt;/code&gt; which Cloudflare would attempt to load as an asset since the worker is bound to &lt;code&gt;/api&lt;/code&gt; which is always a bit of a headscratcher until you remember how this all works. It was really cool getting to know how SNS works with SES and watching them flow into D1 is fun.&lt;/p&gt;
&lt;p&gt;I tried publishing this package to npm and it kinda works to deploy to cloudflare if alchemy is setup. Or you can run it locally with &lt;code&gt;npx datasette-ts@latest serve ./legislators.db&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I don’t have a live demo, but you can check out the source code at &lt;a href=&quot;https://github.com/scttcper/sesnoop&quot; target=&quot;_blank&quot;&gt;scttcper/sesnoop&lt;/a&gt;.&lt;/p&gt;
&lt;h1&gt;&lt;a href=&quot;#conclusion&quot;&gt;Conclusion&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Pretty happy with how both of these turned out. I didn’t exclusively use Codex on either of them, however Codex was the main driver 95% of the time. I think Codex w/ GPT-5.2 Codex on high or medium is a great model and through the team plan you can basically run medium as long as you want. I exhausted about 1 week worth of the plan I’m on for Codex for each project.&lt;/p&gt;</content:encoded><category>vibecoding</category><category>cloudflare</category><category>typescript</category><category>ai</category></item><item><title>I’m addicted to free AI credits</title><link>https://sigh.dev/posts/addicted-to-free-ai-credits/</link><guid isPermaLink="true">https://sigh.dev/posts/addicted-to-free-ai-credits/</guid><description>Free models, free credits, free VS Code forks. I’m using all of it while it lasts.</description><pubDate>Sun, 14 Dec 2025 08:00:00 GMT</pubDate><content:encoded>&lt;p&gt;You might be too late to enjoy the era of $5 Ubers in SF, but you can still get a ride for free with AI. I’m absolutely hooked on using any available free AI models. Cursor will randomly announce that a new model is free for a week or whatever and I’m fucking there. Remember that time SOTA models were available for free? That was last week, and it’s hard to say how long this sort of spending will continue.&lt;/p&gt;
&lt;p&gt;Opus 4.5 was free for a while, and it did get me hooked on the model. I had tried Sonnet 4.5 a number of times but found it annoyingly cheerful and not as good as GPT-5.1 (granted GPT-5.1 came out way later). Now that I’m faced with having to pay for Opus 4.5, I am certainly tempted and I can see why so many are willing to jump on Claude Code.&lt;/p&gt;
&lt;p&gt;GitHub’s Copilot is giving me their monthly free open source subscription to a limited Copilot plan. I like how they’re still using the old Cursor pricing billed by requests rather than tokens. You can get quite a few things done with that. Google’s antigravity is interesting, but so far it seems to expire before it gets anywhere. I think the one takeaway from chasing free credits is that all the VS Code forks are now basically the same, assuming they have a plan feature. The furthest behind might be Gemini’s VS Code extension, which is a fairly shit experience. I’ve tried some free models and bounced off because they produce more slop than anything useful. Grok’s models are all shit so far.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;#what-did-i-build&quot;&gt;What did I build?&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I launched a paid plan for &lt;a href=&quot;https://xmplaylist.com/pricing&quot; target=&quot;_blank&quot;&gt;xmplaylist.com&lt;/a&gt; and improved a number of my open source projects. I’d say the best use of these free credits has been nice little admin pages that I never would have spent time building. I can point the agent at enough examples that it needs hardly any direction to get it done. I only really do TypeScript in my free time and I’m sometimes jealous of the Django admins in other languages. Slop together a similar admin with TypeScript and &lt;a href=&quot;https://orm.drizzle.team/&quot; target=&quot;_blank&quot;&gt;drizzle&lt;/a&gt; and you’ve likely got a better dev experience than any Django app.&lt;/p&gt;
&lt;p&gt;I’m sure the free tokens will be locked down soon. I’m riding around as much as I can.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;#some-random-predictions-for-2027&quot;&gt;Some random predictions for 2027:&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;People will use smaller models to save money and because they’ve caught up in performance. I’m hopeful for Gemini 3 Flash and not hopeful for SOTA getting cheaper.&lt;/li&gt;
&lt;li&gt;Cursor will have to drop the price on their composer-1 model (which works great)&lt;/li&gt;
&lt;li&gt;At least 2 more VS Code forks will launch&lt;/li&gt;
&lt;li&gt;I’ll still be chasing free SOTA models&lt;/li&gt;
&lt;li&gt;Grok will continue to be 2nd rate&lt;/li&gt;
&lt;li&gt;I’ll actually pay for a personal plan from some provider&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;TODO:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;try windsurf&lt;/li&gt;
&lt;/ul&gt;
  &lt;img src=&quot;/_astro/uber-2017.Dy9Ys4ZO_Z1Cg7kp.webp&quot; srcset=&quot;/_astro/uber-2017.Dy9Ys4ZO_ZDflhY.webp 640w, /_astro/uber-2017.Dy9Ys4ZO_Z220fcE.webp 750w, /_astro/uber-2017.Dy9Ys4ZO_21KIiX.webp 828w, /_astro/uber-2017.Dy9Ys4ZO_Z1epGIr.webp 1080w, /_astro/uber-2017.Dy9Ys4ZO_Z1Cg7kp.webp 1272w&quot; alt=&quot;5 dollar uber | five dollar uber in sf circa 2017. Currently $17 for the same trip&quot; loading=&quot;lazy&quot; width=&quot;1272&quot; height=&quot;1026&quot; /&gt;</content:encoded><category>ai</category><category>typescript</category><category>vibecoding</category></item></channel></rss>