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.
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.
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.
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.
Extracts the Learn layout's arbitrary-variant prose blob into a single
.article-prose class, registered in @layer components so page-level
utilities can still override it. Fixes the invalid counter-reset syntax
that rendered every ordered-list item as 00., adds table styles, hover
heading anchors and a reading-progress bar.
Posts are markdown/MDX files under src/content/blog with a zod-validated
schema (title, description, pubDate, tags, optional cover, draft). All
listing surfaces read through getPublishedPosts() so draft filtering has
a single owner. @astrojs/mdx is pinned to ^4.x: the npm latest (v6)
requires Astro 6 and would break this tree.
Replace the hand-maintained changelog entries with a build-time fetch of the
real merged pull requests on warmbly/warmbly. PRs (not commits) are the unit,
so each entry is one shippable change rather than one of many commits.
src/lib/changelog.ts fetches closed PRs into main from the GitHub REST API,
keeps the merged ones, strips conventional-commit prefixes, derives the tag
from the type, and pulls the body from the PR's Summary bullets. Marketing-site
and pure-infra PRs are filtered by type, title pattern, and a skip-changelog
label, all configurable in one place. Results are cached per build and fall
back to a curated list if the API is unreachable, so the build never breaks.
The changelog page and the homepage ChangelogShowcase both consume this data
and link each entry to its pull request. Set GITHUB_TOKEN at build to lift the
unauthenticated rate limit; it is optional for the public repo.
Delete the public roadmap page and every reference to it (footer, open-source
showcase, about, changelog, trust). The roadmap was built from seeded,
fabricated items.
Rebuild the changelog from the real git history. The previous entries were
self-described seeded fabrications and contradicted the codebase (claiming
SAML SSO and BYOK shipped, which they have not). There are no releases, tags,
or CHANGELOG.md, so the commit log is the source of truth. Group the work into
a handful of milestone entries rather than one per release, mirror them on the
homepage changelog showcase, and drop the invented version numbers.
Fix the broken links the old page carried: the dead /changelog/feed.xml RSS
feed and the non-existent CHANGELOG.md now point at the real commit history.
Relabel the trust page's 'roadmap' posture state to 'planned' so SOC 2 and
ISO 27001 stay honestly marked as not yet in place.
Add the run-another-automation native action to the builder, richer action visuals, task assignment fields, disabled-target warnings, and unsaved-change tracking for the automation editor.
Use the shared assignee/team picker in campaign action steps, persist task_assigned_team_id, and make run-automation campaign steps surface disabled and trigger-mismatch warnings.
Support chained automation execution from native actions, guard automation recursion depth, carry idempotency context through campaign-launched automations, allow team task assignment in backend action execution, and reject deletes while campaign steps still reference an automation.
Refresh the marketing CRM page with a fuller product walkthrough, live pipeline mock, attribution details, task views, contact suppression, data model coverage, CRM sync, and updated FAQ/CTA copy.
Restructure the docs navigation into product-focused pages, add automation expression reference content, and refresh related template and personalization surfaces.
Refresh the analytics marketing page around actionable deliverability metrics, realtime dashboard behavior, export surfaces, and a share-card mock that mirrors the product UI.
Refresh the campaigns landing page around the visual sequence builder, branching logic, A/B variants, sender pool distribution, and updated safety defaults. Add the icon paths needed by the new page sections.
Refresh the marketing page for the unified inbox with a product-shaped walkthrough of reply classification, triage scopes, fan-out, contact context, sync behavior, and CTA copy.
Reworks the sales teams use case page around per-rep mailboxes, ownership, mailbox limits, routing rules, plaintext outbound, CRM sync, and reply fan-out.