Commit Graph
251 Commits
Author SHA1 Message Date
Matthew Meszaros 8bd2c2b57a feat: make self-hosting work end to end and rewrite the guide around what was tested (#97) 2026-08-13 09:47:46 +02:00
Matthew Meszaros a7518a8558 docs: refresh the documentation site, fix inaccurate claims and contact addresses, add SEO primitives (#90)
* feat: rewrite the self-hosting docs against repo ground truth: turn the deployment guide into a full self-host guide (quick start with first-admin bootstrap via make grant-admin, .env secrets with exact key formats, PUBLIC_HOST derivation and HTTPS reverse-proxy vars, provider switches with build-tag caveats, mailbox OAuth, remote worker enrollment via SSH or wmenroll tokens, real CI image tags, upgrades and backups), rewrite the events page around the real NATS/Kafka bus topics and {type,body} envelopes, fix Kafka-era and make-target claims in architecture/local-development/deploy README, add API_PUBLIC_URL and drop the dead LOG_DISCORD_WEBHOOK_URL in env.example, and remove the docker-compose.kafka.yml comment pointing at a file that does not exist

* feat: make the self-hosting docs visual and skimmable by adding a Mermaid MDX component (client-rendered, theme-aware) to the docs site, condensing the self-host guide around a control-plane topology diagram, a worker enrollment sequence diagram, a dashboard screenshot, and symptom/check troubleshooting + optional-subsystem tables, and adding an execution-plane flowchart to the architecture page

* feat: stop the docs root flashing a 'Continue to the Warmbly docs' link before redirecting by navigating with an inline location.replace that runs during HTML parse, and demoting the visible link and meta refresh to no-JS fallbacks inside noscript

* feat: cut docs bulk and duplication by deleting three orphaned API pages that were stale forks of the reference section and were unreachable from the sidebar (porting their unique social sign-in, promo-code, and referral endpoints into api/reference/account-org.mdx as compact tables), condensing the deliverability and warmup guides to roughly half their length around tables instead of prose, replacing prose em dashes across the guides and MCP pages, and adding the required trailing slashes to internal links in 24 files

* feat: condense the sequences guide by about 40 percent, folding the switch-step deciders and branch conditions into tables and cutting restated prose while keeping every rule about threading, instant branches, reply matching, and stop on reply

* feat: condense the automations, unibox, advisor, and expressions guides by roughly 40 percent each, folding trigger lists, action catalogs, sending controls, and advisor checks into tables, adding a trigger-condition-action flow diagram to automations, and cutting restated prose while preserving every threshold, permission boundary, and rule

* feat: condense the mailboxes, campaigns, analytics, and team-roles guides by roughly 45 percent each, replacing prose walks through providers, rotation modes, lead statuses, counting rules, A/B confidence, and the permission matrix with compact tables and collapsing the four-way role grid into one capability table plus a one-line mapping

* feat: condense the AI-steps, security, and contacts-CRM guides by roughly 40 percent, turning sign-in methods, AI step modes, switch deciders, credit and failure behavior, import field mappings, and deal views into tables while keeping every safety boundary and dedupe rule

* feat: condense the meetings, notifications, AI-credits, and AI-assistant guides by roughly 40 percent, merging notification categories and their defaults into one table, collapsing credit costs, spend controls, and plan allowances into tables, and tightening the assistant page around its approval and permission boundaries

* feat: condense the integrations, collaboration, zapier, and make guides by roughly 35 percent, grouping the thirty-row Zapier and Make action lists into eight labelled areas, folding CRM default field mappings and presence indicators into tables, and promoting the destructive-action and unattended-delete warnings into callouts

* fix: correct three factual errors in the development docs: NOTIFICATION_EMAIL_DAILY_CAP=0 means uncapped rather than disabled (overEmailBudget returns false at limit<=0, so documenting it as a kill switch inverted the behavior), and the worker-SSH and warmup-pool migration citations in architecture.mdx pointed at pre-squash filenames that no longer exist or now belong to unrelated migrations, so both now cite the tables in 000001_baseline.up.sql

* feat: add the missing docs SEO primitives: a build-time sitemap.xml covering all 64 pages, a robots.txt that points at it and keeps the llms.mdx and og mirrors out of the index as duplicate content, and per-page canonical plus richer OpenGraph URL/title/description metadata

* fix: use the single real team@warmbly.com address everywhere a human is told to write in, replacing the invented hello/sales/legal/support inboxes across the marketing site, the transactional email footer, and the admin outreach composer default Reply-To (which pointed replies at a mailbox that does not exist), and collapse the contact page's two-inbox framing into one inbox with one published response time
2026-08-05 10:37:27 +02:00
Matthew Meszaros cca3bd5ba0 fix: keep the marketing site on sharp 0.34.5 since 0.35 breaks its Cloudflare build, bump svgo to 4.0.2, and suppress the remaining build-only sharp HIGH in the documented .trivyignore 2026-07-22 17:53:13 +02:00
Matthew Meszaros 66e9856ea8 fix: bump sharp to 0.35 in docs and site and linkify-it to 5.0.2 in web via pnpm overrides to clear the HIGH-severity Trivy CVEs blocking the security scan 2026-07-22 17:33:52 +02:00
Matthew Meszaros 14587b9cd1 feat: swap the OG and Twitter social image for the new Social.jpg and update its width and height to 1280x640 2026-07-22 17:05:08 +02:00
Matthew Meszaros d4b201eef0 fix: bump axios and js-yaml to clear the trivy security scan 2026-07-21 17:59:46 +02:00
Matthew Meszaros 2af4bd084e copy: say largest instead of biggest across the marketing site 2026-07-20 11:21:57 +02:00
Matthew Meszaros 3b3fc0fe62 feat: show the iOS app showcase on the homepage, slotted between the integrations feature section and the automations centerpiece so the sky band breaks up two light sections 2026-07-16 18:43:11 +02:00
Matthew Meszaros c68ee02a20 feat: drive the mobile showcase — scale-to-fit phone stage capped at real-device size, story segments that fill and auto-advance the screens with tap-to-jump, cycling push notifications with long quiet gaps, and an IntersectionObserver lifecycle that pauses everything off-screen 2026-07-16 18:43:02 +02:00
Matthew Meszaros 28830a2718 feat: style the mobile showcase motion — screen slide transitions, status-bar glyph cross-fade, notification drop-in under the Dynamic Island, health-ring and chart draw-in states, phone entrance reveal, and prefers-reduced-motion fallbacks 2026-07-16 18:42:51 +02:00
Matthew Meszaros cc1a35e835 feat: add the MobileAppShowcase section markup — sky band with a story-bar switcher and a bottom-cut iPhone whose Home/Inbox/Campaigns screens recreate the SwiftUI app 1:1 on a 393pt canvas (AirSkyWash hero, gradient-stroke stat chips, health rings, unibox and campaign rows, fixed status bar, frosted notification with the real app icon) 2026-07-16 18:42:37 +02:00
Matthew Meszaros 69c634a68c feat: ship the real Warmbly iOS app icon (AppIcon-Light downscaled to a 10KB 128px png) as site/public/brand/app-icon.png for the mobile showcase notification banner 2026-07-16 18:42:27 +02:00
Matthew Meszaros fb5e22030e feat: wire per-post cover frontmatter into the nine remaining blog posts so each renders its own grid thumbnail and og/twitter card 2026-07-07 07:15:06 +02:00
Matthew Meszaros d2afbf9319 feat: rewrite the quarantine-early blog post with the four-band health table, sample-size floors, engagement-signal rule, and earned re-entry 2026-07-07 07:15:06 +02:00
Matthew Meszaros bba7a8fcb3 feat: rewrite the bulk sender rules blog post to full cluster length, converting it to mdx and covering the current Google and Microsoft 5000-a-day SPF DKIM DMARC alignment enforcement bar 2026-07-07 07:15:06 +02:00
Matthew Meszaros 339e3495b2 feat: add eleven 1200x600 webp blog cover images (29-59KB each) under public/blog for post grid thumbnails and social share cards 2026-07-07 07:15:06 +02:00
Matthew Meszaros f6a6a310ac feat: enrich blog structured data with BreadcrumbList, wordCount, keywords, inLanguage, articleSection, and a per-post share image on BlogPosting 2026-07-06 06:28:11 +02:00
Matthew Meszaros 721aced30f feat: replace the social OG card with the Figma export as an optimized 52KB mozjpeg JPG (1200x600) and switch every og:image reference from PNG to JPG 2026-07-06 06:28:11 +02:00
Matthew Meszaros 1f38604fcd feat: cross-link the three existing blog posts into the new warmup, sending, and deliverability topic clusters with contextual internal links 2026-07-06 06:28:11 +02:00
Matthew Meszaros 074f484c43 feat: add eight SEO blog posts on cold email sending limits, warmup mechanics, delivery vs inbox placement, DMARC alignment, reputation recovery, and self-hosting 2026-07-06 06:28:11 +02:00
Matthew Meszaros 5809247980 style: replace an em dash with a colon in the terms usage-limits clause to match the no-em-dash copy rule 2026-07-06 06:28:11 +02:00
Matthew Meszaros 7aa1390f21 feat: add FAQPage JSON-LD to /faq, correct the per-user to per-organization DEK claim, and drop em dashes from two answers 2026-07-06 06:28:11 +02:00
Matthew Meszaros 534f6eb263 fix: correct the encryption claim from per-user to per-organization DEKs on the about, trust, and integrations pages to match the envelope-encryption model 2026-07-06 06:27:43 +02:00
Matthew Meszaros dcf50cb99a feat: change the trial to three mailboxes everywhere and add free-tier limitation copy (unfilled warmup pool, for evaluation not production) on the homepage and pricing page 2026-07-06 06:27:43 +02:00
Matthew Meszaros a9384ca72c feat: add reciprocal Deep dives blog link blocks to the warmup, sending, and deliverability pillar pages so clusters link both directions 2026-07-06 06:27:43 +02:00
Matthew Meszaros 71a4275e59 feat: surface the self-host warmup pool notice on the warmup page and sharpen the open-source section caveat that the pool needs the cloud 2026-07-06 06:27:43 +02:00
Matthew Meszaros d9c8d3c9bd feat: add a reusable PillarPosts component for a 'Deep dives' blog link block on pillar pages 2026-07-06 06:27:43 +02:00
Matthew Meszaros e37a340bb4 feat: add a reusable WarmupPoolNotice component explaining the shared warmup pool is a cloud feature a single self-hosted instance cannot replicate 2026-07-06 06:27:43 +02:00
Matthew Meszaros 1d4357e4af feat: add a site-wide coming-soon launch banner (LaunchBanner) announcing Warmbly Cloud and the shared warmup pool with a waitlist CTA, rendered above the header in Layout 2026-07-06 06:27:43 +02:00
Matthew Meszaros af4fa7b1d2 Merge remote-tracking branch 'origin/main' into referral-credits 2026-06-28 06:38:50 +00:00
Matthew Meszaros 2187af0470 fix(security): migrate site from Astro 5.18 to 6.4.8 (and @astrojs/mdx to 6, sitemap to 3.7.3) to clear CVE-2026-50146 and CVE-2026-54299; build verified, 35 pages 2026-06-28 06:21:16 +00:00
Matthew Meszaros ceb54c25c3 fix(security): bump site transitive vite to 6.4.3 to clear the vite server.fs.deny bypass CVE-2026-53571 2026-06-28 06:09:35 +00:00
Matthew Meszaros dce555689f feat: add the referral program marketing page and a Product footer link in site 2026-06-28 05:10:04 +00:00
Matthew Meszaros 3b987f38d0 feat: replace the fabricated SDK code samples and First-class SDKs claims on the developers page with honest plain-HTTP examples and an accurate OpenAPI-and-generate-your-own-client story 2026-06-13 07:29:17 +02:00
Matthew Meszaros fa83e55763 Merge pull request #47 from warmbly/feature/redesign-developers-page
feat: redesign developers page
2026-06-11 07:18:26 +02:00
Matthew Meszaros 65455b907d feat: redesign developer page content 2026-06-11 05:15:56 +00:00
Matthew Meszaros 78b8a73fa8 feat: refactor developer page data model 2026-06-11 05:15:34 +00:00
Matthew Meszaros dcc68f6eb4 feat: add automations navigation and featured product entry 2026-06-11 06:11:42 +02:00
Matthew Meszaros 79935060ef feat: add automations landing page and homepage showcase 2026-06-11 06:11:33 +02:00
Matthew Meszaros 1e4116ab0f Merge remote-tracking branch 'origin/main' into chore/update-docs
# Conflicts:
#	site/src/components/Header.astro
#	site/src/layouts/Learn.astro
#	site/src/pages/learn/cold-email-rules.astro
#	site/src/pages/learn/deliverability.astro
#	site/src/pages/learn/email-warmup.astro
#	site/src/pages/learn/glossary.astro
#	site/src/pages/learn/inbox-placement.astro
#	site/src/pages/learn/index.astro
#	site/src/pages/learn/personalization.astro
#	site/src/pages/learn/reputation-recovery.astro
#	site/src/pages/learn/spf-dkim-dmarc.astro
#	site/src/pages/learn/warmup-pools.astro
2026-06-10 18:35:12 +02:00
Matthew Meszaros 9706458b10 feat: move the marketing site learn articles into a docs learn tab and point every site learn link at docs.warmbly.com 2026-06-10 18:27:42 +02:00
Matthew Meszaros 9cc42546a4 feat: align the deliverability handbook with the registry and real caps
The hand-rolled flagship page now reads the shared learn registry for its
rail (it had drifted and was missing an essay), emits the BlogPosting
JSON-LD every other essay already had, and corrects its repeated 100/day
per-mailbox claim: the product default is 50/day, with 100 only as the
validation ceiling under positive reputation evidence.
2026-06-10 17:16:07 +02:00
Matthew Meszaros 0f5fd64580 feat: give learn essays editorial headlines and repair broken copy
Every essay passes a real display headline instead of surfacing its SEO
title as the H1. Repairs roughly forty sentences left broken by an
earlier em-dash strip ('The safest assumption. for them. is spammer.')
using colons, commas and real sentence splits. Drops the internal DEK
term from the customer-facing glossary.
2026-06-10 17:16:07 +02:00
Matthew Meszaros 9ebc776d1b feat: rework the learn article layout
Adds a headline prop so the visible H1 stops rendering the SEO title
suffix ('... | Warmbly'), real prev/next navigation from the registry, a
sticky top bar with reading progress, a mobile on-this-page disclosure
(there was no TOC below desktop), hover heading anchors, and the shared
.article-prose typography. The rail no longer flashes 'Loading...'.
2026-06-10 17:15:43 +02:00
Matthew Meszaros 7e6833cf0b feat: centralize the learn library registry
One registry in src/lib/learn.ts now drives the index, the article rails
and prev/next ordering; previously three hand-maintained copies had
drifted (missing personalization, wrong read times). Fixes stale facts on
the index: 'Six essays' with seven listed, a fabricated 42-term glossary
count, and renders the previously dead level chips and summaries on rows.
2026-06-10 17:15:43 +02:00
Matthew Meszaros 4839c93f4c feat: seed the blog with three launch posts
Mailbox send budgets vs server limits, the early-quarantine bands that
protect shared warmup pools, and a plain reading of Google's bulk sender
rules. All grounded in the product's real defaults (50/day cap, 600s
spacing, the 10/20/40/80 placement bands).
2026-06-10 17:15:43 +02:00
Matthew Meszaros e3355a0321 feat: link the blog from the site navigation
Blog joins the header nav (desktop and mobile pick it up from the shared
nav array) and the footer Company column, with a small RSS link in the
footer bottom bar.
2026-06-10 17:15:17 +02:00
Matthew Meszaros 0edc1d4f67 feat: publish the blog RSS feed
Description-only feed at /blog/rss.xml (full-content RSS cannot render
MDX components), excluding drafts unconditionally, plus an autodiscovery
link in the global head. The feed is the subscription: no newsletter.
2026-06-10 17:15:17 +02:00
Matthew Meszaros 67f773cced feat: add a newsroom-style blog index with search and topic pages
Compact header, then a cover-image card grid with topic tabs, client-side
search and batched load-more. Every card is server-rendered; search and
load-more only toggle visibility, so crawlers and no-JS readers see the
full archive. Posts without a cover image get deterministic generated sky
art seeded from the slug. Tags get their own filtered pages.
2026-06-10 17:15:17 +02:00
Matthew Meszaros bd51ef40ff feat: add the blog post page
Article shell with a sticky meta bar carrying reading progress, a right
rail (chapter scroll-spy built from server-rendered heading ids, post
facts, neighbors), prev/next cards and BlogPosting JSON-LD with real
publish dates. MDX posts can embed the Callout component.
2026-06-10 17:14:57 +02:00