<?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: David Bos</title>
    <description>The latest articles on DEV Community by David Bos (@david_bos_4883c02b403926c).</description>
    <link>https://dev.to/david_bos_4883c02b403926c</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%2F4152020%2F061bf3de-2d1f-4247-965c-e34accf135a7.png</url>
      <title>DEV Community: David Bos</title>
      <link>https://dev.to/david_bos_4883c02b403926c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/david_bos_4883c02b403926c"/>
    <language>en</language>
    <item>
      <title>Ship on a free link first, buy the domain when it has visitors</title>
      <dc:creator>David Bos</dc:creator>
      <pubDate>Wed, 30 Sep 2026 10:57:53 +0000</pubDate>
      <link>https://dev.to/david_bos_4883c02b403926c/ship-on-a-free-link-first-buy-the-domain-when-it-has-visitors-1i9f</link>
      <guid>https://dev.to/david_bos_4883c02b403926c/ship-on-a-free-link-first-buy-the-domain-when-it-has-visitors-1i9f</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I'm behind DropTheHassle.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In September someone posted this on Hacker News: &lt;a href="https://news.ycombinator.com/item?id=49794120" rel="noopener noreferrer"&gt;"I'm addicted to buying domains for my vibe-coded apps that get 0 visitors"&lt;/a&gt;. The post had no text, just the title. It didn't need any. The comments read like a support group.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I feel so bad when I look at my domains after few months lol." (arpanghoshal, the poster)&lt;/p&gt;

&lt;p&gt;"It's not you, it's all of us" (wakaru44)&lt;/p&gt;

&lt;p&gt;"I have porkbun open in another tab." (jtap)&lt;/p&gt;

&lt;p&gt;"I'm nearly up to 100" (alexnewman)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I build a tool that sells domains, so I have an obvious interest here. But I think the thread gets to something real about how side projects are built now, and the advice in it was better than "just stop".&lt;/p&gt;

&lt;h2&gt;
  
  
  Why we buy the domain first
&lt;/h2&gt;

&lt;p&gt;When an AI can build a working app in an afternoon, the domain becomes the most "real" thing you can do next. It costs money, it has your idea's name on it, and it feels like commitment.&lt;/p&gt;

&lt;p&gt;One commenter named it:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Buying a domain is pretend work. It feels like progress, but doesn't make a project/product better…" (brudgers)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Another, more fun, version:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"buying domains that just seem fun or cool" [...] "What have I done with it? Nothing." (davidsojevic)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The problem isn't the one-time cost. It's the renewals. A year later the project is dead, the domain is still charging you, and every renewal email is a small reminder.&lt;/p&gt;

&lt;h2&gt;
  
  
  Camp 1: use the free link
&lt;/h2&gt;

&lt;p&gt;The most common advice was to not buy anything until you have to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Get a single domain and use subdomains till one of your projects pop off. Or use the cloudflare worker/vercel domain that is by-default provided" (datron)&lt;/p&gt;

&lt;p&gt;"someshit.vercel.app bridges the gap." (nsnsnsnsjsj)&lt;/p&gt;

&lt;p&gt;"If you get one good domain, subdomains work really well" (toast0)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's sound. A free platform link (&lt;code&gt;*.vercel.app&lt;/code&gt;, &lt;code&gt;*.pages.dev&lt;/code&gt;, &lt;code&gt;*.netlify.app&lt;/code&gt;, &lt;code&gt;*.github.io&lt;/code&gt;) is plenty to find out whether anyone cares.&lt;/p&gt;

&lt;h2&gt;
  
  
  Camp 2: keep it clean from day one
&lt;/h2&gt;

&lt;p&gt;One comment pushed back, and it's worth reading in full:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"if one of the side-projects takes off, it's a real pain to disentangle… migrating a project to its own domain all to save less than $100… keep your projects clean from the get go" (takinola)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is the part people forget. If project #7 lives at &lt;code&gt;project7.yourname.com&lt;/code&gt;, then its links, its search history, its users' bookmarks, maybe its cookies and its email all hang off your personal domain. Moving it later is a migration, not a rename.&lt;/p&gt;

