<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Viktor Kondas</title>
    <description>The latest articles on DEV Community by Viktor Kondas (@kondasviktor).</description>
    <link>https://dev.to/kondasviktor</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4073133%2F25c98bb7-481b-479d-acf6-ea4d77265f29.jpg</url>
      <title>DEV Community: Viktor Kondas</title>
      <link>https://dev.to/kondasviktor</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kondasviktor"/>
    <language>en</language>
    <item>
      <title>Free hosting for vibe coding (2026)</title>
      <dc:creator>Viktor Kondas</dc:creator>
      <pubDate>Mon, 05 Oct 2026 11:13:59 +0000</pubDate>
      <link>https://dev.to/kondasviktor/free-hosting-for-vibe-coding-2026-35mn</link>
      <guid>https://dev.to/kondasviktor/free-hosting-for-vibe-coding-2026-35mn</guid>
      <description>&lt;p&gt;How to host your vibe-coded project for free — Cloudflare Pages, Vercel Hobby, Netlify, GitHub Pages, and Render, plus when Hobby is not enough (Stripe / commercial).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Free vibe coding stack — **Part 3&lt;/em&gt;* (hosting).*&lt;/p&gt;

&lt;p&gt;Part 1 of &lt;strong&gt;Free vibe coding stack&lt;/strong&gt; covered &lt;a href="https://vibecoderslife.com/post/free-ai-api-keys-vibe-coding-2026?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=free-hosting-vibe-coding-2026" rel="noopener noreferrer"&gt;free cloud AI API keys&lt;/a&gt;. Part 2 was &lt;a href="https://vibecoderslife.com/post/free-vibe-coding-courses-2026?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=free-hosting-vibe-coding-2026" rel="noopener noreferrer"&gt;courses&lt;/a&gt;. Keys and training still leave you on &lt;code&gt;localhost:3000&lt;/code&gt;. &lt;strong&gt;Part 3 is hosting&lt;/strong&gt; — a live HTTPS URL for the frontend you just vibe-coded.&lt;/p&gt;

&lt;p&gt;This chapter is Git frontend hosts. Databases and file storage are next in this series — &lt;a href="https://neon.com/signup?refcode=BNUJREU5" rel="noopener noreferrer"&gt;Neon&lt;/a&gt; is the start-here Postgres, not a website host. Auth comes after that.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Start-here:&lt;/strong&gt; Static HTML / CSS / JS or a marketing page → &lt;a href="https://pages.cloudflare.com/" rel="noopener noreferrer"&gt;Cloudflare Pages&lt;/a&gt; (static requests are free and unlimited) or &lt;a href="https://pages.github.com/" rel="noopener noreferrer"&gt;GitHub Pages&lt;/a&gt; (simplest). Next / React from Cursor → &lt;a href="https://vercel.com" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt; Hobby for DX — but Hobby is &lt;strong&gt;non-commercial personal use&lt;/strong&gt;. Stripe, ads, donations, or paid client work means Pro.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Provider map
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;th&gt;Free quota&lt;/th&gt;
&lt;th&gt;Card?&lt;/th&gt;
&lt;th&gt;Commercial&lt;/th&gt;
&lt;th&gt;Custom domain&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cloudflare Pages&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Static / edge&lt;/td&gt;
&lt;td&gt;Unlimited static requests; 500 builds/mo&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;OK for static hobby + business sites*&lt;/td&gt;
&lt;td&gt;Yes (100 / project on Free)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vercel Hobby&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Next / React DX&lt;/td&gt;
&lt;td&gt;100 GB Fast Data Transfer / mo&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Personal only&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (50 / project)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Netlify Free&lt;/td&gt;
&lt;td&gt;Jamstack / forms&lt;/td&gt;
&lt;td&gt;300 credits / mo (new accounts)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;OK until credits run out&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Pages&lt;/td&gt;
&lt;td&gt;Docs / portfolios&lt;/td&gt;
&lt;td&gt;1 GB site; soft 100 GB bandwidth&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Not for store / SaaS&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Render static&lt;/td&gt;
&lt;td&gt;Git → CDN frontend&lt;/td&gt;
&lt;td&gt;Hobby: 5 GB bandwidth, 500 build min&lt;/td&gt;
&lt;td&gt;No*&lt;/td&gt;
&lt;td&gt;Hobby is personal / prototype&lt;/td&gt;
&lt;td&gt;Yes (2 included on Hobby)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Checked 17 Aug 2026 from official docs. Quotas move — re-check the dashboard before you promise a client a $0 bill. *Cloudflare Functions share the Workers Free 100k req/day cap. *Render bills extra bandwidth if you add a card and exceed the include; without a card, Free services can suspend.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploy from GitHub in Cursor
&lt;/h2&gt;

&lt;p&gt;Same loop on every host below: push the repo, connect the GitHub app, pick the branch, wait for a &lt;code&gt;*.pages.dev&lt;/code&gt; / &lt;code&gt;*.vercel.app&lt;/code&gt; / &lt;code&gt;*.netlify.app&lt;/code&gt; / &lt;code&gt;*.github.io&lt;/code&gt; / &lt;code&gt;*.onrender.com&lt;/code&gt; URL. Paste this into Cursor if you want the agent to walk you through one host:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Help me deploy this project to Cloudflare Pages or Vercel.
Walk me through: (1) putting the repo on GitHub if it is not there,
(2) connecting the host, (3) the correct build command and output folder,
(4) env vars for any API keys (never commit .env),
(5) the live URL. Do not add Stripe or ads on a free Hobby plan.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Cloudflare Pages
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://pages.cloudflare.com/" rel="noopener noreferrer"&gt;Cloudflare Pages&lt;/a&gt; is the generous static pick. Official docs: requests to &lt;strong&gt;static assets are free and unlimited&lt;/strong&gt; on free and paid plans. You get &lt;strong&gt;500 builds per month&lt;/strong&gt;, one concurrent build, 100 projects, 100 custom domains per project, 20,000 files, 25 MiB max file.&lt;/p&gt;

&lt;p&gt;The "unlimited" headline stops at Functions. Pages Functions share your &lt;a href="https://developers.cloudflare.com/workers/platform/limits/" rel="noopener noreferrer"&gt;Workers Free&lt;/a&gt; quota — &lt;strong&gt;100,000 requests per day&lt;/strong&gt;, resetting midnight UTC. A brochure site that never invokes Functions stays in the unlimited bucket. An API-on-the-edge app does not.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a free Cloudflare account at &lt;a href="https://dash.cloudflare.com/" rel="noopener noreferrer"&gt;dash.cloudflare.com&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Workers &amp;amp; Pages → Create → Pages → Connect Git (GitHub or GitLab).&lt;/li&gt;
&lt;li&gt;Set the build command and output directory your framework expects (or leave empty for a plain HTML folder).&lt;/li&gt;
&lt;li&gt;Deploy. Add a custom domain in project settings when you have one.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Vercel Hobby
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://vercel.com" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt; is still the lowest-friction path for Next.js and most React apps Cursor scaffolds. Hobby is &lt;strong&gt;$0&lt;/strong&gt;. Fair-use (as of 29 Jul 2026) includes about &lt;strong&gt;100 GB Fast Data Transfer&lt;/strong&gt; per month, 1M edge requests, 1M function invocations, 200 projects, 50 domains per project. Exceed a cap and that feature typically pauses until the window resets — Hobby cannot buy extra usage.&lt;/p&gt;

