Skip to content
@LLazyEmail

LLazyEmail

LLazyEmail 👋

Documentation docs.llazyemail.com Awesome Email Marketing LinkedIn License overview

Tools, templates, React components, reusable GitHub Actions, and curated lists for building emails — write in Markdown or composable functions, get responsive HTML (or React email trees) out, and ship them through shared CI.

This profile README lives in LLazyEmail/.github at profile/README.md. Deeper pages: architecture · repository catalog · contributing & agents.

📖 Documentation: docs.llazyemail.com · llazyemail.github.io/documentation · Source

Quick navigation

I want to... Go to
Understand the mission & ecosystem What is LLazyEmail?
Start generating HTML today Getting started
See how core repos connect Architecture
Convert Markdown to email Main project (markdown-to-email)
Browse documentation sites & lists Documentation side
Browse every repository Repository index · Full catalog
Use React email components React design system
Start a new template Starters & templates
Install npm / GitHub Packages npm packages
Adopt shared CI CI & workflow conventions
Contribute or run an AI agent Contributing · AGENTS.md
Learn how it all works Learning resources
See similar projects Related projects

🎯 What is LLazyEmail?

LLazyEmail is an open organization around email template tooling: parsing Markdown, composing HTML from small functions or React components, writing files safely, inspecting which part of an email broke, and automating render + docs CI with reusable GitHub Actions.

Mission in one line: make production HTML email generation boring, testable, and shareable — without pretending email clients are modern browsers.

Ecosystem at a glance

Area What you get
Generation pipeline Catalog → render → disk write (generate-template + markup-generator)
Part rendering Deterministic parts + compose + traces (render-template) and email shell / inspector (template-runtime-display)
Markdown path markdown-to-email (+ markdown-regex, generator-markdown-to-html)
Templates Hackernoon-style (hn_email_template), NoMoreToGo (nomoretogo_email_template), Postmark transactional (postmark-transactional-template-simple), Lit / Remix / React starters
CI email-template-workflows for rendering; documentation-actions for Docusaurus & awesome lists
Knowledge Product docs site, Awesome Email Marketing, Awesome Newsletters, v-school, AssemBLYA, fuck-ecoflow

We do not invent marketing stats here. Star counts and package versions below are taken from GitHub / npm at documentation time and will drift.


🚀 Getting started

Pick the path that matches your project.

A. New catalog-based generator (recommended for new templates)

Requires Node (see each package engines; many packages want Node 20+, some CLIs 22+ / 24+).

# Public npm write helpers
npm install markup-generator

# GitHub Packages (@llazyemail) — need read:packages + .npmrc (see each repo's .npmrc.example)
npm install @llazyemail/generate-template @llazyemail/template-runtime-display
import { createGenerator } from '@llazyemail/generate-template';

const generate = createGenerator({
  catalog: [{ ids: ['welcome'], render: (p) => `<p>Hello ${(p as { name: string }).name}</p>` }],
  samplePayloads: { welcome: { name: 'Alex' } },
  outDir: 'generated',
});

await generate.run({ templateId: 'welcome', payload: { name: 'Alex' }, write: { out: 'generated/welcome.html' } });

CLI (after a project generate-template.config.* that exports createProjectGenerator):

npx generate-template --list
npx generate-template --all --out=generated

B. Markdown → email (classic pipeline)

git clone https://github.com/LLazyEmail/markdown-to-email.git
cd markdown-to-email
npm install
# Put Markdown in ./source/source.md
npm run dev:parseFull          # → generated HTML
# npm run dev:parseReactFull   # → React tree

Package on npmjs: @lazyemail/markdown-to-email.

C. Inspect a broken part

npx template-runtime-display inspect ./letter.mjs --out report.html
# or live:
npx template-runtime-display dev ./letter.mjs

D. Render in CI on every PR

permissions:
  contents: read
  pull-requests: write
steps:
  - uses: actions/checkout@v7
  - uses: LLazyEmail/email-template-workflows@v1
    with:
      working-directory: .
      command: npx generate-template --all --out=generated
      artifact-directory: generated

E. Read the docs / lists


🏗 Architecture

How the core repositories relate. Full write-up: docs/architecture.md.