&lt;h2&gt;
  
  
  Both camps are right, so combine them
&lt;/h2&gt;

&lt;p&gt;The rule I use, and the one I'd suggest:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ship on a free link first. Buy the domain when it has visitors. But give every project its own free link, not a subdomain of your personal domain.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That keeps the cost at zero while you find out whether it matters, and it avoids the takinola problem: each project is already its own site. When one earns a name, you point a domain at that site. You don't untangle it from everything else.&lt;/p&gt;

&lt;p&gt;What counts as "has visitors" is up to you. Mine is roughly: someone I didn't send it to used it, or I'm about to put the link somewhere permanent (a bio, a client proposal, a launch post). Before that, the free link is enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make the free link a real deploy
&lt;/h2&gt;

&lt;p&gt;The failure mode isn't only buying domains too early. It's also never shipping at all, because "I'll deploy it properly once I have the domain."&lt;/p&gt;

&lt;p&gt;Whatever host you use, get it on a public URL the day you build it. Open it on your phone and send it to one person. That's the test that matters.&lt;/p&gt;

&lt;p&gt;If you build with Claude Code, Cursor, Codex or Windsurf, here's the version I built, which needs no account:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; dropthehassle deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It uploads the built folder and prints a live &lt;code&gt;name.dropthehassle.app&lt;/code&gt; link with HTTPS, plus a claim link. Your agent can also do it through an MCP server (&lt;code&gt;https://dropthehassle.com/mcp&lt;/code&gt;) with no token. The honest details:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the claim link works for 7 days; an unclaimed site is removed after that;&lt;/li&gt;
&lt;li&gt;until you claim it, the site is served with &lt;code&gt;noindex&lt;/code&gt; and shows a small, dismissible "Claim this site" bar, so it's a preview, not a launch;&lt;/li&gt;
&lt;li&gt;static sites only (HTML or a build output), no server code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When it does earn a domain
&lt;/h2&gt;

&lt;p&gt;Two things to check before you buy, wherever you buy:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The renewal price, not the first-year price.&lt;/strong&gt; Plenty of registrars discount the first year. The renewal is what you'll actually live with, and it's the number behind the guilt in that thread.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Whether you'll need to touch DNS.&lt;/strong&gt; If you buy the domain where the site already lives, you often don't. If you buy it elsewhere, you're adding records at the registrar.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For what it's worth, on DropTheHassle a &lt;code&gt;.com&lt;/code&gt; is €19 a year including VAT in the EU, or $19 elsewhere, and it's the same every year. If you buy it for a site that's already there, it goes live on that site after payment, with no DNS records to edit. A domain you already own needs one A record. And if you let your AI handle it: it can search for names and publish the site, but it can never pay. The checkout is always your click.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Build it, deploy it the same day, on a free link.&lt;/li&gt;
&lt;li&gt;Give each side project its own link, not a subdomain you'll have to untangle.&lt;/li&gt;
&lt;li&gt;Buy the domain when the project has visitors, and check the renewal price when you do.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And if you already have a drawer of domains with nothing on them: as one commenter put it: "ARE U ME" (wompapumpum). You're not the only one.&lt;/p&gt;

&lt;p&gt;If you want the step-by-step for a specific tool: &lt;a href="https://dropthehassle.com/guides?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=push100" rel="noopener noreferrer"&gt;guides for Claude Code, Cursor, Lovable and more&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I'm behind DropTheHassle.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>sideprojects</category>
      <category>webdev</category>
      <category>startup</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Deploy from Cursor or Windsurf with a remote MCP server (no account, no token)</title>
      <dc:creator>David Bos</dc:creator>
      <pubDate>Wed, 30 Sep 2026 10:49:11 +0000</pubDate>
      <link>https://dev.to/david_bos_4883c02b403926c/deploy-from-cursor-or-windsurf-with-a-remote-mcp-server-no-account-no-token-16ak</link>
      <guid>https://dev.to/david_bos_4883c02b403926c/deploy-from-cursor-or-windsurf-with-a-remote-mcp-server-no-account-no-token-16ak</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I'm behind DropTheHassle.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you build in Cursor or Windsurf, the agent already writes the code, runs the build and fixes the errors. The one thing it usually can't do is put the result online. It hands you a &lt;code&gt;dist/&lt;/code&gt; folder and a list of hosting options.&lt;/p&gt;

