Commit Graph
270 Commits
Author SHA1 Message Date
Matthew Meszaros 561ed7b874 site(header): cooler mega-menu + trim to 6 meaningful products
- Removed /product, /security, /workers (Footer, 404, privacy, dpa, trust
  references updated).
- Mega-menu now 620px wide with a sky-tinted header strip showing
  'The platform · 6 systems', a 2-col grid of products where each item
  has a 40x40 icon tile that goes from quiet surface ring to a sky
  gradient on hover (with a sky drop-shadow), current page is shown
  with the gradient tile active + a sky dot next to the name. Footer
  band kept (GitHub link + pricing CTA).
2026-05-26 13:59:39 +00:00
Matthew Meszaros 9ccfb519ba site(header): inline script, 250ms close delay, focus support 2026-05-26 13:54:25 +00:00
Matthew Meszaros 27ecd66d70 site(header): fix mega-menu positioning (left-anchored, no x-translate) 2026-05-26 13:50:23 +00:00
Matthew Meszaros 66f047e1aa site(header): Cursor-style mega-menu for Product
Hover or focus the Product nav item to reveal a wide (720px) mega-menu:
- Top: featured 'Product overview' card with sky-gradient icon tile, plus
  a Resources column (Deliverability, API, Integrations, Changelog).
- Two-column product grid grouped 'Send & deliver' (Warmup, Sending,
  Workers, Security) and 'Engage & analyse' (Inbox, Campaigns, CRM,
  Analytics) with icon + title + 1-line description per item.
- Footer band with open-source link and pricing link.
- Caret rotates 180° on open, panel fades + slides down 200ms.
- Hover-bridge with 140ms close delay so cursor can travel from
  trigger to panel without flicker. Escape closes.
2026-05-26 13:48:54 +00:00
Matthew Meszaros b80495cc9b site(handbook): rewrite prose with technical depth, not surface bullets
Every chapter rewritten with specific, verifiable detail:
- §01: the three gates (acceptance / filtering / placement), Postmaster
  Tools as the only after-the-fact placement signal, the formal
  conditional-probability definition.
- §02: DMARC strict vs relaxed alignment, Postmaster Tools reputation
  buckets (High/Medium/Low/Bad), engagement signal weighting (reply >
  move-from-spam > add-to-contacts), specific content fingerprints
  (image ratio, TLDs, fonts, footer mismatch), volume cadence as 2-3σ
  anomaly detection.
- §03: provenance of the threshold numbers (Google Feb 2024 bulk-sender
  update, SES Account-Level Reputation, Microsoft EOP), hard vs soft
  bounce treatment, ARF vs Postmaster Tools complaint sources.
- §04: per-mailbox = per-reputation, Warmbly's worker concentration
  warning at ~10 active cold mailboxes/worker, scaling = more mailboxes
  not higher caps.
- §05: sub-domain isolation rationale (cascade direction), DMARC pct
  ramp procedure, derivation of the 100/day + 600s defaults.
- §06: per-mailbox vs workspace aggregates, warmup-pool probe sample
  size (20 deliveries / 7 days), ARF + Postmaster Tools complaint
  aggregation.
- §07: Apple Mail Privacy Protection prefetch (iOS 15.4+), why click
  optimisation produces link-heavy content, unauditable vendor scores.
- §08: explicit tripwire conditions, common silent failure (a new
  service sending unaligned From-domain mail).
2026-05-26 12:49:07 +00:00
Matthew Meszaros 0cc163ee2a site(handbook): same rail as other essays, scroll-spy + switcher
- Replaced the static chapter list with a 2-pane rail matching Learn.astro:
  'On this page' (chapter-link list with scroll-spy active state) plus
  'All essays' switcher showing every learn article with this handbook
  highlighted as current.
- Active state uses only a soft sky color shift + semibold, no bg or ring,
  with a 300ms color transition.
2026-05-26 12:44:30 +00:00
Matthew Meszaros 264588e36c site(learn): rail uses soft color transitions, no border or bg
- Chapter rail active state: only color shifts to sky (no background,
  no ring), font weight bumps to semibold, smooth 300ms color transition.
- Article switcher: same treatment. Current article shows a small sky
  dot on the right where read time would normally be, so you can spot
  the current spot at a glance.
2026-05-26 12:41:49 +00:00
Matthew Meszaros dc6e63f6bf site(learn): active section highlight + other-essays switcher on left rail
- Added scroll-spy to the chapter rail: as you scroll, the H2 closest
  to the upper third of the viewport becomes the active link (white
  background, sky text, sky ring).
