- Add ANSI color coding: [I]=green, [W]=yellow, [E]=red
- Format: [Level] [Module] message with 4-char indent for data rows
- Error detail lines use |-> tree connector
- Remove extra blank lines between outputs (except list)
- Modules: CLI, Preview, Builder, Server, Watcher
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
themes/aurora/ (all 11 tmpl templates):
- Extract all reusable inline styles to CSS classes in <style> blocks
- Organize CSS with /* Section */ comment headers (Base, Header, Card, etc.)
- Clean HTML structure: <tr>/<td> on separate lines, consistent 2-space indent
- Replace all hardcoded English button text with locale.Tr keys
- Add mail.team_invite.text_3 disclaimer notice to team_invite
- Go variable assignments on dedicated lines with proper indentation
- Section comments in Title Case
tools/preview/locale.go:
- Replace LocaleEN with full 60-key official Gitea mail locale
- Add positional format specifier support (%[1]s, %[2]d) in Tr()
- All keys verified against official Gitea locale_en-US.json (100% match)
.gitignore:
- Add preview/rendered.js entry
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Add static-notice banner: 'Gmail/Outlook simulation is approximate.
Use dev mode for accurate rendering.' Hidden in dev mode via
WebSocket try/catch, auto-shown in file:// mode on WS failure.
- Simplify transform(): Gmail/Outlook modes now return same HTML as
Modern — the dev server with Juice provides actual client sim.
- Add markSafeHTML(): converts RenderedNote/Body/RenderedContent
from plain string to template.HTML so markdown-rendered HTML
content is not escaped by Go's html/template engine.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- aurora, neon, terminal: add explicit inline color styles to bare
text elements (locale.Tr calls, h4 headings, download labels)
that were invisible in clients stripping <style> blocks (Gmail).
33 files across 3 dark-background themes.
- CanReply: changed from true to false in mock data — matches
typical Gitea deployment where IncomingEmail is disabled by
default. Template syntax kept identical to official Gitea.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- tools/server/: Node.js dev server (Express + WebSocket + fs.watch)
Watches themes/ for .tmpl changes, rebuilds via Go preview command,
applies Juice CSS inlining for email client compatibility, pushes
live reload to browser via WebSocket.
- tools/cli/dev.go: 'go run . dev' subcommand — starts Node.js server
with automatic npm install, initial preview generation, and
Ctrl+C graceful shutdown.
- tools/tools.go: register dev command in CLI app.
- .gitignore: add node_modules exclusion.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Split monolithic build-preview.go into modular packages:
tools.go (entry), cli/ (list/create/delete/preview commands),
config/ (JSON loading), preview/ (rendering engine, funcs, locale)
- Extract all template metadata into data/templates_config.json
as single source of truth — no hardcoded template data in Go
- Replace hand-rolled CLI parsing with github.com/urfave/cli/v2
- Add sensible defaults for --folder (../themes) and --config
(./data/templates_config.json) — most commands now run bare
- Add type-coercing gt/lt/ge/le template funcs for JSON float64
- Fix AppUrl to gitea.com matching official template convention
- rendered.js now exports __REGISTRY__ and __PARAMS__ alongside
__RENDERED__ — preview/index.html reads all from single source
- Cross-validate all 11 template data contexts against official
Gitea source (services/mailer/*.go + templates/mail/*.tmpl)
- Update all docs (README, AGENTS, CONTRIBUTING, 5 languages)
to reflect new CLI workflow with create scaffolding command
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>