Blog ·
From localhost:3000 to a link your boss can open: a walkthrough with Claude Code
A hands-on walkthrough: a small tool built with Claude Code goes from localhost on a laptop to a permanent link behind an invite code, with a check at every step.
This is the hands-on companion to the guide You cannot send a localhost link. The guide explains why the link does not travel and when a tunnel is enough. This post follows one small app all the way from a laptop to a link a boss can open on a phone, with what you type, what you should see, and how to check each step. Nothing here needs a terminal skill beyond pasting.
The starting point
Say you asked Claude Code for a small tool to track customer requests: a form your teammates fill in, a list of what came in, a status per request. After a while the assistant says something like "your app is running at http://localhost:3000". It works on your screen. You paste the link into the team chat and the first reply is "it does not open for me".
That is expected. The app lives on your laptop and the link points to whoever reads it. To share it, the app has to live somewhere else. The rest of this post is that move.
What you need before starting:
- The folder Claude Code has been working in, with the app running.
- A GitHub account. The code will be stored there, in your account, and you can download it as a zip whenever you want.
- A White Ghost account on the Free plan (3 apps awake, one builder, every feature).
- Claude Code open in that folder.
Minute 0: what you tell Claude Code
Paste this into the conversation:
Install the ghosty CLI (npm install -g ghosty-cli), sign in with ghosty login, then run ghosty init in this folder to create the app and its repository. Push the code and run ghosty deploy until the app is live. Use --json output and tell me the final URL.
From here the assistant does the technical part and stops when it needs you.
Minute 1: the sign-in
The first stop is ghosty login. A link opens in your browser; you sign in with a magic link to your email, Google, GitHub or a passkey, and approve the connection once. Back in the conversation the command ends with a ready line that includes your email.
How to check: open console.whiteghost.ai in the browser. You are signed in and the dashboard is empty, waiting for a first app.
Minute 2: the interview
ghosty init asks a few questions: a name for the app, a one-line description of what it does, whether the backend is Node or Python, and whether it needs a database. For the requests tracker the answer to the last one is yes: a list that has to be there tomorrow is data, and data needs a place to live.
It also asks who can open the app. For a team tool the honest choice is the shared invite code: one code for everyone, so treat it like a shared password. Public means anyone with the link. Your own sign-in means the app asks for a login that Claude Code writes into it later.
How to check: a new repository appears in your GitHub account, and the app appears in the console dashboard with its nine pieces listed (deploy pipeline, database, code repository and so on), each with a status.
Minute 3: the code moves in
Claude Code moves the project into the structure the platform expects, points the code at the database the app now has, and pushes. You do not have to explain the project to it: every app also has an "Open in Claude Code" button and a "Copy the instructions" prompt with the app URL and the repository URL, for the day you start from the console instead.
How to check: the Deploys tab shows a build in progress, with its commit and its log.
Minute 5: the first build
Real builds of a full app with a frontend and a backend have taken 53 seconds and 1 minute 27 seconds. When the build is green, ghosty deploy reports the address the app now lives at. It is a permanent URL that does not change and does not depend on your laptop; if you own a domain, you can point it at the app later and the certificate is issued and renewed for you.
The test that matters
Take your phone, turn Wi-Fi off, open the URL. It asks for the invite code, you type it, and the requests tracker loads. That is the test localhost can never pass: the app is running somewhere that is not your computer.
Now put the laptop to sleep and try again from the phone. Still there.
Sending the link
Send the URL and the invite code to the team, ideally in two separate messages. Nobody needs a Claude account, an app store, or an install. The first visit after a quiet period takes a moment: the app scales to zero when idle and wakes up on the first request.
The next change
Two days later someone asks for a "priority" field. You ask Claude Code for it in the same folder, it pushes, the build runs, and everyone sees the new version at the same address. If a change ever breaks something, ghosty rollback or the Redeploy button on any earlier build brings the good version back while you fix it.
What this cost
Nothing so far: the Free plan covers 3 apps awake for one builder, with the database, secrets and access modes included. Solo ($19 a month) raises that to 10 apps awake, custom domains and 10 GB of file storage. The full detail is on the pricing page.
Where this walkthrough stops
- The invite code is one code for everyone, not per-person accounts. For named accounts, ask Claude Code to add the app's own sign-in.
- Changing the access mode later means editing and redeploying, not flipping a switch.
- Preview links for pull requests are public URLs; keep production data out of them.
Related
Frequently asked questions
How long does the first publish take with Claude Code and White Ghost?
One conversation. The sign-in and the short interview take a couple of minutes of your attention; the first build of a real app with a frontend and a backend has taken 53 seconds and 1 minute 27 seconds. Most of the time goes to reading what the assistant reports back.
What do I do if the build fails?
Open the Deploys tab: every build keeps its log. Paste the last lines of the log into Claude Code and ask it to fix the cause and push again. If a later change breaks an app that was working, ghosty rollback or the Redeploy button on the previous build puts the good version back while you fix it.
Can I keep changing the app after it is published?
Yes, that is the normal flow. Keep asking Claude Code for changes in the same folder; every push goes live at the same address, so the people you shared the link with see the new version without doing anything.
Does the person who opens my link need to install anything or have a Claude account?
No. The app is a normal website at a normal URL. With the shared invite code mode they type the code once; with the public mode they just open it.