- Below the chapter rail, an 'Other essays' list shows every other
  learn article (6 on each page) with read-time, plus an 'All articles'
  link back to the library.
2026-05-26 12:40:19 +00:00
Matthew Meszaros 79fb1d58c7 site(learn): remove em dashes from all learn subpages 2026-05-26 12:33:56 +00:00
Matthew Meszaros 2739499a0e site(learn): apply handbook docs-style layout to all learn subpages
Rebuilt Learn.astro to mirror the deliverability handbook:
- top bar with library breadcrumb + eyebrow/reading/updated meta
- sticky chapter rail on the left, auto-populated from H2 headings via
  inline JS (each H2 gets a slugged anchor, rail lists numbered links)
- main column with page header (eyebrow, big title, description) and
  prose body with handbook-tuned typography (numbered ol counters,
  bulleted ul with sky bullets, section anchor § glyph, sky blockquotes,
  code blocks)
- footer with 'continue reading' cards excluding the current page
All seven learn subpages (email-warmup, spf-dkim-dmarc, inbox-placement,
cold-email-rules, warmup-pools, reputation-recovery, glossary) now use
this layout. No sky background.
2026-05-26 12:33:27 +00:00
Matthew Meszaros 88b834b59d site(learn): inline reference panel, docs-style handbook
- learn index: dropped the sky-atmosphere library + glossary bands.
  Library is now a quiet inline section with article rows on the left
  and a sticky reference panel on the right showing 6 sample glossary
  entries with a stat strip. White background, no sky.
- handbook: rebuilt as a docs-style 2-column layout (Stripe API style).
  Sticky chapter rail on the left, page header + 8 chapter rows on the
  right. Each chapter has prose on the left and a side example panel
  on the right (definitions list, signal-weight table, threshold table,
  right vs wrong code blocks, numbered recipe, measure list, noise
  cards, incident runbook). Closing rule + continue-reading footer.
2026-05-26 12:20:15 +00:00
Matthew Meszaros 676850e778 site: redesign all pages with sky-themed system
Full site redesign:
- pricing: HeroAtmosphere hero, animated toggle with sliding indicator,
  slide-up price digits, refined plan cards (no dark gradient on featured),
  feature matrix trimmed of unverified claims, lighter Warmbly-deep-sky CTA
- learn index: sky atmosphere band with floating cards + deep-sky glossary panel
- learn/deliverability: rebuilt as a magazine-essay layout with drop-cap,
  numbered chapter index, single 820px reading column, ornamental dividers,
  closing pull-quote. Original prose preserved, em dashes removed
- product, warmup, sending, inbox, campaigns, analytics, crm, workers,
  about, contact, brand, trust, changelog, roadmap, faq, 404, integrations,
  developers, deliverability, security, use-cases: each page got its own
  distinct shape on top of the shared theme tokens
- shared components: PageHero, Section, SectionHead, Card, CTA, Button,
  UseCasePage, Learn layout, Legal layout themed for the sky/serious style