&lt;p&gt;The binding constraint is not bandwidth. It is the &lt;a href="https://vercel.com/docs/limits/fair-use-guidelines" rel="noopener noreferrer"&gt;commercial-use rule&lt;/a&gt;: Hobby teams are &lt;strong&gt;non-commercial personal use only&lt;/strong&gt;. Pro is $20/mo. See Hobby vs paid below.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sign up at &lt;a href="https://vercel.com" rel="noopener noreferrer"&gt;vercel.com&lt;/a&gt; with GitHub.&lt;/li&gt;
&lt;li&gt;Add New → Project → import the repo. Accept the detected framework.&lt;/li&gt;
&lt;li&gt;Add env vars in Project → Settings → Environment Variables (same names as local &lt;code&gt;.env&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Every push to the production branch ships. Pull requests get preview URLs.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Netlify
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.netlify.com" rel="noopener noreferrer"&gt;Netlify&lt;/a&gt; still fits Jamstack sites that want forms and deploy previews. &lt;strong&gt;New accounts since 4 Sep 2025&lt;/strong&gt; are on credit-based Free: &lt;strong&gt;300 credits per month&lt;/strong&gt;, hard limit, no auto-recharge. When credits hit zero, projects pause and visitors see "Site not available" until the next cycle or you upgrade. Bandwidth is &lt;strong&gt;20 credits per GB&lt;/strong&gt;; each production deploy is &lt;strong&gt;15 credits&lt;/strong&gt;; deploy previews are 0 credits.&lt;/p&gt;

&lt;p&gt;Older (legacy) Free accounts may still show a 100 GB-style bandwidth include. Do not assume that if you signed up this year — check Usage &amp;amp; billing.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sign up at &lt;a href="https://app.netlify.com/" rel="noopener noreferrer"&gt;app.netlify.com&lt;/a&gt; with GitHub.&lt;/li&gt;
&lt;li&gt;Add new site → Import from Git → pick the repo and build settings.&lt;/li&gt;
&lt;li&gt;Watch the credit ledger if you deploy to production often (15 credits a pop adds up).&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  GitHub Pages
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://pages.github.com/" rel="noopener noreferrer"&gt;GitHub Pages&lt;/a&gt; is static only — no serverless, no SSR. Official &lt;a href="https://docs.github.com/en/pages/getting-started-with-github-pages/github-pages-limits" rel="noopener noreferrer"&gt;limits&lt;/a&gt;: published site ≤ &lt;strong&gt;1 GB&lt;/strong&gt;, recommended source repo 1 GB, deploy timeout 10 minutes, &lt;strong&gt;soft 100 GB bandwidth / month&lt;/strong&gt;, soft 10 builds/hour unless you use Actions. Custom domains work. It is &lt;strong&gt;not&lt;/strong&gt; allowed as free hosting for e-commerce, commercial SaaS, or sites whose main job is taking payments.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Push a public repo (or use Actions from a private repo on a paid GitHub plan if you already have one).&lt;/li&gt;
&lt;li&gt;Settings → Pages → deploy from &lt;code&gt;main&lt;/code&gt; / &lt;code&gt;/docs&lt;/code&gt; or a GitHub Actions workflow.&lt;/li&gt;
&lt;li&gt;Wait for &lt;code&gt;https://&amp;lt;user&amp;gt;.github.io/&amp;lt;repo&amp;gt;/&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Render (static)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://render.com/docs/static-sites" rel="noopener noreferrer"&gt;Render static sites&lt;/a&gt; are free to deploy: Git-connected, CDN, TLS, PR previews. They count against the &lt;strong&gt;Hobby&lt;/strong&gt; workspace include: &lt;strong&gt;5 GB outbound bandwidth / month&lt;/strong&gt; (then $0.15/GB if you have billing set up), &lt;strong&gt;500 pipeline minutes&lt;/strong&gt;, &lt;strong&gt;2 custom domains&lt;/strong&gt; included.&lt;/p&gt;

&lt;p&gt;Do not mix this up with &lt;a href="https://render.com/docs/free" rel="noopener noreferrer"&gt;Free web services&lt;/a&gt;. Those are a different product: they &lt;strong&gt;spin down after 15 minutes idle&lt;/strong&gt;, take about a minute to wake, and eat 750 Free instance hours / month. Fine for a toy API. Bad if you tell someone your "free static site" will cold-start.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sign up at &lt;a href="https://dashboard.render.com/" rel="noopener noreferrer"&gt;dashboard.render.com&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;New → &lt;strong&gt;Static Site&lt;/strong&gt; (not Web Service) → connect the repo → build command + publish directory.&lt;/li&gt;
&lt;li&gt;Confirm the URL ends up on the CDN path, not a sleeping Node process.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Hobby vs paid — Stripe is the trigger
&lt;/h2&gt;

&lt;p&gt;Free tiers are for hobby, demos, and learning. If you need a &lt;strong&gt;payment provider&lt;/strong&gt; on the live URL, plan on a paid hosting tier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vercel Hobby vs Pro&lt;/strong&gt; is the worked example. &lt;a href="https://vercel.com/docs/limits/fair-use-guidelines" rel="noopener noreferrer"&gt;Fair use&lt;/a&gt; says Hobby is personal / non-commercial. Commercial includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Any method of requesting or processing payment from visitors (Stripe Checkout counts)&lt;/li&gt;
&lt;li&gt;Advertising the sale of a product or service&lt;/li&gt;
&lt;li&gt;Getting paid to create, update, or host the site&lt;/li&gt;
&lt;li&gt;Affiliate linking as the primary purpose of the site&lt;/li&gt;
&lt;li&gt;Ads (including AdSense)&lt;/li&gt;
&lt;li&gt;Asking for donations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is no "under $10 MRR is still Hobby" clause. One paying customer, or even a donate button, is the policy line. Pro is &lt;strong&gt;$20 / month&lt;/strong&gt; per deploying seat, with a usage credit and the ability to pay for overages. Hobby cannot buy extra bandwidth.&lt;/p&gt;

&lt;p&gt;Same idea, other hosts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare&lt;/strong&gt; — static can stay $0; Functions / Workers traffic can blow the 100k/day Free cap. Paid Workers starts around $5/mo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Netlify&lt;/strong&gt; — Free cannot buy credits. Personal is $9/mo (1,000 credits + recharge). Pro starts at $20/mo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Pages&lt;/strong&gt; — policy, not a price list: no store / SaaS on Pages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Render&lt;/strong&gt; — static is cheap until bandwidth; always-on backends are Starter web services (~$7/mo), not Free.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Also: Replit and Hostinger
&lt;/h2&gt;

&lt;p&gt;These are &lt;strong&gt;not&lt;/strong&gt; in the free Git CDN map. They solve different jobs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://replit.com/refer/kondasviktor" rel="noopener noreferrer"&gt;Replit&lt;/a&gt; is build-and-host in the browser. If you never left Replit, publishing there is simpler than exporting to GitHub → Vercel. It is still a platform plan with usage limits — not unlimited Cloudflare-style static. Use it when the project already lives there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.hostinger.com?REFERRALCODE=VIKTOR" rel="noopener noreferrer"&gt;Hostinger&lt;/a&gt; is cheap traditional hosting: cPanel, WordPress, shared PHP. Useful if someone wants a classic site builder, not a Git push. It is &lt;strong&gt;paid&lt;/strong&gt;, not a free frontend CDN. Do not pick it as the default for a Cursor Next.js app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical tips
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Env vars in the dashboard&lt;/strong&gt; — never commit &lt;code&gt;.env&lt;/code&gt;. Rotate keys if they hit GitHub.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom domain + HTTPS&lt;/strong&gt; — all five Git hosts issue certificates; DNS is the slow part (A / CNAME at your registrar).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Preview deploys&lt;/strong&gt; — share the PR URL, not localhost screenshots.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quotas move&lt;/strong&gt; — screenshot Usage the week you launch; Netlify credits and Vercel fair-use are the two that surprise people.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One host per project&lt;/strong&gt; — do not dual-deploy "for backup" until you know which URL is canonical.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's next in Free vibe coding stack
&lt;/h2&gt;

&lt;p&gt;Hosting is the public URL. Coming parts in this series:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Database &amp;amp; storage&lt;/strong&gt; — free Postgres / files (Neon start-here)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth&lt;/strong&gt; — free user login stacks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email &amp;amp; SMS&lt;/strong&gt; — transactional mail without a credit card day-one&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring&lt;/strong&gt; — Search Console, analytics, and alerts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payments&lt;/strong&gt; — Checkout when Hobby is no longer enough&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Browse tools we actually use on &lt;a href="https://vibecoderslife.com/tools?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=free-hosting-vibe-coding-2026" rel="noopener noreferrer"&gt;vibecoderslife.com/tools&lt;/a&gt; (Vercel, Hostinger, Replit, GitHub, Cursor — affiliate links marked where active).&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How do I host a vibe-coded project for free?
&lt;/h3&gt;

&lt;p&gt;Push the repo to GitHub, connect Cloudflare Pages (static) or Vercel Hobby (Next/React), and use the &lt;code&gt;*.pages.dev&lt;/code&gt; or &lt;code&gt;*.vercel.app&lt;/code&gt; URL. Stay off Stripe, ads, and paid client work while you are on Hobby-class plans.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Vercel Hobby enough if I add Stripe?
&lt;/h3&gt;

&lt;p&gt;No. Vercel's fair-use rules treat payment processing as commercial. Upgrade to Pro (or host somewhere whose terms allow it) before Checkout goes live.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cloudflare Pages vs Vercel?
&lt;/h3&gt;

&lt;p&gt;Cloudflare wins on unmetered static bandwidth. Vercel wins on Next.js DX and previews. If the site is HTML/CSS/JS, start on Pages. If Cursor just scaffolded Next, start on Vercel and read the Hobby rule before you sell anything.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Cloudflare Pages really unlimited?
&lt;/h3&gt;

&lt;p&gt;Static asset requests are. Builds are 500/month. Functions share Workers Free at 100,000 requests/day. Do not promise "unlimited API" on the free plan.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need a credit card?
&lt;/h3&gt;

&lt;p&gt;Usually not for these five free Git hosts. Render may ask for a card if you exceed included bandwidth or pipeline minutes; without one, extra usage can suspend Free services instead of billing.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://vibecoderslife.com/post/free-hosting-vibe-coding-2026?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=free-hosting-vibe-coding-2026" rel="noopener noreferrer"&gt;Vibe Coder's Life&lt;/a&gt;. I send a short Tuesday/Friday digest on AI coding tools and shipping with agents — &lt;a href="https://vibecoderslife.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=free-hosting-vibe-coding-2026#subscribe-email" rel="noopener noreferrer"&gt;subscribe&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sources: &lt;a href="https://vercel.com/docs/plans/hobby" rel="noopener noreferrer"&gt;Vercel Hobby&lt;/a&gt; / &lt;a href="https://vercel.com/docs/limits/fair-use-guidelines" rel="noopener noreferrer"&gt;fair-use&lt;/a&gt;; &lt;a href="https://developers.cloudflare.com/pages/platform/limits/" rel="noopener noreferrer"&gt;Cloudflare Pages limits&lt;/a&gt;; &lt;a href="https://docs.netlify.com/manage/accounts-and-billing/billing/billing-for-credit-based-plans/how-credits-work/" rel="noopener noreferrer"&gt;Netlify credits&lt;/a&gt;; &lt;a href="https://docs.github.com/en/pages/getting-started-with-github-pages/github-pages-limits" rel="noopener noreferrer"&gt;GitHub Pages limits&lt;/a&gt;; &lt;a href="https://render.com/docs/static-sites" rel="noopener noreferrer"&gt;Render static&lt;/a&gt;. Numbers as of 17 Aug 2026 — verify in-product.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: Replit and Hostinger links are referral links (same as on our &lt;a href="https://vibecoderslife.com/tools?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=free-hosting-vibe-coding-2026" rel="noopener noreferrer"&gt;Tools&lt;/a&gt; page). Vercel, Netlify, Cloudflare Pages, GitHub Pages, and Render are plain product URLs. Neon signup uses our existing referral (database and storage comes next). No paid placement by the hosting providers. Drafting/editing used AI assistance; the hosting map is from my own shipping work.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>devops</category>
    </item>
    <item>
      <title>Free vibe coding courses (2026)</title>
      <dc:creator>Viktor Kondas</dc:creator>
      <pubDate>Fri, 02 Oct 2026 11:00:00 +0000</pubDate>
      <link>https://dev.to/kondasviktor/free-vibe-coding-courses-2026-2i9j</link>
      <guid>https://dev.to/kondasviktor/free-vibe-coding-courses-2026-2i9j</guid>
      <description>&lt;p&gt;A practical map of free and low-cost AI coding training — Codecademy, Udemy picks, Anthropic Skilljar, OpenAI Academy, Cursor Workshops, Grow with Google, plus a clear start-here path.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Free vibe coding stack — **Part 2&lt;/em&gt;* (courses).*&lt;/p&gt;

&lt;p&gt;Part 1 of &lt;strong&gt;Free vibe coding stack&lt;/strong&gt; covered &lt;a href="https://vibecoderslife.com/post/free-ai-api-keys-vibe-coding-2026?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=free-vibe-coding-courses-2026" rel="noopener noreferrer"&gt;free cloud AI API keys&lt;/a&gt;. Keys get you unblocked. Training gets you productive. &lt;strong&gt;Part 2 is courses&lt;/strong&gt; — free vendor workshops first, then structured paths, then paid depth when a sale actually helps.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Start-here (verdict first):&lt;/strong&gt; Day 0 → &lt;a href="https://cursor.com/workshops" rel="noopener noreferrer"&gt;Cursor Workshops&lt;/a&gt;. Week 1 → &lt;a href="https://anthropic.skilljar.com/" rel="noopener noreferrer"&gt;Anthropic Skilljar&lt;/a&gt; &lt;em&gt;or&lt;/em&gt; &lt;a href="https://academy.openai.com/" rel="noopener noreferrer"&gt;OpenAI Academy&lt;/a&gt;. Then one structured path (&lt;a href="https://codecademy.referralrock.com/l/VIKTOR68/" rel="noopener noreferrer"&gt;Codecademy&lt;/a&gt;). Buy &lt;a href="https://trk.udemy.com/c/7345738/3193860/39854" rel="noopener noreferrer"&gt;Udemy&lt;/a&gt; only on a sale for longer video curricula. Grow with Google if you want broader digital / AI literacy — not day-one agent shipping.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Start-here path
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Day 0 — Cursor Workshops.&lt;/strong&gt; Learn the IDE/agent you already build in. Pick Cursor 101, Rules / Skills / MCP, or whatever's live this week.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Week 1 — vendor-native skills.&lt;/strong&gt; Anthropic Skilljar (Claude Code, MCP, agent skills) &lt;em&gt;or&lt;/em&gt; OpenAI Academy — match the model stack you actually use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Then — structured path.&lt;/strong&gt; &lt;a href="https://codecademy.referralrock.com/l/VIKTOR68/" rel="noopener noreferrer"&gt;Codecademy&lt;/a&gt; Pro paths / agent courses, or the live &lt;em&gt;Building Agentic AI Applications for Beginners&lt;/em&gt; bootcamp when a cohort is open (code &lt;code&gt;EARLY20&lt;/code&gt; for 20% off — time-limited; verify at checkout).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Depth / paid sales —&lt;/strong&gt; &lt;a href="https://trk.udemy.com/c/7345738/3193860/39854" rel="noopener noreferrer"&gt;Udemy&lt;/a&gt;. Prefer instructors Ed Donner and Maximilian Schwarzmüller over random "AI agent masterclass" spam.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Career / fundamentals — Grow with Google (Europe).&lt;/strong&gt; Broader literacy tracks, not a substitute for Cursor + one vendor academy.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Codecademy
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Summary:&lt;/strong&gt; Interactive lessons, career paths, and occasional live bootcamps. Good when you want a syllabus and quizzes instead of YouTube chaos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to register:&lt;/strong&gt; Create an account via the &lt;a href="https://codecademy.referralrock.com/l/VIKTOR68/" rel="noopener noreferrer"&gt;Codecademy referral link&lt;/a&gt; (disclosed). Free catalog exists; Pro unlocks most guided paths. Bootcamps are separate paid cohorts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best picks for vibe / agents:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Building Agentic AI Applications for Beginners&lt;/em&gt; — 12-week live bootcamp (Python → LLMs / RAG / orchestration). Landing pages have advertised &lt;code&gt;EARLY20&lt;/code&gt; for 20% off; cohort calendars change — if overview says "no upcoming," wait for the next start date.&lt;/li&gt;
&lt;li&gt;Self-paced: &lt;em&gt;Learn How to Build AI Agents&lt;/em&gt; and the &lt;em&gt;Build AI Agents with OpenAI and LangChain&lt;/em&gt; path when you want structured practice without live sessions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Free vs paid:&lt;/strong&gt; Free intro lessons; Pro / bootcamp are paid. Don't assume the whole agent track is forever free.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who it fits:&lt;/strong&gt; Beginners who want accountability and a curriculum; people who already like Codecademy's UI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://codecademy.referralrock.com/l/VIKTOR68/" rel="noopener noreferrer"&gt;Try Codecademy →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Udemy
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Summary:&lt;/strong&gt; Huge marketplace. Quality varies wildly — filter by instructor, recent updates, and project load, not star spam.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to register:&lt;/strong&gt; Browse via the &lt;a href="https://trk.udemy.com/c/7345738/3193860/39854" rel="noopener noreferrer"&gt;Udemy referral link&lt;/a&gt;. Wait for sitewide sales if you can; list prices are theatre.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instructors / courses verified at write time:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ed Donner&lt;/strong&gt; — &lt;em&gt;AI Engineer Core Track: LLM Engineering, RAG, QLoRA, Agents&lt;/em&gt; and &lt;em&gt;AI Engineer Agentic Track: The Complete Agent &amp;amp; MCP Course&lt;/em&gt; (CrewAI, LangGraph, MCP, multi-framework builds).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maximilian Schwarzmüller&lt;/strong&gt; — &lt;em&gt;AI Agents &amp;amp; Workflows: The Practical Guide&lt;/em&gt; (clearer conceptual entry if Donner's agentic track feels heavy).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Free vs paid:&lt;/strong&gt; Paid video (often heavily discounted). Not a free academy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who it fits:&lt;/strong&gt; Self-paced learners who want 10–40 hours of depth after free vendor workshops.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://trk.udemy.com/c/7345738/3193860/39854" rel="noopener noreferrer"&gt;Browse Udemy →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Anthropic Skilljar
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Summary:&lt;/strong&gt; Anthropic's official course hub on Skilljar — Claude for work, Claude Code, Claude API, MCP, AI Fluency, agent skills / subagents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to register:&lt;/strong&gt; Sign up at &lt;a href="https://anthropic.skilljar.com/" rel="noopener noreferrer"&gt;anthropic.skilljar.com&lt;/a&gt; (Skilljar account; Anthropic Console account is separate if you later use the API).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best courses for vibe coders:&lt;/strong&gt; Claude Code 101 / Claude Code in Action, Introduction to Model Context Protocol, Introduction to agent skills, Building with the Claude API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free vs paid:&lt;/strong&gt; Learning content is free to access via Skilljar; certificates / progress tracking follow Skilljar's flow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who it fits:&lt;/strong&gt; Anyone shipping with Claude / Claude Code / MCP day to day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://anthropic.skilljar.com/" rel="noopener noreferrer"&gt;Open Anthropic Skilljar →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  OpenAI Academy
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Summary:&lt;/strong&gt; OpenAI's free learning hub for builders and teams using ChatGPT / the OpenAI API / agent patterns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to register:&lt;/strong&gt; Start at &lt;a href="https://academy.openai.com/" rel="noopener noreferrer"&gt;academy.openai.com&lt;/a&gt; and pick tracks that match your stack (API, assistants / agents, product use).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free vs paid:&lt;/strong&gt; Academy content is free; API usage is separate (see &lt;a href="https://vibecoderslife.com/post/free-ai-api-keys-vibe-coding-2026?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=free-vibe-coding-courses-2026" rel="noopener noreferrer"&gt;Part 1&lt;/a&gt; for free-key options if you're experimenting).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who it fits:&lt;/strong&gt; Codex / ChatGPT / OpenAI API users who want vendor-native guidance before buying a third-party bootcamp.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://academy.openai.com/" rel="noopener noreferrer"&gt;Open OpenAI Academy →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Cursor Workshops
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Summary:&lt;/strong&gt; Free live and recorded sessions from the Cursor team — 101/201, Rules / Skills / MCP, model selection, cloud agents, role-based sessions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to register:&lt;/strong&gt; Browse upcoming events at &lt;a href="https://cursor.com/workshops" rel="noopener noreferrer"&gt;cursor.com/workshops&lt;/a&gt; and join what matches your role.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best first picks:&lt;/strong&gt; Cursor 101, Cursor Rules / Skills / MCPs, Model Selection &amp;amp; Token Efficiency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free vs paid:&lt;/strong&gt; Workshops are free; Cursor product plans are separate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who it fits:&lt;/strong&gt; Anyone whose daily driver is Cursor — start here before paying for agent theory elsewhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://cursor.com/workshops" rel="noopener noreferrer"&gt;View Cursor Workshops →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Grow with Google (Europe)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Summary:&lt;/strong&gt; Google's Europe-facing digital skills / AI literacy programs — career and fundamentals oriented more than "ship an agent tonight."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to register:&lt;/strong&gt; Start at &lt;a href="https://grow.google/intl/europe/" rel="noopener noreferrer"&gt;grow.google/intl/europe/&lt;/a&gt; and pick country / program availability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free vs paid:&lt;/strong&gt; Core Grow tracks are free; partner certificates may vary by country.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who it fits:&lt;/strong&gt; Career switchers and teams needing broad AI literacy — not a replacement for Cursor + Skilljar / Academy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://grow.google/intl/europe/" rel="noopener noreferrer"&gt;Explore Grow with Google →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Also useful (curated extras)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DeepLearning.AI short courses&lt;/strong&gt; — prompt engineering / agentic AI videos are free to audit; graded work and certificates often need Pro. Start at &lt;a href="https://www.deeplearning.ai/courses/" rel="noopener noreferrer"&gt;deeplearning.ai/courses&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hugging Face AI Agents Course&lt;/strong&gt; — free end-to-end agents path; free cert if you complete the stated assignments. &lt;a href="https://huggingface.co/learn/agents-course/unit0/introduction" rel="noopener noreferrer"&gt;huggingface.co/learn/agents-course&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft Learn / GitHub Skills + AI Agents for Beginners&lt;/strong&gt; — free Copilot / agent lesson tracks. &lt;a href="https://microsoft.github.io/ai-agents-for-beginners/" rel="noopener noreferrer"&gt;AI Agents for Beginners&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;freeCodeCamp&lt;/strong&gt; — AI-assisted coding / ML YouTube + curriculum, free with no course upsell. &lt;a href="https://www.freecodecamp.org/" rel="noopener noreferrer"&gt;freecodecamp.org&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Free?&lt;/th&gt;
&lt;th&gt;Certificate?&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;th&gt;Time to first project&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cursor Workshops&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No (session)&lt;/td&gt;
&lt;td&gt;Tool fluency&lt;/td&gt;
&lt;td&gt;Same day&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Anthropic Skilljar&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Via Skilljar&lt;/td&gt;
&lt;td&gt;Claude / MCP / Code&lt;/td&gt;
&lt;td&gt;1–3 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OpenAI Academy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Varies by track&lt;/td&gt;
&lt;td&gt;OpenAI / Codex stack&lt;/td&gt;
&lt;td&gt;1–3 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Codecademy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Pro / bootcamp&lt;/td&gt;
&lt;td&gt;Structured beginners&lt;/td&gt;
&lt;td&gt;~1 week&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Udemy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No (sales)&lt;/td&gt;
&lt;td&gt;Course cert&lt;/td&gt;
&lt;td&gt;Deep video curricula&lt;/td&gt;
&lt;td&gt;1–2 weeks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grow with Google&lt;/td&gt;
&lt;td&gt;Yes*&lt;/td&gt;
&lt;td&gt;Often&lt;/td&gt;
&lt;td&gt;Career / literacy&lt;/td&gt;
&lt;td&gt;Weeks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hugging Face Agents&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Free if completed&lt;/td&gt;
&lt;td&gt;Open-source agents&lt;/td&gt;
&lt;td&gt;~1 week&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Checked Aug 2026. Offers and cohorts change — re-verify EARLY20, bootcamp dates, and Academy tracks before you pay.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Start free where you already work: &lt;strong&gt;Cursor Workshops&lt;/strong&gt;, then &lt;strong&gt;Anthropic Skilljar&lt;/strong&gt; or &lt;strong&gt;OpenAI Academy&lt;/strong&gt;. Add &lt;strong&gt;one&lt;/strong&gt; structured path (&lt;a href="https://codecademy.referralrock.com/l/VIKTOR68/" rel="noopener noreferrer"&gt;Codecademy&lt;/a&gt;) if you need a syllabus. Buy &lt;a href="https://trk.udemy.com/c/7345738/3193860/39854" rel="noopener noreferrer"&gt;Udemy&lt;/a&gt; on a sale for Donner / Schwarzmüller depth — don't stack three bootcamps. Part 1's &lt;a href="https://vibecoderslife.com/post/free-ai-api-keys-vibe-coding-2026?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=free-vibe-coding-courses-2026" rel="noopener noreferrer"&gt;free API keys&lt;/a&gt; still matter: training without a key burns paid credits for no reason.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://vibecoderslife.com/post/free-vibe-coding-courses-2026?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=free-vibe-coding-courses-2026" rel="noopener noreferrer"&gt;Vibe Coder's Life&lt;/a&gt;. I send a short Tuesday/Friday digest on AI coding tools and shipping with agents — &lt;a href="https://vibecoderslife.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=free-vibe-coding-courses-2026#subscribe-email" rel="noopener noreferrer"&gt;subscribe&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: Codecademy and Udemy links are referral links (same as on our &lt;a href="https://vibecoderslife.com/tools?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=free-vibe-coding-courses-2026" rel="noopener noreferrer"&gt;Tools&lt;/a&gt; page). Cursor Workshops, Anthropic Skilljar, OpenAI Academy, and Grow with Google are plain product URLs. No paid placement by the course providers for this article. Drafting/editing used AI assistance; the course map is from my own shipping work.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>learning</category>
    </item>
    <item>
      <title>Free AI API keys for vibe coding (2026)</title>
      <dc:creator>Viktor Kondas</dc:creator>
      <pubDate>Wed, 30 Sep 2026 11:00:00 +0000</pubDate>
      <link>https://dev.to/kondasviktor/free-ai-api-keys-for-vibe-coding-2026-1fd6</link>
      <guid>https://dev.to/kondasviktor/free-ai-api-keys-for-vibe-coding-2026-1fd6</guid>
      <description>&lt;p&gt;Google AI Studio, Groq, Mistral, Qwen, DeepSeek, Cerebras, GitHub Models, OpenRouter &amp;amp; more — create keys step by step and plug them into Cursor or VS Code Cline.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Free vibe coding stack — **Part 1&lt;/em&gt;* (API keys).*&lt;/p&gt;

&lt;p&gt;I get this question constantly in vibe-coding chats and social groups: &lt;em&gt;"Where do I get free API keys so I can keep building without burning Cursor / Claude / GPT credits?"&lt;/em&gt; So I'm starting a series — &lt;strong&gt;Free vibe coding stack&lt;/strong&gt; — collecting the free (or freemium) cloud pieces you actually need. &lt;strong&gt;Part 1 is API keys.&lt;/strong&gt; Later parts cover free hosting, backends, databases, auth, email, and monitoring.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; Yes — you can build with free cloud LLM APIs in 2026 without installing models on your laptop. Start with &lt;strong&gt;Google AI Studio (Gemini)&lt;/strong&gt; + &lt;strong&gt;Groq&lt;/strong&gt; + &lt;strong&gt;OpenRouter&lt;/strong&gt; (&lt;code&gt;:free&lt;/code&gt; models). Paste keys into &lt;a href="https://cursor.com" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt; BYOK or VS Code + &lt;a href="https://marketplace.visualstudio.com/items?itemName=saoudrizwan.claude-dev" rel="noopener noreferrer"&gt;Cline&lt;/a&gt;, then keep shipping. Rate limits and free-tier policies change — always confirm live quotas in each console.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This guide is &lt;strong&gt;cloud API only&lt;/strong&gt;. No Ollama, no LM Studio, no "download 40GB of weights." If it needs a local GPU, it's out of scope for Part 1.&lt;/p&gt;

&lt;h2&gt;
  
  
  Provider map
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;th&gt;Card?&lt;/th&gt;
&lt;th&gt;Cursor path&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google AI Studio&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Default Gemini free tier&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Native Gemini key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Groq&lt;/td&gt;
&lt;td&gt;Fast open models&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;OpenAI-compatible URL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cerebras&lt;/td&gt;
&lt;td&gt;High-speed inference&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;OpenAI-compatible URL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mistral (Studio)&lt;/td&gt;
&lt;td&gt;EU / Codestral / open models&lt;/td&gt;
&lt;td&gt;No (Free mode)&lt;/td&gt;
&lt;td&gt;Cline / compatible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenRouter&lt;/td&gt;
&lt;td&gt;One key, many &lt;code&gt;:free&lt;/code&gt; models&lt;/td&gt;
&lt;td&gt;No*&lt;/td&gt;
&lt;td&gt;OpenAI-compatible URL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Models&lt;/td&gt;
&lt;td&gt;Free with GitHub account&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Cline / Azure-style&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen (Model Studio)&lt;/td&gt;
&lt;td&gt;Qwen family APIs&lt;/td&gt;
&lt;td&gt;Varies by region&lt;/td&gt;
&lt;td&gt;Cline / compatible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek&lt;/td&gt;
&lt;td&gt;Cheap API (not forever-free)&lt;/td&gt;
&lt;td&gt;Usually yes after promo&lt;/td&gt;
&lt;td&gt;OpenAI-compatible URL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare Workers AI&lt;/td&gt;
&lt;td&gt;Edge / Workers workflows&lt;/td&gt;
&lt;td&gt;No for free tier&lt;/td&gt;
&lt;td&gt;Cline / Workers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NVIDIA (build.nvidia.com)&lt;/td&gt;
&lt;td&gt;NIM / NGC catalog trials&lt;/td&gt;
&lt;td&gt;Account; check offer&lt;/td&gt;
&lt;td&gt;Cline / compatible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hugging Face&lt;/td&gt;
&lt;td&gt;Inference tokens / free endpoints&lt;/td&gt;
&lt;td&gt;No for token&lt;/td&gt;
&lt;td&gt;Cline / HF provider&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cohere&lt;/td&gt;
&lt;td&gt;Trial / eval keys&lt;/td&gt;
&lt;td&gt;Trial limits&lt;/td&gt;
&lt;td&gt;Cline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SambaNova Cloud&lt;/td&gt;
&lt;td&gt;Big open models, free eval tier&lt;/td&gt;
&lt;td&gt;No for Free tier&lt;/td&gt;
&lt;td&gt;OpenAI-compatible URL&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;*OpenRouter free routes work without a card; a one-time credit top-up raises free-model daily caps. Live limits live in each provider dashboard — don't treat blog tables as SLAs.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Google AI Studio (Gemini) — create an API key
&lt;/h2&gt;

&lt;p&gt;Still the best all-rounder free tier for most vibe coders: Gemini Flash / Pro text models, no billing account required to start. Free-tier prompts may be used to improve Google products — keep secrets and client data out.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;a href="https://aistudio.google.com/" rel="noopener noreferrer"&gt;aistudio.google.com&lt;/a&gt; and sign in with Google.&lt;/li&gt;
&lt;li&gt;Open the &lt;strong&gt;API keys&lt;/strong&gt; / Get API key flow (sidebar or project settings).&lt;/li&gt;
&lt;li&gt;Create or select a &lt;strong&gt;Google Cloud project&lt;/strong&gt; when prompted — the key is tied to that project's quota.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create API key&lt;/strong&gt;, copy it once, store it in a password manager or &lt;code&gt;.env&lt;/code&gt; (never commit it).&lt;/li&gt;
&lt;li&gt;Check &lt;strong&gt;rate limits&lt;/strong&gt; for that project inside AI Studio — Google no longer publishes a single public free-tier table; your project view is the source of truth.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Docs: &lt;a href="https://ai.google.dev/gemini-api/docs/api-key" rel="noopener noreferrer"&gt;Gemini API keys&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Groq — free fast inference key
&lt;/h2&gt;

&lt;p&gt;Groq is the "I need tokens now" provider: Llama and friends at interactive speed, OpenAI-compatible API, no card for the free tier.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://console.groq.com/" rel="noopener noreferrer"&gt;console.groq.com&lt;/a&gt; and create an account.&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;API Keys&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Create a key, name it (e.g. &lt;code&gt;cursor-dev&lt;/code&gt;), copy immediately.&lt;/li&gt;
&lt;li&gt;Base URL for OpenAI-compatible clients: &lt;code&gt;https://api.groq.com/openai/v1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Watch RPM / RPD in the console — free caps are generous per day but tight per minute.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  3. Cerebras Cloud — free speed alternative
&lt;/h2&gt;

&lt;p&gt;Another OpenAI-compatible speed lane. Free tier is self-serve: email signup, no waitlist, no card for free quotas (confirm live token/day caps in console).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sign up at &lt;a href="https://cloud.cerebras.ai/" rel="noopener noreferrer"&gt;cloud.cerebras.ai&lt;/a&gt; and verify email.&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;API Keys&lt;/strong&gt; in the left nav.&lt;/li&gt;
&lt;li&gt;Generate a key (&lt;code&gt;csk-…&lt;/code&gt;), copy once.&lt;/li&gt;
&lt;li&gt;Base URL: &lt;code&gt;https://api.cerebras.ai/v1&lt;/code&gt; — see &lt;a href="https://inference-docs.cerebras.ai/quickstart" rel="noopener noreferrer"&gt;Cerebras quickstart&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  4. Mistral Studio — free mode API key
&lt;/h2&gt;

&lt;p&gt;Mistral's developer console (Studio / La Plateforme) enables &lt;strong&gt;Free mode&lt;/strong&gt; with usage and rate limits — no credit card required for free mode. Useful for Codestral and Mistral open models.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create an account at &lt;a href="https://console.mistral.ai/" rel="noopener noreferrer"&gt;console.mistral.ai&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Confirm you're on Free mode / Experiment (billing may still need a plan selection even when free — check console).&lt;/li&gt;
&lt;li&gt;Sidebar → &lt;strong&gt;API Keys&lt;/strong&gt; → &lt;strong&gt;Create new key&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Set a name + optional expiration; copy the secret once.&lt;/li&gt;
&lt;li&gt;Test against &lt;code&gt;https://api.mistral.ai/v1&lt;/code&gt; — docs: &lt;a href="https://docs.mistral.ai/getting-started/quickstarts/studio/activate-and-generate-api-key" rel="noopener noreferrer"&gt;Activate Studio and generate an API key&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  5. OpenRouter — one key, many free models
&lt;/h2&gt;

&lt;p&gt;OpenRouter aggregates providers. Models tagged &lt;code&gt;:free&lt;/code&gt; are the free routes. Account-wide free caps are modest (e.g. low requests/day) unless you add a small credit balance — still the easiest way to try DeepSeek / Qwen / Llama free variants without juggling five consoles.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sign up at &lt;a href="https://openrouter.ai/" rel="noopener noreferrer"&gt;openrouter.ai&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;Keys&lt;/strong&gt; → create a key → copy.&lt;/li&gt;
&lt;li&gt;Filter the model catalog for &lt;strong&gt;Free&lt;/strong&gt; / &lt;code&gt;:free&lt;/code&gt; suffixes.&lt;/li&gt;
&lt;li&gt;Base URL: &lt;code&gt;https://openrouter.ai/api/v1&lt;/code&gt; (OpenAI-compatible).&lt;/li&gt;
&lt;li&gt;Optional: one-time credit top-up raises free-route daily limits — read the current free-model docs in-dashboard.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  6. GitHub Models — free with your GitHub account
&lt;/h2&gt;

&lt;p&gt;GitHub Models gives rate-limited access to a catalog of models for prototyping. Ideal if you already live in GitHub.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sign in at &lt;a href="https://github.com/marketplace/models" rel="noopener noreferrer"&gt;GitHub Marketplace → Models&lt;/a&gt; (or Models playground from docs).&lt;/li&gt;
&lt;li&gt;Accept terms / enable Models access for your account or org.&lt;/li&gt;
&lt;li&gt;Create a &lt;strong&gt;fine-grained PAT&lt;/strong&gt; or use the Models key flow documented in GitHub's Models docs (scopes change — follow the current "Get started with GitHub Models" guide).&lt;/li&gt;
&lt;li&gt;Copy the token; store it like any API key.&lt;/li&gt;
&lt;li&gt;Use their documented endpoint / Azure AI Inference-compatible clients — rate limits are free-tier and reset on a published schedule.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  7. Qwen — Alibaba Cloud Model Studio / DashScope
&lt;/h2&gt;

&lt;p&gt;Qwen APIs run through Alibaba Cloud's Model Studio / DashScope. Free or trial quotas depend on region and promotions — create an account in the console that matches your region.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;a href="https://modelstudio.console.alibabacloud.com/" rel="noopener noreferrer"&gt;Alibaba Cloud Model Studio&lt;/a&gt; (or DashScope console for your region).&lt;/li&gt;
&lt;li&gt;Complete account / real-name steps if required for your region.&lt;/li&gt;
&lt;li&gt;Create an &lt;strong&gt;API key&lt;/strong&gt; under API-KEY management.&lt;/li&gt;
&lt;li&gt;Copy the key; note the correct regional base URL from official docs.&lt;/li&gt;
&lt;li&gt;Check free quota / billing alerts before agent loops.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  8. DeepSeek — cheap API (honest free status)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; DeepSeek's &lt;em&gt;chat app&lt;/em&gt; is free; the &lt;strong&gt;API is pay-as-you-go&lt;/strong&gt;. New accounts sometimes get a small granted balance — not a permanent free tier. Still worth a key because pricing is usually very low, and OpenRouter often exposes DeepSeek-class models on &lt;code&gt;:free&lt;/code&gt; routes for zero-cost experiments.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Register at &lt;a href="https://platform.deepseek.com/" rel="noopener noreferrer"&gt;platform.deepseek.com&lt;/a&gt; (separate from chat.deepseek.com).&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;API Keys&lt;/strong&gt; → create key → copy &lt;code&gt;sk-…&lt;/code&gt; once.&lt;/li&gt;
&lt;li&gt;Check Billing for any granted balance; top up if you need sustained use.&lt;/li&gt;
&lt;li&gt;Base URL: &lt;code&gt;https://api.deepseek.com&lt;/code&gt; (OpenAI-compatible).&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  9. More free / freemium cloud keys worth having
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Cloudflare Workers AI
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create a free Cloudflare account at &lt;a href="https://dash.cloudflare.com/" rel="noopener noreferrer"&gt;dash.cloudflare.com&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Enable Workers / Workers AI; create an API token with Workers AI permissions.&lt;/li&gt;
&lt;li&gt;Use the Workers AI REST API or bindings — free daily neurons apply; check the current free allocation in docs.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  NVIDIA build.nvidia.com / NIM
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Sign in at &lt;a href="https://build.nvidia.com/" rel="noopener noreferrer"&gt;build.nvidia.com&lt;/a&gt; with an NVIDIA account.&lt;/li&gt;
&lt;li&gt;Pick a model → get API key / generate code snippet from the catalog.&lt;/li&gt;
&lt;li&gt;Trial / free credits vary — treat as evaluation keys, not unlimited production.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Hugging Face
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create an account at &lt;a href="https://huggingface.co/" rel="noopener noreferrer"&gt;huggingface.co&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Settings → &lt;strong&gt;Access Tokens&lt;/strong&gt; → create a token with inference permissions you need.&lt;/li&gt;
&lt;li&gt;Call Inference Providers / Inference API endpoints that still offer free or credit-based access — catalog and pricing move often.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Cohere Trial
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Sign up at &lt;a href="https://dashboard.cohere.com/" rel="noopener noreferrer"&gt;dashboard.cohere.com&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Create an API key under API Keys.&lt;/li&gt;
&lt;li&gt;Trial / evaluation limits apply — fine for prototyping, not high-RPM agents.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  SambaNova Cloud
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Sign up at &lt;a href="https://cloud.sambanova.ai/" rel="noopener noreferrer"&gt;cloud.sambanova.ai&lt;/a&gt; — Free tier without a payment method.&lt;/li&gt;
&lt;li&gt;Create an API key in the console.&lt;/li&gt;
&lt;li&gt;Base URL: &lt;code&gt;https://api.sambanova.ai/v1&lt;/code&gt; (OpenAI-compatible). Free tier is evaluation-scale (tight RPD) — see &lt;a href="https://docs.sambanova.ai/docs/en/models/rate-limits" rel="noopener noreferrer"&gt;SambaNova rate limits&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Where to use the keys: Cursor BYOK &amp;amp; VS Code Cline
&lt;/h2&gt;

&lt;p&gt;Keys are useless until your editor can call them. Two practical paths for vibe coding:&lt;/p&gt;

&lt;h3&gt;
  
  
  Cursor — Bring Your Own Key
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Install / open &lt;a href="https://cursor.com" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt; (homepage — same as our &lt;a href="https://vibecoderslife.com/tools?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=free-ai-api-keys-vibe-coding-2026" rel="noopener noreferrer"&gt;Tools&lt;/a&gt; page).&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Settings → Models&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native fields:&lt;/strong&gt; paste Google Gemini (and OpenAI / Anthropic if you have paid keys) into the matching API key slots and verify.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI-compatible providers&lt;/strong&gt; (Groq, Cerebras, OpenRouter, DeepSeek, SambaNova): use the OpenAI API key field + &lt;strong&gt;Override OpenAI Base URL&lt;/strong&gt; with that provider's &lt;code&gt;/v1&lt;/code&gt; endpoint, then enable the model IDs you need.&lt;/li&gt;
&lt;li&gt;Start or continue your project — Chat / Agent routes that honor BYOK will bill the provider (or free tier), not only Cursor's included pool. Tab completion and some Cursor features may still use Cursor's own models.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Cursor's officially documented BYOK providers are narrower than "every OpenAI-compatible host." OpenRouter and some custom endpoints work for many people via base URL override, but model names and tool-calling can break. If a model fails verify, fall back to &lt;strong&gt;Cline in VS Code&lt;/strong&gt; for that provider — don't fight the editor for hours.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://cursor.com" rel="noopener noreferrer"&gt;Get Cursor →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  VS Code + Cline
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Install VS Code (free).&lt;/li&gt;
&lt;li&gt;Install the &lt;a href="https://marketplace.visualstudio.com/items?itemName=saoudrizwan.claude-dev" rel="noopener noreferrer"&gt;Cline&lt;/a&gt; extension from the marketplace.&lt;/li&gt;
&lt;li&gt;Open Cline settings → choose provider (OpenRouter, OpenAI-compatible, Gemini, etc.).&lt;/li&gt;
&lt;li&gt;Paste the matching API key + base URL / model ID.&lt;/li&gt;
&lt;li&gt;Point Cline at your project folder and keep building — same keys, more flexible provider matrix than Cursor's native list.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Practical tips
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One key per tool&lt;/strong&gt; — Cursor key, Cline key, CI key. Easier to revoke when something leaks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never commit keys&lt;/strong&gt; — use &lt;code&gt;.env&lt;/code&gt; + &lt;code&gt;.gitignore&lt;/code&gt;; rotate if a key hits GitHub.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Failover&lt;/strong&gt; — when Groq 429s, hop to Cerebras or Gemini; when Gemini throttles, open OpenRouter &lt;code&gt;:free&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free-tier data use&lt;/strong&gt; — Google free tier may train/improve products; don't paste production secrets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quotas move&lt;/strong&gt; — screenshot your dashboard limits the day you set up; revisit monthly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's next in Free vibe coding stack
&lt;/h2&gt;

&lt;p&gt;API keys are the fuel. Coming parts in this series:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free hosting&lt;/strong&gt; — static + serverless options&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend &amp;amp; database&lt;/strong&gt; — free Postgres / KV / edge&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth&lt;/strong&gt; — free user login stacks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email &amp;amp; monitoring&lt;/strong&gt; — transactional mail + alerts without a credit card day-one&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Browse tools we actually use on &lt;a href="https://vibecoderslife.com/tools?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=free-ai-api-keys-vibe-coding-2026" rel="noopener noreferrer"&gt;vibecoderslife.com/tools&lt;/a&gt; (Cursor, Neon, Replit, v0, and more — affiliate links marked where active).&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do I need a credit card for free AI API keys?
&lt;/h3&gt;

&lt;p&gt;Often no — Google AI Studio, Groq, Cerebras, Mistral Free mode, SambaNova Free tier, GitHub Models, and Cloudflare's free Workers AI allotment typically start without a card. OpenRouter works without a card for &lt;code&gt;:free&lt;/code&gt; models; credits are optional. DeepSeek API expects a balance after any promo credit.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which free key should I add to Cursor first?
&lt;/h3&gt;

&lt;p&gt;Gemini (native) for everyday coding help, then Groq or OpenRouter via OpenAI-compatible base URL for speed / model shopping.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is local Ollama "free API"?
&lt;/h3&gt;

&lt;p&gt;It's free compute on &lt;em&gt;your&lt;/em&gt; machine — out of scope here. This series part is cloud keys only.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use these keys in production?
&lt;/h3&gt;

&lt;p&gt;Free tiers are for learning, demos, and light side projects. Production traffic needs paid tiers, ZDR options, and proper secrets management.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://vibecoderslife.com/post/free-ai-api-keys-vibe-coding-2026?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=free-ai-api-keys-vibe-coding-2026" rel="noopener noreferrer"&gt;Vibe Coder's Life&lt;/a&gt;. I send a short Tuesday/Friday digest on AI coding tools and shipping with agents — &lt;a href="https://vibecoderslife.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=free-ai-api-keys-vibe-coding-2026#subscribe-email" rel="noopener noreferrer"&gt;subscribe&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sources: &lt;a href="https://aistudio.google.com/" rel="noopener noreferrer"&gt;Google AI Studio&lt;/a&gt; / &lt;a href="https://ai.google.dev/gemini-api/docs/api-key" rel="noopener noreferrer"&gt;Gemini API key docs&lt;/a&gt;; &lt;a href="https://console.groq.com/" rel="noopener noreferrer"&gt;Groq Console&lt;/a&gt;; &lt;a href="https://cloud.cerebras.ai/" rel="noopener noreferrer"&gt;Cerebras Cloud&lt;/a&gt;; &lt;a href="https://console.mistral.ai/" rel="noopener noreferrer"&gt;Mistral Studio&lt;/a&gt;; &lt;a href="https://openrouter.ai/" rel="noopener noreferrer"&gt;OpenRouter&lt;/a&gt;; &lt;a href="https://github.com/marketplace/models" rel="noopener noreferrer"&gt;GitHub Models&lt;/a&gt;; &lt;a href="https://platform.deepseek.com/" rel="noopener noreferrer"&gt;DeepSeek Platform&lt;/a&gt;; &lt;a href="https://cloud.sambanova.ai/" rel="noopener noreferrer"&gt;SambaNova Cloud&lt;/a&gt;. Free-tier numbers change — verify in-product.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: Cursor links go to &lt;a href="https://cursor.com" rel="noopener noreferrer"&gt;cursor.com&lt;/a&gt; (their referral program ended). Other Tools affiliates (e.g. Neon, Replit) may appear in later series parts. No paid placement by the API providers listed. Drafting/editing used AI assistance; the provider walkthroughs are from my own shipping work.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Cursor Origin: Git hosting for the agent era (early beta guide)</title>
      <dc:creator>Viktor Kondas</dc:creator>
      <pubDate>Mon, 28 Sep 2026 10:06:28 +0000</pubDate>
      <link>https://dev.to/kondasviktor/cursor-origin-git-hosting-for-the-agent-era-early-beta-guide-2cgl</link>
      <guid>https://dev.to/kondasviktor/cursor-origin-git-hosting-for-the-agent-era-early-beta-guide-2cgl</guid>
      <description>&lt;p&gt;We teased Origin in the free-hosting newsletter. Here's the junior-friendly setup: claim a codebase, install the CLI, sync from GitHub, keep GitHub as source of truth — Origin as backup while the beta evolves.&lt;/p&gt;

&lt;p&gt;Back in the &lt;a href="https://vibecoderslife.com/post/free-hosting-vibe-coding-2026" rel="noopener noreferrer"&gt;free hosting for vibe coding (2026)&lt;/a&gt; newsletter — Part 3 of Free vibe coding stack — we said we were &lt;strong&gt;testing Cursor Origin&lt;/strong&gt; and that a write-up with what actually works (and what doesn't) would land here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here it is.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the early-beta guide I wish I'd had on day one: what Origin is, who can use it, how I set it up (GitHub stays primary), and a junior-friendly walkthrough from Cursor's docs. No invented demo numbers — just the paths that are documented today.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Start-here:&lt;/strong&gt; claim a codebase at &lt;a href="https://cursor.com/codebase" rel="noopener noreferrer"&gt;cursor.com/codebase&lt;/a&gt; → &lt;code&gt;curl -fsSL https://downloads.cursor.com/origin/install.sh | sh&lt;/code&gt; → &lt;code&gt;origin auth login&lt;/code&gt; → &lt;strong&gt;Sync from GitHub&lt;/strong&gt;. Keep GitHub as source of truth. Docs: &lt;a href="https://cursor.com/docs/origin" rel="noopener noreferrer"&gt;cursor.com/docs/origin&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What is Cursor Origin?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Origin&lt;/strong&gt; is Cursor's own &lt;strong&gt;git forge&lt;/strong&gt; — a place to store, share, browse, and review code, the same basic job GitHub / GitLab / Bitbucket do.&lt;/p&gt;

&lt;p&gt;Cursor's framing: a git forge &lt;strong&gt;for the agent era&lt;/strong&gt;. Agents already write a lot of the diffs; Origin is meant to sit next to Cursor's agents, automations, and PR review instead of living only on a separate host.&lt;/p&gt;

&lt;p&gt;In early beta you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create Origin repositories (including from Cursor agents)&lt;/li&gt;
&lt;li&gt;Clone, push, and pull with &lt;strong&gt;standard git&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mirror&lt;/strong&gt; a GitHub repository into Origin&lt;/li&gt;
&lt;li&gt;Open, review, and merge pull requests&lt;/li&gt;
&lt;li&gt;Browse and search code at &lt;a href="https://cursor.com/codebase" rel="noopener noreferrer"&gt;cursor.com/codebase&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Connect automations and cloud agents to Origin repos&lt;/li&gt;
&lt;li&gt;Install the &lt;strong&gt;Origin CLI&lt;/strong&gt; for terminal workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Primary docs: &lt;a href="https://cursor.com/docs/origin" rel="noopener noreferrer"&gt;cursor.com/docs/origin&lt;/a&gt;. Changelog kickoff: &lt;a href="https://cursor.com/changelog/origin-code-hosting" rel="noopener noreferrer"&gt;Origin Code Hosting&lt;/a&gt; (&lt;strong&gt;17 Aug 2026&lt;/strong&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Short aside: Graphite
&lt;/h3&gt;

&lt;p&gt;Cursor acquired &lt;strong&gt;Graphite&lt;/strong&gt; (deal announced &lt;strong&gt;19 Dec 2025&lt;/strong&gt;). The Graphite team builds Origin. Graphite's stacked-PR DNA is useful context — not a promise that every unshipped review feature is live. Cursor's own changelog says essentials first (repos, PRs, browse, GitHub sync) and &lt;strong&gt;agent-native features ship soon&lt;/strong&gt;. I'll stick to that wording.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who it's for (plans)
&lt;/h2&gt;

&lt;p&gt;Origin code storage is on &lt;strong&gt;Pro, Teams, and Enterprise&lt;/strong&gt;. It is &lt;strong&gt;not&lt;/strong&gt; on Free plans.&lt;/p&gt;

&lt;p&gt;Access &lt;strong&gt;opens in stages&lt;/strong&gt;, so you may not see Origin immediately after it becomes available for your plan. Enterprise admins can opt out. Teams on &lt;strong&gt;legacy privacy mode&lt;/strong&gt; need to switch to Privacy Mode first.&lt;/p&gt;

&lt;p&gt;If you don't see a Codebase / Origin entry yet: you're not doing it wrong — the rollout is staged.&lt;/p&gt;

&lt;h2&gt;
  
  
  My setup: GitHub primary, Origin as backup
&lt;/h2&gt;

&lt;p&gt;I've synced &lt;strong&gt;a few of my repos&lt;/strong&gt; to Origin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stance (locked):&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;GitHub stays my primary remote&lt;/strong&gt; — source of truth for day-to-day work, CI, Issues, and the ecosystem I already use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Origin is backup / mirror&lt;/strong&gt; while the feature evolves — browse, search, agent workflows, and a second copy if GitHub is having a bad day.&lt;/li&gt;
&lt;li&gt;I'm excited about what Origin brings next. I'm not ripping GitHub out.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That matches how synced repos work in the docs: &lt;strong&gt;GitHub = source of truth&lt;/strong&gt;, &lt;strong&gt;Origin = mirror&lt;/strong&gt;. Pushes to the Origin HTTPS remote go to GitHub; Origin updates after GitHub accepts the push. PRs sync both ways.&lt;/p&gt;

&lt;h2&gt;
  
  
  The landscape: GitHub, GitLab, Bitbucket, Origin
&lt;/h2&gt;

&lt;p&gt;Most vibe-coded projects already live on one of three hosts:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Host&lt;/th&gt;
&lt;th&gt;Typical role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Default for Cursor / Vercel / Actions ecosystems&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitLab&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Self-managed / DevOps-heavy teams&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bitbucket&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Atlassian-heavy shops&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Origin&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;New Cursor-native forge (early beta)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Together, &lt;strong&gt;GitHub + GitLab + Bitbucket&lt;/strong&gt; (and now Origin as the new option) cover roughly &lt;strong&gt;99%&lt;/strong&gt; of the codebases you'll touch. You don't need to "pick a religion." You need a primary remote you trust, plus optional mirrors for backup and agent workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enable Origin (claim a codebase)
&lt;/h2&gt;

&lt;p&gt;Before anyone on the team can use Origin, someone claims a &lt;strong&gt;codebase name&lt;/strong&gt; — the namespace your repos live under (&lt;code&gt;{owner}&lt;/code&gt; in &lt;code&gt;https://cursor.com/codebase/{owner}/{repo}&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;During the beta you can't change that namespace after it's claimed.&lt;/strong&gt; Choose carefully.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;a href="https://cursor.com/codebase" rel="noopener noreferrer"&gt;cursor.com/codebase&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Get Started&lt;/strong&gt; and follow the setup flow&lt;/li&gt;
&lt;li&gt;Admins can disable Origin later from the dashboard if needed&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After enablement, the codebase home lists repos. Icons show whether a repo is &lt;strong&gt;Origin-hosted&lt;/strong&gt; or &lt;strong&gt;synced from GitHub&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install the Origin CLI + auth
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Origin CLI&lt;/strong&gt; (&lt;code&gt;origin&lt;/code&gt;) is &lt;strong&gt;separate&lt;/strong&gt; from the Cursor Agent CLI (&lt;code&gt;agent&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;macOS, Linux, and Windows (WSL):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://downloads.cursor.com/origin/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The installer puts the binary at &lt;code&gt;~/.local/bin/origin&lt;/code&gt;. If your shell says &lt;code&gt;command not found: origin&lt;/code&gt;, add that directory to your &lt;code&gt;PATH&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;zsh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'export PATH="$HOME/.local/bin:$PATH"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.zshrc
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;bash:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'export PATH="$HOME/.local/bin:$PATH"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.bashrc
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify and sign in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;origin &lt;span class="nt"&gt;--version&lt;/span&gt;
origin auth login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Complete the browser flow with the Cursor account that has Origin access. Signing in also sets up the &lt;strong&gt;git credential helper&lt;/strong&gt;, so &lt;code&gt;git push&lt;/code&gt; / &lt;code&gt;git pull&lt;/code&gt; against Origin remotes work without extra token juggling.&lt;/p&gt;

&lt;p&gt;Useful CLI bits:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;origin repo create my-project
origin update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;origin repo create&lt;/code&gt; without a slash creates the repo in your account's namespace. Agents can drive the same commands.&lt;/p&gt;

&lt;p&gt;Docs: &lt;a href="https://cursor.com/docs/origin/cli" rel="noopener noreferrer"&gt;Install the Origin CLI&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sync from GitHub (recommended for existing work)
&lt;/h2&gt;

&lt;p&gt;If the code already lives on GitHub, &lt;strong&gt;don't&lt;/strong&gt; recreate it empty — &lt;strong&gt;mirror&lt;/strong&gt; it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Cursor account with Origin access (Pro / Teams / Enterprise)&lt;/li&gt;
&lt;li&gt;Cursor &lt;strong&gt;GitHub app&lt;/strong&gt; connected to the org or account that owns the repo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub admin&lt;/strong&gt; on the repository you want to sync&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Steps
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;a href="https://cursor.com/codebase" rel="noopener noreferrer"&gt;cursor.com/codebase&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Sync from GitHub&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Choose the GitHub organization and repository&lt;/li&gt;
&lt;li&gt;Confirm the sync&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When it finishes, open the Origin copy to browse files and history. Sync status lives under &lt;strong&gt;Settings → General&lt;/strong&gt;. Synced repos show Origin as the &lt;strong&gt;mirror&lt;/strong&gt; and GitHub as the &lt;strong&gt;source&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What syncs vs what doesn't
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Included&lt;/th&gt;
&lt;th&gt;Not included&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Git history, branches, and tags&lt;/td&gt;
&lt;td&gt;GitHub Issues&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code you can browse and search on Origin&lt;/td&gt;
&lt;td&gt;GitHub Actions workflows and secrets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub pull requests you can review in Cursor&lt;/td&gt;
&lt;td&gt;Branch protections (as GitHub settings)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ongoing updates so Origin stays current&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Workflow &lt;em&gt;files&lt;/em&gt; may still be in the git tree. They do &lt;strong&gt;not&lt;/strong&gt; run on Origin as GitHub Actions. Issues and CI configuration stay on GitHub.&lt;/p&gt;

&lt;p&gt;Docs: &lt;a href="https://cursor.com/docs/origin/mirror-github" rel="noopener noreferrer"&gt;Mirror a GitHub repository&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create an Origin-native repo (alternative)
&lt;/h2&gt;

&lt;p&gt;Use this when the project does &lt;strong&gt;not&lt;/strong&gt; already live on GitHub, or you explicitly want Origin as source of truth.&lt;/p&gt;

&lt;p&gt;From &lt;a href="https://cursor.com/codebase" rel="noopener noreferrer"&gt;cursor.com/codebase&lt;/a&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;New&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Enter a &lt;strong&gt;Repo Name&lt;/strong&gt; and choose &lt;strong&gt;Internal&lt;/strong&gt; or &lt;strong&gt;Private&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Create Repo&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Copy the clone URL from the green &lt;strong&gt;Code&lt;/strong&gt; button&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Push your first commit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://origin.cursor.com/&lt;span class="o"&gt;{&lt;/span&gt;owner&lt;span class="o"&gt;}&lt;/span&gt;/&lt;span class="o"&gt;{&lt;/span&gt;repo&lt;span class="o"&gt;}&lt;/span&gt;.git
&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;repo&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="c"&gt;# add your files&lt;/span&gt;
git add &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Initial commit"&lt;/span&gt;
git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or attach a remote to an existing local project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;your-project
git remote add origin https://origin.cursor.com/&lt;span class="o"&gt;{&lt;/span&gt;owner&lt;span class="o"&gt;}&lt;/span&gt;/&lt;span class="o"&gt;{&lt;/span&gt;repo&lt;span class="o"&gt;}&lt;/span&gt;.git
git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also ask a &lt;strong&gt;Cursor agent&lt;/strong&gt; to create an Origin repo as part of a task — it can install the CLI, sign in, create, set the remote, and push (same permissions as your account).&lt;/p&gt;

&lt;p&gt;Docs: &lt;a href="https://cursor.com/docs/origin/create-repository" rel="noopener noreferrer"&gt;Create an Origin repository&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Push, pull, clone, PRs, browse
&lt;/h2&gt;

&lt;p&gt;Clone URL form (HTTPS):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://origin.cursor.com/{owner}/{repo}.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://origin.cursor.com/acme/checkout.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On a &lt;strong&gt;mirrored&lt;/strong&gt; GitHub repo, that same URL is the remote you use — but &lt;strong&gt;GitHub stays source of truth&lt;/strong&gt;. &lt;code&gt;git push&lt;/code&gt; to this remote goes to GitHub; Origin mirrors after.&lt;/p&gt;

&lt;p&gt;Browse and search: &lt;a href="https://cursor.com/codebase" rel="noopener noreferrer"&gt;cursor.com/codebase&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Pull requests: every repo has PRs. On synced repos, PRs sync &lt;strong&gt;both ways&lt;/strong&gt; — comment in Cursor and it posts to GitHub; replies on GitHub show up in Cursor.&lt;/p&gt;

&lt;h3&gt;
  
  
  Optional: dual-push remote (advanced)
&lt;/h3&gt;

&lt;p&gt;While you evaluate, you can keep GitHub and Origin in parallel with push URLs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git remote set-url &lt;span class="nt"&gt;--add&lt;/span&gt; &lt;span class="nt"&gt;--push&lt;/span&gt; origin https://github.com/acme/checkout.git
git remote set-url &lt;span class="nt"&gt;--add&lt;/span&gt; &lt;span class="nt"&gt;--push&lt;/span&gt; origin https://origin.cursor.com/acme/checkout.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a full history copy from GitHub into Origin, prefer the &lt;strong&gt;Sync from GitHub&lt;/strong&gt; UI over hand-rolled remotes.&lt;/p&gt;

&lt;p&gt;Docs: &lt;a href="https://cursor.com/docs/origin/git" rel="noopener noreferrer"&gt;Clone, Push &amp;amp; Pull&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  When GitHub is unavailable (backup angle)
&lt;/h3&gt;

&lt;p&gt;On a mirrored repo, docs describe keeping work on the Origin copy with &lt;code&gt;origin/*&lt;/code&gt; branches and &lt;code&gt;origin push local&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git branch origin/my-state HEAD
origin push &lt;span class="nb"&gt;local&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That path writes Origin-only refs under &lt;code&gt;origin/…&lt;/code&gt;. It is &lt;strong&gt;not&lt;/strong&gt; a substitute for &lt;code&gt;git push origin&lt;/code&gt; when you want a normal GitHub PR. Reads of an already-synced repo may still work over the HTTPS clone URL; Git LFS batch does &lt;strong&gt;not&lt;/strong&gt; fail over. Use this carefully as a &lt;strong&gt;backup / keep-coding&lt;/strong&gt; path, not as your default daily workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does NOT sync (honest beta)
&lt;/h2&gt;

&lt;p&gt;Worth repeating so nobody gets surprised mid-migration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Issues&lt;/strong&gt; stay on GitHub&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Actions workflows and secrets&lt;/strong&gt; stay on GitHub (files in the repo ≠ runners on Origin)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Branch protections&lt;/strong&gt; as GitHub settings don't come over as a full Settings clone&lt;/li&gt;
&lt;li&gt;Branches named &lt;code&gt;origin&lt;/code&gt; or &lt;code&gt;origin/…&lt;/code&gt; on GitHub are &lt;strong&gt;skipped&lt;/strong&gt; on purpose (so they can't overwrite Origin-only workspace branches)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Apps already called out in the Origin Code Hosting changelog: &lt;strong&gt;Vercel&lt;/strong&gt;, &lt;strong&gt;Depot&lt;/strong&gt;, and &lt;strong&gt;Buildkite&lt;/strong&gt;, with more coming. Third-party explainers note Depot/Buildkite as Origin-hosted-oriented — always re-check &lt;a href="https://cursor.com/docs/origin/integrations" rel="noopener noreferrer"&gt;Cursor's Integrations docs&lt;/a&gt; for the current matrix.&lt;/p&gt;

&lt;p&gt;Detach anytime: &lt;strong&gt;Settings → General → Detach from GitHub&lt;/strong&gt; (Danger Zone). That stops sync and makes the Origin copy standalone; your GitHub repo is not deleted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cloud agents + Origin (light)
&lt;/h2&gt;

&lt;p&gt;Origin works with &lt;strong&gt;Cursor Automations&lt;/strong&gt; and &lt;strong&gt;cloud agents&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Point an automation at an Origin repo the same way you would at connected GitHub / GitLab&lt;/li&gt;
&lt;li&gt;Cloud agents can clone, branch, commit, and push&lt;/li&gt;
&lt;li&gt;On an &lt;strong&gt;Origin-hosted&lt;/strong&gt; repo they open &lt;strong&gt;Origin&lt;/strong&gt; PRs&lt;/li&gt;
&lt;li&gt;On a &lt;strong&gt;mirrored GitHub&lt;/strong&gt; repo they open &lt;strong&gt;GitHub&lt;/strong&gt; PRs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Local agents can create Origin repos via the CLI. Docs: &lt;a href="https://cursor.com/docs/origin/integrations" rel="noopener noreferrer"&gt;Origin integrations&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd do
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;If you're on Pro / Teams / Enterprise and Origin is visible, try it on a &lt;strong&gt;non-critical&lt;/strong&gt; repo first.&lt;/li&gt;
&lt;li&gt;Prefer &lt;strong&gt;Sync from GitHub&lt;/strong&gt; for existing work — keep GitHub as source of truth.&lt;/li&gt;
&lt;li&gt;Send feedback to &lt;strong&gt;&lt;a href="mailto:hi@cursor.com"&gt;hi@cursor.com&lt;/a&gt;&lt;/strong&gt; (Cursor asks for any and all feedback in the docs).&lt;/li&gt;
&lt;li&gt;Keep your primary forge (GitHub / GitLab / Bitbucket) until Origin's beta gaps (Issues, Actions, protections, ecosystem) match how you actually ship.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I'll keep watching what ships next — especially agent-native review — and update when the product moves. For now: &lt;strong&gt;mirror, don't migrate your whole life&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://vibecoderslife.com/post/cursor-origin-git-hosting-guide?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=cursor-origin-git-hosting-guide" rel="noopener noreferrer"&gt;Vibe Coder's Life&lt;/a&gt;. I send a short Tuesday/Friday digest on AI coding tools and shipping with agents — &lt;a href="https://vibecoderslife.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=cursor-origin-git-hosting-guide#subscribe-email" rel="noopener noreferrer"&gt;subscribe&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sources: &lt;a href="https://cursor.com/docs/origin" rel="noopener noreferrer"&gt;Origin overview&lt;/a&gt; · &lt;a href="https://cursor.com/docs/origin/cli" rel="noopener noreferrer"&gt;CLI&lt;/a&gt; · &lt;a href="https://cursor.com/docs/origin/git" rel="noopener noreferrer"&gt;Clone / push / pull&lt;/a&gt; · &lt;a href="https://cursor.com/docs/origin/mirror-github" rel="noopener noreferrer"&gt;Mirror GitHub&lt;/a&gt; · &lt;a href="https://cursor.com/docs/origin/create-repository" rel="noopener noreferrer"&gt;Create repository&lt;/a&gt; · &lt;a href="https://cursor.com/changelog/origin-code-hosting" rel="noopener noreferrer"&gt;Origin Code Hosting changelog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: No affiliate links for Cursor Origin in this post. Links go to Cursor docs, changelog, and codebase UI. Numbers and flows checked against Cursor docs at write time (&lt;/em&gt;&lt;em&gt;21 Sep 2026&lt;/em&gt;&lt;em&gt;); staged rollout means your UI may differ slightly. Drafting/editing used AI assistance; the setup stance and walkthrough are from my own shipping work.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>cursor</category>
    </item>
    <item>
      <title>How I moved away from Replit and cut my stack to ~$20/month</title>
      <dc:creator>Viktor Kondas</dc:creator>
      <pubDate>Wed, 23 Sep 2026 09:26:03 +0000</pubDate>
      <link>https://dev.to/kondasviktor/how-i-moved-away-from-replit-and-cut-my-stack-to-20month-4p63</link>
      <guid>https://dev.to/kondasviktor/how-i-moved-away-from-replit-and-cut-my-stack-to-20month-4p63</guid>
      <description>&lt;p&gt;Neon, Vercel, Clerk, and Cursor replaced Replit DB, hosting, and auth — without losing Stripe or Apify.&lt;/p&gt;

&lt;p&gt;I didn't leave Replit because it's a bad product. I left because &lt;strong&gt;the bill stopped making sense&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Replit Agent is brilliant when you want everything in one browser tab: code, database, auth, deploy, AI help. For a vibe coder shipping a side project, that convenience is real. But once I was iterating daily — asking questions, running agents, fixing one thing and breaking another — &lt;strong&gt;every task felt like it had a meter attached&lt;/strong&gt;. Usage stacked up fast. What started as "I'll pay for speed" turned into &lt;strong&gt;hundreds of dollars a month&lt;/strong&gt; for a project that wasn't even at revenue yet.&lt;/p&gt;

&lt;p&gt;So I migrated. Same app idea, same Stripe and &lt;a href="https://apify.com/?fpr=tmk8u8" rel="noopener noreferrer"&gt;Apify&lt;/a&gt; integrations, same domain — different foundation. Today my predictable software cost is basically &lt;strong&gt;$20/month for &lt;a href="https://cursor.com" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt;&lt;/strong&gt;. Everything else sits on generous free tiers until I actually scale.&lt;/p&gt;

&lt;p&gt;This site — &lt;a href="https://vibecoderslife.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=replit-to-cursor-migration" rel="noopener noreferrer"&gt;Vibe Coder's Life&lt;/a&gt; — runs on the same stack: static pages on &lt;a href="https://vercel.com" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;, subscribers and posts in &lt;a href="https://neon.com/signup?refcode=BNUJREU5" rel="noopener noreferrer"&gt;Neon&lt;/a&gt;. I practice what I preach.&lt;/p&gt;

&lt;p&gt;This is the path I took, step by step, for anyone who's vibe coding hard but doesn't want Replit to eat their budget.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I was paying for on Replit (and why it hurt)
&lt;/h2&gt;

&lt;p&gt;Replit bundles a lot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;In-browser IDE + Agent&lt;/strong&gt; — talk to AI, edit files, run the app&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosted Postgres&lt;/strong&gt; — database without leaving the platform&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth&lt;/strong&gt; — login/signup without wiring a third party&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploy&lt;/strong&gt; — your app live on a Replit or custom URL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's exactly why it's popular. You never context-switch.&lt;/p&gt;

&lt;p&gt;The pain point for me wasn't the subscription line item alone. It was &lt;strong&gt;Agent usage&lt;/strong&gt;: follow-up questions, refactors, "try again," debugging loops. Each session added up. I wasn't on an enterprise budget — I was building in public, learning, and experimenting. Paying Replit-scale money to ask "why is my waitlist form broken again" felt wrong.&lt;/p&gt;

&lt;p&gt;I wanted:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Predictable monthly cost&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The same AI-assisted workflow&lt;/strong&gt; (sidebar agent, not a scary blank terminal)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production-grade pieces&lt;/strong&gt; I could reuse on future projects&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills that transfer&lt;/strong&gt; — Git, env vars, deploy pipelines&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That pointed away from an all-in-one browser bill and toward &lt;strong&gt;best-in-class free tiers + one paid IDE&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The replacement stack (confirmed)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What Replit gave you&lt;/th&gt;
&lt;th&gt;What I use now&lt;/th&gt;
&lt;th&gt;Typical cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Replit DB (Postgres)&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://neon.com/signup?refcode=BNUJREU5" rel="noopener noreferrer"&gt;Neon&lt;/a&gt; serverless Postgres&lt;/td&gt;
&lt;td&gt;Free tier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Replit Auth&lt;/td&gt;
&lt;td&gt;&lt;a href="https://clerk.com" rel="noopener noreferrer"&gt;Clerk&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free up to ~10k MAU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Replit hosting&lt;/td&gt;
&lt;td&gt;&lt;a href="https://vercel.com" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free tier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Replit Agent / IDE&lt;/td&gt;
&lt;td&gt;&lt;a href="https://cursor.com" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;$20/mo&lt;/strong&gt; Pro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apify&lt;/td&gt;
&lt;td&gt;Same — API key in env&lt;/td&gt;
&lt;td&gt;Pay per use (unchanged)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stripe&lt;/td&gt;
&lt;td&gt;Same — API keys in env&lt;/td&gt;
&lt;td&gt;Free until you process payments&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source control&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://github.com" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; private repo&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Stripe and Apify didn't need a platform swap.&lt;/strong&gt; I copied the same keys into &lt;code&gt;.env&lt;/code&gt; locally and into Vercel's environment variables. The integration code barely cared where it ran.&lt;/p&gt;

&lt;p&gt;The real work was &lt;strong&gt;database&lt;/strong&gt;, &lt;strong&gt;auth&lt;/strong&gt;, and &lt;strong&gt;deployment&lt;/strong&gt; — the parts Replit had been hiding behind "it just works."&lt;/p&gt;

&lt;h2&gt;
  
  
  Before you touch anything: export your secrets
&lt;/h2&gt;

&lt;p&gt;Do this &lt;strong&gt;while Replit still works&lt;/strong&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open your Replit project → &lt;strong&gt;Secrets&lt;/strong&gt; (or Tools → Secrets).&lt;/li&gt;
&lt;li&gt;Write down &lt;strong&gt;every&lt;/strong&gt; key and value:

&lt;ul&gt;
&lt;li&gt;Stripe publishable + secret keys&lt;/li&gt;
&lt;li&gt;Apify API key&lt;/li&gt;
&lt;li&gt;Database URLs&lt;/li&gt;
&lt;li&gt;Auth secrets&lt;/li&gt;
&lt;li&gt;Anything custom (webhook secrets, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Store them in a &lt;strong&gt;private note&lt;/strong&gt; — not in chat, not in a screenshot on social.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then verify &lt;strong&gt;GitHub has your full codebase&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Main app entry (e.g. &lt;code&gt;index.js&lt;/code&gt;, &lt;code&gt;main.py&lt;/code&gt;, &lt;code&gt;app/&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;package.json&lt;/code&gt; or &lt;code&gt;requirements.txt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Frontend assets&lt;/li&gt;
&lt;li&gt;Config files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If something's missing, commit and push from Replit &lt;strong&gt;before&lt;/strong&gt; you migrate. Your GitHub repo becomes the source of truth.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 1: Get the project on your machine with Cursor
&lt;/h2&gt;

&lt;p&gt;You don't need to love the terminal on day one. Cursor feels close to Replit: files on the left, editor in the middle, &lt;strong&gt;Agent in the sidebar&lt;/strong&gt; (like Replit Agent).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install (all free except Cursor):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://cursor.com" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt; — download and install like any desktop app&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nodejs.org" rel="noopener noreferrer"&gt;Node.js LTS&lt;/a&gt; — if your stack is JavaScript&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; — free account for your repos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Clone your repo:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Cursor.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Cmd+Shift+P&lt;/code&gt; (Mac) or &lt;code&gt;Ctrl+Shift+P&lt;/code&gt; (Windows) → &lt;strong&gt;Git: Clone&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Paste your &lt;strong&gt;private GitHub repo URL&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Pick a folder (Documents, Desktop, whatever).&lt;/li&gt;
&lt;li&gt;Open the cloned folder when prompted.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You now have the same code Replit had — locally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create &lt;code&gt;.env&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Right-click the project root → New File → &lt;code&gt;.env&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;APIFY_API_KEY&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_key_here&lt;/span&gt;
&lt;span class="py"&gt;STRIPE_SECRET_KEY&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_key_here&lt;/span&gt;
&lt;span class="py"&gt;STRIPE_PUBLISHABLE_KEY&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_key_here&lt;/span&gt;
&lt;span class="c"&gt;# add everything else from Replit Secrets
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;code&gt;.gitignore&lt;/code&gt; and confirm &lt;strong&gt;&lt;code&gt;.env&lt;/code&gt; is listed&lt;/strong&gt;. Never push secrets to GitHub.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 2: Replace Replit DB with Neon Postgres
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Sign up at &lt;a href="https://neon.com/signup?refcode=BNUJREU5" rel="noopener noreferrer"&gt;neon.tech&lt;/a&gt; (GitHub login is fine).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New project&lt;/strong&gt; → pick a region close to your users.&lt;/li&gt;
&lt;li&gt;Copy the &lt;strong&gt;pooled connection string&lt;/strong&gt; — looks like:
&lt;code&gt;postgresql://user:pass@ep-xxx.region.aws.neon.tech/neondb?sslmode=require&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Add to &lt;code&gt;.env&lt;/code&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;DATABASE_URL&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;postgresql://...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Use Cursor Agent for the code changes.&lt;/strong&gt; Open Agent (&lt;code&gt;Cmd+L&lt;/code&gt; / sidebar) and paste something like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;I'm migrating off Replit. Replace Replit's database with Neon Postgres. DATABASE_URL is in .env. Find all DB usage, switch to standard Postgres (pg or your ORM), add a migration/schema file to recreate tables, and load env with dotenv. Walk me through each file you change.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Agent will propose diffs. Review them — you're learning &lt;strong&gt;what a database connection actually looks like&lt;/strong&gt;, which pays off on every future project.&lt;/p&gt;

&lt;p&gt;Run migrations against Neon (SQL file or ORM migrate command — Agent will tell you which).&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 3: Replace Replit Auth with Clerk
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Sign up at &lt;a href="https://clerk.com" rel="noopener noreferrer"&gt;clerk.com&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add application&lt;/strong&gt; → name it after your product.&lt;/li&gt;
&lt;li&gt;Enable &lt;strong&gt;Google&lt;/strong&gt; (or whatever you used on Replit).&lt;/li&gt;
&lt;li&gt;Copy &lt;strong&gt;Publishable&lt;/strong&gt; and &lt;strong&gt;Secret&lt;/strong&gt; keys into &lt;code&gt;.env&lt;/code&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;pk_...&lt;/span&gt;
&lt;span class="py"&gt;CLERK_SECRET_KEY&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;sk_...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Agent prompt:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Remove Replit Auth. Install Clerk, wrap the app with ClerkProvider, replace login/logout/session code with Clerk, keep protected routes protected. Show me every file you touch.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Test locally: sign up, sign in, hit a protected page, sign out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 4: Deploy on Vercel
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Push your migrated code to GitHub (Cursor's Source Control panel works if terminal feels heavy: stage → commit → push).&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://vercel.com" rel="noopener noreferrer"&gt;vercel.com&lt;/a&gt; → sign in with GitHub → &lt;strong&gt;Import&lt;/strong&gt; your repo.&lt;/li&gt;
&lt;li&gt;Before Deploy: &lt;strong&gt;Environment Variables&lt;/strong&gt; → add &lt;strong&gt;every&lt;/strong&gt; key from &lt;code&gt;.env&lt;/code&gt; (same names, same values).&lt;/li&gt;
&lt;li&gt;Deploy.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You get a URL like &lt;code&gt;your-app.vercel.app&lt;/code&gt;. Test auth, DB writes, Stripe test mode, Apify calls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ongoing deploys:&lt;/strong&gt; push to &lt;code&gt;main&lt;/code&gt; → Vercel rebuilds. No manual "publish" button like Replit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 5: Point your domain (then verify)
&lt;/h2&gt;

&lt;p&gt;In Vercel → Project → &lt;strong&gt;Settings → Domains&lt;/strong&gt; → add apex and &lt;code&gt;www&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Vercel shows DNS records. In GoDaddy (or wherever you bought the domain), update:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A record&lt;/strong&gt; &lt;code&gt;@&lt;/code&gt; → Vercel's IP (they show the current value)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CNAME&lt;/strong&gt; &lt;code&gt;www&lt;/code&gt; → &lt;code&gt;cname.vercel-dns.com&lt;/code&gt; (or what Vercel specifies)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wait 15–60 minutes. Then check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Site loads on your domain&lt;/li&gt;
&lt;li&gt;Login works (Clerk)&lt;/li&gt;
&lt;li&gt;Forms write to Neon&lt;/li&gt;
&lt;li&gt;Stripe / Apify still respond&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Only cancel Replit after this checklist passes.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What about running out of AI tokens on Cursor?
&lt;/h2&gt;

&lt;p&gt;Fair question — Replit burned me on &lt;strong&gt;unpredictable&lt;/strong&gt; Agent spend.&lt;/p&gt;

&lt;p&gt;Cursor Pro is &lt;strong&gt;$20/month with an included allowance&lt;/strong&gt;. If you hit the cap mid-month, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slow down until the cycle resets, or&lt;/li&gt;
&lt;li&gt;Attach your own API key for pay-as-you-go on specific tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's not the same as Replit silently stacking usage into a triple-digit invoice while you're "just fixing one more thing." You see the meter in Cursor's settings.&lt;/p&gt;

&lt;p&gt;For migration-sized work (DB swap, auth swap, deploy fixes), budget &lt;strong&gt;2–4 focused sessions&lt;/strong&gt; of a few hours — not one endless Agent binge.&lt;/p&gt;

&lt;h2&gt;
  
  
  Monthly cost after migration
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Service&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cursor&lt;/td&gt;
&lt;td&gt;$20/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Neon&lt;/td&gt;
&lt;td&gt;$0 (free tier)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clerk&lt;/td&gt;
&lt;td&gt;$0 (free tier)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;td&gt;$0 (free tier)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain&lt;/td&gt;
&lt;td&gt;~$1/mo amortized if paid yearly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apify&lt;/td&gt;
&lt;td&gt;Same as before (usage)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stripe&lt;/td&gt;
&lt;td&gt;$0 until you charge customers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total (predictable)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$20/mo + domain + Apify usage&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Compared to &lt;strong&gt;$100+/mo&lt;/strong&gt; on Replit for heavy Agent use, that's the win — not because free tiers are forever, but because &lt;strong&gt;you're not paying platform tax on every question&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The upskilling part (why this isn't just cheaper)
&lt;/h2&gt;

&lt;p&gt;Replit trains you to &lt;strong&gt;ship inside one box&lt;/strong&gt;. That's valid.&lt;/p&gt;

&lt;p&gt;This migration trains you to &lt;strong&gt;own the box&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Git&lt;/strong&gt; — history, rollback, "what changed?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;.env&lt;/code&gt;&lt;/strong&gt; — secrets discipline (critical before you handle real payments)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Postgres on Neon&lt;/strong&gt; — same DB you'll see at startups&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clerk&lt;/strong&gt; — auth you can drop into the next app in an hour&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vercel&lt;/strong&gt; — how most Next/Node side projects deploy in 2026&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You're still a vibe coder. You're just not renting the whole universe from one vendor at premium prices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Not ready to handle frontend, backend, auth, and Git separately?
&lt;/h2&gt;

&lt;p&gt;Managing each layer on its own isn't for everyone — especially while you're still learning to ship. If you'd rather skip the full migration stack for now, here are a few other alternatives to consider:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Stay on Replit
&lt;/h3&gt;

&lt;p&gt;If browser-only workflow fits your brain and you're okay watching usage, &lt;strong&gt;Replit is still a legitimate choice&lt;/strong&gt; — especially for learning and fast prototypes. Use Agent deliberately: batch tasks, write specs, avoid infinite "try again" loops.&lt;/p&gt;

&lt;p&gt;If you sign up or extend through a referral: &lt;a href="https://replit.com/refer/kondasviktor" rel="noopener noreferrer"&gt;Replit (referral link)&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Lovable — full-stack from prompts
&lt;/h3&gt;

&lt;p&gt;Closer to "describe the app, get UI + backend scaffolding" without managing Git on day one. Good when you want &lt;strong&gt;deployable web apps from natural language&lt;/strong&gt; and you're okay with their hosting model.&lt;/p&gt;

&lt;p&gt;Browse our tools page or start here: &lt;a href="https://lovable.dev" rel="noopener noreferrer"&gt;Lovable&lt;/a&gt; · &lt;a href="https://vibecoderslife.com/tools?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=replit-to-cursor-migration" rel="noopener noreferrer"&gt;All tools&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Bolt or Vercel v0 — speed-first builders
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://bolt.new" rel="noopener noreferrer"&gt;Bolt&lt;/a&gt;&lt;/strong&gt; — full-stack in the browser (StackBlitz WebContainers). Great MVPs, familiar if you liked Replit's "everything in one tab" energy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://v0.app" rel="noopener noreferrer"&gt;Vercel v0&lt;/a&gt;&lt;/strong&gt; — Vercel's UI generator; excellent when your stack is React/Next and you want polished components fast.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Neither replaces a full auth+DB migration story out of the box the way Neon + Clerk + Vercel does — but for &lt;strong&gt;new greenfield ideas&lt;/strong&gt;, they can keep you shipping without a $100 Replit month.&lt;/p&gt;

&lt;p&gt;Full list with referral links where we have them: &lt;strong&gt;&lt;a href="https://vibecoderslife.com/tools?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=replit-to-cursor-migration" rel="noopener noreferrer"&gt;vibecoderslife.com/tools&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;I left Replit because &lt;strong&gt;per-task Agent billing&lt;/strong&gt; stopped matching how I work: lots of small questions, lots of iteration, one side project.&lt;/p&gt;

&lt;p&gt;I kept &lt;strong&gt;Stripe and Apify&lt;/strong&gt; on the same API keys. I swapped &lt;strong&gt;DB → Neon&lt;/strong&gt;, &lt;strong&gt;auth → Clerk&lt;/strong&gt;, &lt;strong&gt;host → Vercel&lt;/strong&gt;, &lt;strong&gt;IDE → Cursor&lt;/strong&gt;. Predictable cost, transferable skills, same product on the same domain.&lt;/p&gt;

&lt;p&gt;If that sounds like your situation, start with &lt;strong&gt;secrets export + GitHub verify&lt;/strong&gt;, then one phase at a time. Don't migrate database and auth in the same hour — finish Neon, test, then Clerk, test, then Vercel.&lt;/p&gt;

&lt;p&gt;If frontend, backend, auth, and Git separately sound like a weekend you don't have, &lt;strong&gt;stay on Replit or try Lovable, Bolt, or Vercel v0&lt;/strong&gt; — ship first, optimize stack later.&lt;/p&gt;

&lt;p&gt;Either way, you're building. The goal isn't to win a toolchain debate; it's to &lt;strong&gt;stop funding idle Agent loops&lt;/strong&gt; and fund the product instead.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://vibecoderslife.com/post/replit-to-cursor-migration?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=replit-to-cursor-migration" rel="noopener noreferrer"&gt;Vibe Coder's Life&lt;/a&gt;. I send a short Tuesday/Friday digest on AI coding tools and shipping with agents — &lt;a href="https://vibecoderslife.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=replit-to-cursor-migration#subscribe-email" rel="noopener noreferrer"&gt;subscribe&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: Some links above are referral or partner links (marked on our &lt;a href="https://vibecoderslife.com/tools?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=replit-to-cursor-migration" rel="noopener noreferrer"&gt;Tools&lt;/a&gt; page). I only recommend services I use or would use for vibe coding workflows. Drafting/editing used AI assistance; the migration steps are from my own shipping work.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>cursor</category>
    </item>
    <item>
      <title>One month with Codex on ChatGPT Plus (and what I built for OpenAI Ads)</title>
      <dc:creator>Viktor Kondas</dc:creator>
      <pubDate>Mon, 21 Sep 2026 09:37:42 +0000</pubDate>
      <link>https://dev.to/kondasviktor/one-month-with-codex-on-chatgpt-plus-and-what-i-built-for-openai-ads-6op</link>
      <guid>https://dev.to/kondasviktor/one-month-with-codex-on-chatgpt-plus-and-what-i-built-for-openai-ads-6op</guid>
      <description>&lt;p&gt;OpenAI put a free month of Plus on my account. I used it for real Codex work — and shipped two tools for ChatGPT Ads while ads rolled into my region.&lt;/p&gt;

&lt;p&gt;OpenAI put a free month of ChatGPT Plus on my account. I used it while it was there — mostly inside Codex for real work, not demo scrolling.&lt;/p&gt;

&lt;p&gt;Some takes call Codex hype. After a month: &lt;strong&gt;it is not&lt;/strong&gt;. Usage windows and slower completion vs my Cursor + Grok loop annoyed me. Design and architecture? Genuinely strong. Clear answers. Good questions. That part is not marketing fluff.&lt;/p&gt;

&lt;p&gt;This is a warm field report: how I installed it, how I routed &lt;strong&gt;Sol / Terra / Luna&lt;/strong&gt;, what I built for &lt;strong&gt;OpenAI Ads&lt;/strong&gt; once ads showed up in Hungary and nearby markets, and where I still open &lt;a href="https://cursor.com" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt; first.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;One line to remember:&lt;/strong&gt; Sol thinks, Terra builds, Luna finishes — and don't ask Sol to rename a variable.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What Plus actually unlocks for Codex
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://chatgpt.com/pricing" rel="noopener noreferrer"&gt;ChatGPT Plus&lt;/a&gt; is &lt;strong&gt;$20/month&lt;/strong&gt;. For Codex specifically, the current public map includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Codex on the &lt;strong&gt;web&lt;/strong&gt;, &lt;strong&gt;CLI&lt;/strong&gt;, &lt;strong&gt;IDE extension&lt;/strong&gt;, and &lt;strong&gt;iOS&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;GPT-5.6&lt;/strong&gt; family in Codex: &lt;strong&gt;Sol&lt;/strong&gt;, &lt;strong&gt;Terra&lt;/strong&gt;, &lt;strong&gt;Luna&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Cloud-side extras (code review / Slack-style integrations where available)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Credits&lt;/strong&gt; to keep going after included limits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://developers.openai.com/codex/pricing" rel="noopener noreferrer"&gt;Pro&lt;/a&gt; starts higher (&lt;strong&gt;from $100/month&lt;/strong&gt;) with &lt;strong&gt;5× or 20×&lt;/strong&gt; more Codex usage than Plus. I tested on &lt;strong&gt;Plus&lt;/strong&gt;, not Pro.&lt;/p&gt;

&lt;p&gt;OpenAI's own framing (paraphrased from the &lt;a href="https://developers.openai.com/codex/pricing" rel="noopener noreferrer"&gt;pricing page&lt;/a&gt;):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Use it for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sol&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Hard reasoning, ambiguous problems, advanced coding, high-stakes decisions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Terra&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Everyday production work — the workhorse&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Luna&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fast, high-volume, focused coding and busywork&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Back when &lt;a href="https://vibecoderslife.com/post/gpt-5-6-sol-terra-luna" rel="noopener noreferrer"&gt;GPT-5.6 Sol / Terra / Luna&lt;/a&gt; first shipped, access was gated. That chapter is over for paid ChatGPT users — the interesting question now is &lt;strong&gt;how you spend the allowance&lt;/strong&gt;, not whether you can log in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every way to run Codex
&lt;/h2&gt;

&lt;p&gt;I lived in &lt;strong&gt;VS Code + Codex&lt;/strong&gt;. You do not have to — pick the surface that matches how you actually work.&lt;/p&gt;

&lt;h3&gt;
  
  
  IDE extension
&lt;/h3&gt;

&lt;p&gt;Official path: &lt;a href="https://developers.openai.com/codex/ide" rel="noopener noreferrer"&gt;Codex IDE docs&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install / enable Codex for your editor (marketplace download links are on that page — works with VS Code forks like Cursor and Windsurf).&lt;/li&gt;
&lt;li&gt;Open the Codex sidebar (or Command Palette → &lt;strong&gt;Codex: Open Codex Sidebar&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;Sign in with ChatGPT (or an API key).&lt;/li&gt;
&lt;li&gt;Keep quick edits local; hand longer jobs to cloud/web when the task outgrows the sidebar.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I chose &lt;strong&gt;VS Code + Codex&lt;/strong&gt; so Cursor stayed clean as my primary IDE. You can also run Codex &lt;em&gt;inside&lt;/em&gt; Cursor via the same extension family — I preferred separation.&lt;/p&gt;

&lt;h3&gt;
  
  
  CLI
&lt;/h3&gt;

&lt;p&gt;Official path: &lt;a href="https://developers.openai.com/codex/cli" rel="noopener noreferrer"&gt;Codex CLI&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://chatgpt.com/codex/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open a project folder and run &lt;code&gt;codex&lt;/code&gt;. First launch: &lt;strong&gt;Sign in with ChatGPT&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Handy in-session: &lt;code&gt;/model&lt;/code&gt;, &lt;code&gt;/status&lt;/code&gt;, &lt;code&gt;/permissions&lt;/code&gt;, &lt;code&gt;/init&lt;/code&gt; (scaffolds &lt;code&gt;AGENTS.md&lt;/code&gt;). Also documented: npm global &lt;code&gt;@openai/codex&lt;/code&gt;, Homebrew cask, Windows PowerShell installer — see the CLI page.&lt;/p&gt;

&lt;h3&gt;
  
  
  Desktop app
&lt;/h3&gt;

&lt;p&gt;Official path: &lt;a href="https://developers.openai.com/codex/app" rel="noopener noreferrer"&gt;desktop app&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install ChatGPT for Mac / Windows / Linux.&lt;/li&gt;
&lt;li&gt;Sign in.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Codex&lt;/strong&gt; (or ChatGPT, then Chat vs Work).&lt;/li&gt;
&lt;li&gt;Start &lt;strong&gt;New chat&lt;/strong&gt; and point it at a folder when you want local files in play.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is also the on-ramp for &lt;strong&gt;computer use&lt;/strong&gt;, scheduled tasks, and (where available) record-and-replay style workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mobile remote
&lt;/h3&gt;

&lt;p&gt;Official path: &lt;a href="https://learn.chatgpt.com/docs/remote" rel="noopener noreferrer"&gt;Remote / connections&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Codex does not magically run a full agent &lt;em&gt;only&lt;/em&gt; on your phone. The pattern is: &lt;strong&gt;desktop host stays online&lt;/strong&gt;, phone steers.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;On the Mac/PC: ChatGPT desktop → &lt;strong&gt;Settings → Connections → Control this Mac or PC&lt;/strong&gt; → set up.&lt;/li&gt;
&lt;li&gt;Pair with the phone (same ChatGPT account).&lt;/li&gt;
&lt;li&gt;From mobile &lt;strong&gt;Remote&lt;/strong&gt;, pick the computer, continue the task, approve commands, review diffs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Plus includes &lt;strong&gt;Codex on iOS&lt;/strong&gt; in the current pricing list — remote control is how you stay in the loop on the tram without abandoning a long run.&lt;/p&gt;

&lt;h3&gt;
  
  
  Web Codex
&lt;/h3&gt;

&lt;p&gt;Sign in at ChatGPT / Codex web for cloud tasks and review flows. Local vs cloud share the same agentic allowance; cloud chats often lean on &lt;strong&gt;Sol&lt;/strong&gt; and can burn more of the window than a tight local edit (&lt;a href="https://developers.openai.com/codex/pricing" rel="noopener noreferrer"&gt;pricing notes&lt;/a&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  My routing: Sol → Terra → Luna
&lt;/h2&gt;

&lt;p&gt;This was my default for the month:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;Model + effort&lt;/th&gt;
&lt;th&gt;What I asked for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Think / design&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Sol&lt;/strong&gt; medium–high&lt;/td&gt;
&lt;td&gt;Architecture, edge cases, "what would you change?"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plan / config / most code&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Terra&lt;/strong&gt; medium–high&lt;/td&gt;
&lt;td&gt;Specs → implementation, wiring, config&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Execute the leftovers&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Luna&lt;/strong&gt; high / max&lt;/td&gt;
&lt;td&gt;Tests, README, tidy fixes, "do the next step"&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A coaching loop that matched reality:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sol&lt;/strong&gt; once for a hard plan (no code yet).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terra&lt;/strong&gt; for most of the build.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Luna&lt;/strong&gt; for the laundry list.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sol&lt;/strong&gt; again for a milestone review.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is close to what I did — I just over-used Sol early because it &lt;em&gt;felt&lt;/em&gt; smarter. It is. It is also the fastest way to empty the tank.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chat vs Work
&lt;/h3&gt;

&lt;p&gt;I brainstormed and designed in &lt;strong&gt;Chat&lt;/strong&gt;. Some people swear by the &lt;strong&gt;Work&lt;/strong&gt; tab for merging spec files into one run. I did not love Work for my style — it felt like an extra surface when an extended Chat thread already had the context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dear readers: what are you doing?&lt;/strong&gt; Chat-native, Work-tab, pure CLI, desktop-only? Tell me. I will steal the good patterns.&lt;/p&gt;

&lt;h3&gt;
  
  
  Threads beat one giant chat
&lt;/h3&gt;

&lt;p&gt;Advice that matched my month: &lt;strong&gt;fresh threads for separate features&lt;/strong&gt;. A clean context outperforms a 120k-token archaeology dig. Spin parallel threads when the work does not collide; summarize back into one note when you need the map.&lt;/p&gt;

&lt;p&gt;Self-scoring loops (define success → agent scores itself → fix until it passes) are useful when you have a clear bar — tests green, computer-use walkthrough, or a reference set. Less magic when "good design" is subjective.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built for OpenAI Ads
&lt;/h2&gt;

&lt;p&gt;OpenAI Ads expanded across Europe (Hungary included in Ads Manager availability). I am not an agency. I still wanted something &lt;strong&gt;any merchant&lt;/strong&gt; could run before they paste a feed into Ads Manager.&lt;/p&gt;

&lt;p&gt;So I built two Actors (same craft path as &lt;a href="https://vibecoderslife.com/post/how-to-create-apify-actors?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=one-month-codex-chatgpt-plus-openai-ads" rel="noopener noreferrer"&gt;how I create Apify Actors people actually pay to use&lt;/a&gt;). Codex helped with design and iteration; the Store is how I shipped. This is proof of the month — not the whole story.&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenAI Ads Readiness Checker
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://apify.com/kondasviktor/openai-ads-readiness-checker" rel="noopener noreferrer"&gt;apify.com/kondasviktor/openai-ads-readiness-checker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Evidence scan: HTTPS, &lt;code&gt;robots.txt&lt;/code&gt; for &lt;strong&gt;OAI-AdsBot&lt;/strong&gt; (required) and optional &lt;strong&gt;OAI-SearchBot&lt;/strong&gt;, landing/image reachability, optional Merchant feed sample. Independent tool — not affiliated with OpenAI. A green report is &lt;strong&gt;not&lt;/strong&gt; an approval letter.&lt;/p&gt;

&lt;p&gt;PPE from the Store page: about &lt;strong&gt;$0.15&lt;/strong&gt; per domain readiness report (with cheap extra URL checks).&lt;/p&gt;

&lt;h3&gt;
  
  
  Google Merchant → OpenAI Ads CSV
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://apify.com/kondasviktor/openai-ads-feed-converter" rel="noopener noreferrer"&gt;apify.com/kondasviktor/openai-ads-feed-converter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Takes Google Merchant XML/CSV/TSV/JSON and emits OpenAI Ads canonical CSV with row validation. Verified product-feed markets in the current pin: &lt;strong&gt;US / CA / MX&lt;/strong&gt;. Other countries (including HU) are marked not-yet-verified — we do not fake readiness. v1 downloads CSV; you upload in Ads Manager yourself.&lt;/p&gt;

&lt;p&gt;Rough PPE: &lt;strong&gt;$0.50 / 1,000&lt;/strong&gt; processed product rows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want the shipping system for Actors?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Same packaging scars, prompts, and checklists I use before a Store submit — not another scraper tutorial.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://vibecoderslife.com/apify-actor-playbook-toolkit?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=one-month-codex-chatgpt-plus-openai-ads" rel="noopener noreferrer"&gt;The Vibe Coder's Playbook — €37 →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;New to Apify? &lt;a href="https://apify.com/?fpr=tmk8u8" rel="noopener noreferrer"&gt;Create an account&lt;/a&gt; (referral).&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest cliffs
&lt;/h2&gt;

&lt;p&gt;Read this before you cancel Cursor.&lt;/p&gt;

&lt;h3&gt;
  
  
  1) Five-hour windows still exist
&lt;/h3&gt;

&lt;p&gt;You will see takes that "everything is only token credits now." The practical Plus experience is still: &lt;strong&gt;five-hour window + weekly limits&lt;/strong&gt;, then &lt;strong&gt;credits&lt;/strong&gt; if you want to keep going (&lt;a href="https://developers.openai.com/codex/pricing" rel="noopener noreferrer"&gt;usage / pricing docs&lt;/a&gt;). Model choice and task size change how fast the window drains. Hitting a wall mid-prompt is the worst version of this — worse than Cursor's usual flow for me.&lt;/p&gt;

&lt;p&gt;Check &lt;code&gt;/status&lt;/code&gt; in the CLI. Check &lt;strong&gt;Settings → Usage&lt;/strong&gt; before a big job.&lt;/p&gt;

&lt;h3&gt;
  
  
  2) Slower than my Cursor + Grok 4.6 loop
&lt;/h3&gt;

&lt;p&gt;Same class of task often took longer in Codex. Longer runs → more tokens → less allowance left. Quality on design/architecture still impressed me. Throughput is where Cursor won.&lt;/p&gt;

&lt;h3&gt;
  
  
  3) Long unsupervised runs burn the window
&lt;/h3&gt;

&lt;p&gt;Long unsupervised Terra runs burned my Plus window fast while the job was still only partly done. Great intentions. Bad burn rate for "just execute the checklist."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Takeaway:&lt;/strong&gt; Codex is excellent as an architect and senior pair. Treat long unsupervised execution like a budget decision, not a default.&lt;/p&gt;

&lt;h3&gt;
  
  
  4) Stretch the allowance
&lt;/h3&gt;

&lt;p&gt;Official tips that matched reality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smaller, precise prompts; less junk context&lt;/li&gt;
&lt;li&gt;Lean &lt;code&gt;AGENTS.md&lt;/code&gt;; fewer MCP servers when idle&lt;/li&gt;
&lt;li&gt;Terra/Luna for routine work&lt;/li&gt;
&lt;li&gt;New thread &amp;gt; one endless chat&lt;/li&gt;
&lt;li&gt;Credits or a reset if you are eligible and mid-deadline&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  So… is Codex hype?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;No.&lt;/strong&gt; Sol's reasoning is the real deal for vibe coders who can write a clear brief. Terra is the daily driver. Luna is how you stop lighting money on fire.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Also no:&lt;/strong&gt; it does not replace my primary IDE. &lt;strong&gt;Cursor&lt;/strong&gt; is still home. Codex is the Plus-powered second brain I open when I want a strong design pass, a CLI agent, or mobile remote on a long job — and when I am shipping something like OpenAI Ads tooling.&lt;/p&gt;

&lt;p&gt;If your primary is already Claude Code, Muse, or pure Cursor agents, that is fine. Different harnesses, different walls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do you prefer as your primary IDE right now?&lt;/strong&gt; Reply and tell me — Cursor, Codex, Claude Code, or something weird. I will collect the patterns.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick start checklist
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Decide surface: IDE sidebar, CLI, or desktop.&lt;/li&gt;
&lt;li&gt;Sign in with Plus (or Pro).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/init&lt;/code&gt; or write a short &lt;code&gt;AGENTS.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Sol once for the hard plan → Terra for the build → Luna for cleanup → Sol for review.&lt;/li&gt;
&lt;li&gt;Watch &lt;strong&gt;Usage&lt;/strong&gt; before unsupervised marathon jobs.&lt;/li&gt;
&lt;li&gt;If you are staring at ChatGPT Ads: run the &lt;a href="https://apify.com/kondasviktor/openai-ads-readiness-checker" rel="noopener noreferrer"&gt;readiness checker&lt;/a&gt;, then the &lt;a href="https://apify.com/kondasviktor/openai-ads-feed-converter" rel="noopener noreferrer"&gt;feed converter&lt;/a&gt; if you already have a Merchant feed.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://vibecoderslife.com/post/one-month-codex-chatgpt-plus-openai-ads?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=one-month-codex-chatgpt-plus-openai-ads" rel="noopener noreferrer"&gt;Vibe Coder's Life&lt;/a&gt;. I send a short Tuesday/Friday digest on AI coding tools and shipping with agents — &lt;a href="https://vibecoderslife.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=one-month-codex-chatgpt-plus-openai-ads#subscribe-email" rel="noopener noreferrer"&gt;subscribe&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sources: &lt;a href="https://developers.openai.com/codex/pricing" rel="noopener noreferrer"&gt;Codex pricing &amp;amp; usage&lt;/a&gt;; &lt;a href="https://developers.openai.com/codex/cli" rel="noopener noreferrer"&gt;Codex CLI&lt;/a&gt; · &lt;a href="https://developers.openai.com/codex/ide" rel="noopener noreferrer"&gt;IDE&lt;/a&gt; · &lt;a href="https://developers.openai.com/codex/app" rel="noopener noreferrer"&gt;desktop app&lt;/a&gt;; &lt;a href="https://help.openai.com/en/articles/11369540" rel="noopener noreferrer"&gt;Using Codex with your ChatGPT plan&lt;/a&gt;; &lt;a href="https://help.openai.com/en/articles/12642688-using-credits-for-flexible-usage-in-chatgpt-personal-plans" rel="noopener noreferrer"&gt;Credits for Plus/Pro&lt;/a&gt;; &lt;a href="https://openai.com/index/chatgpt-ads-expands-across-europe/" rel="noopener noreferrer"&gt;ChatGPT Ads expands across Europe&lt;/a&gt;; Actors: &lt;a href="https://apify.com/kondasviktor/openai-ads-readiness-checker" rel="noopener noreferrer"&gt;readiness checker&lt;/a&gt; · &lt;a href="https://apify.com/kondasviktor/openai-ads-feed-converter" rel="noopener noreferrer"&gt;feed converter&lt;/a&gt;; &lt;a href="https://vibecoderslife.com/apify-actor-playbook-toolkit?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=one-month-codex-chatgpt-plus-openai-ads" rel="noopener noreferrer"&gt;The Vibe Coder's Playbook&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: Apify signup is a referral link. OpenAI links are plain product URLs. Actor Store links are my Actors. The Playbook is a soft product mention — no paid placement by OpenAI or Apify for this article. Drafting/editing used AI assistance; the field report and Actors are from my own shipping work.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>chatgpt</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>My first ChatGPT / Codex plugin: saymd</title>
      <dc:creator>Viktor Kondas</dc:creator>
      <pubDate>Tue, 15 Sep 2026 16:32:58 +0000</pubDate>
      <link>https://dev.to/kondasviktor/my-first-chatgpt-codex-plugin-saymd-1p9d</link>
      <guid>https://dev.to/kondasviktor/my-first-chatgpt-codex-plugin-saymd-1p9d</guid>
      <description>&lt;p&gt;Speak once, get a Markdown prompt any agent can &lt;code&gt;@&lt;/code&gt;. Free MIT CLI — now live in the ChatGPT / Codex Plugins directory.&lt;/p&gt;

&lt;p&gt;Back on &lt;strong&gt;4 Sep&lt;/strong&gt;, in the &lt;a href="https://vibecoderslife.com/post/ai-image-prompt-commands-chatgpt-gemini-grok" rel="noopener noreferrer"&gt;AI image prompt commands&lt;/a&gt; newsletter, I teased a VCL project built on &lt;a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-5-transcribe/" rel="noopener noreferrer"&gt;Gemini 3.5 Transcribe&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here I am.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is also &lt;strong&gt;my first product live as a ChatGPT / Codex plugin&lt;/strong&gt;. Among roughly a thousand third-party plugins, one of them is mine — and I'm excited for you to try it.&lt;/p&gt;

&lt;p&gt;Meet &lt;strong&gt;&lt;a href="https://saymd.app/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=saymd-voice-to-markdown-prompts" rel="noopener noreferrer"&gt;saymd&lt;/a&gt;&lt;/strong&gt; — a Free MIT CLI that turns microphone speech (or an audio file) into a &lt;strong&gt;structured Markdown prompt&lt;/strong&gt; any agent can &lt;code&gt;@&lt;/code&gt;. Not a raw dump into chat. A usable spec: &lt;strong&gt;Objective / Context / Instructions / Constraints&lt;/strong&gt; (or a &lt;code&gt;feature&lt;/code&gt; / &lt;code&gt;bug&lt;/code&gt; / &lt;code&gt;plan&lt;/code&gt; template).&lt;/p&gt;

&lt;p&gt;You bring your own speech-to-text key (&lt;strong&gt;BYOK&lt;/strong&gt;). saymd does not host your audio or sell transcription minutes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start-here:&lt;/strong&gt; &lt;code&gt;npx saymd setup&lt;/code&gt; → &lt;code&gt;npx saymd doctor&lt;/code&gt; → &lt;code&gt;npx saymd&lt;/code&gt;. Then &lt;code&gt;@&lt;/code&gt; &lt;code&gt;.ai/prompt.md&lt;/code&gt; in your agent. Site: &lt;a href="https://saymd.app/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=saymd-voice-to-markdown-prompts" rel="noopener noreferrer"&gt;saymd.app&lt;/a&gt; · Free MIT: &lt;a href="https://github.com/kondasviktor/saymd" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  I still prefer the CLI
&lt;/h2&gt;

&lt;p&gt;I spent years in &lt;strong&gt;VS Code&lt;/strong&gt;. Even with Cursor, Codex, Claude Code, and Antigravity desktop apps on the machine, I still prefer the &lt;strong&gt;CLI&lt;/strong&gt; when I can. Less UI chrome. Faster loops. Feels like home.&lt;/p&gt;

&lt;p&gt;The bottleneck is not the agent. It's &lt;strong&gt;typing&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Dictation helps. Tools like &lt;a href="https://wisprflow.ai/r?VIKTOR944" rel="noopener noreferrer"&gt;Wispr Flow&lt;/a&gt; and native IDE dictate are great for getting words out of your head. The problem: they usually dump &lt;strong&gt;messy unstructured text&lt;/strong&gt; straight into the chat box. Agents then guess the objective, invent constraints, and miss the acceptance criteria you meant to say.&lt;/p&gt;

&lt;p&gt;I wanted the opposite: &lt;strong&gt;speak once → get a prompt file I can &lt;code&gt;@&lt;/code&gt;&lt;/strong&gt; in Cursor, Codex, Claude Code, Gemini CLI, Grok Build, Copilot, OpenCode — whatever I'm using that day.&lt;/p&gt;

&lt;p&gt;That's saymd.&lt;/p&gt;

&lt;h2&gt;
  
  
  What saymd does
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;You speak (mic) or pass &lt;code&gt;--file idea.m4a&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Your chosen STT provider transcribes (and, for Gemini / OpenAI, helps structure).&lt;/li&gt;
&lt;li&gt;saymd writes &lt;strong&gt;&lt;code&gt;.ai/prompt.md&lt;/code&gt;&lt;/strong&gt; — structured Markdown, not a transcript paste.&lt;/li&gt;
&lt;li&gt;You &lt;code&gt;@&lt;/code&gt; that file in your agent and let it execute.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Default headings (no template): &lt;strong&gt;Objective · Context · Instructions · Constraints&lt;/strong&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;code&gt;--template&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;Shape&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;feature&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Objective, Context, Instructions, Constraints, Acceptance criteria&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bug&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Objective, Context, Steps to reproduce, Expected / Actual&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;plan&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Objective, Context, numbered Steps, Constraints, Open questions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr88acc4pupmpr93h9bco.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr88acc4pupmpr93h9bco.gif" alt="saymd demo: voice or file to structured Markdown prompt" width="800" height="578"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Demo from the GitHub repo — mic or &lt;code&gt;--file&lt;/code&gt; → structured &lt;code&gt;.ai/prompt.md&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to run (Free)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx saymd setup
npx saymd doctor
npx saymd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or from an existing clip:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx saymd &lt;span class="nt"&gt;--file&lt;/span&gt; idea.m4a &lt;span class="nt"&gt;--template&lt;/span&gt; feature
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Useful flags:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;-o .ai/prompt.md&lt;/code&gt; — output path&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--template feature|bug|plan&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--seconds 30&lt;/code&gt; — shorter first test (Free max is ~60s)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--lang hu&lt;/code&gt; — language hint if auto-detect misses&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--provider gemini|openai|deepgram|elevenlabs&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;doctor&lt;/code&gt; checks ffmpeg, mic, provider, and API key before your first real take. Press &lt;strong&gt;Enter&lt;/strong&gt; to stop recording early — you don't have to wait for the max.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt; Node 20+, ffmpeg, macOS or Linux (Windows: WSL or &lt;code&gt;--file&lt;/code&gt; only).&lt;/p&gt;

&lt;h2&gt;
  
  
  Providers (BYOK — Free)
&lt;/h2&gt;

&lt;p&gt;All four are available on Free. You create the key with the provider, paste it in &lt;code&gt;saymd setup&lt;/code&gt;, and pay that provider directly.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Exact model&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gemini (recommended)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gemini-3.5-transcribe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Speech-to-text &lt;strong&gt;and&lt;/strong&gt; Markdown structuring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-4o-transcribe&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Speech-to-text &lt;strong&gt;and&lt;/strong&gt; Markdown structuring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deepgram&lt;/td&gt;
&lt;td&gt;&lt;code&gt;nova-3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;STT only — also needs Gemini or OpenAI to structure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ElevenLabs&lt;/td&gt;
&lt;td&gt;&lt;code&gt;scribe_v2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;STT only — same as Deepgram&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Keys live in &lt;code&gt;~/.saymd/config.json&lt;/code&gt; (mode 0600) or env vars (&lt;code&gt;GEMINI_API_KEY&lt;/code&gt;, &lt;code&gt;OPENAI_API_KEY&lt;/code&gt;, …). A typical ~60s dictation is usually well under &lt;strong&gt;$0.01&lt;/strong&gt; on your own key (provider pricing applies).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Privacy:&lt;/strong&gt; API keys stay on your machine. Audio goes &lt;strong&gt;only&lt;/strong&gt; to the STT provider you chose, with your key. saymd.app does &lt;strong&gt;not&lt;/strong&gt; receive your audio, transcripts, or prompt files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Languages (Free):&lt;/strong&gt; 85+ input languages with automatic detection. On Free, every section of the Markdown is written in the &lt;strong&gt;same language you spoke&lt;/strong&gt;. Pro unlocks cross-language &lt;code&gt;--out&lt;/code&gt; (e.g. speak Hungarian → English Markdown).&lt;/p&gt;

&lt;h2&gt;
  
  
  When a 60-second take isn't enough
&lt;/h2&gt;

&lt;p&gt;The Free MIT CLI is the whole product for short recordings. Stay there if that's all you need.&lt;/p&gt;

&lt;p&gt;If you start using saymd every day — continue a spec after the first take, ask it to flag missing requirements, speak one language and write the Markdown in another, or record past a minute — that's &lt;strong&gt;Pro&lt;/strong&gt;. It's a separate package (&lt;code&gt;@saymd/pro&lt;/code&gt;), not a hidden switch in the MIT repo. I sell the year first: &lt;strong&gt;€39/year&lt;/strong&gt; at &lt;a href="https://saymd.app/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=saymd-voice-to-markdown-prompts" rel="noopener noreferrer"&gt;saymd.app&lt;/a&gt;. A monthly option exists if you only want to try; yearly is the one I'd pick.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;saymd activate &amp;lt;activation-code&amp;gt;
saymd &lt;span class="nt"&gt;--continue&lt;/span&gt; .ai/prompt.md
saymd &lt;span class="nt"&gt;--review&lt;/span&gt; .ai/prompt.md
saymd &lt;span class="nt"&gt;--out&lt;/span&gt; en
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pro adds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;--continue&lt;/code&gt; — add more speech; merge into the same spec&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--review&lt;/code&gt; — missing requirements, constraints, acceptance criteria&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--out&lt;/code&gt; — speak one language, write the spec in another&lt;/li&gt;
&lt;li&gt;Project vocab via &lt;code&gt;.saymd/vocab.txt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Longer recordings (default &lt;strong&gt;120s&lt;/strong&gt;, max &lt;strong&gt;10 minutes&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where saymd runs today
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Surface&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ChatGPT / Codex&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Live in the &lt;a href="https://chatgpt.com/plugins/plugins_6aa7de5bf4f48191b8eb88fcf33e2f24" rel="noopener noreferrer"&gt;OpenAI Plugins Directory&lt;/a&gt; — among ~1000 ChatGPT plugins, one of them is mine, and I'm genuinely excited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gemini CLI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gemini extensions install https://github.com/kondasviktor/saymd&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Grok Build&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Available via DIY marketplace add from the README; official catalog PR pending&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Claude Code + Cursor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Currently under review for publishing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you use ChatGPT, search &lt;strong&gt;saymd&lt;/strong&gt; under Plugins in your account. Screenshots below of the live listing — Voice to Markdown prompts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F139nbyxgx1yqzu8mxad3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F139nbyxgx1yqzu8mxad3.jpg" alt="saymd in the ChatGPT Plugins list — Voice to Markdown prompts" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;saymd live in the ChatGPT / Codex Plugins directory.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc4w10tijfk6jhhqk0wsn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc4w10tijfk6jhhqk0wsn.jpg" alt="saymd ChatGPT plugin install screen with starter prompts and Install plugin button" width="537" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Install screen — starter &lt;code&gt;@saymd&lt;/code&gt; prompts and the Install plugin button.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Slash commands in the plugin package include &lt;code&gt;/saymd&lt;/code&gt;, &lt;code&gt;/saymd-feature&lt;/code&gt;, &lt;code&gt;/saymd-bug&lt;/code&gt;, &lt;code&gt;/saymd-plan&lt;/code&gt;, plus Pro-oriented &lt;code&gt;/saymd-continue&lt;/code&gt;, &lt;code&gt;/saymd-review&lt;/code&gt;, &lt;code&gt;/saymd-out&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Native loop still works everywhere: run the local CLI → &lt;code&gt;@&lt;/code&gt; &lt;code&gt;.ai/prompt.md&lt;/code&gt; → offer to implement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Outgrowing the 60-second Free cap?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Keep the MIT CLI. Add Pro when continue / review / cross-language / longer takes start to matter — &lt;strong&gt;€39/year&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://saymd.app/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=saymd-voice-to-markdown-prompts" rel="noopener noreferrer"&gt;Open saymd.app →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Your turn
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Try Free:&lt;/strong&gt; &lt;code&gt;npx saymd setup &amp;amp;&amp;amp; npx saymd doctor&lt;/code&gt;, then one short recording.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Star the repo:&lt;/strong&gt; &lt;a href="https://github.com/kondasviktor/saymd" rel="noopener noreferrer"&gt;github.com/kondasviktor/saymd&lt;/a&gt; — stars help other vibe coders find a Free BYOK voice-to-Markdown CLI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Share&lt;/strong&gt; with a friend who dictation-dumps into chat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pro&lt;/strong&gt; when continue / review / longer takes start to matter — &lt;strong&gt;€39/year&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Feedback welcome — reply to the newsletter or &lt;a href="https://github.com/kondasviktor/saymd/issues" rel="noopener noreferrer"&gt;open an issue&lt;/a&gt;. Optional tip jar: &lt;a href="https://buymeacoffee.com/kondasviktor" rel="noopener noreferrer"&gt;Buy Me a Coffee&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you only remember one line: &lt;strong&gt;agents execute; saymd delivers the usable spec.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick start checklist
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;npx saymd setup&lt;/code&gt; — pick Gemini (&lt;code&gt;gemini-3.5-transcribe&lt;/code&gt;) unless you already live on OpenAI keys.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;npx saymd doctor&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;npx saymd --seconds 30 --template feature&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@&lt;/code&gt; &lt;code&gt;.ai/prompt.md&lt;/code&gt; in your agent&lt;/li&gt;
&lt;li&gt;Optional: install the ChatGPT/Codex plugin or Gemini CLI extension&lt;/li&gt;
&lt;li&gt;Optional: Pro at &lt;a href="https://saymd.app/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=saymd-voice-to-markdown-prompts" rel="noopener noreferrer"&gt;saymd.app&lt;/a&gt; → &lt;code&gt;saymd activate &amp;lt;code&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://vibecoderslife.com/post/saymd-voice-to-markdown-prompts?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=saymd-voice-to-markdown-prompts" rel="noopener noreferrer"&gt;Vibe Coder's Life&lt;/a&gt;. I send a short Tuesday/Friday digest on AI coding tools and shipping with agents — &lt;a href="https://vibecoderslife.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=saymd-voice-to-markdown-prompts#subscribe-email" rel="noopener noreferrer"&gt;subscribe&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sources: &lt;a href="https://saymd.app/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=saymd-voice-to-markdown-prompts" rel="noopener noreferrer"&gt;saymd.app&lt;/a&gt; · &lt;a href="https://github.com/kondasviktor/saymd" rel="noopener noreferrer"&gt;GitHub (MIT Free CLI)&lt;/a&gt; · &lt;a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-5-transcribe/" rel="noopener noreferrer"&gt;Gemini 3.5 Transcribe&lt;/a&gt; · &lt;a href="https://chatgpt.com/plugins/plugins_6aa7de5bf4f48191b8eb88fcf33e2f24" rel="noopener noreferrer"&gt;ChatGPT / Codex plugin&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: &lt;a href="https://wisprflow.ai/r?VIKTOR944" rel="noopener noreferrer"&gt;Wispr Flow&lt;/a&gt; link is a referral. saymd is my product (Free MIT CLI + optional Pro). Buy Me a Coffee is optional support — not required to use Free. Drafting/editing used AI assistance; the product, plugin listing, and CLI are my own shipping work.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How I create Apify Actors people actually pay to use</title>
      <dc:creator>Viktor Kondas</dc:creator>
      <pubDate>Tue, 15 Sep 2026 12:05:40 +0000</pubDate>
      <link>https://dev.to/kondasviktor/how-i-create-apify-actors-people-actually-pay-to-use-3n7b</link>
      <guid>https://dev.to/kondasviktor/how-i-create-apify-actors-people-actually-pay-to-use-3n7b</guid>
      <description>&lt;p&gt;First Store submit, eight live Actors, the Graveyard, and the Playbook that grew out of the packaging scars.&lt;/p&gt;

&lt;p&gt;This is my builder story — not an AI news roundup or a polished case-study brochure. If you have only seen Apify in a tools list, start with the next section.&lt;/p&gt;

&lt;p&gt;I used &lt;a href="https://cursor.com" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt; daily, shipped Actors to the &lt;a href="https://apify.com/?fpr=tmk8u8" rel="noopener noreferrer"&gt;Apify Store&lt;/a&gt;, killed ideas that looked good on a whiteboard, and wrote down what hurt so I would not forget it. That became &lt;strong&gt;The Vibe Coder's Playbook: Build Apify Actors people will actually pay to use&lt;/strong&gt; — the same packaging scars, prompts, and checklists I wish I had before my first serious submit. &lt;a href="https://vibecoderslife.com" rel="noopener noreferrer"&gt;Vibe Coder's Life&lt;/a&gt; is where I share the messy parts on purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Apify?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://apify.com/?fpr=tmk8u8" rel="noopener noreferrer"&gt;Apify&lt;/a&gt; is a &lt;strong&gt;cloud platform for Actors&lt;/strong&gt;. An Actor is a packaged scraper or automation: a form for inputs, a cloud run, a dataset (or files) out the other side, optional schedules, and a public listing on the &lt;strong&gt;Store&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You do not have to build your own billing, hosting, or "run this job" UI. Buyers pay Apify compute (and your pricing if you charge per event). You iterate the Actor; they rerun it.&lt;/p&gt;

&lt;p&gt;That is why vibe coders should care. Most AI-built scrapers die as a local script. The Store is one of the few places an indie can put a real product in front of strangers &lt;strong&gt;and&lt;/strong&gt; get paid without standing up a SaaS. It only works if you treat the Actor like a product — QA-safe defaults, an honest README, pricing that matches what the code actually charges — not a weekend demo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I started building Actors
&lt;/h2&gt;

&lt;p&gt;I did not start from "I should be on the Store." I started from work I already do: find suppliers, check who they are, follow dealer networks, pull public PDFs, notice when a page changes, look at station fuel prices, export a catalog, watch wildfire feeds.&lt;/p&gt;

&lt;p&gt;Doing that as a pile of notebooks does not scale. Doing it as &lt;strong&gt;Store Actors&lt;/strong&gt; meant I could rerun the same pipelines, and other people could buy one step without buying the whole suite.&lt;/p&gt;

&lt;p&gt;Shipping them also forced the packaging lessons the Playbook is about: Store review, prefills, PPE, READMEs. I would rather share that path than pretend the listings appeared fully formed.&lt;/p&gt;

&lt;h2&gt;
  
  
  First Actor submit — what actually hurt
&lt;/h2&gt;

&lt;p&gt;My first serious submit taught me more than any Academy skim:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;QA-safe prefills&lt;/strong&gt; matter more than clever crawlers. If the default Store "Try it" run burns time or money, review stalls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;README honesty&lt;/strong&gt; ("what this score is not") prevents support debt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PPE events&lt;/strong&gt; need to match what you actually charge in code — drift feels like a "bug" when it is packaging.&lt;/li&gt;
&lt;li&gt;Local green ≠ cloud green. Proxies, timeouts, and memory lie until you smoke on the platform.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That packaging pain is why the toolkit exists: templates, checklists, and prompts aimed at &lt;em&gt;shipping&lt;/em&gt;, not inventing another scraper tutorial.&lt;/p&gt;

&lt;h2&gt;
  
  
  Eight live Actors (and not another Maps clone)
&lt;/h2&gt;

&lt;p&gt;I wanted Actors with a &lt;strong&gt;sharp buyer sentence&lt;/strong&gt;, public pages / open feeds, and wedges that are not "yet another generic scraper." Each listing sells alone; some chain.&lt;/p&gt;

&lt;h3&gt;
  
  
  Supplier research
&lt;/h3&gt;

&lt;p&gt;Discover → enrich → docs → watch:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;Actor&lt;/th&gt;
&lt;th&gt;Store&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Discover&lt;/td&gt;
&lt;td&gt;Google Maps CEE Scraper — Supplier Shortlist&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apify.com/kondasviktor/google-maps-cee-scraper" rel="noopener noreferrer"&gt;google-maps-cee-scraper&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Channel map&lt;/td&gt;
&lt;td&gt;Dealer / Distributor Locator Extractor&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apify.com/kondasviktor/dealer-distributor-locator" rel="noopener noreferrer"&gt;dealer-distributor-locator&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enrich&lt;/td&gt;
&lt;td&gt;Website Intelligence + Contact Extractor&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apify.com/kondasviktor/website-intelligence-contact-extractor" rel="noopener noreferrer"&gt;website-intelligence-contact-extractor&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docs&lt;/td&gt;
&lt;td&gt;PDF Procurement Document Extractor&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apify.com/kondasviktor/pdf-procurement-document-extractor" rel="noopener noreferrer"&gt;pdf-procurement-document-extractor&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Watch&lt;/td&gt;
&lt;td&gt;Website Change Monitor — Diff Tracker&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apify.com/kondasviktor/website-change-monitor" rel="noopener noreferrer"&gt;website-change-monitor&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  E-commerce
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;Actor&lt;/th&gt;
&lt;th&gt;Store&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Catalog&lt;/td&gt;
&lt;td&gt;Product Catalog Scraper — Shopify CSV, WooCommerce &amp;amp; Shoprenter&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apify.com/kondasviktor/product-catalog-scraper" rel="noopener noreferrer"&gt;product-catalog-scraper&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Location intelligence
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;Actor&lt;/th&gt;
&lt;th&gt;Store&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fuel&lt;/td&gt;
&lt;td&gt;European Fuel Station Prices API (CEE + DACH)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apify.com/kondasviktor/cee-dach-fuel-intelligence" rel="noopener noreferrer"&gt;cee-dach-fuel-intelligence&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wildfire&lt;/td&gt;
&lt;td&gt;Wildfire Intelligence API — US WFIGS + Europe EFFIS&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apify.com/kondasviktor/wildfire-intelligence" rel="noopener noreferrer"&gt;wildfire-intelligence&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Maps leads with scoring and CEE language; Dealer targets locator layouts; Website Intel adds impresszum / compliance flags; PDF focuses procurement docs; Monitor closes the loop on public page change; Catalog writes Shopify / Woo / Shoprenter CSV; Fuel normalizes CEE+DACH station prices; Wildfire pulls official US + EU fire feeds.&lt;/p&gt;

&lt;p&gt;Typical chain: Maps or Dealer Locator → Website Intel → PDF / Change Monitor. Fuel + wildfire sit beside that as location APIs. Catalog is a separate storefront line.&lt;/p&gt;

&lt;p&gt;Profile: &lt;a href="https://apify.com/kondasviktor" rel="noopener noreferrer"&gt;apify.com/kondasviktor&lt;/a&gt; — &lt;strong&gt;eight&lt;/strong&gt; published Actors at the time of writing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Graveyard — what I did not build
&lt;/h2&gt;

&lt;p&gt;Sharing failures is the point of Vibe Coder's Life.&lt;/p&gt;

&lt;p&gt;I killed a &lt;strong&gt;media / video downloader&lt;/strong&gt; path: Store saturation plus copyright surface that is not the same category as public business facts. I walked away from capital-heavy sovereignty / routing gateway ideas that need infrastructure budget I do not have. Store research also rejected trade-show booth scrapers (DOM churn), finite SaaS partner directories (no recurring run), and head-on LinkedIn/job clones.&lt;/p&gt;

&lt;p&gt;Saturated platforms (YouTube / Instagram / Amazon / Booking-style clones) look like demand and behave like maintenance and ToS traps for indie publishers. The Playbook's &lt;strong&gt;Graveyard&lt;/strong&gt; chapter is that judgment written down — what to build instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  What worked vs what broke
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Worked:&lt;/strong&gt; suite cross-links without forcing a monolith; BYOK AI off by default; deterministic value first; example tasks named for humans; public-data framing in READMEs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Broke / burned time:&lt;/strong&gt; language-specific Maps DOM labels; prefills that were too heavy for QA; README drafts that read like feature dumps; underestimating proxy cost vs event price.&lt;/p&gt;

&lt;p&gt;Those notes became checklists and prompts — not motivational filler.&lt;/p&gt;

&lt;h2&gt;
  
  
  The toolkit that grew out of this
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://vibecoderslife.com/apify-actor-playbook-toolkit?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=how-to-create-apify-actors" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmcq7ovkdu08pbp3u4tu3.jpg" alt="The Vibe Coder's Playbook cover" width="800" height="1201"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I did not set out to sell a PDF. I set out to stop re-explaining the same Store packaging mistakes in DMs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://vibecoderslife.com/apify-actor-playbook-toolkit?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=how-to-create-apify-actors" rel="noopener noreferrer"&gt;The Vibe Coder's Playbook: Build Apify Actors people will actually pay to use&lt;/a&gt;&lt;/strong&gt; is the system behind the story above:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;104-page playbook&lt;/strong&gt; — validation, PPE economics, Crawlee, Cursor workflows, Store SEO, pricing, Graveyard judgment, case studies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;100 Actor ideas&lt;/strong&gt; (CSV + Markdown) with difficulty and maintenance ratings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;80+ AI prompts&lt;/strong&gt; + shared constraints so assistants stop inventing APIs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runnable TypeScript starter Actor&lt;/strong&gt; (books.toscrape.com demo — not my production Store scrapers)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Templates, worksheets, and launch checklists&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;€37 once&lt;/strong&gt; · personal download by email after Stripe Checkout · no subscription.&lt;/p&gt;

&lt;p&gt;The post is the journey. The toolkit is the repeatable shipping loop — buyer sentence → Graveyard check → PPE model → QA-safe schema → cloud smoke → Store packaging.&lt;/p&gt;

&lt;p&gt;No fake urgency. If this story resonated and you want the files, start there:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://vibecoderslife.com/apify-actor-playbook-toolkit?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=how-to-create-apify-actors" rel="noopener noreferrer"&gt;Explore the toolkit — €37 →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Start building
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://apify.com/?fpr=tmk8u8" rel="noopener noreferrer"&gt;Create an Apify account&lt;/a&gt; (referral) if you are new to the platform.&lt;/li&gt;
&lt;li&gt;Browse the Actors above — steal the &lt;em&gt;patterns&lt;/em&gt;, not necessarily the niches.&lt;/li&gt;
&lt;li&gt;If you buy the toolkit, open &lt;code&gt;START-HERE.md&lt;/code&gt; first inside the zip.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you need help beyond the toolkit — a quick &lt;strong&gt;Actor review&lt;/strong&gt;, a &lt;strong&gt;fixed-price Starter Actor&lt;/strong&gt;, custom &lt;strong&gt;multi-Actor&lt;/strong&gt; work, or &lt;strong&gt;maintenance&lt;/strong&gt; after launch — email &lt;a href="mailto:hello@vibecoderslife.com"&gt;hello@vibecoderslife.com&lt;/a&gt;. Happy to support when it is useful; no pressure either way.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://vibecoderslife.com/post/how-to-create-apify-actors?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=how-to-create-apify-actors" rel="noopener noreferrer"&gt;Vibe Coder's Life&lt;/a&gt;. I send a short Tuesday/Friday digest on AI coding tools and shipping with agents — &lt;a href="https://vibecoderslife.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=how-to-create-apify-actors#subscribe-email" rel="noopener noreferrer"&gt;subscribe&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sources: &lt;a href="https://apify.com/kondasviktor" rel="noopener noreferrer"&gt;Apify Store profile&lt;/a&gt; (eight live Actors); &lt;a href="https://docs.apify.com" rel="noopener noreferrer"&gt;Apify docs&lt;/a&gt;; &lt;a href="https://vibecoderslife.com/apify-actor-playbook-toolkit?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=how-to-create-apify-actors" rel="noopener noreferrer"&gt;The Vibe Coder's Playbook&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>apify</category>
    </item>
    <item>
      <title>Giving AI agents live European fuel prices with Apify MCP</title>
      <dc:creator>Viktor Kondas</dc:creator>
      <pubDate>Mon, 14 Sep 2026 15:45:05 +0000</pubDate>
      <link>https://dev.to/apify/giving-ai-agents-live-european-fuel-prices-with-apify-mcp-10gf</link>
      <guid>https://dev.to/apify/giving-ai-agents-live-european-fuel-prices-with-apify-mcp-10gf</guid>
      <description>&lt;h1&gt;
  
  
  &lt;strong&gt;Giving AI agents live European fuel prices with Apify MCP&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;How I turned a CEE + DACH fuel-price Actor into a tool Cursor can call — and what I had to change once a model, not a spreadsheet, was reading the output.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I built European Fuel Station Prices API (CEE + DACH) (&lt;a href="https://apify.com/kondasviktor/cee-dach-fuel-intelligence" rel="noopener noreferrer"&gt;https://apify.com/kondasviktor/cee-dach-fuel-intelligence&lt;/a&gt;) as a normal Apify Actor first: normalized station prices across Central Europe and DACH, scheduled monitoring, and a route cheapest-stop mode. Then I wired the same Actor into Cursor through the Apify MCP server (&lt;a href="https://docs.apify.com/platform/integrations/mcp" rel="noopener noreferrer"&gt;https://docs.apify.com/platform/integrations/mcp&lt;/a&gt;). This piece is about that second step — Theme 2 in Apify's Content Program: your Actor as a tool for AI agents.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What you need&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A free Apify (&lt;a href="https://apify.com" rel="noopener noreferrer"&gt;https://apify.com&lt;/a&gt;) account
&lt;/li&gt;
&lt;li&gt;Cursor (&lt;a href="https://cursor.com" rel="noopener noreferrer"&gt;https://cursor.com&lt;/a&gt;) (or another MCP-capable client)
&lt;/li&gt;
&lt;li&gt;Willingness to let the agent call cloud Actors (each run bills PPE; Austria smoke tests land on the $0.10 minimum)
&lt;/li&gt;
&lt;li&gt;Optional: a Fuelo (&lt;a href="https://fuelo.net/about/api%5C_key%5C_request" rel="noopener noreferrer"&gt;https://fuelo.net/about/api\_key\_request&lt;/a&gt;) API key if you want HU/PL/CZ/SK/CH/BG coverage (BYOK — the Actor never uses platform keys)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No local scrape setup. The Actor already runs on Apify; MCP is how the agent reaches it.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The guessing problem&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Ask any LLM-based agent &lt;em&gt;"where should I fill up between Budapest and Vienna?"&lt;/em&gt; and you get a fluent answer built from training data that is months or years stale. Pump prices move daily. Logistics teams want live, per-station, cross-border numbers — not a national average from memory.&lt;/p&gt;

&lt;p&gt;CEE adds a second failure mode. Slovakia can apply dual pricing for foreign-plated vehicles (dualPricingForForeignPlates: true, verified 2026-07-24 in my Actor's regulatory config). Croatia can run price caps on regular stations while highway stations differ (priceCapActive: true, same date). Austria restricts when prices may increase to Mon/Wed/Fri (priceIncreaseRestrictedDays: ["MO","WE","FR"]). None of that belongs in model weights. It belongs in structured fields an agent reads at call time.&lt;/p&gt;

&lt;p&gt;That gap — volatile, jurisdiction-specific data an LLM cannot reliably know — is what MCP tools are for. The interesting engineering is not scraping a price board. It is designing output so an agent knows how much to trust each number and receives few enough tokens to reason.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why I built a regional Actor in Cursor&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I live in CEE. The Apify Store had US/FR/AU fuel Actors; station-level CEE + DACH coverage did not. I wanted one schema across DE, AT, CH, HU, PL, CZ, SK, RO, HR, SI, and BG — official feeds where they exist, licensed aggregators elsewhere, EUR-normalized for cross-border comparison.&lt;/p&gt;

&lt;p&gt;The Actor is live on Store (build 0.1.10 at time of writing), pay-per-event (&lt;a href="https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event" rel="noopener noreferrer"&gt;https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event&lt;/a&gt;), with public example tasks. No buyer key for AT, SI, HR, RO. BYOK: Tankerkönig for DE, Fuelo for CH/HU/PL/CZ/SK/BG. You can smoke-test Austria in under a minute for the $0.10 minimum run charge.&lt;/p&gt;

&lt;p&gt;I built the Actor in Cursor — the same client that now calls it via MCP. That closed loop mattered: every schema tweak got exercised by an agent that actually had to answer a logistics question, not by me staring at a dataset table.&lt;/p&gt;

&lt;p&gt;Data sources are official public APIs or licensed aggregators with BYOK. The Actor does not scrape pump websites behind a login or ignore site terms; for Poland and similar Fuelo countries, missing a key fails loudly instead of inventing prices.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;How the Actor is built&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Each country is a small adapter behind one interface. Austria reads E-Control's public JSON API, maps DIE/SUP/GAS into canonical diesel/petrol95/cng, and tags every row dataConfidence: OFFICIAL_REALTIME with an honest sourceMessage that E-Control returns cheapest-N, not the full market:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Code (typescript)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;// src/adapters/at.ts (excerpt)&lt;br&gt;&lt;br&gt;
url.searchParams.set('fuelType', mapFuel(query.fuel));&lt;br&gt;&lt;br&gt;
// ...&lt;br&gt;&lt;br&gt;
return {&lt;br&gt;&lt;br&gt;
  stationId: s.id != null ? String(s.id) : null,&lt;br&gt;&lt;br&gt;
  country: 'AT',&lt;br&gt;&lt;br&gt;
  diesel: typeof die === 'number' ? die : null,&lt;br&gt;&lt;br&gt;
  petrol95: typeof sup === 'number' ? sup : null,&lt;br&gt;&lt;br&gt;
  dataConfidence: 'OFFICIAL_REALTIME',&lt;br&gt;&lt;br&gt;
  source: 'E-Control Spritpreisrechner',&lt;br&gt;&lt;br&gt;
  sourceMessage:&lt;br&gt;&lt;br&gt;
    'E-Control returns cheapest-N stations for the search — not every station nationwide',&lt;br&gt;&lt;br&gt;
  regulatoryFlags: regulatoryFlagsFor('AT'),&lt;br&gt;&lt;br&gt;
};&lt;br&gt;&lt;br&gt;
Prices pass through ECB FX into *Eur and priceEur so a Budapest→Vienna comparison is not HUF guesswork against EUR memory.&lt;/p&gt;

&lt;p&gt;Route mode keeps cheapest-stop math deterministic — haversine detour, not LLM arithmetic:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Code (typescript)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;// src/route/geometry.ts (excerpt)&lt;br&gt;&lt;br&gt;
const detour = toStation + stationToDest - direct;&lt;br&gt;&lt;br&gt;
if (detour &amp;gt; opts.maxDetourKm) continue;&lt;br&gt;&lt;br&gt;
if (!best || price &amp;lt; best.price || (price === best.price &amp;amp;&amp;amp; detour &amp;lt; best.detour)) {&lt;br&gt;&lt;br&gt;
  best = { station: s, price, detour, fromOrigin: toStation };&lt;br&gt;&lt;br&gt;
}&lt;br&gt;&lt;br&gt;
Partial runs never invent rows. markCountryStatus classifies each country (ok, empty, missing_fuelo_key, …) and the run still succeeds for the rest:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Code (typescript)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;// src/main.ts (excerpt)&lt;br&gt;&lt;br&gt;
if (errMsg) {&lt;br&gt;&lt;br&gt;
  countryStatus[country] = classifyAdapterError(errMsg).status;&lt;br&gt;&lt;br&gt;
  return;&lt;br&gt;&lt;br&gt;
}&lt;br&gt;&lt;br&gt;
Pricing is explicit PPE: station-price $0.0025, route-recommendation $0.05, optional ai-digest $0.15 (BYOK, off by default), $0.10 minimum per run.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Architecture: agent decides, Actor evidences&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Code (text)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;User question&lt;br&gt;&lt;br&gt;
    → Cursor agent&lt;br&gt;&lt;br&gt;
    → Apify MCP (call-actor / fetch-actor-details)&lt;br&gt;&lt;br&gt;
    → Fuel Intelligence Actor&lt;br&gt;&lt;br&gt;
    → country adapters → live feeds&lt;br&gt;&lt;br&gt;
    → normalized dataset&lt;br&gt;&lt;br&gt;
    → agent recommendation&lt;br&gt;&lt;br&gt;
The agent is the decision layer. The Actor is the evidence layer. MCP is the bridge that removes the manual Console handoff.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Wiring Cursor to Apify MCP&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Apify hosts MCP at &lt;a href="https://mcp.apify.com" rel="noopener noreferrer"&gt;https://mcp.apify.com&lt;/a&gt; with OAuth on first connect — no API token in your config file. In .cursor/mcp.json:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Code (json)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;&lt;br&gt;
  "mcpServers": {&lt;br&gt;&lt;br&gt;
    "apify": {&lt;br&gt;&lt;br&gt;
      "url": "&lt;a href="https://mcp.apify.com/?tools=fetch-actor-details,kondasviktor/cee-dach-fuel-intelligence" rel="noopener noreferrer"&gt;https://mcp.apify.com/?tools=fetch-actor-details,kondasviktor/cee-dach-fuel-intelligence&lt;/a&gt;"&lt;br&gt;&lt;br&gt;
    }&lt;br&gt;&lt;br&gt;
  }&lt;br&gt;&lt;br&gt;
}&lt;br&gt;&lt;br&gt;
That pin matches the snippet on the Actor's Store page: fetch-actor-details plus the Actor id. For day-to-day exploration I also use a broader pin (actors,docs,...) so the agent can search Store and read docs; for a fleet assistant that always calls this Actor, the narrow pin skips a search round trip.&lt;/p&gt;

&lt;p&gt;Reload Cursor, sign in to Apify when prompted, then enable the server under &lt;strong&gt;Settings → Tools &amp;amp; MCP&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff5ej5ennnd6i60e7xfud.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff5ej5ennnd6i60e7xfud.png" alt=" " width="682" height="56"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cursor MCP configuration in mcp.json showing the Apify server URL with the cee-dach-fuel-intelligence Actor pinned as a tool&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fplx8fj0wt54p35nrwpzx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fplx8fj0wt54p35nrwpzx.png" alt=" " width="408" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cursor MCP tool list for the Apify server — all tools enabled including kondasviktor/cee-dach-fuel-intelligence&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Typical discovery path: search-actors → fetch-actor-details (read the input schema (&lt;a href="https://docs.apify.com/platform/actors/development/actor-definition/input-schema)" rel="noopener noreferrer"&gt;https://docs.apify.com/platform/actors/development/actor-definition/input-schema)&lt;/a&gt;) → call-actor. The input schema tells the agent required fields (mode, lat/lng for point, origin/destination for route). Apify can also infer output shapes from recent successful runs; my Actor's dataset schema documents row types (station-price, route-recommendation, run-status). The Actor output schema in Console is mainly deep links (dataset, runOverview) — field typing for agents comes from input + dataset schemas, not from those links alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Three real agent runs (August 2026)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I did not tell the agent &lt;em&gt;"run my fuel Actor."&lt;/em&gt; I asked logistics questions and let it resolve the tool through MCP. All runs below are cloud runs via Apify MCP; run IDs are real. Origin in Console shows &lt;strong&gt;MCP&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;A — Vienna petrol, key-free official data&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Prompt:&lt;/strong&gt; &lt;em&gt;I need current petrol prices near central Vienna for a delivery van, and tell me how reliable that data is.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input the agent constructed:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Code (json)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;&lt;br&gt;
  "mode": "point",&lt;br&gt;&lt;br&gt;
  "countries": ["AT"],&lt;br&gt;&lt;br&gt;
  "lat": 48.2082,&lt;br&gt;&lt;br&gt;
  "lng": 16.3738,&lt;br&gt;&lt;br&gt;
  "radiusKm": 8,&lt;br&gt;&lt;br&gt;
  "fuel": "petrol95",&lt;br&gt;&lt;br&gt;
  "maxStations": 8,&lt;br&gt;&lt;br&gt;
  "enableAIDigest": false&lt;br&gt;&lt;br&gt;
}&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Run:&lt;/strong&gt; chJk2dCvN45DnWGKC · SUCCEEDED in 4.5s · 10 dataset items · countryStatus.AT: ok&lt;/p&gt;

&lt;p&gt;Cheapest row returned:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Code (json)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;&lt;br&gt;
  "recordType": "station-price",&lt;br&gt;&lt;br&gt;
  "stationId": "1494440",&lt;br&gt;&lt;br&gt;
  "brand": "TMC",&lt;br&gt;&lt;br&gt;
  "name": "TMC Werkstatt &amp;amp; Tankstelle",&lt;br&gt;&lt;br&gt;
  "country": "AT",&lt;br&gt;&lt;br&gt;
  "city": "Wien",&lt;br&gt;&lt;br&gt;
  "petrol95": 1.669,&lt;br&gt;&lt;br&gt;
  "petrol95Eur": 1.669,&lt;br&gt;&lt;br&gt;
  "priceEur": 1.669,&lt;br&gt;&lt;br&gt;
  "currency": "EUR",&lt;br&gt;&lt;br&gt;
  "dataConfidence": "OFFICIAL_REALTIME",&lt;br&gt;&lt;br&gt;
  "source": "E-Control Spritpreisrechner",&lt;br&gt;&lt;br&gt;
  "sourceStatus": "OK"&lt;br&gt;&lt;br&gt;
}&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Agent conclusion:&lt;/strong&gt; TMC at €1.669 is the cheapest nearby petrol95; data is official E-Control realtime, but cheapest-N — not every Austrian station.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzgfgv3sdr8ilp06d2lbf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzgfgv3sdr8ilp06d2lbf.png" alt=" " width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Scenario A run detail in Apify Console — run chJk2dCvN45DnWGKC, SUCCEEDED, 10 results, origin MCP&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyawnoemikklhx502xywd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyawnoemikklhx502xywd.png" alt=" " width="624" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Scenario A dataset — Vienna petrol95 station-price rows sorted by price, TMC first at €1.669, all with OFFICIAL_REALTIME confidence&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;B — Budapest→Vienna diesel route&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Prompt:&lt;/strong&gt; &lt;em&gt;I'm driving a diesel van from Budapest to Vienna today. Where should I stop to fill up without a big detour, and how sure are you about that price?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input (Fuelo key redacted — buyers supply their own):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Code (json)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;&lt;br&gt;
  "mode": "route",&lt;br&gt;&lt;br&gt;
  "countries": ["HU", "AT"],&lt;br&gt;&lt;br&gt;
  "originLat": 47.4979,&lt;br&gt;&lt;br&gt;
  "originLng": 19.0402,&lt;br&gt;&lt;br&gt;
  "destinationLat": 48.2082,&lt;br&gt;&lt;br&gt;
  "destinationLng": 16.3738,&lt;br&gt;&lt;br&gt;
  "fuel": "diesel",&lt;br&gt;&lt;br&gt;
  "maxDetourKm": 20,&lt;br&gt;&lt;br&gt;
  "maxStations": 25,&lt;br&gt;&lt;br&gt;
  "radiusKm": 15,&lt;br&gt;&lt;br&gt;
  "enableAIDigest": false,&lt;br&gt;&lt;br&gt;
  "fueloApiKey": "YOUR_FUELO_KEY"&lt;br&gt;&lt;br&gt;
}&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Run:&lt;/strong&gt; mT6vN8TOsCG7P5d6s · SUCCEEDED in 12.9s · 39 items · one route-recommendation row&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Code (json)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;&lt;br&gt;
  "recordType": "route-recommendation",&lt;br&gt;&lt;br&gt;
  "stationId": "fuelo:HU:36084",&lt;br&gt;&lt;br&gt;
  "brand": "Slovnaft",&lt;br&gt;&lt;br&gt;
  "country": "HU",&lt;br&gt;&lt;br&gt;
  "city": "Bratislava",&lt;br&gt;&lt;br&gt;
  "fuel": "diesel",&lt;br&gt;&lt;br&gt;
  "price": 1.706,&lt;br&gt;&lt;br&gt;
  "priceEur": 1.706,&lt;br&gt;&lt;br&gt;
  "currency": "EUR",&lt;br&gt;&lt;br&gt;
  "distanceFromOriginKm": 158.38,&lt;br&gt;&lt;br&gt;
  "estimatedDetourKm": 1.03,&lt;br&gt;&lt;br&gt;
  "dataConfidence": "COMMUNITY_AGGREGATOR_UNVERIFIED"&lt;br&gt;&lt;br&gt;
}&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Agent conclusion:&lt;/strong&gt; Cheapest stop within ~1 km detour is Slovnaft diesel at €1.706 — but the agent must hedge: COMMUNITY_AGGREGATOR_UNVERIFIED, not official regulator data. The same run also returned OFFICIAL_REALTIME E-Control rows for AT segments; mixing tiers in one answer without naming confidence would be wrong.&lt;/p&gt;

&lt;p&gt;This is token economics in practice: route mode returns one recommendation record plus bounded station rows (maxStations), not an unbounded national dump. MCP still returns full field lists per row — context control is the Actor's modes and caps, not automatic truncation in MCP.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcaf3ug5inwkjc0y6kfvu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcaf3ug5inwkjc0y6kfvu.png" alt=" " width="799" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Scenario B dataset — Budapest-Vienna route, row 42 is the route-recommendation: Slovnaft Bratislava, diesel €1.706, ~1.03 km detour&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;C — Poland without a Fuelo key (honest failure)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Prompt:&lt;/strong&gt; &lt;em&gt;Current diesel near central Warsaw — same kind of answer as Vienna.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input:&lt;/strong&gt; point query for PL — fueloApiKey deliberately omitted even though I have a key locally.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Code (json)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;&lt;br&gt;
  "mode": "point",&lt;br&gt;&lt;br&gt;
  "countries": ["PL"],&lt;br&gt;&lt;br&gt;
  "lat": 52.2297,&lt;br&gt;&lt;br&gt;
  "lng": 21.0122,&lt;br&gt;&lt;br&gt;
  "radiusKm": 10,&lt;br&gt;&lt;br&gt;
  "fuel": "diesel",&lt;br&gt;&lt;br&gt;
  "maxStations": 10,&lt;br&gt;&lt;br&gt;
  "enableAIDigest": false&lt;br&gt;&lt;br&gt;
}&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Run:&lt;/strong&gt; RJCT720eHg3INuOzg · SUCCEEDED in 3.6s · 0 stations · 1 run-status row&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Code (json)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;&lt;br&gt;
  "recordType": "run-status",&lt;br&gt;&lt;br&gt;
  "countryStatus": { "PL": "missing_fuelo_key" },&lt;br&gt;&lt;br&gt;
  "stationCount": 0,&lt;br&gt;&lt;br&gt;
  "okStationCount": 0,&lt;br&gt;&lt;br&gt;
  "notes": [&lt;br&gt;&lt;br&gt;
    "PL: PL uses Fuelo.net (BYOK). Set input fueloApiKey from &lt;a href="https://fuelo.net/about/api%5C_key%5C_request" rel="noopener noreferrer"&gt;https://fuelo.net/about/api\_key\_request&lt;/a&gt; — we never use platform keys."&lt;br&gt;&lt;br&gt;
  ]&lt;br&gt;&lt;br&gt;
}&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Agent conclusion:&lt;/strong&gt; Polish station data is unavailable until the caller supplies a Fuelo key — do not invent Warsaw diesel prices. Honest failure beats silent emptiness: the run succeeded, the status says &lt;em&gt;why&lt;/em&gt; it is empty.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F39a63ixemeji4fgvpv7o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F39a63ixemeji4fgvpv7o.png" alt=" " width="799" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Scenario C run detail — run RJCT720eHg3INuOzg, SUCCEEDED with 1 result, origin MCP, completed in 3 seconds&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnb4siya3ox0jal3hdz6q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnb4siya3ox0jal3hdz6q.png" alt=" " width="619" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Scenario C Actor log — ERROR line shows PL uses Fuelo.net BYOK, followed by INFO: stations=0, status=missing_fuelo_key&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What MCP removed&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Without MCP, a human (or agent pretending to be one) does this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Apify Console
&lt;/li&gt;
&lt;li&gt;Find the Actor
&lt;/li&gt;
&lt;li&gt;Fill input JSON
&lt;/li&gt;
&lt;li&gt;Start run
&lt;/li&gt;
&lt;li&gt;Wait
&lt;/li&gt;
&lt;li&gt;Open dataset
&lt;/li&gt;
&lt;li&gt;Export or copy rows
&lt;/li&gt;
&lt;li&gt;Paste into chat
&lt;/li&gt;
&lt;li&gt;Ask the model to recommend&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With MCP, steps 2–8 collapse into one agent turn: recognize live fuel data is needed → fetch-actor-details → call-actor → reason on structured rows. The manual handoff disappears.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Design choices that mattered for agents&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A few patterns I would steal for any live-data Actor meant for MCP:&lt;/p&gt;

&lt;p&gt;Put provenance on the row, not only in the README. dataConfidence, source, and sourceMessage ride on every station row so the agent can hedge inside one tool call. A spreadsheet buyer scrolls to methodology; an agent cannot.&lt;/p&gt;

&lt;p&gt;Keep regulation in dated config, not model memory. regulatoryFlags come from JSON (lastVerified: 2026-07-24). The optional ai-digest PPE event stays off the hot path — narrative over aggregates is for scheduled batch runs, not every "where's cheapest" query.&lt;/p&gt;

&lt;p&gt;Keep the core deterministic. Currency normalization, detour math, and cheapest-stop selection stay in TypeScript. Let the agent interpret; do not let it calculate pump prices.&lt;/p&gt;

&lt;p&gt;Name fields so a model can infer meaning. estimatedDetourKm and missing_fuelo_key beat internal enums like tier2.&lt;/p&gt;

&lt;p&gt;Design for agent call patterns. One route call beats eleven country calls. Cap maxStations. Batch countries in a single input when the schema allows it.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What broke while building this&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;AT always needs coordinates. Even country mode feeds a national centroid into E-Control's lat/lng search — there is no "whole country" dump.
&lt;/li&gt;
&lt;li&gt;asOfDate on E-Control throws explicitly when asOfDateStrict=true instead of silently serving live prices as history.
&lt;/li&gt;
&lt;li&gt;Tankerkönig free tier caps radius at 25 km — the input schema enforces the same cap.
&lt;/li&gt;
&lt;li&gt;Missing BYOK must not look like "no stations exist." Poland without fueloApiKey → missing_fuelo_key, not an empty success story.
&lt;/li&gt;
&lt;li&gt;Early MCP pins that only exposed call-actor without fetch-actor-details made the agent guess required fields. Pinning the Actor &lt;em&gt;and&lt;/em&gt; details fixed that.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What I would do differently&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I would ship the dataset schema and dataConfidence enums before the first public Store listing. I added provenance after watching an agent treat a Fuelo community price like E-Control realtime. I would also document MCP pin recipes on the Store page earlier — the narrow pin vs broad actors,docs pin is not obvious from Console alone.&lt;/p&gt;

&lt;p&gt;Next on my list: richer route geometry than haversine (road network detours), and clearer city/country consistency checks when a community feed returns odd location labels.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Takeaways&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;One Actor now serves Console, API, schedules, automation tools — and agents via MCP. Fuel was the forcing function because bad answers are costly; the pattern generalizes to any live, messy, geographic dataset (EV charging, truck parking, tolls): normalize in the Actor, expose provenance on every row, keep math deterministic, let MCP handle the call, let the agent handle the question.&lt;/p&gt;

&lt;p&gt;Try it: European Fuel Station Prices API (CEE + DACH) (&lt;a href="https://apify.com/kondasviktor/cee-dach-fuel-intelligence" rel="noopener noreferrer"&gt;https://apify.com/kondasviktor/cee-dach-fuel-intelligence&lt;/a&gt;) — AT/SI/HR/RO need no key. MCP setup: Apify MCP docs (&lt;a href="https://docs.apify.com/platform/integrations/mcp" rel="noopener noreferrer"&gt;https://docs.apify.com/platform/integrations/mcp&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Viktor Kondas · [Apify profile](&lt;a href="https://apify.com/kondasviktor" rel="noopener noreferrer"&gt;https://apify.com/kondasviktor&lt;/a&gt;) · Built in Cursor with Apify MCP&lt;/em&gt;&lt;/p&gt;

</description>
      <category>apify</category>
      <category>mcp</category>
      <category>ai</category>
      <category>automation</category>
    </item>
  </channel>
</rss>
