Peter Theill

Peter Theill

Commanigy

My name is Peter Theill, a Copenhagen-based software engineer and entrepreneur. I’m a co-founder of Zublime, Outbound & Familio but also do indie-hacking at Commanigy. I started playing around with programming back in 1987 on a good old Commodore 64 and released my first couple of shareware products on Windows around 1994.

Deployment Stats

Total deployments
1023

over 527 days

This week
6

54 this month

Most active day
27

on Nov 15, 2025

Running year activity
β–„
64 deployments in Oct
Oct
β–‡
111 deployments in Nov
Nov
β–‡
123 deployments in Dec
Dec
β–ˆ
127 deployments in Jan
Jan
β–…
81 deployments in Feb
Feb
β–†
96 deployments in Mar
Mar
β–ƒ
42 deployments in Apr
Apr
▁
6 deployments in May
May
▁
3 deployments in Jun
Jun
▁
4 deployments in Jul
Jul
β–ƒ
39 deployments in Aug
Aug
β–‚
24 deployments in Sep
Sep
Daily activity
Oct
Nov
Dec
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Mon Wed Fri
5 deployments on Sun, Sep 14, 2025
7 deployments on Mon, Sep 15, 2025
0 deployments on Tue, Sep 16, 2025
0 deployments on Wed, Sep 17, 2025
0 deployments on Thu, Sep 18, 2025
0 deployments on Fri, Sep 19, 2025
1 deployment on Sat, Sep 20, 2025
3 deployments on Sun, Sep 21, 2025
0 deployments on Mon, Sep 22, 2025
0 deployments on Tue, Sep 23, 2025
0 deployments on Wed, Sep 24, 2025
0 deployments on Thu, Sep 25, 2025
0 deployments on Fri, Sep 26, 2025
0 deployments on Sat, Sep 27, 2025
0 deployments on Sun, Sep 28, 2025
0 deployments on Mon, Sep 29, 2025
0 deployments on Tue, Sep 30, 2025
0 deployments on Wed, Oct 01, 2025
0 deployments on Thu, Oct 02, 2025
0 deployments on Fri, Oct 03, 2025
0 deployments on Sat, Oct 04, 2025
0 deployments on Sun, Oct 05, 2025
1 deployment on Mon, Oct 06, 2025
0 deployments on Tue, Oct 07, 2025
0 deployments on Wed, Oct 08, 2025
7 deployments on Thu, Oct 09, 2025
4 deployments on Fri, Oct 10, 2025
1 deployment on Sat, Oct 11, 2025
5 deployments on Sun, Oct 12, 2025
2 deployments on Mon, Oct 13, 2025
1 deployment on Tue, Oct 14, 2025
1 deployment on Wed, Oct 15, 2025
1 deployment on Thu, Oct 16, 2025
7 deployments on Fri, Oct 17, 2025
9 deployments on Sat, Oct 18, 2025
5 deployments on Sun, Oct 19, 2025
5 deployments on Mon, Oct 20, 2025
10 deployments on Tue, Oct 21, 2025
3 deployments on Wed, Oct 22, 2025
1 deployment on Thu, Oct 23, 2025
1 deployment on Fri, Oct 24, 2025
0 deployments on Sat, Oct 25, 2025
0 deployments on Sun, Oct 26, 2025
0 deployments on Mon, Oct 27, 2025
0 deployments on Tue, Oct 28, 2025
0 deployments on Wed, Oct 29, 2025
0 deployments on Thu, Oct 30, 2025
0 deployments on Fri, Oct 31, 2025
0 deployments on Sat, Nov 01, 2025
0 deployments on Sun, Nov 02, 2025
0 deployments on Mon, Nov 03, 2025
0 deployments on Tue, Nov 04, 2025
0 deployments on Wed, Nov 05, 2025
2 deployments on Thu, Nov 06, 2025
0 deployments on Fri, Nov 07, 2025
0 deployments on Sat, Nov 08, 2025
2 deployments on Sun, Nov 09, 2025
5 deployments on Mon, Nov 10, 2025
2 deployments on Tue, Nov 11, 2025
2 deployments on Wed, Nov 12, 2025
0 deployments on Thu, Nov 13, 2025
3 deployments on Fri, Nov 14, 2025
27 deployments on Sat, Nov 15, 2025
1 deployment on Sun, Nov 16, 2025
0 deployments on Mon, Nov 17, 2025
1 deployment on Tue, Nov 18, 2025
2 deployments on Wed, Nov 19, 2025
4 deployments on Thu, Nov 20, 2025
5 deployments on Fri, Nov 21, 2025
2 deployments on Sat, Nov 22, 2025
6 deployments on Sun, Nov 23, 2025
9 deployments on Mon, Nov 24, 2025
4 deployments on Tue, Nov 25, 2025
2 deployments on Wed, Nov 26, 2025
7 deployments on Thu, Nov 27, 2025
5 deployments on Fri, Nov 28, 2025
12 deployments on Sat, Nov 29, 2025
8 deployments on Sun, Nov 30, 2025
7 deployments on Mon, Dec 01, 2025
0 deployments on Tue, Dec 02, 2025
0 deployments on Wed, Dec 03, 2025
0 deployments on Thu, Dec 04, 2025
7 deployments on Fri, Dec 05, 2025
3 deployments on Sat, Dec 06, 2025
5 deployments on Sun, Dec 07, 2025
0 deployments on Mon, Dec 08, 2025
3 deployments on Tue, Dec 09, 2025
4 deployments on Wed, Dec 10, 2025
1 deployment on Thu, Dec 11, 2025
10 deployments on Fri, Dec 12, 2025
6 deployments on Sat, Dec 13, 2025
2 deployments on Sun, Dec 14, 2025
6 deployments on Mon, Dec 15, 2025
1 deployment on Tue, Dec 16, 2025
2 deployments on Wed, Dec 17, 2025
5 deployments on Thu, Dec 18, 2025
1 deployment on Fri, Dec 19, 2025
10 deployments on Sat, Dec 20, 2025
4 deployments on Sun, Dec 21, 2025
6 deployments on Mon, Dec 22, 2025
2 deployments on Tue, Dec 23, 2025
0 deployments on Wed, Dec 24, 2025
0 deployments on Thu, Dec 25, 2025
3 deployments on Fri, Dec 26, 2025
7 deployments on Sat, Dec 27, 2025
3 deployments on Sun, Dec 28, 2025
6 deployments on Mon, Dec 29, 2025
11 deployments on Tue, Dec 30, 2025
8 deployments on Wed, Dec 31, 2025
11 deployments on Thu, Jan 01, 2026
13 deployments on Fri, Jan 02, 2026
8 deployments on Sat, Jan 03, 2026
13 deployments on Sun, Jan 04, 2026
4 deployments on Mon, Jan 05, 2026
3 deployments on Tue, Jan 06, 2026
5 deployments on Wed, Jan 07, 2026
8 deployments on Thu, Jan 08, 2026
1 deployment on Fri, Jan 09, 2026
0 deployments on Sat, Jan 10, 2026
1 deployment on Sun, Jan 11, 2026
6 deployments on Mon, Jan 12, 2026
0 deployments on Tue, Jan 13, 2026
3 deployments on Wed, Jan 14, 2026
4 deployments on Thu, Jan 15, 2026
3 deployments on Fri, Jan 16, 2026
1 deployment on Sat, Jan 17, 2026
5 deployments on Sun, Jan 18, 2026
4 deployments on Mon, Jan 19, 2026
2 deployments on Tue, Jan 20, 2026
8 deployments on Wed, Jan 21, 2026
4 deployments on Thu, Jan 22, 2026
2 deployments on Fri, Jan 23, 2026
5 deployments on Sat, Jan 24, 2026
3 deployments on Sun, Jan 25, 2026
1 deployment on Mon, Jan 26, 2026
1 deployment on Tue, Jan 27, 2026
0 deployments on Wed, Jan 28, 2026
0 deployments on Thu, Jan 29, 2026
6 deployments on Fri, Jan 30, 2026
2 deployments on Sat, Jan 31, 2026
1 deployment on Sun, Feb 01, 2026
2 deployments on Mon, Feb 02, 2026
6 deployments on Tue, Feb 03, 2026
2 deployments on Wed, Feb 04, 2026
0 deployments on Thu, Feb 05, 2026
2 deployments on Fri, Feb 06, 2026
0 deployments on Sat, Feb 07, 2026
1 deployment on Sun, Feb 08, 2026
1 deployment on Mon, Feb 09, 2026
2 deployments on Tue, Feb 10, 2026
0 deployments on Wed, Feb 11, 2026
5 deployments on Thu, Feb 12, 2026
7 deployments on Fri, Feb 13, 2026
6 deployments on Sat, Feb 14, 2026
1 deployment on Sun, Feb 15, 2026
5 deployments on Mon, Feb 16, 2026
1 deployment on Tue, Feb 17, 2026
4 deployments on Wed, Feb 18, 2026
4 deployments on Thu, Feb 19, 2026
1 deployment on Fri, Feb 20, 2026
0 deployments on Sat, Feb 21, 2026
3 deployments on Sun, Feb 22, 2026
3 deployments on Mon, Feb 23, 2026
0 deployments on Tue, Feb 24, 2026
2 deployments on Wed, Feb 25, 2026
2 deployments on Thu, Feb 26, 2026
6 deployments on Fri, Feb 27, 2026
14 deployments on Sat, Feb 28, 2026
1 deployment on Sun, Mar 01, 2026
1 deployment on Mon, Mar 02, 2026
3 deployments on Tue, Mar 03, 2026
0 deployments on Wed, Mar 04, 2026
4 deployments on Thu, Mar 05, 2026
3 deployments on Fri, Mar 06, 2026
0 deployments on Sat, Mar 07, 2026
2 deployments on Sun, Mar 08, 2026
8 deployments on Mon, Mar 09, 2026
0 deployments on Tue, Mar 10, 2026
5 deployments on Wed, Mar 11, 2026
3 deployments on Thu, Mar 12, 2026
2 deployments on Fri, Mar 13, 2026
4 deployments on Sat, Mar 14, 2026
9 deployments on Sun, Mar 15, 2026
1 deployment on Mon, Mar 16, 2026
2 deployments on Tue, Mar 17, 2026
0 deployments on Wed, Mar 18, 2026
1 deployment on Thu, Mar 19, 2026
6 deployments on Fri, Mar 20, 2026
8 deployments on Sat, Mar 21, 2026
13 deployments on Sun, Mar 22, 2026
2 deployments on Mon, Mar 23, 2026
3 deployments on Tue, Mar 24, 2026
2 deployments on Wed, Mar 25, 2026
5 deployments on Thu, Mar 26, 2026
2 deployments on Fri, Mar 27, 2026
2 deployments on Sat, Mar 28, 2026
0 deployments on Sun, Mar 29, 2026
1 deployment on Mon, Mar 30, 2026
3 deployments on Tue, Mar 31, 2026
0 deployments on Wed, Apr 01, 2026
1 deployment on Thu, Apr 02, 2026
3 deployments on Fri, Apr 03, 2026
1 deployment on Sat, Apr 04, 2026
6 deployments on Sun, Apr 05, 2026
1 deployment on Mon, Apr 06, 2026
2 deployments on Tue, Apr 07, 2026
1 deployment on Wed, Apr 08, 2026
0 deployments on Thu, Apr 09, 2026
0 deployments on Fri, Apr 10, 2026
7 deployments on Sat, Apr 11, 2026
3 deployments on Sun, Apr 12, 2026
1 deployment on Mon, Apr 13, 2026
2 deployments on Tue, Apr 14, 2026
0 deployments on Wed, Apr 15, 2026
2 deployments on Thu, Apr 16, 2026
0 deployments on Fri, Apr 17, 2026
1 deployment on Sat, Apr 18, 2026
6 deployments on Sun, Apr 19, 2026
2 deployments on Mon, Apr 20, 2026
1 deployment on Tue, Apr 21, 2026
1 deployment on Wed, Apr 22, 2026
1 deployment on Thu, Apr 23, 2026
0 deployments on Fri, Apr 24, 2026
0 deployments on Sat, Apr 25, 2026
0 deployments on Sun, Apr 26, 2026
0 deployments on Mon, Apr 27, 2026
0 deployments on Tue, Apr 28, 2026
0 deployments on Wed, Apr 29, 2026
0 deployments on Thu, Apr 30, 2026
0 deployments on Fri, May 01, 2026
1 deployment on Sat, May 02, 2026
0 deployments on Sun, May 03, 2026
0 deployments on Mon, May 04, 2026
0 deployments on Tue, May 05, 2026
0 deployments on Wed, May 06, 2026
0 deployments on Thu, May 07, 2026
0 deployments on Fri, May 08, 2026
0 deployments on Sat, May 09, 2026
0 deployments on Sun, May 10, 2026
0 deployments on Mon, May 11, 2026
0 deployments on Tue, May 12, 2026
0 deployments on Wed, May 13, 2026
0 deployments on Thu, May 14, 2026
0 deployments on Fri, May 15, 2026
0 deployments on Sat, May 16, 2026
0 deployments on Sun, May 17, 2026
0 deployments on Mon, May 18, 2026
0 deployments on Tue, May 19, 2026
0 deployments on Wed, May 20, 2026
0 deployments on Thu, May 21, 2026
1 deployment on Fri, May 22, 2026
0 deployments on Sat, May 23, 2026
0 deployments on Sun, May 24, 2026
0 deployments on Mon, May 25, 2026
1 deployment on Tue, May 26, 2026
0 deployments on Wed, May 27, 2026
0 deployments on Thu, May 28, 2026
1 deployment on Fri, May 29, 2026
0 deployments on Sat, May 30, 2026
2 deployments on Sun, May 31, 2026
0 deployments on Mon, Jun 01, 2026
0 deployments on Tue, Jun 02, 2026
0 deployments on Wed, Jun 03, 2026
0 deployments on Thu, Jun 04, 2026
0 deployments on Fri, Jun 05, 2026
0 deployments on Sat, Jun 06, 2026
0 deployments on Sun, Jun 07, 2026
0 deployments on Mon, Jun 08, 2026
0 deployments on Tue, Jun 09, 2026
0 deployments on Wed, Jun 10, 2026
0 deployments on Thu, Jun 11, 2026
1 deployment on Fri, Jun 12, 2026
0 deployments on Sat, Jun 13, 2026
0 deployments on Sun, Jun 14, 2026
0 deployments on Mon, Jun 15, 2026
0 deployments on Tue, Jun 16, 2026
0 deployments on Wed, Jun 17, 2026
0 deployments on Thu, Jun 18, 2026
0 deployments on Fri, Jun 19, 2026
0 deployments on Sat, Jun 20, 2026
0 deployments on Sun, Jun 21, 2026
0 deployments on Mon, Jun 22, 2026
1 deployment on Tue, Jun 23, 2026
1 deployment on Wed, Jun 24, 2026
0 deployments on Thu, Jun 25, 2026
0 deployments on Fri, Jun 26, 2026
0 deployments on Sat, Jun 27, 2026
0 deployments on Sun, Jun 28, 2026
0 deployments on Mon, Jun 29, 2026
0 deployments on Tue, Jun 30, 2026
0 deployments on Wed, Jul 01, 2026
0 deployments on Thu, Jul 02, 2026
0 deployments on Fri, Jul 03, 2026
0 deployments on Sat, Jul 04, 2026
0 deployments on Sun, Jul 05, 2026
0 deployments on Mon, Jul 06, 2026
0 deployments on Tue, Jul 07, 2026
0 deployments on Wed, Jul 08, 2026
0 deployments on Thu, Jul 09, 2026
0 deployments on Fri, Jul 10, 2026
0 deployments on Sat, Jul 11, 2026
0 deployments on Sun, Jul 12, 2026
0 deployments on Mon, Jul 13, 2026
0 deployments on Tue, Jul 14, 2026
0 deployments on Wed, Jul 15, 2026
0 deployments on Thu, Jul 16, 2026
0 deployments on Fri, Jul 17, 2026
0 deployments on Sat, Jul 18, 2026
0 deployments on Sun, Jul 19, 2026
0 deployments on Mon, Jul 20, 2026
0 deployments on Tue, Jul 21, 2026
0 deployments on Wed, Jul 22, 2026
0 deployments on Thu, Jul 23, 2026
0 deployments on Fri, Jul 24, 2026
0 deployments on Sat, Jul 25, 2026
1 deployment on Sun, Jul 26, 2026
2 deployments on Mon, Jul 27, 2026
0 deployments on Tue, Jul 28, 2026
1 deployment on Wed, Jul 29, 2026
0 deployments on Thu, Jul 30, 2026
0 deployments on Fri, Jul 31, 2026
0 deployments on Sat, Aug 01, 2026
0 deployments on Sun, Aug 02, 2026
0 deployments on Mon, Aug 03, 2026
0 deployments on Tue, Aug 04, 2026
0 deployments on Wed, Aug 05, 2026
0 deployments on Thu, Aug 06, 2026
0 deployments on Fri, Aug 07, 2026
0 deployments on Sat, Aug 08, 2026
0 deployments on Sun, Aug 09, 2026
3 deployments on Mon, Aug 10, 2026
5 deployments on Tue, Aug 11, 2026
0 deployments on Wed, Aug 12, 2026
1 deployment on Thu, Aug 13, 2026
0 deployments on Fri, Aug 14, 2026
0 deployments on Sat, Aug 15, 2026
0 deployments on Sun, Aug 16, 2026
0 deployments on Mon, Aug 17, 2026
0 deployments on Tue, Aug 18, 2026
0 deployments on Wed, Aug 19, 2026
0 deployments on Thu, Aug 20, 2026
3 deployments on Fri, Aug 21, 2026
0 deployments on Sat, Aug 22, 2026
0 deployments on Sun, Aug 23, 2026
5 deployments on Mon, Aug 24, 2026
2 deployments on Tue, Aug 25, 2026
1 deployment on Wed, Aug 26, 2026
0 deployments on Thu, Aug 27, 2026
0 deployments on Fri, Aug 28, 2026
14 deployments on Sat, Aug 29, 2026
5 deployments on Sun, Aug 30, 2026
0 deployments on Mon, Aug 31, 2026
2 deployments on Tue, Sep 01, 2026
2 deployments on Wed, Sep 02, 2026
8 deployments on Thu, Sep 03, 2026
5 deployments on Fri, Sep 04, 2026
0 deployments on Sat, Sep 05, 2026
1 deployment on Sun, Sep 06, 2026
0 deployments on Mon, Sep 07, 2026
0 deployments on Tue, Sep 08, 2026
0 deployments on Wed, Sep 09, 2026
1 deployment on Thu, Sep 10, 2026
0 deployments on Fri, Sep 11, 2026
2 deployments on Sat, Sep 12, 2026
1 deployment on Sun, Sep 13, 2026
0 deployments on Mon, Sep 14, 2026
2 deployments on Tue, Sep 15, 2026
0 deployments on Wed, Sep 16, 2026
Less
More

