Ship today

Ship your first vibe-coded app today, in one afternoon

If you got here from a thread and you want a live URL by tonight, here is the realistic path. One sentence into the prompt, then a streaming preview that is already a public web URL the moment the model stops typing. No signup. No deploy step. No DNS.

M
Matthew Diakonov
6 min read
Direct answer (verified 2026-05-18)

Open mk0r.com on your phone or laptop. Type one sentence describing the app. The streaming HTML preview is already live at a public URL of shape <vmId>.mk0r.com the moment the model finishes. No signup, no deploy.

The single honest cap: the sandbox lives one hour by default before reclamation. The constant is E2B_TIMEOUT_MS = 3_600_000 at src/core/e2b.ts line 33.

The four-step path, from a phone, this afternoon

  1. 1

    Open mk0r.com

    Phone or laptop. No account screen. The cursor lands in the prompt box.

  2. 2

    Type one sentence

    Describe the app the way you would say it out loud. Specific beats clever.

  3. 3

    Watch the HTML stream

    Quick mode renders the preview character by character as Claude Haiku writes it.

  4. 4

    Share the URL

    The preview is already live at a public hostname. Copy it, paste it, it works.

Step 1. Type one sentence. Specific beats clever.

The prompt box is the entire first page. There is no project setup ahead of it. The thing that separates apps that ship today from apps that drag into next week is the shape of that first sentence. Generic prompts produce generic apps. Specific prompts produce something you would actually use.

Compare these two openers. Both work. One ships tonight, one wanders for an hour.

// vague
a habit tracker app
// specific, ships today
a one-screen sleep tracker that asks me one slider question between 0 and 10 at bedtime, saves each answer to localStorage with the date, and shows a small bar chart of the last 14 nights

The second prompt has scope (one screen), inputs (a slider), persistence (localStorage), and a view (a small chart). That is enough constraint that the model can finish the file. The first prompt has none of that, so the model invents constraints, and you spend the next forty minutes correcting choices you never wanted to make.

Step 2. Watch the HTML stream into the preview

This is the part most write-ups skip past because they are used to a build-and-wait loop. In Quick mode there is no build. Claude Haiku streams the HTML, CSS, and JavaScript one character at a time straight into the preview iframe. You watch the page assemble itself. By the time the final closing tag is written, the app is already running on your screen, and it is already at a public URL.

What the first 30 seconds looks like
mk0r preview

[ mk0r.com ] Describe the app you want to build...

1/5Open the site. No login wall, no welcome modal.

That last frame is the part that surprises people. The URL you are looking at in the preview pane is not a localhost stub. It is the same URL anyone else can open. There is no separate share step, because there is nothing to deploy. The proxy that makes this work is small enough to read in one sitting, and it is in the next section.

Step 3. The anchor fact: where the live URL actually comes from

The reason you do not have to deploy anything is that the preview already lives on a public hostname. The mk0r site has a wildcard DNS record on *.mk0r.com pointing at the load balancer, and a Node-runtime proxy in front of it that rewrites any subdomain request to the corresponding E2B sandbox. The whole proxy is 104 lines. The line that does the work is line 68, and it looks exactly like this:

src/proxy.ts
// line 8
//   <vmId>.mk0r.com      ->  3000-<vmId>.e2b.app  (https)

// line 68
target.hostname = `3000-${hit.sub}.e2b.app`;

When you open a7f3c2.mk0r.com, the request is routed to 3000-a7f3c2.e2b.app, which is your sandbox's dev server. There is no "publish to prod" step. The dev server is the production URL until you actively swap it for a custom domain.

The honest constraint is the sandbox lifespan. It is one hour by default, set in one line at the top of src/core/e2b.ts:

src/core/e2b.ts line 33
const E2B_TIMEOUT_MS = 3_600_000; // 1 hour

After an hour of idleness the sandbox is reclaimed. Each request extends the window, so a URL someone is actively poking at stays up. A URL nobody touches dies on schedule. For a first-day demo posted on a Twitter reply, the hour is plenty. If you want it to live forever, that is a separate, deliberate step (Pro plan, custom domain) and not a precondition to shipping anything today.

Step 4. The two paths that come after the first preview

Most tools front-load the choice between "quick demo" and "real codebase" and force you to pick before you have written a single sentence. mk0r flips that. You start in Quick mode by default. If Quick can hold your idea, you are done. If it cannot, you switch to VM mode and the same prompt becomes the seed for a real Vite + React + TypeScript project in a Linux sandbox.

The two iteration loops

One file. HTML, CSS, and JavaScript streamed by Claude Haiku straight to the preview. State lives in localStorage if you ask for it. Iteration is regeneration: each follow-up prompt rewrites the file.

  • Seconds to first render
  • Zero build, zero install
  • One-screen apps, calculators, configurators, single-file games
  • Trade-off: not great at multi-component state

For your first app today, default to Quick. Switch to VM only if you actually hit the wall (multiple screens, state that needs to outlive the file, or a feature Quick visibly cannot hold). Do not pre-emptively switch to VM because it sounds more serious; the seconds-to-render gap matters when your motivation is "ship tonight".

What you can honestly ship in an afternoon

The honest envelope is: one screen, one job, no shared backend. That is bigger than it sounds. Most apps people actually use day to day fit inside it. Pick one that scratches a real itch you have, not the most impressive thing you can think of. The first one is for proving the loop works for you.

  • A unit converter for a hobby (climbing grades, brewing gravity, cycling watts to pace).
  • A bedtime sleep slider that saves a number a day to localStorage and shows a chart of the last two weeks.
  • A focus timer keyed to the length of one specific song you already like.
  • A custom dice roller for a tabletop system you actually play.
  • A configurator that outputs Tailwind classes, then copies them to the clipboard.
  • A regex tester that highlights matches inline as you type.
  • A one-screen reaction game you can hand a kid for ten minutes.
  • A reading speed estimator on text you paste in.

None of those need a login, a database, or anyone else's account. All of them can be a working URL inside the hour. The ones that do not work in this shape (multi-user inboxes, collaborative whiteboards, anything with a real payment flow) are also worth building, just not the first thing you do this afternoon. Start with the one-screen version of the bigger idea and ship that.

What stops people, and how to skip past it

The thing that kills first-day shipping is almost never the build. It is the steps before and after the build. The before-build trap is opening five tools to compare them, reading two newsletters about "the right stack", and ending the afternoon with tabs but no app. The after-build trap is the deploy gauntlet: account, hosting, DNS, SSL, env vars. Quick mode skips the after-build trap entirely because there is no separate deploy. Your job is to skip the before-build trap by writing the sentence and pasting it into the box within the first five minutes of sitting down.

If you are reading this on your phone in line somewhere, that is actually a good place to do step one. You probably will not finish on a phone, but you will get the first preview and a URL you can send to one person. That alone breaks the pattern of "I'll build something this weekend" and gets the loop unstuck.

Stuck on the sentence? Tell me the idea, I will tell you the shape.

Bring whatever you almost typed into the box. I will tell you whether it is a Quick-mode shape, a VM-mode shape, or a 'two ideas in a trench coat' shape. Free call, no pitch.

Frequently asked questions

How do I ship my first app today, from zero?

Open mk0r.com on whatever device you are reading this on. Type one sentence describing the app. Pick Quick mode if there is no persistence to speak of, VM mode if there is. As soon as the model finishes streaming, the preview is at a public URL of shape <code>&lt;vmId&gt;.mk0r.com</code> that you can copy and send to anyone. No signup, no deploy step, no DNS, no SSL setup. The full loop from landing on the homepage to having a shareable URL is usually under five minutes for a single-screen idea.

Is the preview URL really shareable, or is it localhost?