&lt;p&gt;MCP fixes that. You add a server, and the agent gets tools it can call. This post sets up a deploy server that needs no account and no token for the first publish. I build it, so here's the setup, what you get back, and where it stops.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why MCP instead of a terminal command
&lt;/h2&gt;

&lt;p&gt;You can deploy from a terminal with &lt;code&gt;npx -y dropthehassle deploy&lt;/code&gt;, and in Cursor the agent can run that for you. MCP is nicer in three cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You want the agent to &lt;strong&gt;decide when&lt;/strong&gt; to deploy ("put it online when the build passes").&lt;/li&gt;
&lt;li&gt;You want &lt;strong&gt;structured results&lt;/strong&gt;: the tool returns the live URL and the claim link as data, not as terminal text the model has to parse.&lt;/li&gt;
&lt;li&gt;You want the agent to &lt;strong&gt;check a domain name&lt;/strong&gt; without leaving the chat.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setup in Cursor
&lt;/h2&gt;

&lt;p&gt;Cursor reads &lt;code&gt;.cursor/mcp.json&lt;/code&gt; in the project, or &lt;code&gt;~/.cursor/mcp.json&lt;/code&gt; for all projects. Remote servers use a &lt;code&gt;url&lt;/code&gt; key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"dropthehassle"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://dropthehassle.com/mcp"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No &lt;code&gt;headers&lt;/code&gt; block is needed for the first deploy. Open the MCP section in Cursor's settings to check it connected; you should see tools like &lt;code&gt;deploy_site&lt;/code&gt; and &lt;code&gt;search_domain&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup in Windsurf
&lt;/h2&gt;

&lt;p&gt;It depends on which agent you use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cascade&lt;/strong&gt; (the older agent) uses &lt;code&gt;mcp_config.json&lt;/code&gt;, and remote servers take a &lt;code&gt;serverUrl&lt;/code&gt; key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"dropthehassle"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"serverUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://dropthehassle.com/mcp"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Devin Local&lt;/strong&gt; (the default for new tabs) configures servers through the Devin CLI config instead. There, use the local stdio server, which also works without a token:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"dropthehassle"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dropthehassle-mcp"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Put that in &lt;code&gt;.devin/mcp_config.local.json&lt;/code&gt;, or run &lt;code&gt;devin mcp add dropthehassle -- npx -y dropthehassle-mcp&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What works without an account
&lt;/h2&gt;

&lt;p&gt;With no token, the server exposes three tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;deploy_site&lt;/code&gt;: publishes a static site to a free &lt;code&gt;name.dropthehassle.app&lt;/code&gt; link with HTTPS, and returns a claim link.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;search_domain&lt;/code&gt;: checks whether a domain is free and what it costs.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;whoami&lt;/code&gt;: confirms the connection and lists what works.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The other tools (listing your sites, renaming the free link, pointing a domain, linking a backend, getting a checkout link) need a token from an account.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploying
&lt;/h2&gt;

&lt;p&gt;Ask the agent something like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Build the site and publish the &lt;code&gt;dist&lt;/code&gt; folder with DropTheHassle. Give me the live link and the claim link.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Cursor asks for approval before it runs an MCP tool by default, and you can expand the call to see the arguments. The server's own instructions tell the agent it &lt;strong&gt;must&lt;/strong&gt; pass the claim link on to you, so you should see both links in the chat.&lt;/p&gt;

&lt;p&gt;This is what the tool returned when I called it with a one-file test site (claim link removed):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Live at https://warm-finch-339.dropthehassle.app […]. Give the human this claim link
(it expires in 7 days): https://dropthehassle.com/claim#… This site is not on an account until they claim it.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One detail matters here. &lt;strong&gt;The remote server can't read your disk.&lt;/strong&gt; Over the URL, &lt;code&gt;deploy_site&lt;/code&gt; receives the files inline: each file as a path plus its content, as UTF-8 text or base64. The agent reads the built files and sends them. That works well for a normal static site. For a folder with lots of images or video it's a lot of data to push through a tool call. For those, use the local server (&lt;code&gt;npx -y dropthehassle-mcp&lt;/code&gt;), which uploads the folder itself as a zip of at most 100 MB, or run the CLI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checking a domain
&lt;/h2&gt;

