u/joshkuttler

Every product team eventually hits the same wall with email: a welcome.html file ballooning into a 1,200-line monolith, copy-pasted styles across templates that never quite match, a marketing tweak that breaks billing emails, and an A/B test that takes a week to ship because the "templating engine" lives in a folder no one wants to touch.

Email is one of the last places in modern product engineering where we still tolerate this. We componentized our UI years ago. We componentized our backends. But our transactional and lifecycle emails are still strings of HTML glued together inside a service.

At Bit, we manage every email template - welcome, billing, organization invites, password resets, notifications - as independent, versioned, composable components. Each piece of an email (a title, a paragraph, a CTA button, a card, a footer) is its own component. Each template (welcome, payment-failed, scope-invite) composes those pieces.

This post walks through how we got there, and how you can do the same.

u/joshkuttler — 7 days ago
▲ 8 r/bit_dev+2 crossposts

Verification Mode ✨ — One of the biggest pain points with AI coding agents is losing control over what they change. Hope now pauses for your approval on every change before applying it. Full accuracy, zero surprises.

Claude 4.7 Opus integration 🤖 — Noticeably better UI generation and logical reasoning out of the box.
One-command Cloud MCP 🔌  — Enterprise-grade auth, single line to connect:
claude mcp add --transport http bit-cloud https://mcp.bit.cloud/mcp

Turbo-Charged Workspaces ⚡️— Re-engineered orchestration cuts load times significantly.

New docs experience — Revamped sidebar + dedicated Cloud MCP guides.

Try it at https://bit.cloud

reddit.com
u/joshkuttler — 10 days ago
▲ 2 r/bit_dev+1 crossposts

Updated the Cloudflare Pages deployer with some improvements. For those who haven't seen it — it handles the full deploy lifecycle: auto project creation, custom domain linking, and environment-specific bindings (KV, D1, R2, Durable Objects, AI, Queues, etc.).

Snap deploys to staging, tag deploys to production, and each lane gets its own preview URL.
Drop it into your app config (my-app.bit-app.ts):

import { CloudflarePages } from '@backend/cloudflare.deployers.cloudflare-pages';

export default ViteReact.from({
  name: 'my-app',
  deploy: CloudflarePages.deploy({
    accountId: process.env.CLOUDFLARE_ACCOUNT_ID,
    apiToken: process.env.CLOUDFLARE_TOKEN,
    projectName: 'my-app',
  }),
});

Docs & source → https://bit.cloud/backend/cloudflare/deployers/cloudflare-pages

If you're deploying to Cloudflare Pages, give it a try — happy to hear feedback or feature requests!

u/joshkuttler — 18 days ago