It is on the open internet, on HTTPS, immediately. The proxy that makes this work is 104 lines, in <code>src/proxy.ts</code>. Line 68 does the actual rewrite: <code>target.hostname = `3000-${hit.sub}.e2b.app`</code>. Your subdomain on mk0r.com is forwarded to the E2B sandbox running your app on port 3000. There is no separate deploy step because the preview was always a public URL; you were just looking at it through the editor.

What is the catch?

The sandbox has a 1 hour idle TTL. The constant is at <code>src/core/e2b.ts</code> line 33: <code>const E2B_TIMEOUT_MS = 3_600_000</code>. After one hour with no activity, the sandbox is reclaimed and the URL stops responding. If you want it to live past that window, you have two options: keep tapping it (each request extends the timer), or publish to a real custom domain (requires a Pro plan). The honest framing is that the free path gets you a real live URL fast, not a permanent one.

What kind of app actually ships in one afternoon?

Anything with one screen, one job, and no real auth. A unit converter for a hobby you have. A sleep tracker that asks one slider question at bedtime. A focus timer matched to one song length. A custom dice roller for a homebrew tabletop system. A configurator that outputs Tailwind classes. A reaction game for a kid. A regex tester that highlights matches inline. None of those need a backend in a useful way. All of them can be a real working URL inside the hour. If your idea has the words 'login', 'sync across devices', or 'everyone can see', it is a different project and a different day.

Quick mode vs VM mode, how do I pick?

Quick mode (default) streams a single HTML file written by Claude Haiku. State lives in <code>localStorage</code> if you ask for it. Best for one-screen toys, calculators, configurators, single-file games. VM mode boots a real Linux sandbox with Vite, React, TypeScript, and Tailwind, and an agent that edits files. Best when you need components, multiple files, or want to iterate by reprompting. The trade-off is honest: Quick is seconds to first render, VM is under a minute (the template is pre-baked and boots in ~2.5s, plus the dev server start). For a first app today, default to Quick. Move to VM only if Quick visibly cannot hold the idea.

Do I need to know any code?

No, for the first draft. The whole site is designed so the first useful output happens before you have made any technical decisions. Where code knowledge starts to matter is iteration. If the model gets something wrong and you can read the generated HTML, you can describe the fix in product terms ('the date is showing as a number, please format it as Month Day'). If you cannot read the output at all, you are limited to vibes-based feedback, which works for a while and then stops working. The leverage point is being able to skim the diff, not write it.

What if I hate the first version?

Reprompt. Each follow-up message refines what is already there. Describe the change in plain words. Quick mode regenerates the file, VM mode hands the diff to a Claude agent that runs in the sandbox, edits the file, restarts the dev server, and opens Chromium to screenshot back. You get a small undo/redo history per session, and there is a 'revert' control if a prompt visibly made things worse. The loop is fast enough that throwing away three drafts is cheaper than agonizing over one.

How is this different from Claude Artifacts or v0 or Bolt?

Artifacts run inside chat, which means there is no public URL to share, and the iteration loop is tied to a particular conversation. v0 and Bolt have full editor experiences and richer codebases, but they put a signup, a project step, and a deploy step between you and a live URL. mk0r's bet is the opposite trade: the editor is simpler, the model selection is narrower (Haiku for Quick, Sonnet for VM), and the entire deploy ceremony is replaced by 'the preview is already public'. If you are an experienced builder who wants production scaffolding from minute one, the bigger tools win. If you are trying to ship the first thing today, the friction floor matters more than the ceiling.

Can I take the code out later?

Yes. VM mode runs against a real Git repo inside the sandbox. You can read the file tree, copy out individual files, or clone the whole thing if you want to take it elsewhere. The codebase is intentionally a normal Vite + React + TypeScript + Tailwind shape so it imports cleanly into whatever editor or hosting you eventually pick. Quick mode is a single HTML file, even simpler: View Source, save the file. The lock-in is essentially zero.

mk0r.AI app builder
© 2026 mk0r. All rights reserved.

How did this page land for you?

React to reveal totals

Comments ()

Leave a comment to see what others are saying.

Public and anonymous. No signup.