<?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: Dmitry Chervonyi</title>
    <description>The latest articles on DEV Community by Dmitry Chervonyi (@dmytro_chervonyi).</description>
    <link>https://dev.to/dmytro_chervonyi</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%2F3978022%2F43b10e81-918e-498b-adad-9d83f9b4a66b.jpg</url>
      <title>DEV Community: Dmitry Chervonyi</title>
      <link>https://dev.to/dmytro_chervonyi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dmytro_chervonyi"/>
    <language>en</language>
    <item>
      <title>Self-hosting n8n in 2026: three paths, the env vars that matter, and 5 things that quietly break</title>
      <dc:creator>Dmitry Chervonyi</dc:creator>
      <pubDate>Tue, 11 Aug 2026 09:09:44 +0000</pubDate>
      <link>https://dev.to/dmytro_chervonyi/self-hosting-n8n-in-2026-three-paths-the-env-vars-that-matter-and-5-things-that-quietly-break-47m1</link>
      <guid>https://dev.to/dmytro_chervonyi/self-hosting-n8n-in-2026-three-paths-the-env-vars-that-matter-and-5-things-that-quietly-break-47m1</guid>
      <description>&lt;p&gt;n8n Cloud Starter is $24/month for 2,500 executions. Pro is $60/month for 10,000. Self-hosted Community Edition has unlimited executions and costs whatever your server costs.&lt;/p&gt;

&lt;p&gt;That math is why most people end up here. This is the setup, the environment variables that actually matter, and the five things that quietly break a self-hosted n8n once real workflows run through it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why self-host
&lt;/h2&gt;

&lt;p&gt;Three reasons, in the order people usually hit them:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Execution caps.&lt;/strong&gt; The moment your workflows fire more than a couple thousand times a month, Cloud pricing stops being cute. Self-hosted has no cap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data sovereignty.&lt;/strong&gt; Customer data flowing through your workflows touches your server, not someone else's. Relevant if you handle PII or anything with GDPR / HIPAA / SOC 2 implications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cost at scale.&lt;/strong&gt; A $3–20/month server replaces $24–800/month of Cloud. Most teams save $200–700/year once workflow count grows past a handful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three ways to self-host it
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Path A: Docker Compose on a VPS
&lt;/h3&gt;

&lt;p&gt;The path n8n's own docs walk. Spin up a VPS (Hetzner, DigitalOcean, Vultr — $5–10/month), install Docker, write a &lt;code&gt;docker-compose.yml&lt;/code&gt; running n8n plus Postgres, set env vars, put nginx in front as a reverse proxy, wire up automated certificate renewal, point DNS at the box.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good:&lt;/strong&gt; cheapest possible. Full control. Cleanest ownership story.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Catch:&lt;/strong&gt; you are now the DevOps team. Backups, security patches, n8n version bumps, cert renewal, nginx config, Postgres maintenance. Realistic time to first deploy if you have never done it: 2–6 hours, plus ongoing upkeep.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pick it if&lt;/strong&gt; you are comfortable in Docker and Linux and the time cost is fine.&lt;/p&gt;

&lt;h3&gt;
  
  
  Path B: Managed Docker host (Coolify, Dokploy, CapRover)
&lt;/h3&gt;

&lt;p&gt;Same VPS, but with a UI handling Docker, reverse proxy, certs and backups. Coolify and Dokploy both ship n8n as a one-click template: install Coolify on the VPS, click Deploy n8n, paste a domain, done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good:&lt;/strong&gt; self-hosted economics without hand-writing Compose files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Catch:&lt;/strong&gt; still your VPS, still your responsibility to patch the host OS. Coolify itself needs updates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pick it if&lt;/strong&gt; you want the savings but not the YAML.&lt;/p&gt;

&lt;h3&gt;
  
  
  Path C: a managed host that runs the container for you
&lt;/h3&gt;

&lt;p&gt;Push the n8n image at a platform that handles certs, database provisioning, backups and patching. You trade a few dollars a month for not owning any of it.&lt;/p&gt;