flowchart TB
  subgraph Consumers["Template consumers"]
    HN["hn_email_template"]
    NMTG["nomoretogo_email_template"]
    Postmark["postmark-transactional-template-simple"]
    Lit["_playing_with_lit"]
  end

  subgraph Generate["Generation"]
    Gen["generate-template<br/>@llazyemail/generate-template"]
    Markup["markup-generator"]
  end

  subgraph Render["Rendering"]
    RT["render-template<br/>@llazyemail/render-template"]
    TRD["template-runtime-display<br/>@llazyemail/template-runtime-display"]
  end

  subgraph Markdown["Markdown path"]
    MTE["markdown-to-email"]
  end

  subgraph CI["Shared Actions"]
    ETW["email-template-workflows"]
    DocA["documentation-actions"]
  end

  HN --> TRD
  Postmark --> Gen
  Postmark --> TRD
  Lit --> Gen
  NMTG --> Markup
  NMTG -.-> MTE
  Gen --> Markup
  TRD --> RT
  Gen -.-> TRD
  MTE --> Markup
  ETW -->|"render → artifact"| Gen
  DocA -->|"docs sites & awesome lists"| Docs["documentation · awesome-* · v-school · assemblya · fuck-ecoflow"]
Loading

Ownership rules (short):

Package Owns Does not own
markup-generator Disk writes, filenames, read helpers Template content
@llazyemail/generate-template Catalog, payloads, run / writeAll, CLI Part compose / email chrome
@llazyemail/render-template Ordered parts + compose + traces Catalog / file I/O
@llazyemail/template-runtime-display Email shell, inspector, quality helpers Generation catalog
email-template-workflows CI install → render → artifact → comment Your template source
markdown-to-email Markdown syntax → HTML / React layouts Modern catalog CLI (use generate-template for new work)

Consumers inject render functions into createGenerator rather than reimplementing validation + write pipelines locally. See generate-template/docs/organization-schema.md.


📚 Documentation side

Repository Role Links
documentation Primary Docusaurus product docs docs.llazyemail.com · GitHub Pages
documentation-actions Reusable Actions + workflows for docs / awesome lists Pin @v1 · actions index
awesome-email-marketing Curated email marketing resources + docs site under website/ Explore tags on the published site
awesome-newsletters Curated newsletter craft / directories / tools GitHub Pages
v-school Docusaurus docs (inventory, 3D parts, printing, lectures; EN + UK) Thin documentation-actions callers
assemblya AssemBLYA docs (EN + UK); working fork of atherdon/assemblya Uses documentation-actions for CI
fuck-ecoflow Docusaurus docs site; working fork; Git LFS for media git lfs install before clone/pull

Sister relationship: documentation ↔ awesome-email-marketing ↔ awesome-newsletters share foundation goals; long-term they lean on documentation-actions instead of duplicated workflow YAML.


🚀 Main project

markdown-to-email is the classic core engine. It parses Markdown and renders responsive HTML or React email templates.

Mind map of the markdown-to-email project

Where to look in the code

npm modules used by markdown-to-email
"atherdon-callbacks": "^1.10.0",
"atherdon-newsletter-html-replacer": "^0.4.0",
"atherdon-newsletter-js-layouts": "^1.5.1",
"atherdon-newsletter-react": "^1.0.11",
"atherdon-newsletter-react-replacer": "^0.4.0",
"atherdon-old-newsletter-js-outertemplate": "^2.4.0",
"markup-generator": "^0.4.0",

Today’s parallel path: new template repos (for example postmark-transactional-template-simple, hn_email_template’s current scripts/ generator, _playing_with_lit) prefer @llazyemail/generate-template + @llazyemail/template-runtime-display rather than growing the Markdown parser further. Both paths remain first-class in the org.


🗂 Repository index

Active highlights by category. Full table of every public repo (including languages and star counts from the API): docs/repositories.md.

Core pipeline

Repository Description
markup-generator File output and markup-writing generator utility (markup-generator on npmjs)
generate-template Catalog / payload / run+writeAll engine (@llazyemail/generate-template)
render-template Deterministic part/compose HTML renderer with traces
template-runtime-display Email shell + inspector CLI on top of render-template
email-template-workflows Reusable GitHub Action: install → render → artifact → PR comment
validator Small TypeScript validation helpers (@llazyemail/validator)
markdown-to-email Core engine for transforming Markdown into responsive HTML/React email templates
generator-markdown-to-html Generator module for Markdown to HTML (unified / remark / rehype)
markdown-regex Regex constants for parsing Markdown syntax
template-object Factory object for display classes, helps manage email template displays
amazon-ses-service AWS SES sending integration