&lt;p&gt;This is a real response from &lt;code&gt;search_domain&lt;/code&gt; for a made-up name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;push100testsite.com: AVAILABLE (EUR 19/yr incl. VAT in the EU, USD 19 elsewhere, the same every year). […]
Buying is a human step in the dashboard; I can search and suggest, not spend.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That second line is the design: &lt;strong&gt;your AI can publish, but it can never spend your money.&lt;/strong&gt; No tool buys anything. With an account, the agent can fetch a checkout link for a domain on your site; you open it and pay yourself. After payment the domain goes live on that site, with no DNS records to edit. A &lt;code&gt;.com&lt;/code&gt; is €19 a year including VAT in the EU, or $19 elsewhere, and it's the same every year. If you already own a domain, you point it with one A record instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  After you claim
&lt;/h2&gt;

&lt;p&gt;The claim link is valid for &lt;strong&gt;7 days&lt;/strong&gt;. Until you claim the site:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it's served with &lt;code&gt;noindex, nofollow&lt;/code&gt;, so search engines are asked to skip it;&lt;/li&gt;
&lt;li&gt;visitors see a small, dismissible bar: "Made with DropTheHassle · Claim this site · Report abuse";&lt;/li&gt;
&lt;li&gt;after 7 days an unclaimed site is removed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once it's claimed and you want the account tools, create a token in the dashboard (it starts with &lt;code&gt;dth_&lt;/code&gt;). For the local server, put it in the &lt;code&gt;env&lt;/code&gt; block as &lt;code&gt;DTH_TOKEN&lt;/code&gt;. For the remote URL, send it as an &lt;code&gt;Authorization: Bearer&lt;/code&gt; header. Never commit it to the repo, and don't paste a placeholder value; leave it unset until you have the real one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Static only.&lt;/strong&gt; A folder that still needs a build is refused, and so is anything that needs a server to run (PHP, Node, Python). If you have a backend, host it elsewhere; with an account, &lt;code&gt;set_backend&lt;/code&gt; can put it behind your name under a path such as &lt;code&gt;/api&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remote means inline files.&lt;/strong&gt; See above. Big assets go through the local server or the CLI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client-side routes survive a refresh:&lt;/strong&gt; a path that isn't a real file (say &lt;code&gt;/about&lt;/code&gt;) gets your &lt;code&gt;index.html&lt;/code&gt;, while a missing file such as &lt;code&gt;/missing.png&lt;/code&gt; still returns a 404.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team policies can block it.&lt;/strong&gt; Cursor lets enterprise admins restrict which MCP URLs and commands may run. If the server doesn't show up, check with your admin.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud agents are a different environment.&lt;/strong&gt; Background or cloud agents run elsewhere, with their own network rules. I've written this for the local editor.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The point
&lt;/h2&gt;

&lt;p&gt;The nice thing about an agent-driven deploy isn't saving 30 seconds. It's that the loop closes: the agent builds, publishes, and hands you a URL you can open on your phone. That's the moment a side project becomes real enough to show someone.&lt;/p&gt;