Recent deployments by Peter Theill

1 day ago
πŸ’„ Illustrate eight SEO landing pages with a shared SVG illustration library
3 days ago
πŸ’„ Illustrate the what-is-a-doodle-poll guide with annotated poll and step SVGs
4 days ago
πŸ’š Fix CI failing on unknown Ruby 3.4.7
ruby/setup-ruby v1.238.0 predates Ruby 3.4.7, so every CI job failed at
Set up Ruby. Bump to v1.321.0.
4 days ago
⬆️ Upgrade to Rails 8.1 and update gems

  • Bump rails to ~> 8.1.3 and run app:update (adds bin/ci, config/ci.rb,


refreshed error pages), restoring app customizations that were overwritten

  • Enable load_defaults 8.1

  • Update all gems; relax sqlite3 and aws-sdk-s3 pins

  • Pin json to ~> 2.21 until Active Support supports json 3.x keyword-only


parse options

  • Add Solid Queue 1.7 batches migration and regenerate queue schema

  • Add brakeman.ignore for the intentional presigned S3 redirect

10 days ago
πŸ› Use the app icon for all favicon variants
favicon.ico, icon.svg and apple-touch-icon.png were leftovers from project creation and did not match icon.png. Regenerate the ICO (16/32/48px) and the 180px touch icon from icon.png, and rebuild icon.svg as a vector version of the same icon.
12 days ago
✨ Enrich the pricing page with a comparison matrix, facts and FAQ
Move price and button into a tinted footer band on each card, with the
cards as a subgrid so footers align however the taglines wrap. Below
the cards: an included-on-every-plan grid, a feature matrix driven by
Plan entitlements, three billing facts, a pricing FAQ with JSON-LD and
the shared call to action. State that prices exclude VAT on the pricing
and billing pages, and mirror the matrix and FAQ in llms-full.txt.
πŸ’„ Replace pricing avatars with Notion-style ink illustrations
Three hand-drawn characters (one bulb, juggling bulbs, mad scientist)
as transparent PNGs with a baked-in white halo, sitting astride each
card's top edge. Move the Most popular badge to the top-left so it
clears the figure, and send guests on the free tier to the waitlist
while registration is closed.
12 days ago
✨ Redesign transactional mail and cover every account event
All mail now shares one monochrome layout (gray ground, hairline card,
wordmark with the single emerald dot) built from inline-styled helpers in
MailerHelper: eyebrow, heading, black or hairline button, one gray panel,
mono block, status rows. Warnings are plain text with a bold lead-in, never
a coloured box. Subjects drop their emoji.
New mails, each hooked at the model or service so every entry point fires:

  • UserMailer#welcome on account creation, listing owned packages and the