&lt;p&gt;Disclosure so you can weigh the rest properly: I co-founded &lt;a href="https://livemy.app" rel="noopener noreferrer"&gt;livemy.app&lt;/a&gt;, which is one of these, so I am biased. Render and Railway are the other reasonable picks in this shape. Railway is worth a caveat for n8n specifically: it bills usage, and a cron workflow firing hourly bills compute around the clock.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pick it if&lt;/strong&gt; you would rather pay to skip the DevOps entirely.&lt;/p&gt;

&lt;h2&gt;
  
  
  The environment variables everyone gets wrong
&lt;/h2&gt;

&lt;p&gt;Whatever path you take, four variables decide whether your instance actually works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;N8N_HOST&lt;/span&gt;=&lt;span class="n"&gt;n8n&lt;/span&gt;.&lt;span class="n"&gt;yourdomain&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;
&lt;span class="n"&gt;N8N_PROTOCOL&lt;/span&gt;=&lt;span class="n"&gt;https&lt;/span&gt;
&lt;span class="n"&gt;WEBHOOK_URL&lt;/span&gt;=&lt;span class="n"&gt;https&lt;/span&gt;://&lt;span class="n"&gt;n8n&lt;/span&gt;.&lt;span class="n"&gt;yourdomain&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;/
&lt;span class="n"&gt;GENERIC_TIMEZONE&lt;/span&gt;=&lt;span class="n"&gt;Europe&lt;/span&gt;/&lt;span class="n"&gt;Berlin&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Plus one that decides whether you can ever restore a backup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;N8N_ENCRYPTION_KEY&lt;/span&gt;=&amp;lt;&lt;span class="m"&gt;32&lt;/span&gt;-&lt;span class="n"&gt;char&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;write&lt;/span&gt; &lt;span class="n"&gt;down&lt;/span&gt; &lt;span class="n"&gt;somewhere&lt;/span&gt; &lt;span class="n"&gt;safe&lt;/span&gt;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you move to a custom domain later, update &lt;code&gt;N8N_HOST&lt;/code&gt; and &lt;code&gt;WEBHOOK_URL&lt;/code&gt; and redeploy. Webhooks stay broken until those match the public URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five things that quietly break self-hosted n8n
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;code&gt;WEBHOOK_URL&lt;/code&gt; does not match the public URL
&lt;/h3&gt;

&lt;p&gt;The most common one by far. n8n generates webhook URLs from &lt;code&gt;WEBHOOK_URL&lt;/code&gt;, not from whatever you typed in the browser. If it still says &lt;code&gt;http://localhost:5678&lt;/code&gt; while your instance lives at &lt;code&gt;https://n8n.yourdomain.com&lt;/code&gt;, every webhook you register at Stripe, Calendly or anywhere else points at nothing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix.&lt;/strong&gt; Set it to the full public URL with a trailing slash. Redeploy. Test one webhook end to end before trusting any of them.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. SQLite is the default and it is not a production database
&lt;/h3&gt;

&lt;p&gt;n8n defaults to SQLite. Fine for personal use, breaks the moment you have concurrent executions, because SQLite locks the whole file on write. Two workflows firing at once gives you lock errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix.&lt;/strong&gt; Use Postgres:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;DB_TYPE&lt;/span&gt;=&lt;span class="n"&gt;postgresdb&lt;/span&gt;
&lt;span class="n"&gt;DB_POSTGRESDB_HOST&lt;/span&gt;=...
&lt;span class="n"&gt;DB_POSTGRESDB_DATABASE&lt;/span&gt;=...
&lt;span class="n"&gt;DB_POSTGRESDB_USER&lt;/span&gt;=...
&lt;span class="n"&gt;DB_POSTGRESDB_PASSWORD&lt;/span&gt;=...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Credentials are encrypted with a key you can lose
&lt;/h3&gt;

&lt;p&gt;n8n encrypts stored credentials with &lt;code&gt;N8N_ENCRYPTION_KEY&lt;/code&gt;. Do not set it and n8n generates one into the data folder. Restore that backup onto a different server without the same key and every credential is unreadable. You will not find out until you need the restore.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix.&lt;/strong&gt; Set it explicitly. Store it somewhere that is not the server.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Cron nodes fire in UTC
&lt;/h3&gt;