2026-05-26 12:15:49 +00:00
Matthew Meszaros 163c3e9de1 site: warmup row layout - merged Day into mailbox name inline, ramp progress is now a clean full-width bar with no left padding gap. Pool active + status pills now just dot+text, no bordered pill backgrounds. Campaign timeline boxes upgraded with colored header bars (sky/slate/violet/emerald per step kind), icon + text body, faint horizontal connecting rail behind the row. 2026-05-26 09:35:05 +00:00
Matthew Meszaros a433a3b3cf site: warmup section gets a real dashboard panel (6 mailbox rows with day count, mini ramps, today/cap, status pills) instead of one big static ramp chart. Dropped the top 4-stats strip. Gap-strip language broadened beyond 'Docker Compose' to 'Run it on our cloud or your own infra'. 2026-05-26 09:24:46 +00:00
Matthew Meszaros a56da5ef39 site: minimal one-line facts strip in the hero→warmup gap (GitHub URL · Apache 2.0 · self-hostable · stack) replacing the heavy terminal mock. Inbox flow gradients switched to userSpaceOnUse so the horizontal center connectors render with the same gradient as every other path. 2026-05-26 09:17:59 +00:00
Matthew Meszaros 8ab3e534c8 site: fill the white gap between hero and warmup with a self-host CLI section (git clone + docker compose up snippet in dark terminal, headline 'One command on your own infra', Apache 2.0 + stack note). Inbox center horizontal connectors now use solid #0284c7 stroke (objectBoundingBox gradient on zero-height path was rendering invisible). 2026-05-26 09:13:10 +00:00
Matthew Meszaros 065dd23b78 site: warmup background dialled back to mid-dark sky (#0284c7 → #0a3d5c radial, clouds at screen blend) with a 4-cell top stats strip filling the empty space (+1/day · 40/day · 5 health bands · 7 days). Inbox top space gets a 3-cell info strip (5 labels / < 1s tag latency / ∞ mailboxes). Inbox flow diagram upgraded: stronger #7dd3fc→#0284c7 gradients, dedicated solid center horizontal connectors, 6px glowing traveling dots in label-matching colors, subtle background grid behind the canvas. Campaign timeline now auto-marquees forever (60s loop) with no scrollbar. 2026-05-26 09:08:54 +00:00
Matthew Meszaros 7e05c83e4e site: completely distinct layouts for sections 2, 3, 4. Warmup back to airy sky-blue panel with drifting clouds. Inbox is now an architectural flow diagram: 5 mailbox pills on the left, classifier card in the middle, 5 label pills on the right, with SVG bezier connectors and traveling dots showing live flow. Campaigns is a horizontal step timeline (8 cards, SEND/WAIT/BRANCH/END kinds) plus a syntax-highlighted YAML config block paired with API-reference framing. Each section now has its own visual approach instead of repeating text-left + mock-right. 2026-05-26 08:55:15 +00:00
Matthew Meszaros 1d5a75d0e9 site: serious-tone pass — declarative section headlines (Mailbox warmup, built in / Reply triage in one place / Multi-step sequences with branching / Defaults that protect reputation / Pick a plan when the trial ends); compare replaced with clean data table; pricing dropped Most-popular pill + sweep animation + cloud bloom for an unornamented edge-to-edge grid; warmup panel darkened to deep slate (#0c1b2c); section eyebrows plain (no 01/02 numbering) 2026-05-26 08:47:29 +00:00
Matthew Meszaros b0f269a7f5 site: humanize copy throughout — hero now reads 'The biggest open-source cold email platform' with 'Start 14-day trial' + 'Star on GitHub' CTAs and accurate trial caveat (14 days, 1 mailbox, no card). Dropped templated eyebrow pills (Unified inbox, Pricing, Campaigns) and italic-brand pattern. Direct section headlines: 'Mailboxes warm themselves' / 'All your replies, one inbox' / 'Build a campaign the way you'd write one' / 'Pick a plan when the trial ends' / 'Send cold email people actually open'. Tightened section padding to py-14/16/20. Final CTA links to GitHub self-host as alternative. 2026-05-26 08:37:30 +00:00
Matthew Meszaros a9e39c469e site: de-AI sections — drop fake counters (487k sent today, mailbox-warming counts, 'biggest open-source' superlative); warmup goes back to dark-sky side-by-side with text + 3 real visual cards (ramp/health/pool); replace worker grid with Sequences feature using new SequenceMock (Q2 outbound, A/B variants, branches, business-hour waits); drop italic-brand pattern from inbox/pricing headlines; replace em-dashes with periods/middots in visible copy; pricing header now states 14-day free trial up front. 2026-05-26 08:11:27 +00:00
Matthew Meszaros d256ba46f4 site: complete section redesign — killed metrics+how-it-works, replaced with continuous marquee activity ribbon; deep-sky Warmup panel with animateMotion spark traveling along ramp curve forever; continuously scrolling Inbox reply stream (50s loop); Sending worker grid with traveling send sparks; narrative two-card Compare; redesigned Pricing with annual-default premium segmented toggle + 'Save 20%' pill + featured-card sweep animation + larger price typography. All loops are CSS-based, prefers-reduced-motion respected. 2026-05-26 07:50:47 +00:00
Matthew Meszaros 57263f1f9e site: open-source pill in hero (GitHub link) 2026-05-26 07:43:18 +00:00
Matthew Meszaros 086d172a43 site: real plan data from web/src/lib/plans.ts (Starter $29 / Grow $89 / Business $329 featured / Enterprise) + motion.dev scroll animations (fade-in cards via is-in class with CSS fallback, animated ring/bar/sparkline, working monthly↔annual toggle that slides + swaps prices) + redesigned feature sections (KPI tile sidebars, animated warmup chart with sky panel + health bands, reply-distribution donut + stacked inbox mock + floating toast, sending worker grid with gradient bars + pool diversity) + GitHub repo link in footer + pnpm-workspace.yaml for esbuild/sharp builds + 5 Perlin-noise WebP cloud assets 2026-05-26 07:37:20 +00:00
Matthew Meszaros dfd91281cd site: added live metrics strip (animated counters, pulsing dots) + 'how it works' section with 4 numbered steps and connecting flow line, between hero and feature sections 2026-05-26 07:10:23 +00:00
Matthew Meszaros 2c2e6d0938 site: real raster clouds — Perlin-noise generated WebPs via Sharp (scripts/gen-clouds.mjs), Cloud.astro renders <img> (Safari-perfect, no filter quirks). 5 organic cumulus variants with multi-lobed white tops + blue underbellies + warm sun-catch. Total ~520 KB across all 5, lazy-loaded. 2026-05-26 07:08:40 +00:00
Matthew Meszaros 4db94c2bc7 site: replace outlined clouds with painterly bezier clouds — Cloud.astro renders 5 silhouette variants with halo + body gradient + underbelly shadow + sun-highlight, no feDisplacementMap (Safari-safe), HeroAtmosphere uses 5 painterly clouds drifting, SectionSky uses 2 2026-05-26 06:56:48 +00:00
Matthew Meszaros 45860b99f4 site: redesigned pricing — 4 equal premium cards, Growth glows (sky ring + cloud + POPULAR pill), monthly/annual toggle, big tight prices, check icons in tinted pill bullets, footer comparison link 2026-05-26 06:28:31 +00:00
Matthew Meszaros 9c9dd8dc23 site: blue-sky theme (matches /web auth palette) — deep sky hero with breathing gradient + drifting clouds + sun pulse + white text, dashboard mock fills container width and overlaps into white section, per-feature SectionSky backdrop on the side hosting the mock, bento pricing with Growth as wide highlighted hero card + Free/Starter/Business in 3-col row, animated bar grow + ring fill + toast-in + live ticking sends counter, prefers-reduced-motion respected 2026-05-26 06:23:42 +00:00
Matthew Meszaros 89a111161c site: Warmbly own theme — cornsilk #fff5d6 hero with animated aurora gradient + drifting outlined clouds, dashboard mockup overlaps down into white section, azure accent, italic 'actually' in headline, redesigned pricing with highlighted middle plan + feature lists, lift-on-hover on bento + mock cards, prefers-reduced-motion respected 2026-05-26 06:00:38 +00:00
Matthew Meszaros c14a3559ae site: shorter+wider dashboard mock (4 rows, compact sidebar, 380px min-h), abstract sky backdrop without literal mountains, removed fake quote band/customers page/about Backed-by/trust uptime numbers, hero CTAs now 'Start free'+'Tour the product' 2026-05-26 05:52:19 +00:00
Matthew Meszaros ba4be92341 site: reset to unified Cursor+Air theme — parchment #f7f7f4 base, Inkwell text, Cursor multi-layer shadows on white cards, single warm painted backdrop behind hero mock (no rainbow), dropped logo strip, filled-ink primary CTA + ghost secondary 2026-05-26 05:46:25 +00:00
Matthew Meszaros 9f21e05111 site: apply Adora design system — pastel gradient-accent cards wrap product mocks, Action Violet filled primary CTA, Rich Violet headings, Slate Text body, decorative outlined sparks, 26-48px radius across cards 2026-05-26 05:40:00 +00:00
Matthew Meszaros be1afb0ef2 site: real painted-landscape SVG backdrop (sky gradient + sun glow + turbulence-distorted cloud clusters + layered mountain silhouettes), replaces flat CSS gradient 2026-05-26 05:31:59 +00:00
Matthew Meszaros a2aa0f4d2f site: PaintedSky now overlays optional /backdrops/hero.webp image with CSS fallback. README in site/public/backdrops/ has prompts for Midjourney/Krea/Leonardo/DALL-E. Drop file in to swap from CSS gradient to AI-painted backdrop. 2026-05-26 05:27:58 +00:00
Matthew Meszaros 4a6806ea30 site: DashboardMock now mirrors full /web shell — AppHeader (logo + crumb + PlanPill + Search), AppNav sidebar (LivePanel with sparkline + nav sections + Settings + UserNav), rounded-tl-2xl white content panel 2026-05-26 05:19:59 +00:00
Matthew Meszaros 9817fce977 site: Cursor-style home — clean white, painted-sky backdrop behind pixel-faithful dashboard mocks (DashboardMock matches /app/emails, InboxMock matches /app/unibox, WarmupMock matches /warmup) 2026-05-26 05:11:23 +00:00
Matthew Meszaros bff49c31c2 site: experimental sky hero (will replace with Cursor-style painted backdrop) 2026-05-26 05:03:23 +00:00
Matthew Meszaros 3a4b0b5d55 site: terms, privacy, DPA, AUP, subprocessors, cookies 2026-05-25 17:00:24 +00:00
Matthew Meszaros fbdb5202cf site: learn section with deep guides on warmup, deliverability, auth, placement, cold-mail rules, pools, recovery, glossary 2026-05-25 16:57:12 +00:00
Matthew Meszaros b66e3f067d site: sending/inbox/campaigns/analytics/crm/developers/integrations/workers/about/customers/contact/brand/trust/roadmap/changelog/faq/404/use-cases 2026-05-25 16:50:56 +00:00
Matthew Meszaros 833bfb9ac7 site: product, warmup, deliverability, security, pricing pages 2026-05-25 16:41:52 +00:00
Matthew Meszaros c9f2ae4a11 site: theme tokens, layout/header/footer, home page 2026-05-25 16:37:17 +00:00
Matthew Meszaros 45f51c2cbb site: bootstrap site/ from warmbly-web (strip old content for redesign) 2026-05-25 16:29:37 +00:00
Matthew Meszaros 6c4fad43fc Merge pull request #13 from warmbly/fix/dev-stack-and-worktree-split
Fix dev stack startup and split into infra + app for worktree sharing
2026-05-25 13:50:41 +02:00
Matthew Meszaros ef9ce6a6e2 refactor: split make dev into make infra and make app
Every docker compose invocation in the Makefile now pins
-p warmbly so all git worktrees target the same compose
project. This means infra (postgres, redis, kafka, mailpit,
localstack, stripe-mock, cloud-tasks-emulator, zookeeper,
schema-registry) is brought up once and stays running across
worktree switches. App services (backend, consumer, worker,
tracking, realtime, web) recreate in place per worktree against
the bind-mounted source.

Removed targets:
- dev, dev-down, dev-logs (and the DEV_SVCS / SVCS vars)

Added targets:
- infra, infra-down
- app, app-down, app-logs

Daily flow becomes:

    make infra                     # once, from any worktree
    cd /path/to/worktree-a
    make app                       # bring up app code for branch A
    cd /path/to/worktree-b
    make app                       # recreates app against branch B;
                                   # infra untouched, caches warm

The named cache volumes already shared their content across
worktrees (warmbly_gomodcache, warmbly_gocache, warmbly_cargo_home,
warmbly_cargo_target, warmbly_mix_deps, warmbly_mix_build); pinning
the project name additionally makes container ownership shared,
which is what eliminates the per-worktree cold start.

README.md, resources/local-development.md, resources/deployment-guide.md,
deploy/README.md, and docker-compose.dev.yml all updated to reflect
the new targets.
2026-05-25 11:43:33 +00:00
Matthew Meszaros 1dc600d722 fix: disable Go VCS stamping in air dev build
The bind-mounted .git is owned by the host user but the dev
container runs as root, so git aborts with "dubious ownership"
and Go's automatic VCS stamping fails the build with:

  error obtaining VCS status: exit status 128
  Use -buildvcs=false to disable VCS stamping.

Production Dockerfiles are unaffected because they do not
bind-mount .git; they COPY source into the image and let Go
stamp normally.
2026-05-25 11:43:21 +00:00
Matthew Meszaros 1317ea67d6 fix: rename duplicate migration 000035 to 000037
PR #10 added 000035_api_key_suffix and PR #11 separately added
000035_api_key_smart_limits, both targeting the api_keys table.
golang-migrate refuses to load when two source files share a
version number, so the backend container failed health checks
in fresh stacks.

Bumping api_key_smart_limits to 000037 keeps PR #10 in its
original slot (it landed first) and matches the next free
version after 000036_contact_categories. The two migrations
touch different columns so apply order does not matter.
2026-05-25 11:43:14 +00:00
Matthew Meszaros c790812207 Merge pull request #11 from warmbly/feature/api-keys-dashboard
feat: ship api keys dashboard with smart limits and analytics
2026-05-25 12:26:54 +02:00
Matthew Meszaros e38d571610 Merge pull request #12 from warmbly/feature/campaign-creation-overhaul
feat: fix campaign creation 500 and ship full-config wizard
2026-05-25 12:26:44 +02:00