developer-mode extension install steps

  • ProjectMailer#created when an owned package is added (waitlist drafts skip)

  • DirectorySubmissionMailer#submissions_created when a maker queues


directories, one row per directory with submit link and mode

  • WaitlistMailer#confirmation on a new waitlist signup

  • BillingMailer plan_activated / payment_failed / plan_cancelled from


activate_plan!, grant_plan!, cancel_plan! and the Stripe webhook
The unused batch_complete mail is removed. Previews for every variant live
under test/mailers/previews with in-memory sample records, so /rails/mailers
renders on an empty database. Adds mailer and hook tests, and a launch.json
attach config for the dev server on :3109.
πŸ’„ Share one page header across public pages, replacing breadcrumbs
Every public page (directories, guides, use cases, pricing, about, help,
legal, extension, WebMCP) now opens with the same `shared/page_header`
partial inside a `.page` frame, so the content edge and heading rhythm
stop jumping between sections. The eyebrow links back to the section
index with a dotted underline instead of a breadcrumb trail.
Also: hand-drawn plan avatars on the pricing tiers, a grayscale footer
logo that colours on hover, a base rule so every enabled button shows a
pointer cursor, and the seed admin address moved to support@launchto.win.
12 days ago
Merge branch 'launch-page-product-insights'
:whale: Ship headless Chromium in the production image for JavaScript-rendered landing pages
PageRendererService (and the Playwright directory automation) need a
Playwright CLI and Chromium at runtime. The final stage now copies Node from
node:22-trixie-slim (same Debian release as the Ruby base), installs the
playwright package pinned to the version the playwright-ruby-client gem
speaks, runs playwright install --with-deps chromium into /ms-playwright,
and sets PLAYWRIGHT_CLI so the app uses the global CLI instead of npx.
Browsers are world-readable so the non-root rails user can launch them.
Verified by building the image locally and rendering a JavaScript page in
it as the rails user.
✨ Give the product analysis real material: render JS shells, read linked pages, search the web
Single-page apps such as q.cv ship an empty <div id="root"> so the scrape
had nothing to give the model. Three changes:

  • PageRendererService renders the page in headless Chromium (Playwright,


optional and self-disabling when the CLI is missing) whenever the static
HTML has fewer than 40 readable words; the scraper re-extracts insights,
description and social image from the rendered DOM. Page requests to
private networks are blocked at the route level.

  • ProductAnalysisService fetches up to two linked pricing/about/docs pages