&lt;p&gt;Without &lt;code&gt;GENERIC_TIMEZONE&lt;/code&gt;, "every weekday at 9 AM" means 9 AM UTC. Set a valid IANA timezone and redeploy.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Free tiers and always-on automation do not mix
&lt;/h3&gt;

&lt;p&gt;n8n runs crons that need to fire reliably. Hosts whose free tier sleeps on inactivity silently miss cron slots, and you find out from the workflow that did not run. Render Free spins down after 15 minutes of inactivity, for example.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix.&lt;/strong&gt; Run production automations on a tier that stays awake. This is worth the few dollars regardless of which host you pick.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cost math
&lt;/h2&gt;

&lt;p&gt;For a typical small team:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;n8n Cloud Starter:&lt;/strong&gt; $24/month, 2,500 executions. A team automating daily can burn that in a week.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;n8n Cloud Pro:&lt;/strong&gt; $60/month, 10,000 executions. Still capped.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-hosted, $5 VPS:&lt;/strong&gt; $5/month plus your time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-hosted, managed host:&lt;/strong&gt; roughly $10–15/month all in, unlimited executions, no DevOps.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you cross a few thousand executions a month, self-hosting wins even if you pay for managed convenience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Migrating off n8n Cloud
&lt;/h2&gt;

&lt;p&gt;Export workflows from Cloud (settings → export), stand up the self-hosted instance, import, re-enter credentials. Budget a few hours for a small team's worth of automations. Credentials do not export, by design.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest summary
&lt;/h2&gt;

&lt;p&gt;If you are under ~2,500 executions a month and do not care where the data sits, n8n Cloud Starter is genuinely simpler and you should use it. Past that, self-host. Path A if you enjoy servers, Path B if you want the savings without the YAML, Path C if you would rather not think about it at all.&lt;/p&gt;

&lt;p&gt;Whichever you pick: set &lt;code&gt;WEBHOOK_URL&lt;/code&gt; correctly, use Postgres, and write down your encryption key. That is most of the pain avoided.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What broke first on your self-hosted n8n? I am collecting these, and I suspect &lt;code&gt;WEBHOOK_URL&lt;/code&gt; wins by a mile.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>n8n</category>
      <category>docker</category>
      <category>selfhosted</category>
      <category>automation</category>
    </item>
    <item>
      <title>From Claude Artifact to a live URL: three paths that actually work</title>
      <dc:creator>Dmitry Chervonyi</dc:creator>
      <pubDate>Thu, 09 Jul 2026 15:17:44 +0000</pubDate>
      <link>https://dev.to/dmytro_chervonyi/from-claude-artifact-to-a-live-url-three-paths-that-actually-work-2lkm</link>
      <guid>https://dev.to/dmytro_chervonyi/from-claude-artifact-to-a-live-url-three-paths-that-actually-work-2lkm</guid>
      <description>&lt;p&gt;I build a lot of small tools inside Claude Artifacts, and every good one eventually hits the same wall: there is no deploy button. The preview lives inside claude.ai, and if you want the thing on your own domain, you have to get the code out yourself. Here are the three extraction paths I actually use, plus the five things that quietly break when Artifact code leaves Claude's sandbox.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Claude Artifacts is and what it isn't
&lt;/h2&gt;

&lt;p&gt;Claude Artifacts is Anthropic's output format for code, documents, diagrams, and interactive content. Ships on all paid Claude plans and inside Projects. When Claude generates something substantial — a React component, an HTML page, a Mermaid diagram — a side panel opens with a live preview you can interact with.&lt;/p&gt;

&lt;p&gt;What Artifacts is: a great way to iterate on small apps and components in the chat. Single-file React components, interactive widgets, HTML pages, SVG illustrations.&lt;/p&gt;

&lt;p&gt;What Artifacts isn't: a hosting platform. There's no "Deploy to my domain" button. The Artifact lives inside claude.ai and any share link is on Anthropic's subdomain. For a real production URL on your own domain, you need to extract the code and host it somewhere else.&lt;/p&gt;

&lt;p&gt;This is normal and intentional — Anthropic builds Claude, not a hosting platform. The rest of this guide is how to bridge the gap.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three ways to take a Claude Artifact to a live URL
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Path A: Anthropic's built-in share link
&lt;/h3&gt;

&lt;p&gt;Click the share icon in the Artifact panel. Claude generates a shareable URL on a claude.ai subdomain. Anyone with the link can view the Artifact, including interactive React components.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The catches.&lt;/strong&gt; URL is on Anthropic's domain, not yours. No custom domain option. The Artifact requires the original chat to remain accessible (deleting the chat removes the share). No control over SSL, caching, or analytics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When this works.&lt;/strong&gt; Quick demo to a colleague, internal share, throwaway test. Not for a real product.&lt;/p&gt;

&lt;h3&gt;
  
  
  Path B: Community Artifact runners (the open-source toolchain)
&lt;/h3&gt;

&lt;p&gt;An ecosystem of open-source tools grew up in 2024–2026 to turn Artifacts into deployable projects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;claude-artifact-runner&lt;/strong&gt; — turns a single React Artifact into a deployable React app in seconds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;claude-artifacts-react&lt;/strong&gt; — lightweight wrapper for deploying Claude Artifact React code to Vercel or Cloudflare Pages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;claude-artifact-unpacker&lt;/strong&gt; — Python tool to extract multi-file projects from Artifacts into local directories&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;claude-artifacts-downloader&lt;/strong&gt; — Chrome extension to download Artifacts from a Claude conversation as a ZIP file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pick one based on your needs. claude-artifact-runner is the simplest for single React Artifacts; the unpacker is the best for complex multi-file projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Path C: Manual scaffold and copy
&lt;/h3&gt;

&lt;p&gt;For full control, scaffold a new Vite + React project (&lt;code&gt;npm create vite@latest&lt;/code&gt;), copy the Artifact code into &lt;code&gt;src/App.jsx&lt;/code&gt;, install any libraries the Artifact imports (Lucide, Recharts, etc.), &lt;code&gt;npm run dev&lt;/code&gt; to verify locally, push to GitHub, deploy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When this works.&lt;/strong&gt; You want the cleanest project structure, you'll keep iterating on the code, or you need to integrate the Artifact into an existing larger app.&lt;/p&gt;

&lt;h2&gt;
  
  
  The full flow, end to end (about 3 minutes)
&lt;/h2&gt;

&lt;p&gt;Here's the concrete version of Path B plus a deploy, start to finish.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Extract the Artifact code
&lt;/h3&gt;

&lt;p&gt;Two options. Fast: use the claude-artifacts-downloader Chrome extension to get a ZIP. Cleaner: use claude-artifact-runner to scaffold a deployable React project around your Artifact code with one CLI command.&lt;/p&gt;

&lt;p&gt;For HTML Artifacts, just copy the HTML into &lt;code&gt;index.html&lt;/code&gt; in an empty folder. No build step needed for static HTML.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Push to GitHub (optional but recommended)
&lt;/h3&gt;

&lt;p&gt;Create a new GitHub repo, push your scaffolded project. Cursor, Windsurf, or just the GitHub CLI all do this in 30 seconds. Skip this step if you'd rather upload a ZIP directly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Pick a host
&lt;/h3&gt;

&lt;p&gt;I use livemy.app for this step, and full honesty: I work on it, so I'm biased. It auto-detects Vite + React, which is the typical Artifact shape. The same general flow works on Vercel or Cloudflare Pages if those are home turf for you.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Connect a public repo or upload the ZIP
&lt;/h3&gt;

&lt;p&gt;In the dashboard: &lt;strong&gt;New project&lt;/strong&gt;, then connect a public GitHub repo or upload the archive. The Vite + React build is detected and run automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Add environment variables (if your Artifact uses APIs)
&lt;/h3&gt;

&lt;p&gt;If your Artifact calls an external API (Anthropic, OpenAI, weather data, anything), add the API key as an environment variable under &lt;strong&gt;Project Settings → Environment Variables&lt;/strong&gt;. For Vite, prefix with &lt;code&gt;VITE_&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Deploy and point your domain
&lt;/h3&gt;

&lt;p&gt;Click Deploy. 2–3 minutes later you have a live URL. Add a custom domain, update DNS, wait for SSL. Done. Redeploys after code changes are one click in the dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five things that quietly break Artifacts outside Claude
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Artifact assumed it's running in Claude's sandbox
&lt;/h3&gt;

