Inspiration
It always starts the same way. Friday night. Five people. Someone says “I’ll host.” Twenty minutes later that someone is still in a settings menu, the world file is on the wrong machine, and the session dies the second their laptop sleeps. You can feel the night leaking out of the room. Everybody else is already in Discord asking if it’s up yet.
I have been on both sides of that message. I have been the person who volunteered. I have been the person waiting. At some point I stopped treating it like a personal failure and started treating it like a company.
That company is Slipworks. Not a panel skin. A game-server host, incorporated in Ohio, built to rent machines the way a yard rents berths. Players and communities want a world that stays up when they close the lid — slots, mods, a process that outlives one person’s house. Studios want something different: short-lived sessions, a revision, a region, an API that can spin a match and kill it when the round ends. We named those two faces Yard and Stage so we would never pretend they are the same product. A persistent berth is not a match. If you sell them as one SKU list you will lie to somebody.
Building the host is the easy sentence. The hard part is the hour after someone clicks buy.
A real lease is not “pick a game, pay, done.” Someone has to look up the title and ask a question the store page will not answer: are we even allowed to sell this? Publisher terms are not vibes. Some titles are forbidden for a host company. Some are partner-only. Some look allowed until you read the fine print and find out you can take donations for electricity and nothing else. Popularity does not punch a hole in that. Sitting in support chat does not punch a hole in that. If the catalog says no, the honest product is no — before money moves, before a machine comes up, before a player thinks they have a server.
When the title is allowed, the rest of the night is still a pile of hands. Quote a lease with a clock on it. Hold the capacity so two Friday nights do not buy the same box. Take the payment. Provision the process. Write down what happened so the next person is not reconstructing the night from Slack. On a small yard that pile is one tired operator with a laptop and a second screen. That operator was us. The request would come in as a sentence. Someone would copy it into a panel. Someone would check the title. Someone would say “give me a minute.” The friends on the other end do not have a minute. They have a night.
I did not want to hire a night-shift for that. I also did not want to wrap a chatbot around it and call the chatbot a product. The people on Friday do not need a conversation. They need a berth, or they need to be told the title is not for sale. An agent that asks clarifying questions is just the ticket queue with better manners. The work is the lease.
Yardhand is that worker.
It is the agent we built because Slipworks cannot scale if a human has to walk every hire from the catalog to a running process. A person can POST a job. Another agent can POST a job. A studio tool can POST a job. The body is a SKU and a tenant, not a paragraph. Yardhand gates the title, quotes, holds, captures, provisions, and writes the ledger. If the catalog will not sell the title, it stops and the stop is the product. If the title is ours to lease, the machine comes up and the URL is on the receipt.
The first sellable row is not a famous game. It is a first-party stub we own, because that is the only thing we can put on the ways today without lying. That is not a cop-out. That is how you build a host without waking up having sold a world you are not licensed to run. The famous titles stay in research until counsel has a path. Friday night still happens. The laptop still dies. The difference is we finally have something that can stand the server up — or refuse to — without making five people wait on a chat window while an operator copies their request into another screen.
I wanted a company that rents the night so it does not depend on whoever left their computer on. Yardhand is how that company does the work.
What it does
Intake is POST /jobs {sku, tenant}. A prompt is not intake.
The agent runs the lease: gate_catalog → quote_lease → hold_capacity → capture_hold → provision_server → write_ledger. Gate is fail-closed: tos_gate=allowed AND sku_eligible. Terminal state is provisioned or rejected. Capture is an action, not a confirm dialog. The board at / is a job list. Retry is a new POST or resume.
Live, same two tickets the catalog lock requires:
harbor-arena/yard-ops→ rejected. Third-party title. ToS: Yard leases first-party Slipworks processes only.slipworks-stub/yard-ops→ provisioned. The stub is the only sellable row. It is a Slipworks-owned smoke path, not a game title. Receipt gets a Cloud Run URL.
Board: https://yardhand-434639036485.us-central1.run.app
How we built it
Gemini 3.5 Flash inside Google ADK, on Cloud Run, jobs in Firestore. Flash only so the bill sleeps with the yard (min 0, max 2, $15 alert). Local path is an in-memory store and a mock provisioner so the chore can run without a billing project. Nineteen tests. Live project is yardhand. Origin is the repo; no GitHub mirror.
Yardhand is not a seventh plane and not a clone of other "Game Server as a Service" operations. It is the worker that walks a Yard lease.
Challenges we ran into
Vertex in us-central1 404’d gemini-3.5-flash. The pin had to move to global. That crash is still a ticket on the board.
A mock .run URL is not proof. Judges need the real Cloud Run services.
Counsel is the other constraint. Most popular titles are research rows or note bins under Allowed (operator-fee possible, donations-only, commercial-barred). They stay off both Yard and Stage offer books. So the live path is the stub, and everything else fails closed.
Accomplishments that we're proud of
The agent does the whole lease without a chat window. Live on Cloud Run: third-party title rejected at the gate, stub provisioned, both services in project yardhand. Fail-closed is shipped, not promised. Cost gates on day one.
What we learned
If you add the catalog filter after capture, you will sell a title you cannot host. Fail-closed at the gate is the product.
Flash is enough for this workflow. A mock path is useful. It is not the demo.
Region is part of the model name.
What's next for Yardhand
Lock the public URL and scale to zero after the video. After the hackathon, only mint a SKU when the offer is complete and counsel has a host-company path — Factorio is the example of allowed-but-not-sold. Keep Yard and Stage as two faces. Keep the board a job list. Never a composer.
Notes
This public hackathon project is some of the core functionality, and initial draft of what will become the production version of Yardhand.
Log in or sign up for Devpost to join the conversation.