(static, trimmed) and passes them alongside the landing page, and turns on
OpenRouter's web-search plugin so the model can learn how the product is
used, compared and received. Toggle with credentials openrouter.web_search
or OPENROUTER_WEB_SEARCH. The model is now asked even when the landing page
had no text, told explicitly that it is a JavaScript app.

  • Output budget raised to 8000 tokens because reasoning models count their


thinking against it and returned empty content; empty replies now log the
finish reason and usage. The result carries a sources block, shown as the
panel subtitle.
Tests stub the credential lookups so they no longer depend on whether the
master key is present.
πŸ” Add OpenRouter api_key and model to credentials
♻️ Route the product analysis through OpenRouter so the model is a config choice
ProductAnalysisService now talks to OpenRouter's OpenAI-compatible chat
endpoint via the ruby-openai gem already in the bundle. The model comes from
OPENROUTER_MODEL / credentials openrouter.model (default
anthropic/claude-sonnet-5), the key from OPENROUTER_API_KEY /
credentials openrouter.api_key. Strict json_schema output is requested first
and the call is retried on a plain JSON-only prompt when a model rejects it;
fenced or prefixed JSON is tolerated. Result cache is keyed by model + URL.
✨ Show what we learned about the product on /launch, with an AI read of the landing page
The preview step now aims for "they really understood my product":

  • ProductInsightsService extracts deterministic facts from the page the