&lt;p&gt;Claude's Artifact preview runs inside a sandboxed iframe with specific globals available (Anthropic's host environment exposes certain helpers). Outside Claude, those globals don't exist — the Artifact crashes on load with "undefined is not a function".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix.&lt;/strong&gt; Inspect the Artifact code for references to Anthropic-specific globals. Replace with standard browser APIs or imports.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Imports the Artifact "had access to" don't exist in your scaffold
&lt;/h3&gt;

&lt;p&gt;Claude's Artifact preview pre-loads common libraries (React, Lucide, Recharts, Tailwind, etc.). Your scaffold has to install each one explicitly. Missing import = build fails.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix.&lt;/strong&gt; Read every import at the top of the Artifact code. Run &lt;code&gt;npm install&lt;/code&gt; for each. claude-artifact-runner handles this automatically; manual scaffolds need a checklist.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Tailwind classes don't render without Tailwind setup
&lt;/h3&gt;

&lt;p&gt;Most Artifacts use Tailwind. The Claude preview includes Tailwind via CDN; your scaffold needs the Tailwind config, the PostCSS pipeline, and the directive in your CSS file. Without that setup, every class is a no-op.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix.&lt;/strong&gt; Install Tailwind in the scaffold: &lt;code&gt;npm install -D tailwindcss postcss autoprefixer &amp;amp;&amp;amp; npx tailwindcss init -p&lt;/code&gt;. Add the Tailwind directives to your CSS. The community Artifact runners handle this; manual scaffolds need it explicitly.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. API calls were proxied through Claude
&lt;/h3&gt;

&lt;p&gt;If the Artifact called an API, the call may have been routed through Claude's proxy in the preview (so it worked without exposing your API key). Outside Claude, you make the call directly, which means CORS and the API key both become your problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix.&lt;/strong&gt; Move API calls server-side (a small backend route on whatever host you deploy to) instead of directly from the browser. Add the API key as an environment variable on the host. Never embed an API key in client-side code shipped to a real URL.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Multi-file Artifacts get flattened on naive export
&lt;/h3&gt;

&lt;p&gt;Claude can generate multi-file Artifacts (a project with several files). The standard copy-paste flow flattens them — you end up with all code in one file that doesn't compile.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix.&lt;/strong&gt; Use claude-artifact-unpacker (the Python tool that extracts multi-file Artifacts into a proper directory structure). Or work with single-file Artifacts when you intend to deploy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost: what taking an Artifact public actually costs
&lt;/h2&gt;

&lt;p&gt;Real numbers for taking a finished Artifact public.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anthropic share link:&lt;/strong&gt; $0, but lives on claude.ai's subdomain, requires the source chat to stay accessible, no custom domain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloudflare Pages free tier:&lt;/strong&gt; $0 with custom domain. Static or Vite-shaped Artifacts only.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;livemy.app Maker:&lt;/strong&gt; $10/month flat. Any Artifact that compiles to a Vite or HTML build. Custom domain, SSL, monitoring all included.&lt;/p&gt;

&lt;p&gt;For a one-off share, the Anthropic link is fine. For anything you'd put on a resume or business card, you want your own domain — which means livemy.app or Cloudflare Pages.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Can I host a Claude Artifact on my own domain?
&lt;/h3&gt;

&lt;p&gt;Yes, but not through Claude directly — you extract the code and host it on a separate platform. Use claude-artifact-runner or the unpacker tools to turn the Artifact into a deployable project, then deploy on livemy.app, Vercel, Cloudflare Pages, or any modern host.&lt;/p&gt;

&lt;h3&gt;
  
  
  Will Anthropic add native deployment to Claude Artifacts?
&lt;/h3&gt;

&lt;p&gt;As of mid-2026, Anthropic's official Artifact share link covers most quick-share use cases but doesn't include custom domain or production hosting. Whether they add it long-term is up to them. The community toolchain (artifact-runner, artifact-unpacker, etc.) fills the gap today.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the easiest way to deploy a single React Artifact?
&lt;/h3&gt;