Production templates

Repository Description
hn_email_template Plain-JS Hackernoon-style newsletter generator (current path under scripts/)
nomoretogo_email_template NoMoreToGo / MailerLite-style template monorepo (active work under template/)
postmark-transactional-template-simple Standalone transactional email generator proving the catalog + runtime pattern
_playing_with_lit Lit SSR email experiments; consumer of generate-template

⚛️ React design system

Repository Description
react-email-template Core React components for structural email layouts (the "React One" template)
react-email-table Cross-client HTML table wrappers for React emails
react-email-typography-components Components for structured email typography
react-email-miscellaneous-components Miscellaneous React helpers for email layouts
react-email-letter-components Letter-style components for email creation
react-sendgrid-form Form component integration for SendGrid
email-template-react React email template
nextjs-preview Next.js preview app for templates

🧱 Starters & templates

Repository Description
default-email-template General email boilerplate, good for cloning
generator-module Example generator module for cloning (historical link; not in current public inventory)
replacer Example replacer module for cloning (archived on GitHub)
pixel-email-cli Example CLI for cloning
template-typography Starter for custom email typography packages
free-email-templates-to-try Free, ready-to-use HTML email templates
react-plain-template-example Plain JavaScript and React DOM template example
remix-ecommerce-react-email-template E-commerce email starter built with React
remix-hn-react-email-template Hackernoon-style React remix starter
remix-amazon-billing-email-template Amazon-style billing remix starter
remix-google-billing-email-template Google-style billing remix starter
remix-stripe-billing-email-template Stripe-style billing remix starter
remix-taskrabbit-react-email-template TaskRabbit-style remix starter
remix-uber-react-email-template Uber-style remix starter
remix-venmo-react-email-template Venmo-style remix starter
template-react-email-template Template repo for React email design-system starters

🟨 Plain JS templates

Repository Description
hn_email_template HN template
mjml-email-template MJML version
nomoretogo_email_template NMTG version
_trying-lit Plain JS template (atherdon-old-newsletter-js-outertemplate) (historical link; not in current public inventory — see _playing_with_lit)

🧪 Experimental and curated

Repository Description
_trying_simple_tags Sandbox for HTML/tag parsing
_trying-oclif Standalone oclif CLI for the rendering engine
awesome-email-marketing Curated list of email marketing tools, articles and frameworks
awesome-newsletters Curated newsletter directories, articles, tools, and resources
templates-battlefield Sandbox for template experiments
Archived / legacy repositories
Repository Notes
_trying_frontmatter Archived front-matter experiments
lit-typography Archived lit-typography package
replacer Archived replacer module (“finally getting a separated place”)

Prefer current packages above. Full flags and languages: docs/repositories.md.


📦 npm packages

Versions below were read from npmjs / GitHub Packages APIs while writing this doc — always confirm with npm view / the package page before pinning.

Public npmjs.com

Package Approx. version Repository
markup-generator 4.1.0 markup-generator
markdown-regex 2.1.1 markdown-regex
@lazyemail/markdown-to-email 3.0.2 markdown-to-email
email-template-object 0.2.0 template-object

GitHub Packages (@llazyemail → npm.pkg.github.com)

Requires a token with read:packages and scope mapping in .npmrc (copy each repo’s .npmrc.example).

Package Approx. version Repository
@llazyemail/generate-template 1.9.0 generate-template
@llazyemail/template-runtime-display 1.2.1 template-runtime-display
@llazyemail/render-template 0.3.0 render-template
@llazyemail/validator 0.2.0 validator
simple-tags (org package) 5.0.0 _trying_simple_tags

markup-generator v4 bundles its internal workspace packages into one public tarball (trusted publishing / OIDC). Older markdown-to-email READMEs may still list pre-v4 dependency ranges.


🔄 Shared CI & workflow conventions

Pin LLazyEmail/email-template-workflows@v1. Supports npm / yarn / pnpm / bun, monorepos, script mode, command mode, and build-command mode (MJML, pandoc, …). Uploads artifacts and can upsert one PR comment per comment-key. Agent playbook: docs/agent-playbook.md.

