— Release Notes

What’s shipped

Every Indolent Forge Nesting release, with the why.

v3.7.0
Indolent Forge Nesting·

Website — LinkedIn-launch prep

Repositioned the Indolent Designs site for a public launch and closed the remaining Forge launch-polish gaps.

Added

  • Indolent CAD product page (/products/indolent-cad) — a "coming soon" page

for the new flagship: AI CAD for steel (describe a part → parametric model → shop drawing → NC1/DSTV). Added to the sitemap and footer.

  • Top-level `/privacy` page — fixes a sitewide footer/sitemap 404; documents

the real data flows and processors (Stripe, Resend, Clerk, Plausible, Railway).

  • `/contact/received` page — project inquiries now land on a proper contact

thank-you instead of the license order-complete page.

Changed

  • Positioning flipped to one-live / three-coming-soon. Homepage and

/products now present Indolent Forge Nesting as the single live product, with Trucking, CAD, and Vibe in a coming-soon row.

  • Indolent Trucking demoted to "coming soon — reach out for pricing." Removed

the monthly price, the production metrics (call volume / uptime), the named design-partner, and the "shipped"/"live in production" claims across the Trucking pages, the homepage, /products, /about, the footer, and the Vibe page's build list. CTAs now point at /contact.

  • Machine-ID copy on the buy form and docs now reflects the real IF-…

desktop format instead of the legacy 64-char hex description.

Fixed

  • Removed a dev screenshot placeholder that was shipping on the $499 Forge product

page; it now renders the real KISS-import screenshot.

  • Repointed Trucking CTAs off a raw Railway hostname onto internal routes.
v3.6.0
Indolent Forge Nesting·

Admin Dashboard 2.0

Upgraded /admin from static totals to a full momentum dashboard — look great, easy to use, powerful.

Added

  • KPI cards with % deltas — visits, signups, downloads, purchases each show

current-period count vs prior period with a colour-coded delta (green up / red down).

  • Sparklines — 7-point SVG sparkline per KPI card rendered from the same timeseries

query; no chart library added.

  • Traffic chart in Phoenix time — "Today" view renders hourly bars (Phoenix is

fixed UTC-7, no DST) zero-filled so gaps are visible. Older ranges render daily bars. All bucketing via the phoenixMidnight helper in lib/analytics.ts.

  • Live activity feed — recent events (page views, signups, downloads, purchases)

pulled from the events + orders tables; purchases display the order amount from real order rows, not just the event record.

  • UTM campaign breakdown — top source/medium/campaign combos ranked by visit count.
  • Browser / OS breakdown — top user-agent families (parsed from events) ranked by

count.

  • Leads table with search/admin accepts ?q= to filter the leads table by

email or company; server-rendered, no client JS required.

  • Hardened CSV exportGET /api/admin/leads.csv returns all leads as a

downloadable CSV. Non-admins receive a plain 403 Forbidden (not a redirect) so the endpoint cannot be probed via redirect-following.

  • Orders table with TEST badges — all-time orders list; test-mode orders are

clearly badged to separate them from real revenue.

  • 60-second auto-refreshAutoRefresh client component calls router.refresh()

every 60 s so the server components re-run and the dashboard stays live without a manual reload.

Changed

  • app/admin/page.tsx — full rewrite; now an orchestration-only server component that

delegates rendering to focused sub-components under app/admin/components/.

  • lib/analytics.ts — extended Range type; added getOverviewWithDeltas,

getTimeseries, getActivityFeed, getUtmBreakdown, getTechBreakdown.

  • lib/leads.tsgetLeads accepts optional search param; added leadsToCsv.
  • lib/db.ts — added getOrders with is_test flag detection.

No migrations / env vars / new dependencies

All new features are served from existing tables (events, orders, leads). No new Railway env vars required. No npm packages added. Deploy with railway up.

v3.5.0
Indolent Forge Nesting·

Clerk-gated trial download, lead capture, analytics, and admin panel

The trial download is now behind a Clerk sign-in wall. Visitors must create an account before downloading the desktop installer. This gives us a verified email + name for every trial user, plus the opt-in company/job title captured on a one-time onboarding screen.

Added

  • Download gate — all trial-download buttons now link to /download (gated), not the