scraper already fetched: detected stack (Next.js, Stripe, Plausible…),
linked pages (pricing, docs, changelog…), platform and business signals
(iOS app, free trial, SOC 2…), headings, calls to action, contact emails,
structured data and word count. Rendered in a new "At a glance" card.

  • ProductAnalysisService asks Claude (claude-opus-5, structured JSON output,


low effort) to explain the product back: summary, audience, key features,
differentiators, comparable products, pricing model, a directory-ready
pitch, launch angles and suggested tags. Served by GET /projects/analysis
as a second step after /metadata, reusing the cached page text; results
cached per URL for a day; rate limited; hidden entirely when no Anthropic
key is configured.

  • /launch rearranged at package-page width: product card + glance card side


by side, the AI panel below with a loading skeleton, then the CTA. Signed-in
makers get the same panels next to the editor, and suggested tags,
comparable products and the pitch flow into the package fields.

  • All scraped/AI text is rendered with DOM APIs instead of innerHTML.

πŸ’„ Widen /launch to match the package pages and skip the URL input flash on prefilled URLs

  • Wrap the page in max-w-6xl (same as packages index/show/edit) so the


editor's three-column grid has room; keep the hero, URL step and guest
preview card centred at max-w-3xl.

  • When arriving with ?url= the URL card is rendered hidden and the