&lt;p&gt;Setup details and more examples: &lt;a href="https://dropthehassle.com/guides/deploy-with-your-ai-mcp?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=push100" rel="noopener noreferrer"&gt;Deploy with your AI (MCP guide)&lt;/a&gt;. Cursor-specific steps, including the domain: &lt;a href="https://dropthehassle.com/guides/cursor-site-own-domain?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=push100" rel="noopener noreferrer"&gt;Cursor site on your own domain&lt;/a&gt;. Windsurf: &lt;a href="https://dropthehassle.com/guides/windsurf-deploy-custom-domain?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=push100" rel="noopener noreferrer"&gt;Windsurf deploy to a custom domain&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If something in the setup didn't work for you, post the error in the comments. I'd rather fix the rough edges than have you guess.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I'm behind DropTheHassle.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>cursor</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>Deploy a Claude Code site in one command, no account</title>
      <dc:creator>David Bos</dc:creator>
      <pubDate>Wed, 30 Sep 2026 10:47:36 +0000</pubDate>
      <link>https://dev.to/david_bos_4883c02b403926c/deploy-a-claude-code-site-in-one-command-no-account-1f04</link>
      <guid>https://dev.to/david_bos_4883c02b403926c/deploy-a-claude-code-site-in-one-command-no-account-1f04</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I'm behind DropTheHassle.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Claude Code is very good at the first 95%. You describe a landing page, a portfolio or a small tool, and a few minutes later there's a folder with an &lt;code&gt;index.html&lt;/code&gt; or a &lt;code&gt;dist/&lt;/code&gt; directory and a dev server on &lt;code&gt;localhost&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Then comes the last 5%: getting it on a real URL that you can send to someone. That's usually where a side project stalls. You open a hosting dashboard, create an account, connect a repo, pick a framework preset, and by the time you're done you've forgotten why you built the thing.&lt;/p&gt;

&lt;p&gt;This post shows the shortest path I know: one command, no account, a live HTTPS link. I build the tool, so read it with that in mind. I'll also be clear about what it doesn't do.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;static&lt;/strong&gt; site: plain HTML, or the output of a build (&lt;code&gt;npm run build&lt;/code&gt;). Claude Code usually builds with Vite, Astro or plain HTML, and all of those produce a static folder.&lt;/li&gt;
&lt;li&gt;Node.js, so &lt;code&gt;npx&lt;/code&gt; works.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's it. No account, no token, no config file.&lt;/p&gt;

&lt;h2&gt;
  
  
  The command
&lt;/h2&gt;

&lt;p&gt;From the project folder, after building:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run build
npx &lt;span class="nt"&gt;-y&lt;/span&gt; dropthehassle deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The CLI looks for the site in this order: a folder with &lt;code&gt;index.html&lt;/code&gt;, or &lt;code&gt;dist/&lt;/code&gt;, &lt;code&gt;build/&lt;/code&gt;, &lt;code&gt;out/&lt;/code&gt;, &lt;code&gt;_site/&lt;/code&gt; or &lt;code&gt;public/&lt;/code&gt;. You can also pass the folder explicitly: &lt;code&gt;npx -y dropthehassle deploy dist&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Here's the real output from a test deploy I ran this week (claim link removed):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Uploading your site...

  Linked this folder to your site (.dropthehassle.json, kept out of git).

  Live at https://sunny-lynx-807.dropthehassle.app
  Claim it (the link works for 7 days, then an unclaimed site is removed):
  https://dropthehassle.com/claim#…
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The site was live on HTTPS (a Let's Encrypt certificate) straight away. Client-side routes survive a refresh too: a path that isn't a real file gets your &lt;code&gt;index.html&lt;/code&gt; (a missing file such as &lt;code&gt;/missing.png&lt;/code&gt; still returns a 404).&lt;/p&gt;

&lt;h2&gt;
  
  
  Let Claude Code run it
&lt;/h2&gt;

&lt;p&gt;You don't have to type the command yourself. Ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Build the site and deploy it with &lt;code&gt;npx -y dropthehassle deploy&lt;/code&gt;. Show me the live link and the claim link.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude Code asks permission before it runs the shell command, so you see exactly what's happening. If you deploy often, add one line to your project's &lt;code&gt;CLAUDE.md&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Deploy&lt;/span&gt;
Run &lt;span class="sb"&gt;`npm run build &amp;amp;&amp;amp; npx -y dropthehassle deploy`&lt;/span&gt;. Always show me the claim link.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Updating the site
&lt;/h2&gt;

&lt;p&gt;The first deploy writes a small &lt;code&gt;.dropthehassle.json&lt;/code&gt; file into the folder. It links the folder to the site. Run the same command again and it updates the same site instead of creating a new one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Linked folder: updating https://sunny-lynx-807.dropthehassle.app in place.

  Uploading your site...

  Live at https://sunny-lynx-807.dropthehassle.app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That file contains the site's key. The CLI keeps it out of git; don't commit it or paste it anywhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  What an unclaimed site looks like
&lt;/h2&gt;

&lt;p&gt;These are the parts you should know before you send the link around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The claim link works for 7 days.&lt;/strong&gt; If you don't claim the site in that time, it's removed. Open the link and sign in to keep it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unclaimed sites are not indexed.&lt;/strong&gt; I checked the headers: an anonymous site is served with &lt;code&gt;noindex, nofollow&lt;/code&gt;, so search engines are asked to skip it. That's fine for "show a friend" or "test on my phone". It's not how you'd launch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;There's a small bar at the bottom&lt;/strong&gt; that says "Made with DropTheHassle", with "Claim this site" and "Report abuse" links. Visitors can dismiss it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So think of the anonymous link as a preview you can share, and claim it when you want to keep it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Putting it on your own domain
&lt;/h2&gt;

&lt;p&gt;When the project earns a real name, you have two options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Buy the domain with the site.&lt;/strong&gt; A &lt;code&gt;.com&lt;/code&gt; is €19 a year including VAT in the EU, or $19 elsewhere, and it's the same every year. Because the domain and the site sit in the same place, there are no DNS records to edit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use a domain you already own.&lt;/strong&gt; Add one A record at your registrar.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Claude Code can check whether a name is free, but it can't buy it. The checkout is always a human click. That's deliberate: your AI can publish, but it can never spend your money.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Static sites only.&lt;/strong&gt; A folder that still needs a build is refused, and so is a site that needs a server to run (PHP, a Node server, Python). If your project has a backend, host that part elsewhere. With an account you can put it behind the same name under a path like &lt;code&gt;/api&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build first.&lt;/strong&gt; Point the command at the built output, not at the source folder.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Size.&lt;/strong&gt; Until you claim it, an anonymous site can be at most 25 MB (that's in the terms). After claiming, the normal account limits apply; signed-in uploads can be up to 100 MB.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code on the web (the cloud version) blocks it by default.&lt;/strong&gt; Cloud sessions run in a sandbox with a network allowlist. npm's registry is on the default list, so &lt;code&gt;npx&lt;/code&gt; downloads fine, but &lt;code&gt;dropthehassle.com&lt;/code&gt; is not, so the upload is blocked. Fix it in the environment settings: set network access to &lt;strong&gt;Custom&lt;/strong&gt;, add &lt;code&gt;dropthehassle.com&lt;/code&gt;, and keep the default list included. Or add &lt;code&gt;https://dropthehassle.com/mcp&lt;/code&gt; as a connector in claude.ai; connectors don't go through the sandbox network. Also note that each cloud session starts fresh, so the &lt;code&gt;.dropthehassle.json&lt;/code&gt; link is gone and a new session creates a new site. Claim the first one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't put tokens in the repo or in environment variables&lt;/strong&gt; that other people can read. The anonymous flow doesn't need a token at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why one command matters
&lt;/h2&gt;

&lt;p&gt;Most side projects don't die because the code is bad. They die at localhost. A live link changes how you treat the thing: you open it on your phone, send it to a friend, notice the broken button on mobile. That feedback loop is worth more than any hosting feature.&lt;/p&gt;

&lt;p&gt;So: build it, run one command, look at it on a real URL. Decide about the domain later.&lt;/p&gt;

&lt;p&gt;The full step-by-step guide, with the domain part in more detail, is here: &lt;a href="https://dropthehassle.com/guides/claude-code-website-online?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=push100" rel="noopener noreferrer"&gt;Deploy a Claude Code website to your own domain&lt;/a&gt;. If you'd rather let your editor's agent do the deploy through MCP, see &lt;a href="https://dropthehassle.com/guides/deploy-with-your-ai-mcp?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=push100" rel="noopener noreferrer"&gt;the MCP guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Questions or rough edges you hit? Tell me in the comments. I read them and fix what I can.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I'm behind DropTheHassle.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>claude</category>
    </item>
  </channel>
</rss>