raw GitHub URL. Clerk sign-in/sign-up is required before any installer download.

  • Lead capture via onboarding — after sign-up, users land on /onboarding and provide

company name + job title. Stored in a new leads table alongside the Clerk user ID and email. The onboarding gate is enforced server-side on the /download page via a DB check (lead completeness) — no Clerk session-token claim needed.

  • First-party analyticsevents table records page_view, signup, download,

checkout_start, and purchase events. No raw IPs (hashed + salted). No analytics cookies; no cookie banner required.

  • Plausible integration (prod-only) — managed analytics script in <head>, gated on

NEXT_PUBLIC_PLAUSIBLE_DOMAIN. Zero impact on the first-party pipeline; purely a second pane of glass.

  • Conversion funnel — visit → signup → download → purchase tracked in Postgres. Visits/

signups/downloads come from the events table; the purchase stage is counted directly from the orders table (the source of truth), so revenue and purchase counts stay consistent. A purchase event is also recorded for the audit trail.

  • Private `/admin` dashboard — server-rendered. Shows overview stat cards, funnel with

conversion %, daily-visits bar chart (CSS/SVG, no chart library), leads table, and orders table. Access restricted to ADMIN_EMAILS (comma-separated allowlist) using Clerk's verified primary email. Defense in depth: middleware + requireAdmin() per route.

  • `@clerk/nextjs` v7 — Clerk is the single auth system for download gating and admin

access. Sign-in/sign-up pages at /sign-in and /sign-up are styled to the ice/steel/dark theme.

  • Migration 002_leads_events.sql — adds leads and events tables (apply with

npm run migrate).

  • New API routes: /api/download (records event + 302 redirect), /api/onboarding

(upserts lead + sets publicMetadata), /api/track (public beacon, always 204).

Changed

  • BREAKING: `NEXT_PUBLIC_TRIAL_DOWNLOAD_URL` → `INSTALLER_DOWNLOAD_URL` (server-only).

The raw GitHub installer URL is no longer published to the browser bundle. All trial entry points now go through /download/api/download. Update Railway env accordingly and remove the old NEXT_PUBLIC_TRIAL_DOWNLOAD_URL var.

  • lib/db.ts — exports the sql singleton for reuse by lib/leads.ts and

lib/analytics.ts (avoids opening a second connection pool against Railway's low cap).

New required env vars

`` NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY CLERK_SECRET_KEY NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up NEXT_PUBLIC_CLERK_SIGN_IN_FALLBACK_REDIRECT_URL=/download NEXT_PUBLIC_CLERK_SIGN_UP_FORCE_REDIRECT_URL=/onboarding ADMIN_EMAILS=holmeslucky@gmail.com INSTALLER_DOWNLOAD_URL=<stable GitHub release URL> ANALYTICS_IP_SALT=<openssl rand -hex 32> NEXT_PUBLIC_PLAUSIBLE_DOMAIN=indolent.design ``

No Clerk session-token customization is required — the onboarding gate checks the database (lead completeness) on the /download page, not a Clerk session claim.

Notes

  • Existing /buy checkout flow is public (no Clerk login wall) — the desktop app opens

/buy?machine_id= directly and must never hit a login redirect.

  • ADMIN_EMAILS is compared case-insensitively against Clerk's verified primary email.
  • Plausible account/domain must be created separately by Blake before the managed pane works.

First-party panel (/admin) works without Plausible.

v3.4.0
Indolent Forge Nesting·

First public release

Indolent Forge Nesting is now available at indolent.design as a $499 perpetual-license commercial product. The same nesting engine that has been in daily shop use is now sellable, with a real license-issuance pipeline behind it.

Added

  • Public sales site at indolent.design with checkout, pricing, comparison, and docs
  • Stripe Checkout integration for $499 one-time payment
  • Ed25519 license signing pipeline (machine-ID-locked perpetual keys)
  • Automated license email delivery via Resend on successful payment
  • 14-day free trial download — full functionality, no credit card
  • 30-day money-back guarantee

Changed

  • Renamed product to Indolent Forge Nesting for commercial release
  • New brand: indolent.design domain, refreshed marketing site, professional installer

Notes

This is the first release where the binary contains a production license-signing public key. Earlier internal builds used a placeholder key.