&lt;p&gt;Use claude-artifact-runner from the command line. It scaffolds a Vite project, copies your Artifact code into the right place, installs typical Artifact dependencies (Lucide, Recharts, Tailwind). You end up with a project ready to &lt;code&gt;git push&lt;/code&gt; and deploy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why does my Artifact work in Claude but break when I deploy it?
&lt;/h3&gt;

&lt;p&gt;Five common reasons: Claude-specific globals not available outside the sandbox, missing imports your scaffold didn't install, Tailwind classes without Tailwind setup, API calls that depended on Claude's proxy, and multi-file Artifacts flattened on export. The five-gotchas section above covers each.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use Claude Artifacts as a no-code app builder?
&lt;/h3&gt;

&lt;p&gt;For small interactive widgets and components — yes, it's surprisingly good. For full apps with backend, authentication, and database — no, that's outside Artifacts' design. Tools like Lovable, Bolt.new, and v0 are purpose-built for that workflow if you can't code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;If you've built something in a Claude Artifact worth keeping, the toolchain is good and the deploy is fast. Scaffold it with claude-artifact-runner, read every import before you build, set up Tailwind properly, and keep API keys out of the client code. That covers about 90% of what goes wrong.&lt;/p&gt;

&lt;p&gt;livemy.app is in Open Beta. Free tier: &lt;a href="https://my.livemy.app/register?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=deploy-claude-artifacts" rel="noopener noreferrer"&gt;https://my.livemy.app/register?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=deploy-claude-artifacts&lt;/a&gt;&lt;/p&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>deployment</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Your Vibe-Coded App Isn't Real Until It Has a URL</title>
      <dc:creator>Dmitry Chervonyi</dc:creator>
      <pubDate>Thu, 25 Jun 2026 18:00:37 +0000</pubDate>
      <link>https://dev.to/dmytro_chervonyi/your-vibe-coded-app-isnt-real-until-it-has-a-url-31g3</link>
      <guid>https://dev.to/dmytro_chervonyi/your-vibe-coded-app-isnt-real-until-it-has-a-url-31g3</guid>
      <description>&lt;p&gt;Here's a sentence that has quietly become a lie: "I built an app."&lt;/p&gt;

&lt;p&gt;You built something that runs on your screen. Maybe in a preview pane, maybe on localhost, maybe inside a chat window. It works. It's real to you. And for most of human software history, that was 90% of the battle — getting the thing to actually function.&lt;/p&gt;

&lt;p&gt;That era is over. The functioning part is solved now. You describe what you want, an AI writes it, and it runs. The 90% collapsed to about four minutes.&lt;/p&gt;

&lt;p&gt;But here's what nobody updated: &lt;strong&gt;the definition of "done" didn't move with it.&lt;/strong&gt; And that gap is where I watch person after person celebrate a finish line that isn't one.&lt;/p&gt;

&lt;h2&gt;
  
  
  A preview is not a product
&lt;/h2&gt;

&lt;p&gt;A preview is a promise. It says "this could exist." It runs in a sandboxed, temporary, you-only environment that quietly handles everything real software has to handle for itself — the server, the domain, the build, the environment, the fact that it has to keep working when you close your laptop.&lt;/p&gt;

&lt;p&gt;The moment you want one other human to use the thing, all of that stops being handled for you. And that's the moment most AI-built apps die. Not because the code is bad. Because "runs on my screen" and "is live for someone else" are two completely different achievements, and the tools let you mistake the first for the second.&lt;/p&gt;

&lt;p&gt;Think about what "real" actually requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;URL&lt;/strong&gt; a stranger can open — not &lt;code&gt;localhost:3000&lt;/code&gt;, not &lt;code&gt;something.preview.app&lt;/code&gt;, not a link that dies with your session.&lt;/li&gt;
&lt;li&gt;It stays up when &lt;strong&gt;you're not looking at it&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;It lives on &lt;strong&gt;your domain&lt;/strong&gt;, so it's yours and not a demo on someone else's.&lt;/li&gt;
&lt;li&gt;Someone who isn't you can &lt;strong&gt;use it and come back tomorrow&lt;/strong&gt; and it still works.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of that is the fun part. None of that is what the demos show you. And all of it is the actual product.&lt;/p&gt;

&lt;h2&gt;
  
  
  The demo culture is training us wrong
&lt;/h2&gt;

&lt;p&gt;Scroll any feed right now and you'll see the same clip a hundred times: a prompt, a four-minute build, a working preview, a triumphant "shipped!" 🚀&lt;/p&gt;

&lt;p&gt;Except it wasn't shipped. Shipped means it left the building. What got shown was a thing that works in the one place it will never need to work in production: the creator's own screen.&lt;/p&gt;

&lt;p&gt;I don't think this is dishonest. I think it's a genuine blind spot. The people making those clips are mostly developers, and for a developer, deployment is muscle memory — a &lt;code&gt;git push&lt;/code&gt;, a Vercel connect, a domain they bought years ago. They skip showing it because to them it's not a step. It's breathing.&lt;/p&gt;

&lt;p&gt;But the entire reason vibe coding matters is that it brought in people who are &lt;em&gt;not&lt;/em&gt; developers. People like me — I run marketing, I can't write the backend, but I know exactly what I want to build. For us, deployment isn't breathing. It's a wall. A wall the demos pretend isn't there, built out of a hundred years of assumptions nobody bothered to remove when they removed the assumption that you had to know how to code.&lt;/p&gt;

&lt;p&gt;So you get this cruel asymmetry: the creative half of software got democratized, and the boring, load-bearing half stayed exactly as gatekept as it always was. The AI hands you a working app and drops you at the foot of the wall it never mentioned.&lt;/p&gt;

&lt;h2&gt;
  
  
  Move your finish line
&lt;/h2&gt;

&lt;p&gt;I'm not here to make you feel bad about a preview. Previews are great. They're the most exciting thing to happen to building in a decade.&lt;/p&gt;

&lt;p&gt;I'm here to move where you plant the flag.&lt;/p&gt;

&lt;p&gt;Stop letting "it runs" be the moment you celebrate. It's a checkpoint, not the finish. The finish line — the only one that counts — is a URL you can text to someone who has never met you, on a domain that's yours, that still works after you've gone to sleep.&lt;/p&gt;

&lt;p&gt;When I started treating that as "done," two things happened. First, I stopped accumulating a graveyard of apps that technically existed and reached exactly zero humans. Second, I got way more honest about what I'd actually accomplished on any given night. "I made a cool preview" is a fine thing to have done. It is just not the same thing as having built an app, and pretending otherwise is how you end up with eleven dead projects and a vague sense that AI didn't deliver what it promised.&lt;/p&gt;

&lt;p&gt;It did deliver. It delivered the hard 90%. The last 10% is just hiding in plain sight, and it has a name, and the name is: &lt;strong&gt;it needs a URL.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That last step is the whole reason I'm now working on livemy.app — taking the thing that runs on your screen and turning it into a link someone else can open, without asking you to learn a single config file. I'll leave it there.&lt;/p&gt;

&lt;p&gt;But even if you never touch what I'm building: change your definition of done. Your apps will stop dying. And "I built an app" will go back to being true.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Honest question for the room: what's the last thing you vibe-coded that's still trapped in a preview right now? What tool was it, and what exactly stopped you from putting it live? I genuinely think the answers cluster, and I want to see if I'm right.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>vibecoding</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>I Built 12 Apps With AI. Here's Where Every One of Them Died.</title>
      <dc:creator>Dmitry Chervonyi</dc:creator>
      <pubDate>Fri, 19 Jun 2026 13:55:03 +0000</pubDate>
      <link>https://dev.to/dmytro_chervonyi/i-built-12-apps-with-ai-heres-where-every-one-of-them-died-2dcn</link>
      <guid>https://dev.to/dmytro_chervonyi/i-built-12-apps-with-ai-heres-where-every-one-of-them-died-2dcn</guid>
      <description>&lt;p&gt;I'm not a developer. I run marketing for a living.&lt;/p&gt;

&lt;p&gt;But like everyone else this year, I opened Lovable one night, described an app, and watched it appear on my screen in four minutes. Working. Clickable. Mine.&lt;/p&gt;