"Fetching project details" status is rendered server-side, and the
controller autofills on connect without the 500ms delay, so the input
no longer flashes before the details replace it.
12 days ago
🚨 Ignore two Brakeman SQL-injection false positives from the admin sort and submission work order
13 days ago
⚑️ Defer the Font Awesome kit, drop unused PhotoSwipe, lazy-load controllers, and fix landing page a11y
Perf: the kit script was parser-blocking in <head> and held first paint for
150-350ms while the main thread sat idle; it is now deferred and icons reserve
a 1em box so the late CSS causes no layout shift. PhotoSwipe (CSS from jsDelivr
plus two importmap pins) and the lightbox/hello controllers had no callers and
are removed. Stimulus controllers load on demand instead of eagerly preloading
all 24, and the nav/footer logo is a 96px PNG instead of the 1024px icon.
A11y (Lighthouse 84): html lang, empty alt on the decorative logo, aria-label
on the hero URL input, gray-500 for the eyebrow/footer labels that failed AA
contrast, and aria-hidden on every icon glyph.
13 days ago
Merge branch 'worktree-remove-header-confetti'
πŸ’„ Remove the confetti effect from the header wordmark
13 days ago
✨ Add the SEO surface and refresh the landing page
Guides, directory collections, per-audience use-case pages, llms.txt and
a pages sitemap, with breadcrumbs, FAQ schema and shared CTA partials.
Landing page: the directory count is read from the database everywhere
instead of a hardcoded 46 (new directory_count helper, %{directory_count}
placeholders in use-case copy), the hero URL field gets a visible icon
and a gradient focus ring, and the resources section is redesigned as a
content section with a heading, blurbs and arrowed links instead of
footer-style link columns.
13 days ago
✨ Sort maker lists alphabetically and show where a package has been submitted on its hub
13 days ago
πŸ’„ Simplify the wordmark and rebuild the account menu as a click-driven panel
πŸ› Fix console errors: allow the confetti blob worker in CSP, load Ahrefs only in production from head
πŸ”§ Add a Cloudflare tunnel for the dev server at development.launchto.win
13 days ago
✨ Revamp the admin around packages, submissions, directories and billing
Sidebar layout on the monochrome design system, global search, and five new
sections: submissions, learned form mappings, categories, activity log and
system status. Packages get a show page with readiness and directory fit,
directories get a structured field-map editor and bulk actions, users get
billing state, API token rotation and session controls. Every admin action
is logged and filterable.