CustomerShip
← All posts

From click to shipped code: a real feature request, start to finish

In the last post, we used CustomerShip to add our own feedback widget to our demo site. This post picks up right where that one left off: the widget is live, and we used it exactly the way a customer would — to ask for something, and watch it get built.

What a customer actually sees

No account, no form fields beyond a message and an optional email. Just a small button in the corner of the page that opens into a short form.

The feedback widget open, showing a message box and an optional email field
The whole submission form. Feature, bug or other, a message, and an optional email.

We asked for something small and concrete: a way to reset the click counter on the Counter page.

The widget form filled in with a request for a Reset button on the Click Counter page
Written the way an actual customer would write it — no special syntax, no ticket template.
The widget showing a confirmation message: Thanks! Your request is with the team.
That's the entire customer-facing interaction. Everything after this happens on our side.

Graded before we even opened the dashboard

By the time we checked the inbox, the request had already been triaged — effort, benefit, risk, and a plain-language reason, generated automatically against our actual connected repository.

CustomerShip's grading of the reset-button request: Effort 2/5, Benefit medium, Risk low, with a written rationale
Graded in under thirty seconds, against the real repository CustomerShip already understands.

The rationale called out exactly which kind of files the change would touch and why the risk was low. That's not a canned response — it's reading the actual repository CustomerShip already has a map of, every time.

Ship it, and a pull request appears

One click, and the same pipeline from the last post ran again: a fresh clone, a coding agent making the actual change, and a real pull request opened against the repository's default branch.

The pull request diff adding a Reset button and its click handler
A new button, wired up to a real click handler — reviewable exactly like any other PR.

Live, minutes after a stranger clicked a button

We merged it, the site rebuilt, and the button was there.

The Click Counter page live with the new Reset button next to the existing controls
From a click on a feedback widget to a shipped, working button — without anyone opening an editor.

That's the whole loop, running on real infrastructure against a real repository: request in, graded automatically, shipped as a reviewable pull request, live on the site. See how shipping works for what happens with your own doubloons and plan limits.