&lt;p&gt;So I built another. And another. Over a few months I built twelve — a pricing calculator, an internal dashboard, a little tool for a client, a landing page, a thing that scratched a personal itch I'd had for years.&lt;/p&gt;

&lt;p&gt;All twelve are dead. And here's the part that took me embarrassingly long to notice: &lt;strong&gt;they all died in exactly the same place.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The graveyard
&lt;/h2&gt;

&lt;p&gt;Let me walk you through it, because the pattern is the whole point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;App #1 — a pricing calculator (Lovable).&lt;/strong&gt; Beautiful. Worked perfectly in the preview. I hit "Publish" and got a &lt;code&gt;something.lovable.app&lt;/code&gt; URL. I needed it on my own domain, in front of a client, looking like it belonged to me. That last 5% was a wall. The app never left the preview.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;App #3 — an internal dashboard (Bolt).&lt;/strong&gt; Ran great until it needed an actual backend and environment variables. I spent a Saturday in config files I didn't understand, copying error messages into three different chatbots. Sunday night I closed the tab.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;App #5 — a Claude artifact.&lt;/strong&gt; Genuinely the cleanest thing I'd ever made. It lived inside a chat window. I could not send anyone a link that survived past the conversation. It was real and unreachable at the same time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;App #8 — a landing page (v0).&lt;/strong&gt; It handed me a Next.js repo. I'm a marketer. You might as well have handed me a jet engine and wished me luck.&lt;/p&gt;

&lt;p&gt;I'll stop there. You get it. Twelve different ideas, twelve different tools, one identical cause of death.&lt;/p&gt;

&lt;h2&gt;
  
  
  The thing nobody tells you
&lt;/h2&gt;

&lt;p&gt;Every AI builder sells you the same magic: &lt;em&gt;describe it, and it exists.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And that part is true now. Building is solved. For people like me — people who can't write the code but know exactly what they want — the hard part of software just evaporated.&lt;/p&gt;

&lt;p&gt;Except "it exists" and "it's live" are two completely different things, and the entire industry quietly lets you confuse them.&lt;/p&gt;

&lt;p&gt;"It exists" means it works on your screen.&lt;br&gt;
"It's live" means a stranger can open a URL, on your domain, and it still works tomorrow.&lt;/p&gt;

&lt;p&gt;The gap between those two sentences is where all twelve of my apps died. It's deployment, hosting, domains, environment variables, the stuff that has a hundred years of accumulated developer assumptions baked into it. AI got me from zero to a working app. Then it dropped me at the foot of a wall it never mentioned existed, and the wall was built for someone with a CS degree.&lt;/p&gt;

&lt;p&gt;That's the cruel joke of vibe coding right now. The tools democratized the creative half and left the boring, load-bearing half exactly as gatekept as it always was.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed
&lt;/h2&gt;

&lt;p&gt;I'd love to tell you I learned DevOps. I didn't. I have a job.&lt;/p&gt;

&lt;p&gt;What actually happened is I got annoyed enough to go looking for the missing step — the thing that takes "works on my screen" and turns it into "here's a link" without asking me to understand a single config file. I ended up close enough to the people solving it that I became, more or less, user zero of the fix.&lt;/p&gt;

&lt;p&gt;I'm not going to pitch you here. dev.to can smell a pitch from three scrolls away, and honestly the product matters less than the realization, which is this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're building with AI and your apps keep dying, you are probably not bad at building. You're hitting the one step the demos skip.&lt;/strong&gt; Naming that wall out loud changed how I work more than any new model did. I stopped treating "it runs" as the finish line. The finish line is a URL someone else can open.&lt;/p&gt;

&lt;p&gt;Eleven of my twelve apps are still dead. I'm fine with it — they were practice. The twelfth one is live, on my domain, and someone I've never met used it last week.&lt;/p&gt;

&lt;p&gt;That's the only version of "done" that counts.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you've vibe-coded something that's stuck in a preview right now — what tool was it, and where exactly did it stall? I'm collecting these. The death points are weirdly consistent and I don't think it's a coincidence.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>vibecoding</category>
      <category>webdev</category>
      <category>buildinpublic</category>
    </item>
  </channel>
</rss>