Docs & awesome lists — documentation-actions

Pin LLazyEmail/documentation-actions@v1 after release. Reusable workflows cover Docusaurus test-deploy / Pages deploy, markdownlint, soft-fail lychee, changelog, docs-index, catalog API, auto-rebase, star-request, and awesome-list checks. Prefer copying from examples/ over duplicating YAML. Checklist: skills/docusaurus-docs-site/SKILL.md.

Common rules

  • Pin third-party Actions to a full commit SHA with a # vX.Y.Z comment; Renovate updates them.
  • Prefer draft PRs; do not merge unless the owner asks.
  • Org Actions access must allow reusable workflows from these repositories.

More detail: docs/contributing.md.


🤝 Contributing

  1. Open small, single-purpose draft PRs.
  2. Keep existing curated content — extend, annotate, or archive; do not delete wholesale.
  3. Include the commit trailer when working for the maintainer:
Co-authored-by: petroved <arthur.tkachenko.netweight@gmail.com>
  1. Follow the target repository’s CONTRIBUTING.md / AGENTS.md.
  2. Never commit secrets.

Changelog & release flow

Pattern Used by Flow
.changelog/ fragments email-template-workflows, documentation-actions Fragment → release PR folds into CHANGELOG.md → tag / GitHub Release → floating v1
Changesets generate-template (and similar libraries) npx changeset → Version Packages PR → publish on GitHub Release
GitHub Release + publish workflow markup-generator, template-runtime-display, … Release / workflow publishes to npmjs or GitHub Packages

Do not hand-edit compiled CHANGELOG.md files when a fragment or Changesets system is in use. Labels like skip-changelog / no-changelog waive CI where configured.


🤖 AGENTS.md conventions for AI agents

Most active repos ship a root AGENTS.md. Agents should read it first.

Org-wide expectations:

  • Treat src/ + tests as ground truth; keep docs in sync without deleting historical guidance.
  • Prefer createGenerator + injected render over local BuildPipeline-style duplication.
  • Prefer thin callers of documentation-actions / email-template-workflows.
  • Parts passed to render-template must return strings (stringify Lit / React output first).
  • Open draft PRs; never merge/close unless the human owner asks.
  • Always add the Co-authored-by: petroved <…> trailer when working for Arthur.

Indexes: many repos also expose llms.txt / llms-full.txt for LLM tooling.


🔗 Links and badges

Resource URL
Organization https://github.com/LLazyEmail
Profile source https://github.com/LLazyEmail/.github
Product docs https://docs.llazyemail.com
Docs (GitHub Pages) https://llazyemail.github.io/documentation/
Awesome Email Marketing https://github.com/LLazyEmail/awesome-email-marketing
Awesome Newsletters site https://llazyemail.github.io/awesome-newsletters/
LinkedIn https://www.linkedin.com/company/llazyemail/
Architecture (this repo) docs/architecture.md
Full repo catalog docs/repositories.md
Contributing docs/contributing.md

Suggested consumer README badge examples:

[![email-template-workflows](https://img.shields.io/badge/CI-email--template--workflows-blue)](https://github.com/LLazyEmail/email-template-workflows)
[![documentation-actions](https://img.shields.io/badge/CI-documentation--actions-blue)](https://github.com/LLazyEmail/documentation-actions)

📚 Learning resources

Must read

Articles by Arthur Tkachenko

Building templates and components
Email marketing and strategy
Tools, lists and glossary

Logging and tooling


🔭 Related projects

Worth a look for ideas and comparison:


About this profile repository

Path Purpose
profile/README.md GitHub organization profile (this file)
docs/architecture.md Core repo relationship diagram and ownership
docs/repositories.md Full categorized catalog of public repos
docs/contributing.md Contributing, AGENTS, CI, changelog, packages
README.md Short pointer for the .github repository itself

Facts in these docs come from public repository metadata and READMEs. If something drifts, prefer the source repo and send a draft PR that extends this profile rather than deleting sections.

Pinned Loading

  1. free-email-templates-to-try free-email-templates-to-try Public

    HTML 2 1

  2. react-email-table react-email-table Public

    JavaScript 3

Repositories

Showing 10 of 70 repositories

People

This organization has no public members. You must be a member to see who’s a part of this organization.

Top languages

Loading…

Most used topics

Loading…