Releasing shot2code to this hub
Public repository documentation · View source on GitHub
On this page
How a shot2code build becomes a published release here. The engineering process —
version bump, build, smoke checks, rollback — lives with the code in
docs/RELEASING.md
in the project repository. This page is the hub-side contract.
Tags
Releases in this repository are shared by several products, so every tag is product-prefixed:
shot2code-v<x.y.z>
The version is the one in the project's desktop/package.json, which is what
electron-builder stamps into the installer filename, what latest.yml advertises,
and what Settings displays. Tags are never moved or reused.
Two repositories, one history
The complete release history is kept in both repositories, and each has a job:
| Repository | Tag | Role |
|---|---|---|
| ArasaniRohithReddy/shot2code | vX.Y.Z |
Canonical. The source of the build and the feed electron-updater reads, so latest.yml must keep describing the binaries attached beside it |
| ArasaniRohithReddy/app-releases (this hub) | shot2code-vX.Y.Z |
The published download and documentation home. It mirrors the same build, with every file that release carries |
Mirroring means mirroring: a hub release keeps the updater's own inputs
(latest.yml, the .exe.blockmap) attached alongside the installers, and they
show up in a release's complete file listing on the releases page. What the
public cards deliberately do not do is offer them as downloads — they are
machine inputs, and presenting them next to an installer would invite someone to
download the wrong file. Hiding them from the cards is a presentation choice, not
a gap in the mirror.
Nothing is pruned. Builds that predate the MSI or SHA256SUMS.txt stay listed
with exactly the files they were published with, so the page never implies a
download that does not exist. Only releases from 0.3.0 onwards have entries in
CHANGELOG.md, because nothing earlier was tracked in a changelog;
their notes still live on the releases in both repositories.
Assets attached to a hub release
| File | Purpose |
|---|---|
shot2code-<version>-x64.exe |
Per-user NSIS installer — the recommended download and the only self-updating format |
shot2code-<version>-x64.msi |
Per-machine managed deployment |
shot2code-<version>-x64.zip |
Portable build |
SHA256SUMS.txt |
SHA-256 hashes for the published files |
The project's own release additionally carries shot2code-<version>-x64.exe.blockmap
and latest.yml. Those are updater inputs, not downloads for people:
latest.yml is the electron-updater manifest (version, filename, size, SHA-512)
and the blockmap is what makes a differential download possible. Attach them to
the hub release too — the mirror is only complete if it carries every file — but
the hub's download cards never present them as options, although they do appear
in a release's complete file listing.
Because the binaries are unsigned, SHA256SUMS.txt is the verification story —
publish it with every release.
Release notes
Hub release notes summarise the version and link to the upstream release for the full notes. Keep them accurate about:
- what changed (features, fixes),
- which downloads exist and which is recommended,
- the fact that the binaries are unsigned and may trigger SmartScreen.
Then mirror the same summary into CHANGELOG.md here.
Final screenshot capture contract
This is the capture plan for the public input-tab atlas and the supporting Review/Settings presentation. It is deliberately versionless: do not put a release number in a filename, caption or screenshot-only page claim.
One reproducible capture environment
Use the release-candidate desktop build with a new, capture-only profile:
- Windows display scaling: 100%
- app zoom: 100%
- browser/device scale factor: 1
- output: sRGB PNG, one image pixel per CSS pixel
- capture target: the app content viewport only — no desktop, taskbar, window shadow or post-capture crop
- project/evidence: the synthetic Northwind Analytics fixture,
https://example.com, andoctocat/Spoon-Knifeonly; no customer code, private URL/repository, account name or local path - provider state: no real provider account or key. Input-tab captures may show the honest disabled/unconfigured state. Use only explicitly fake endpoint values when a settings field must be demonstrated, and keep the connection switched off so no network call occurs
- key handling: no live credential is permitted. Inspect final PNGs at 400% and delete the isolated capture profile
- MCP state: one unauthenticated local fixture named Demo component library, left disabled and untrusted with write tools off, so the safe installation default is visible; no remote tenant or account
Wait for fonts, preview rendering and Review results to settle. Dismiss update notices, toasts, tooltips and permission prompts. Move the pointer outside the capture, stop caret/selection blinking where possible, and never edit or recompress the resulting PNG. If a final UI label differs from this plan, use the shipped label and update the page's alt text and caption in the same change; never stage a screenshot of placeholder UI.
The current screenshot set
All dimensions below are required PNG pixel dimensions.
| File | Dimensions / theme | Required state |
|---|---|---|
input-upload.png |
1426 × 893, light |
Upload selected; empty screenshot/video drop zone and generation controls visible |
input-url.png |
1426 × 893, light |
URL selected with https://example.com; before inspection/capture |
input-text.png |
1426 × 893, light |
Text selected; empty prompt, examples, stack and model controls visible |
input-import.png |
1426 × 893, light |
Import selected; HTML/project modes plus Built Storybook entry visible |
input-figma.png |
1426 × 893, light |
Figma selected; scoped REST requirement, preview action and MCP Catalog limitation visible |
input-github.png |
1426 × 893, light |
GitHub selected with octocat/Spoon-Knife; local-open versus first-refinement copy, model picker and design-system choice visible |
input-stitch.png |
1426 × 893, light |
Stitch selected; Convert to selected stack active with the labelled model picker visible |
url-design-inspection.png |
1426 × 893, light |
Completed example.com inspection with full-page responsive dimensions, blank/truncation state and DESIGN.md actions visible |
github-imported-project.png |
1426 × 893, light |
Public Spoon-Knife project open in the editable Preview/Chat workspace |
import-storybook.png |
1426 × 893, light |
Built Storybook selected; fixed JSON paths and non-execution boundary visible |
review-workspace-og-light.png |
1920 × 1008, light |
Public Spoon-Knife project open; completed source/runtime Review and health state visible |
mcp-menu-light.png |
1440 × 900, light |
MCP settings showing the synthetic server disabled, untrusted and write-disabled |
byok-settings-dark.png |
1440 × 900, dark |
BYOK settings switched off; additive/separate credential explanation visible |
ollama-settings-light.png |
1440 × 900, light |
BYOK card after Configure local Ollama, with localhost endpoint and install/hardware/model caveats visible |
page-reader-settings-dark.png |
1440 × 900, dark |
Separate bounded page-reading consent, limits and blocked built-in web_fetch explanation |
iconify-settings-light.png |
1440 × 900, light |
Iconify opt-in, fixed origin, currently-keyless caveat, SPDX policy and trademark warning |
chat-tools-light.png |
1440 × 900, light |
Chat Tools inventory showing consent, provider cost, MCP write scope and enabled Skills honestly |
full-history-light.png |
1440 × 900, light |
Cross-project Full history search with project/version totals |
history-expanded-light.png |
1440 × 900, light |
Expanded version showing requested models, options, prompts, activity and retry/branch ancestry |
review-workspace-tablet.png |
900 × 1024, light |
Completed Review at the shipped desktop minimum width, reflowed into a single column |
The lead uses 1920 × 1008 because it is exactly 40:21, the same ratio as a
1200 × 630 social card. It can therefore be scaled by an Open Graph consumer
without cropping the app toolbar or Review result. When these files land:
- Keep all seven input tabs visible in the product page's Input tabs section, with the URL inspection, GitHub imported-project and Built Storybook outcomes directly below.
- Point
og:imageatreview-workspace-og-light.png, set its declared size to1920 × 1008, and write alt text for only what is visibly present. - Give the lead a
40 / 21aspect wrapper, input/outcome/desktop-detail images a16 / 10wrapper, and the compact Review image its exact225 / 256wrapper. - Keep the site's documented
object-fit: containpolicy and neutral frame. Never switch a product screenshot tocover: letterboxing is acceptable, loss of UI is not. - Update each
<img width height>, link label, alt and caption with the same commit. Every alt must describe the visible state and the true dimensions. - From the
app-releasesrepository, runnpm test; it includes the dimension, aspect, reflow and Open Graph checks. Then inspect the light/dark galleries and 320px/200%-text portal captures.
Before approval, inspect every image for exposed keys or tokens, account names, email addresses, avatars, filesystem paths, repository names, clipboard content, notification text, timestamps and background-window reflections. Passing an automated test is not a secrets review.
After publishing
-
Confirm the asset list:
gh release view shot2code-v<version> --json assets --jq '.assets[] | "\(.name) \(.size)"' -
The
update-releases-snapshotworkflow regeneratesdocs/shot2code/releases/releases.jsonfrom the GitHub API on release events, on a schedule, and on demand. The releases page renders that same-origin snapshot first and then refreshes from the live API, so a rate-limited visitor still sees the list. To refresh it by hand:gh api -H "Accept: application/vnd.github.html+json" ` "repos/ArasaniRohithReddy/app-releases/releases?per_page=100" ` --jq '[ .[] | select(.draft == false) | select(.tag_name | startswith("shot2code-v")) | { tag_name, name, published_at, prerelease, body_html, assets: [ .assets[] | { name, size, download_count, browser_download_url } ] } ] | sort_by(.published_at) | reverse' > docs/shot2code/releases/releases.json -
Nothing else on the site needs a version edit. The product page resolves the newest stable release whose tag starts with
shot2code-vand fills in the version chips, the download links and sizes, the SHA-256 verification command and thesoftwareVersionin its structured data from that release. Its static fallbacks point at the product-filtered release list, which carries no version and so cannot go stale. -
Update CHANGELOG.md with the new version, and any guide whose behaviour changed.
Rollback
- If a release is broken for everyone, mark it as a pre-release or delete the release. The hub pages select the newest stable release, so both actions take it out of circulation while keeping the tag.
- Never delete or replace an installer that clients may already be downloading while its manifest is still live.
- The updater does not downgrade: the real fix for a bad build that people have already installed is to publish the next patch version.