Skip to content

Blog: ThinkRail 0.2.0 release post - #768

Merged
Rinat S (rsolmano) merged 5 commits into
mainfrom
release-socials-v0-2-0
Oct 19, 2026
Merged

Rinat S (rsolmano) merged 5 commits into
mainfrom
release-socials-v0-2-0

Conversation

@rsolmano

@rsolmano Rinat S (rsolmano) commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

ThinkRail 0.2.0 shipped on 2026-10-18 with no post on thinkrail.ai/blog. And the post needs screenshots, but local blog images, the route BLOG.md recommends (./images/…), had never been used and break the build: astro build fails with MissingSharp. sharp reaches the lockfile only as an optional dependency of astro, and with bun's isolated installs @thinkrail/website can't resolve it. CI's bun install --frozen-lockfile would fail the same way.

Approach

  • Pin sharp 0.35.4 exactly as a website devDependency. It's the version already in bun.lock, so nothing new is downloaded. It's website-only, so it's pinned in the package and not in the root catalog, the same way as @astrojs/rss. This makes ./images/ work for every future post.
  • Add the 0.2.0 release post with six screenshots. They're cropped from a real recorded demo run and compressed to 40–410 KB. Astro now turns them into WebP (e.g. 313 KB PNG → 92 KB).
  • Add rinat-s to content/authors.json.
  • Every blog post now ends with the landing page's install picker (separate commit). The hero picker markup moved unchanged into src/components/InstallPicker.astro. The landing's built HTML differs only by data-install-picker="hero". [slug].astro renders it with idPrefix="blog" after the post body. Analytics attributes its downloads, command copies and command-line disclosure opens to blog_post, so install intent from posts is counted. install_command_copied gains blog_post as an allowed location. Only the hero picker drives the side terminal's install replay.
  • The post links the main page with utm_source=blog&utm_medium=organic-social&utm_campaign=release-0-2-0. First-time contributors link to their GitHub profiles.

Changes

  • apps/website/package.json + bun.lock: sharp devDependency. bun install also re-sorts the @thinkrail/pi-visualize entry that chore(pi-extensions): publish pi packages under the @thinkrail npm scope #734's rename left out of alphabetical order. That's bun's own output, not a hand edit.
  • apps/website/content/blog/2026-10-18-thinkrail-0-2-0-review-the-turn/: index.md + images/. draft: false, so it publishes when this merges.
  • apps/website/content/authors.json: "rinat-s": { "name": "Rinat S" }.
  • apps/website/src/components/InstallPicker.astro (new), src/pages/index.astro, src/pages/blog/[slug].astro, src/styles.css, src/main.ts: the shared picker, placed on every post.
  • apps/website/src/analyticsEvents.ts + packages/website-analytics/src/index.ts: blog_post location for command copies and command-line disclosure opens.
  • apps/website/src/validateBuild.ts: every article must have the blog picker and the landing the hero picker. Introducing ThinkRail's expected desktop-link count goes from 1 to 2: that older post keeps its own download list, and the picker adds a second.
  • apps/website/SPEC.md, packages/website-analytics/SPEC.md: document the shared picker and the new location.

Every feature claim in the post maps to a PR in the v0.2.0 release notes (#668, #691–#695, #749, #763, #633, #728, #706, #654, #663, #680, #703, #710, #727, #730, #745, #711, #726, #690, #709, #699, #764, #685, #731, #626, #619, #697, #700, #747, #723).

Screenshots

Website-only change (no app frontend). Before: posts had no install picker. After: every post ends with the landing's picker (checked in astro preview: light and dark, desktop 1400 px and phone 390 px with no horizontal overflow, Windows tab and command-line disclosure working).

Checklist

  • Fast gates pass: bun run lint, bun run typecheck, bun run test (lint + typecheck pass; repo-wide bun run test not run, only the website suite)
  • E2E suite passes for app-affecting changes (bun run e2e, or bun run e2e:full when touching agent behavior)
  • Before/after screenshots are included for frontend changes, or marked not applicable
  • Relevant SPEC.md / top-level specs updated to reflect any boundary, contract, or behavior change
  • I have read the Contributing guide and agree to the Code of Conduct

Testing

  • bun run --filter @thinkrail/website build (before the fix) → fails with MissingSharp on the post's images
  • bun run --filter @thinkrail/website build (after) → passes; /blog/thinkrail-0-2-0-review-the-turn/ generated, images emitted as WebP, validateBuild OK
  • bun install --frozen-lockfile → no changes
  • bun run --filter @thinkrail/website test → 234 pass (new cases: blog-post copy and disclosure attributed to blog_post)
  • packages/website-analytics bun test → 25 pass
  • landing dist/index.html diffed before/after the extraction → only data-install-picker="hero" differs
  • pre-commit hooks (check:deps, check:boundaries, check:seams, style checks, biome check, turbo run typecheck) → all pass
  • bun run test (whole repo) and E2E → not run: the app and agent code are unchanged; CI runs them

@github-actions

github-actions Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

🌐 Website preview

Preview retired when this pull request closed.

@jetbrains-air jetbrains-air Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved — ready to merge.

@jetbrains-air jetbrains-air Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved — ready to merge.

@jetbrains-air jetbrains-air Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved — ready to merge.

@rsolmano
Rinat S (rsolmano) added this pull request to the merge queue Oct 19, 2026
Merged via the queue into main with commit ebb8e23 Oct 19, 2026
19 checks passed
@rsolmano
Rinat S (rsolmano) deleted the release-socials-v0-2-0 branch October 19, 2026 13:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants