feat(templates): real-case defaults for all 148 templates - #53
Merged
Merged
Conversation
Replace generic sample data with realistic, template-relevant content: - deploy-status: production v2.1.0 deployment with service statuses - changelog: real version notes with breaking changes and features - benchmark-result: Rust vs Node.js vs Python render performance - code-snippet: actual Rust async render handler code - blog-hero: 'Why We Replaced Puppeteer with Pure Rust' - big-number: '149 templates available' - And 142 more templates with contextually relevant content All defaults now include show_brand: false (no watermark by default). Fixed SVG-breaking characters in code samples (< > and && removed). Fixed float-parsing issues (% suffixes removed from numeric fields). 148/148 templates render successfully.
ajianaz
added a commit
that referenced
this pull request
Aug 28, 2026
* chore: sync main to develop (release workflow fixes) (#30) * fix(ci): use mlugg/setup-zig action for cargo-zigbuild apt-get zig not available on ubuntu-24.04. Switch to mlugg/setup-zig@v1. Also fix packaging to find binary in zigbuild output path. * fix(ci): drop cargo-zigbuild, use standard cargo build mlugg/setup-zig returning 404. Simplify to standard cargo build for v0.1.0. GLIBC compatibility can be addressed in a future release. --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(docs): add VitePress documentation site with API reference and template gallery (#31) - VitePress setup with Catppuccin Mocha brand theme - Guide pages: installation, quick start, CLI reference, HTTP server, Docker, configuration, branding - Template gallery: all 18 templates with schema reference and JSON examples - API reference: health check, render endpoint, authentication - Template authoring guide (moved from docs/ to docs/guide/) - GitHub Pages CI workflow (bun-based, auto-deploy on docs/** push) - 32 HTML pages generated, builds in ~8s Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(docs): add sample images and field descriptions for all 18 templates (#32) - Render all 18 templates with CodeCora brand as visual samples - Embed sample PNG in each template page (docs/public/samples/) - Add human-readable field descriptions (was empty from schema.json) - Add aspect ratio to dimensions table - Clean up example JSON with realistic data Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(docs): correct brand in sample images to Ajianaz @ajianaz (#33) All 18 sample images were rendered with CodeCora/@codecoradev branding. Re-rendered with correct brand: Ajianaz / @ajianaz. Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(docs): all sample images now use ajianaz consistently (#34) Replaced all author/speaker/guest names in sample data with 'ajianaz'. No personal names in any sample image. Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 1) (#35) New templates: - numbered-tips: Numbered list card (1080x1350) - progress-card: Progress bar with percentage (1080x1080) - pinterest-pin: Vertical Pinterest format (1000x1500) - blog-hero: Wide blog post header (1200x675) - poll-result: Poll results with percentage bars (1080x1080) - quote-minimal: Clean minimal quote card (1080x1080) - step-process: Step-by-step flow diagram (1080x1080) - faq-card: Q&A card layout (1080x1080) - metric-grid: 2x2 grid of metrics (1080x1080) - author-bio: Profile/bio card with tags (1080x1080) Total templates: 18 → 28 Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 2) (#36) New templates: - feature-highlight: Single feature with icon badge (1080x1080) - timeline: Vertical timeline with milestones (1080x1350) - comparison-table: Side-by-side comparison (1080x1080) - cta-card: Call-to-action card with URL (1080x1080) - book-cover: Book/ebook cover design (1080x1620) - roadmap-card: Horizontal roadmap phases (1080x1080) - discount-badge: Circular promo badge (800x800) - code-snippet: Code editor card for social (1200x630) - big-number: Oversized number/stat (1080x1080) - event-flyer: Event flyer with details (1080x1350) Total templates: 28 -> 38 Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 3) (#37) New templates: - polaroid-quote: Polaroid-style quote card (1080x1080) - review-card: Product review with rating (1080x1080) - changelog: Release notes card (1080x1350) - gradient-hero: Bold hero banner (1200x630) - testimonial-grid: 3-column testimonials (1080x1080) - stat-comparison: Before/after comparison (1080x1080) - calendar-event: Calendar-style event card (1080x1080) - pricing-card: Single pricing tier (1080x1080) - github-star: Repo showcase card (1200x630) - minimal-text: Ultra-minimal text-only (1080x1080) Total templates: 38 -> 48 Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 4) (#38) New templates: - quick-tip: Tip card with lightbulb icon (1080x1080) - tweet-embed: Tweet-style card with avatar (1200x675) - newsletter-cta: Newsletter signup card (1080x1080) - retro-badge: Retro circular badge (600x600) - matrix-card: 2x2 decision matrix (1080x1080) - certificate: Certificate of achievement (1200x900) - quote-stack: Stacked quotes with authors (1080x1350) - webhook-card: API endpoint card (1200x630) - goal-tracker: Goal progress with checklist (1080x1080) - color-palette: Design palette showcase (1080x1080) Total: 48 -> 58 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 5) (#39) New templates: - qr-business-card: Digital business card with QR (1080x1080) - gradient-quote: Full-bleed gradient quote (1080x1080) - stat-highlight: Bold single statistic (1200x630) - faq-single: Single FAQ card (1080x1080) - feature-list: Product features with checkmarks (1080x1350) - team-member: Team profile card (1080x1080) - kanban-card: Kanban board with columns (1200x630) - podcast-episode: Podcast episode card (1080x1080) - release-notes: Versioned release notes (1080x1350) - wallpaper-quote: Phone wallpaper quote (1080x1920) Total: 58 -> 68 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 6) (#40) New templates: - social-poll: Poll card with percentage bars (1080x1080) - command-card: Terminal command with description (1200x630) - week-schedule: Weekly content schedule grid (1080x1080) - gradient-banner: Wide gradient banner (1200x630) - data-counter: 4-metric counter grid (1080x1080) - recipe-card: Recipe with ingredients and steps (1080x1350) - css-snippet: CSS code with syntax highlighting (1200x630) - milestone-celebration: Big number celebration (1080x1080) - book-club: Book recommendation card (1080x1350) - terminal-output: Terminal window output (1200x630) Total: 68 -> 78 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 7) (#41) New templates: - github-issue: GitHub issue card with labels (1200x630) - github-pr: GitHub PR card with merge status (1200x630) - api-endpoint: API endpoint documentation (1200x630) - docker-command: Docker command card (1200x630) - rust-snippet: Rust code with editor style (1200x630) - vscode-config: VS Code settings JSON (1200x630) - dev-quote-card: Developer quote card (1080x1080) - chart-bar: Bar chart visualization (1080x1080) - git-diff: Git diff visualization (1200x630) - package-json: package.json dependencies (1200x630) Total: 78 -> 88 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 8) (#42) New templates: - github-profile: GitHub profile card with avatar and stats (1080x1080) - tech-stack: Technology stack grid (1080x1080) - contributor-card: OSS contributor appreciation (1200x630) - release-tag: Git release/tag announcement (1200x630) - ci-pipeline: CI/CD pipeline visualization (1200x630) - dependency-graph: Dependency tree visualization (1080x1080) - feature-flags: Feature flag toggle board (1080x1080) - uptime-monitor: Service uptime dashboard (1080x1080) - api-response: API JSON response viewer (1200x630) - error-404: 404 error page design (1080x1080) Total: 88 -> 98 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 9) (#43) New templates: - log-viewer: Server log output viewer (1200x630) - database-schema: Database table schema visualization (1200x630) - dockerfile: Dockerfile instructions viewer (1200x630) - makefile: Makefile targets viewer (1200x630) - license-card: Open source license info card (1080x1080) - pull-request: GitHub PR review card (1200x630) - code-review: Code review comment card (1200x630) - version-comparison: Side-by-side version comparison (1080x1080) - env-setup: Dev environment setup instructions (1200x630) - security-advisory: Security vulnerability advisory (1200x630) Total: 98 -> 108 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 10) (#44) New templates: - kudos-card: Team appreciation card (1080x1080) - star-tracker: GitHub stars milestone tracker (1080x1080) - terminal-prompt: Terminal command prompt snippet (1200x630) - flame-graph: Performance profiling flame graph (1080x1080) - migration-status: Database migration progress tracker (1080x1080) - api-key-display: API key/token reveal card (1200x630) - credit-badge: Achievement or skill badge (1080x1080) - roadmap-timeline: Project roadmap horizontal timeline (1080x1080) - stats-dashboard: Multi-metric dashboard 2x2 grid (1080x1080) - swagger-endpoint: OpenAPI endpoint documentation (1200x630) Total: 108 -> 118 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 11) (#45) New templates: - webhook-payload: Incoming webhook event payload viewer (1200x630) - password-generator: Generated password display card (1080x1080) - qr-code-display: QR code with label and URL (1080x1080) - diff-viewer: Code diff comparison viewer (1200x630) - cert-pinned: SSL/TLS certificate details card (1080x1080) - rate-limit: API rate limit status card (1200x630) - command-result: CLI command execution result (1080x1080) - config-display: Configuration key-value display (1200x630) - health-check: Service health check status board (1080x1080) - changelog-entry: Release changelog entry card (1200x630) Total: 118 -> 128 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 12) (#46) New templates: - incident-report: Post-mortem incident report (1080x1080) - deploy-status: Deployment pipeline tracker (1080x1080) - snippet-go: Go code snippet (1200x630) - snippet-python: Python code snippet (1200x630) - snippet-typescript: TypeScript code snippet (1200x630) - ascii-art: ASCII art display (1200x630) - matrix-display: Color-coded comparison matrix (1080x1080) - gradient-mesh: Abstract gradient mesh art (1080x1080) - token-display: Design token showcase (1200x630) - feature-grid: Feature showcase 2x2 grid (1080x1080) Total: 128 -> 138 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 13) (#47) New templates: - snippet-rust: Rust code snippet (1200x630) - snippet-bash: Bash/shell snippet (1200x630) - snippet-sql: SQL query snippet (1200x630) - snippet-yaml: YAML config snippet (1200x630) - leaderboard: Ranked leaderboard (1080x1080) - sponsor-card: OSS sponsor appreciation (1080x1080) - version-compare: Side-by-side version comparison (1200x630) - status-badge: Service status badge (1200x630) - benchmark-result: Performance benchmark bars (1080x1080) - archive-card: Blog post archive entry (1080x1350) Total: 138 -> 148 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * docs: add 148 template pages with MinIO preview images (#48) - Generate doc page for all 148 templates (fields, dimensions, usage) - Preview images served from MinIO CDN (slim repo, no binary assets) - Update sidebar: 11 categories, collapsible, all 148 templates - Update index.md: responsive gallery grid with lazy loading - VitePress build: 162 HTML pages, all passing Total: 18 -> 148 template doc pages Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * docs: change VitePress base to / for Cloudflare Pages (#49) Deployed to CF Pages project: cosy-docs Production URL: https://cosy-docs-4f5.pages.dev/ Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(docs): Pinterest-style masonry layout for templates gallery (#50) - Replace CSS grid with CSS columns (masonry/pinterest flow) - Images display at natural aspect ratio — no cropping - Responsive: 5 cols desktop → 4 → 3 → 2 → 1 mobile - Cards use break-inside: avoid for clean column flow - Deployed to CF Pages production Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(docs): reduce masonry to 3 columns default (4 on ultra-wide) Desktop default 3 cols, 4 only on 1440px+, gap widened to 16px * fix(templates): watermark position + border radius consolidation (#51) Watermark fixes (8 templates): - linkedin-card: brand_name moved from top (y=95) to bottom-right (y=590) - twitter-quote: brand_name moved from top (y=120) to bottom-right (y=635) - dev-quote: brand_name moved from y=968 to y=1040 (40px from bottom) - instagram-story: y=1780 → y=1870 (50px from bottom) - tiktok-quote: y=1250 → y=1310 (40px from bottom) - pinterest-pin: y=1400 → y=1460 (40px from bottom) - book-cover: y=1530 → y=1580 (40px from bottom) - youtube-thumb: y=630 → y=690 (30px from bottom) - twitter-quote + linkedin-card: accent font → muted credit style (20px, #7f849c) Border radius consolidation (81 templates): - Standardized 25+ rx values to 4-tier system: 8/12/20/30 - rx 1-5 → 8 (small), rx 6-14 → 12 (default), rx 15-24 → 20 (large), rx 25-40 → 30 (pill) - rx=0 preserved (intentionally sharp corners) Refs: miifb (make-interfaces-feel-better), hallmark design audit Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): watermark default off + show_brand toggle (#52) - Added 'show_brand' boolean field to all 148 schema.json files (default: false) - Added 'Boolean' variant to FieldType enum in src/schema.rs - Wrapped all brand_name text elements in {% if brand.show_brand %} conditional in all 147 template.svg files that had brand_name - Watermark/brand now OFF by default — only renders when show_brand: true - Updated existing 18 defaults.json with show_brand: false Breaking change: brand_name no longer appears by default. To enable: pass {"brand": {"show_brand": true, "brand_name": "..."}} Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): real-case defaults for all 148 templates (#53) Replace generic sample data with realistic, template-relevant content: - deploy-status: production v2.1.0 deployment with service statuses - changelog: real version notes with breaking changes and features - benchmark-result: Rust vs Node.js vs Python render performance - code-snippet: actual Rust async render handler code - blog-hero: 'Why We Replaced Puppeteer with Pure Rust' - big-number: '149 templates available' - And 142 more templates with contextually relevant content All defaults now include show_brand: false (no watermark by default). Fixed SVG-breaking characters in code samples (< > and && removed). Fixed float-parsing issues (% suffixes removed from numeric fields). 148/148 templates render successfully. Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * docs: border radius 4-tier standard + sub-5px decorative exception (#54) (#57) Document the radius tier system (8/12/20/30) standardized in #51 and add an explicit exception for thin decorative elements (<=5px) so automated audits stop flagging divider bars as non-standard rx. Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): tighten max length on big-number fields (#55) (#58) Reduce max from 10-20 to 8 chars for hero-size number fields that render at 140-220px font size — longer values clip at the canvas edge. Templates: stat-card, big-number, stat-highlight, star-tracker (current_stars/goal_stars), milestone-celebration. Descriptions note the clipping constraint. Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): replace emoji with SVG icon + normalize type scale (#56) (#59) - github-star: replace star emoji with inline SVG star (accent gradient fill), optically aligned to text baseline - feature-highlight: schema description no longer suggests emoji - type-scale: normalize off-scale font sizes (13->14, 15->16, 34->32, 38->36, 46->48, 68->64, 76->72) across 17 templates - pricing-card: drop invented sample metrics from defaults ('All 149 templates' -> 'All templates included') Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(schema): validate field types and correct numeric field declarations (#64) Audit of all 148 templates with max-length edge inputs found 7 templates (benchmark-result, chart-bar, flame-graph, password-generator, rate-limit, social-poll, star-tracker) that crash with a confusing Tera 'invalid float literal' error when a field used in arithmetic receives string input. Root causes (both fixed): - schemas declared arithmetic fields as type 'text'; corrected 26 fields to type 'number' (display-only fields like b*_ops stay text) - validate_input never checked field types; render never called validate_input at all. Render now validates first and fails fast with field-level messages (JSON errors stay machine-readable for --json-output) Also fixed test data for carousel-default which was silently invalid (missing required 'headline') — previously passing only because render did no validation. Closes #60 Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * docs(cli): document render-time schema validation (#65) Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): standardize watermark footer across all 148 templates (#62) (#63) - Bottom-center, 30px margin, Inter 20px w600 #7f849c everywhere - Move carousel-default & og-image watermark from top-left to bottom-center - Add missing watermark block to newsletter-header - Document watermark spec in template-authoring guide Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): repair 10 high-severity visual defects from vision audit (#66) (#68) * fix(renderer): xml-escape context text so &, <, > render safely Literal ampersands in template data previously broke SVG parsing (malformed entity reference). All string context values are now XML-escaped before minijinja rendering. Includes unit tests. * fix(templates): correct default data found by full visual audit - fit 5 default values to their schema max_length (render blockers): changelog-entry, credit-badge, css-snippet, incident-report, qr-code-display - drop prefixes/suffixes the templates already render themselves: vv version (changelog-entry, release-notes, security-advisory), votes votes (poll-result), subscribers subscribers (newsletter-cta), EP EP (podcast-episode), $ $ (terminal-output), 5/5 / 5 (book-club), doubled diff markers (diff-viewer, git-diff) - restore real ampersands previously mangled to 'and' (rust-snippet, snippet-go, quick-tip), now safe with xml escaping * fix(templates): repair 10 high-severity visual defects (#66) Verified visually against each template's default render: - command-card, docker-command: command text overflowed its terminal panel (63px/141px past the edge) -> fit font size to panel width - tech-stack: third card column ended at x=1180 on a 1080 canvas, clipping 'Tokio'/'Docker' mid-glyph -> redistribute columns - roadmap-timeline, week-schedule: per-column descriptions wider than their columns overlapped into garbled lines -> wordwrap + tspan line breaking per column - vscode-config: 29-char keys collided with values -> smaller font, value column moved right - webhook-payload: ISO timestamp overflowed its 180px panel into the Delivery ID column -> shorter format + smaller font - wallpaper-quote, gradient-quote: wrap_width 16/18 chars produced far too many lines for 56/52px type, author block overlapped the quote -> wrap widths sized to the actual font metrics - poll-result: bar fills were hardcoded full width regardless of data -> percentage fields are numeric now, fill width = pct * 8px * style: apply cargo fmt --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): rebalance top-heavy templates + raise contrast (audit part 1/2) (#70) * fix(templates): rebalance vertically top-heavy templates 9 templates had content ending at 55-70% height leaving the bottom of the card empty: archive-card, incident-report, version-compare, version-comparison, step-process, roadmap-card, command-result, flame-graph, goal-tracker. Content groups recentered/respread; also fixes step-process badge circles using y= instead of cy=, goal-tracker progress arc not matching its percentage, and the version-compare delta badge overlapping a panel edge. * fix(templates): raise contrast and fix status color semantics - comparison: losing column raised from near-invisible grey; stray unmatched dash bar removed; rows respread over full canvas - dependency-graph: leaf labels readable; serde_json connector now originates from serde (elbow connectors) - token-display, color-palette: dark swatches get a subtle stroke - api-key-display: redaction dots visible - health-check: healthy services render green (status mapping now accepts ok/healthy/online case-insensitively; down stays red) * fix(templates): compute goal-tracker ring arc from current/target The arc was hardcoded to match the default 68% (CodeCora code-scanning alert). current/target are numeric schema fields now; the ring renders slide.current/slide.target of the circumference for any data. * fix(templates): resolve goal-tracker conflict markers + data-driven arc; adaptive comparison pitch - goal-tracker: a conflicted stash-application left both ring markups in the file; keep the rebalanced geometry (r=180) and compute the arc from slide.current/slide.target (circumference 1131) - comparison: row pitch adapts min(370/(n-1), 150) so wrapped text never overflows the canvas while 3-line defaults keep the verified balance --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): overflow, glyph and polish fixes (audit part 2/2) (#71) * fix(templates): fix overflow, collisions and line spacing - feature-grid, recipe-card: descriptions/steps wrapped via wordwrap+tspan inside panel bounds - password-generator: crack-time wrapped with padding, STRONG label centered inside the fill, layout spread over full canvas - qr-code-display: finder squares inside the QR panel - credit-badge: headline no longer overlaps the star - podcast-cover: normal title leading, one step larger - changelog: even line rhythm, NEW/FIXED bullet dots, respread - dev-quote: code indentation preserved (xml:space=preserve) - newsletter-cta: vertical rhythm computed from line counts * fix(templates): repair glyphs, proportional fills and composition - tweet-embed: reply/retweet icons drawn as SVG paths (glyphs were missing from bundled fonts); testimonial-grid: proper quote mark - carousel-default, checklist: stray cursor-like accent rects removed - progress-card: fill width proportional to numeric percentage (schema type number, poll-result pattern), 78% now renders 78% - snippet-yaml: YAML indentation preserved (xml:space=preserve) - gradient-mesh: text contrast shielded from bright mesh, rebalanced - instagram-story: badge grouped with centered title block - matrix-display: table vertically centered * fix(templates): polish remaining low-severity visual findings - api-endpoint: auth chip inset from bar edge - author-bio: width-adaptive tag chips with even padding - benchmark-result: winner badge grouped with bars - book-club: cover placeholder visible - calendar-event: date tile typography rebalanced - database-schema: duplicate overlapping header text fixed (garbled glyph), title deduplicated - dev-quote-card: quote-mark gap tightened - gradient-banner: stray accent bar moved clear of text - quote-stack: quote glyph breathing room - stats-dashboard: metric digits in Inter for unambiguous 1/7 - webhook-card: response value follows key with natural spacing --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * chore(release): v0.2.0 148 templates, renderer XML-escaping, full vision-audit fix wave (#66/#67), numeric schema fields, docs gallery. See CHANGELOG. --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com>
ajianaz
added a commit
that referenced
this pull request
Aug 28, 2026
* fix(ci): use mlugg/setup-zig action for cargo-zigbuild apt-get zig not available on ubuntu-24.04. Switch to mlugg/setup-zig@v1. Also fix packaging to find binary in zigbuild output path. * fix(ci): drop cargo-zigbuild, use standard cargo build mlugg/setup-zig returning 404. Simplify to standard cargo build for v0.1.0. GLIBC compatibility can be addressed in a future release. * chore(release): v0.2.0 (#72) * chore: sync main to develop (release workflow fixes) (#30) * fix(ci): use mlugg/setup-zig action for cargo-zigbuild apt-get zig not available on ubuntu-24.04. Switch to mlugg/setup-zig@v1. Also fix packaging to find binary in zigbuild output path. * fix(ci): drop cargo-zigbuild, use standard cargo build mlugg/setup-zig returning 404. Simplify to standard cargo build for v0.1.0. GLIBC compatibility can be addressed in a future release. --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(docs): add VitePress documentation site with API reference and template gallery (#31) - VitePress setup with Catppuccin Mocha brand theme - Guide pages: installation, quick start, CLI reference, HTTP server, Docker, configuration, branding - Template gallery: all 18 templates with schema reference and JSON examples - API reference: health check, render endpoint, authentication - Template authoring guide (moved from docs/ to docs/guide/) - GitHub Pages CI workflow (bun-based, auto-deploy on docs/** push) - 32 HTML pages generated, builds in ~8s Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(docs): add sample images and field descriptions for all 18 templates (#32) - Render all 18 templates with CodeCora brand as visual samples - Embed sample PNG in each template page (docs/public/samples/) - Add human-readable field descriptions (was empty from schema.json) - Add aspect ratio to dimensions table - Clean up example JSON with realistic data Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(docs): correct brand in sample images to Ajianaz @ajianaz (#33) All 18 sample images were rendered with CodeCora/@codecoradev branding. Re-rendered with correct brand: Ajianaz / @ajianaz. Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(docs): all sample images now use ajianaz consistently (#34) Replaced all author/speaker/guest names in sample data with 'ajianaz'. No personal names in any sample image. Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 1) (#35) New templates: - numbered-tips: Numbered list card (1080x1350) - progress-card: Progress bar with percentage (1080x1080) - pinterest-pin: Vertical Pinterest format (1000x1500) - blog-hero: Wide blog post header (1200x675) - poll-result: Poll results with percentage bars (1080x1080) - quote-minimal: Clean minimal quote card (1080x1080) - step-process: Step-by-step flow diagram (1080x1080) - faq-card: Q&A card layout (1080x1080) - metric-grid: 2x2 grid of metrics (1080x1080) - author-bio: Profile/bio card with tags (1080x1080) Total templates: 18 → 28 Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 2) (#36) New templates: - feature-highlight: Single feature with icon badge (1080x1080) - timeline: Vertical timeline with milestones (1080x1350) - comparison-table: Side-by-side comparison (1080x1080) - cta-card: Call-to-action card with URL (1080x1080) - book-cover: Book/ebook cover design (1080x1620) - roadmap-card: Horizontal roadmap phases (1080x1080) - discount-badge: Circular promo badge (800x800) - code-snippet: Code editor card for social (1200x630) - big-number: Oversized number/stat (1080x1080) - event-flyer: Event flyer with details (1080x1350) Total templates: 28 -> 38 Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 3) (#37) New templates: - polaroid-quote: Polaroid-style quote card (1080x1080) - review-card: Product review with rating (1080x1080) - changelog: Release notes card (1080x1350) - gradient-hero: Bold hero banner (1200x630) - testimonial-grid: 3-column testimonials (1080x1080) - stat-comparison: Before/after comparison (1080x1080) - calendar-event: Calendar-style event card (1080x1080) - pricing-card: Single pricing tier (1080x1080) - github-star: Repo showcase card (1200x630) - minimal-text: Ultra-minimal text-only (1080x1080) Total templates: 38 -> 48 Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 4) (#38) New templates: - quick-tip: Tip card with lightbulb icon (1080x1080) - tweet-embed: Tweet-style card with avatar (1200x675) - newsletter-cta: Newsletter signup card (1080x1080) - retro-badge: Retro circular badge (600x600) - matrix-card: 2x2 decision matrix (1080x1080) - certificate: Certificate of achievement (1200x900) - quote-stack: Stacked quotes with authors (1080x1350) - webhook-card: API endpoint card (1200x630) - goal-tracker: Goal progress with checklist (1080x1080) - color-palette: Design palette showcase (1080x1080) Total: 48 -> 58 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 5) (#39) New templates: - qr-business-card: Digital business card with QR (1080x1080) - gradient-quote: Full-bleed gradient quote (1080x1080) - stat-highlight: Bold single statistic (1200x630) - faq-single: Single FAQ card (1080x1080) - feature-list: Product features with checkmarks (1080x1350) - team-member: Team profile card (1080x1080) - kanban-card: Kanban board with columns (1200x630) - podcast-episode: Podcast episode card (1080x1080) - release-notes: Versioned release notes (1080x1350) - wallpaper-quote: Phone wallpaper quote (1080x1920) Total: 58 -> 68 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 6) (#40) New templates: - social-poll: Poll card with percentage bars (1080x1080) - command-card: Terminal command with description (1200x630) - week-schedule: Weekly content schedule grid (1080x1080) - gradient-banner: Wide gradient banner (1200x630) - data-counter: 4-metric counter grid (1080x1080) - recipe-card: Recipe with ingredients and steps (1080x1350) - css-snippet: CSS code with syntax highlighting (1200x630) - milestone-celebration: Big number celebration (1080x1080) - book-club: Book recommendation card (1080x1350) - terminal-output: Terminal window output (1200x630) Total: 68 -> 78 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 7) (#41) New templates: - github-issue: GitHub issue card with labels (1200x630) - github-pr: GitHub PR card with merge status (1200x630) - api-endpoint: API endpoint documentation (1200x630) - docker-command: Docker command card (1200x630) - rust-snippet: Rust code with editor style (1200x630) - vscode-config: VS Code settings JSON (1200x630) - dev-quote-card: Developer quote card (1080x1080) - chart-bar: Bar chart visualization (1080x1080) - git-diff: Git diff visualization (1200x630) - package-json: package.json dependencies (1200x630) Total: 78 -> 88 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 8) (#42) New templates: - github-profile: GitHub profile card with avatar and stats (1080x1080) - tech-stack: Technology stack grid (1080x1080) - contributor-card: OSS contributor appreciation (1200x630) - release-tag: Git release/tag announcement (1200x630) - ci-pipeline: CI/CD pipeline visualization (1200x630) - dependency-graph: Dependency tree visualization (1080x1080) - feature-flags: Feature flag toggle board (1080x1080) - uptime-monitor: Service uptime dashboard (1080x1080) - api-response: API JSON response viewer (1200x630) - error-404: 404 error page design (1080x1080) Total: 88 -> 98 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 9) (#43) New templates: - log-viewer: Server log output viewer (1200x630) - database-schema: Database table schema visualization (1200x630) - dockerfile: Dockerfile instructions viewer (1200x630) - makefile: Makefile targets viewer (1200x630) - license-card: Open source license info card (1080x1080) - pull-request: GitHub PR review card (1200x630) - code-review: Code review comment card (1200x630) - version-comparison: Side-by-side version comparison (1080x1080) - env-setup: Dev environment setup instructions (1200x630) - security-advisory: Security vulnerability advisory (1200x630) Total: 98 -> 108 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 10) (#44) New templates: - kudos-card: Team appreciation card (1080x1080) - star-tracker: GitHub stars milestone tracker (1080x1080) - terminal-prompt: Terminal command prompt snippet (1200x630) - flame-graph: Performance profiling flame graph (1080x1080) - migration-status: Database migration progress tracker (1080x1080) - api-key-display: API key/token reveal card (1200x630) - credit-badge: Achievement or skill badge (1080x1080) - roadmap-timeline: Project roadmap horizontal timeline (1080x1080) - stats-dashboard: Multi-metric dashboard 2x2 grid (1080x1080) - swagger-endpoint: OpenAPI endpoint documentation (1200x630) Total: 108 -> 118 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 11) (#45) New templates: - webhook-payload: Incoming webhook event payload viewer (1200x630) - password-generator: Generated password display card (1080x1080) - qr-code-display: QR code with label and URL (1080x1080) - diff-viewer: Code diff comparison viewer (1200x630) - cert-pinned: SSL/TLS certificate details card (1080x1080) - rate-limit: API rate limit status card (1200x630) - command-result: CLI command execution result (1080x1080) - config-display: Configuration key-value display (1200x630) - health-check: Service health check status board (1080x1080) - changelog-entry: Release changelog entry card (1200x630) Total: 118 -> 128 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 12) (#46) New templates: - incident-report: Post-mortem incident report (1080x1080) - deploy-status: Deployment pipeline tracker (1080x1080) - snippet-go: Go code snippet (1200x630) - snippet-python: Python code snippet (1200x630) - snippet-typescript: TypeScript code snippet (1200x630) - ascii-art: ASCII art display (1200x630) - matrix-display: Color-coded comparison matrix (1080x1080) - gradient-mesh: Abstract gradient mesh art (1080x1080) - token-display: Design token showcase (1200x630) - feature-grid: Feature showcase 2x2 grid (1080x1080) Total: 128 -> 138 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 13) (#47) New templates: - snippet-rust: Rust code snippet (1200x630) - snippet-bash: Bash/shell snippet (1200x630) - snippet-sql: SQL query snippet (1200x630) - snippet-yaml: YAML config snippet (1200x630) - leaderboard: Ranked leaderboard (1080x1080) - sponsor-card: OSS sponsor appreciation (1080x1080) - version-compare: Side-by-side version comparison (1200x630) - status-badge: Service status badge (1200x630) - benchmark-result: Performance benchmark bars (1080x1080) - archive-card: Blog post archive entry (1080x1350) Total: 138 -> 148 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * docs: add 148 template pages with MinIO preview images (#48) - Generate doc page for all 148 templates (fields, dimensions, usage) - Preview images served from MinIO CDN (slim repo, no binary assets) - Update sidebar: 11 categories, collapsible, all 148 templates - Update index.md: responsive gallery grid with lazy loading - VitePress build: 162 HTML pages, all passing Total: 18 -> 148 template doc pages Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * docs: change VitePress base to / for Cloudflare Pages (#49) Deployed to CF Pages project: cosy-docs Production URL: https://cosy-docs-4f5.pages.dev/ Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(docs): Pinterest-style masonry layout for templates gallery (#50) - Replace CSS grid with CSS columns (masonry/pinterest flow) - Images display at natural aspect ratio — no cropping - Responsive: 5 cols desktop → 4 → 3 → 2 → 1 mobile - Cards use break-inside: avoid for clean column flow - Deployed to CF Pages production Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(docs): reduce masonry to 3 columns default (4 on ultra-wide) Desktop default 3 cols, 4 only on 1440px+, gap widened to 16px * fix(templates): watermark position + border radius consolidation (#51) Watermark fixes (8 templates): - linkedin-card: brand_name moved from top (y=95) to bottom-right (y=590) - twitter-quote: brand_name moved from top (y=120) to bottom-right (y=635) - dev-quote: brand_name moved from y=968 to y=1040 (40px from bottom) - instagram-story: y=1780 → y=1870 (50px from bottom) - tiktok-quote: y=1250 → y=1310 (40px from bottom) - pinterest-pin: y=1400 → y=1460 (40px from bottom) - book-cover: y=1530 → y=1580 (40px from bottom) - youtube-thumb: y=630 → y=690 (30px from bottom) - twitter-quote + linkedin-card: accent font → muted credit style (20px, #7f849c) Border radius consolidation (81 templates): - Standardized 25+ rx values to 4-tier system: 8/12/20/30 - rx 1-5 → 8 (small), rx 6-14 → 12 (default), rx 15-24 → 20 (large), rx 25-40 → 30 (pill) - rx=0 preserved (intentionally sharp corners) Refs: miifb (make-interfaces-feel-better), hallmark design audit Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): watermark default off + show_brand toggle (#52) - Added 'show_brand' boolean field to all 148 schema.json files (default: false) - Added 'Boolean' variant to FieldType enum in src/schema.rs - Wrapped all brand_name text elements in {% if brand.show_brand %} conditional in all 147 template.svg files that had brand_name - Watermark/brand now OFF by default — only renders when show_brand: true - Updated existing 18 defaults.json with show_brand: false Breaking change: brand_name no longer appears by default. To enable: pass {"brand": {"show_brand": true, "brand_name": "..."}} Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): real-case defaults for all 148 templates (#53) Replace generic sample data with realistic, template-relevant content: - deploy-status: production v2.1.0 deployment with service statuses - changelog: real version notes with breaking changes and features - benchmark-result: Rust vs Node.js vs Python render performance - code-snippet: actual Rust async render handler code - blog-hero: 'Why We Replaced Puppeteer with Pure Rust' - big-number: '149 templates available' - And 142 more templates with contextually relevant content All defaults now include show_brand: false (no watermark by default). Fixed SVG-breaking characters in code samples (< > and && removed). Fixed float-parsing issues (% suffixes removed from numeric fields). 148/148 templates render successfully. Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * docs: border radius 4-tier standard + sub-5px decorative exception (#54) (#57) Document the radius tier system (8/12/20/30) standardized in #51 and add an explicit exception for thin decorative elements (<=5px) so automated audits stop flagging divider bars as non-standard rx. Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): tighten max length on big-number fields (#55) (#58) Reduce max from 10-20 to 8 chars for hero-size number fields that render at 140-220px font size — longer values clip at the canvas edge. Templates: stat-card, big-number, stat-highlight, star-tracker (current_stars/goal_stars), milestone-celebration. Descriptions note the clipping constraint. Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): replace emoji with SVG icon + normalize type scale (#56) (#59) - github-star: replace star emoji with inline SVG star (accent gradient fill), optically aligned to text baseline - feature-highlight: schema description no longer suggests emoji - type-scale: normalize off-scale font sizes (13->14, 15->16, 34->32, 38->36, 46->48, 68->64, 76->72) across 17 templates - pricing-card: drop invented sample metrics from defaults ('All 149 templates' -> 'All templates included') Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(schema): validate field types and correct numeric field declarations (#64) Audit of all 148 templates with max-length edge inputs found 7 templates (benchmark-result, chart-bar, flame-graph, password-generator, rate-limit, social-poll, star-tracker) that crash with a confusing Tera 'invalid float literal' error when a field used in arithmetic receives string input. Root causes (both fixed): - schemas declared arithmetic fields as type 'text'; corrected 26 fields to type 'number' (display-only fields like b*_ops stay text) - validate_input never checked field types; render never called validate_input at all. Render now validates first and fails fast with field-level messages (JSON errors stay machine-readable for --json-output) Also fixed test data for carousel-default which was silently invalid (missing required 'headline') — previously passing only because render did no validation. Closes #60 Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * docs(cli): document render-time schema validation (#65) Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): standardize watermark footer across all 148 templates (#62) (#63) - Bottom-center, 30px margin, Inter 20px w600 #7f849c everywhere - Move carousel-default & og-image watermark from top-left to bottom-center - Add missing watermark block to newsletter-header - Document watermark spec in template-authoring guide Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): repair 10 high-severity visual defects from vision audit (#66) (#68) * fix(renderer): xml-escape context text so &, <, > render safely Literal ampersands in template data previously broke SVG parsing (malformed entity reference). All string context values are now XML-escaped before minijinja rendering. Includes unit tests. * fix(templates): correct default data found by full visual audit - fit 5 default values to their schema max_length (render blockers): changelog-entry, credit-badge, css-snippet, incident-report, qr-code-display - drop prefixes/suffixes the templates already render themselves: vv version (changelog-entry, release-notes, security-advisory), votes votes (poll-result), subscribers subscribers (newsletter-cta), EP EP (podcast-episode), $ $ (terminal-output), 5/5 / 5 (book-club), doubled diff markers (diff-viewer, git-diff) - restore real ampersands previously mangled to 'and' (rust-snippet, snippet-go, quick-tip), now safe with xml escaping * fix(templates): repair 10 high-severity visual defects (#66) Verified visually against each template's default render: - command-card, docker-command: command text overflowed its terminal panel (63px/141px past the edge) -> fit font size to panel width - tech-stack: third card column ended at x=1180 on a 1080 canvas, clipping 'Tokio'/'Docker' mid-glyph -> redistribute columns - roadmap-timeline, week-schedule: per-column descriptions wider than their columns overlapped into garbled lines -> wordwrap + tspan line breaking per column - vscode-config: 29-char keys collided with values -> smaller font, value column moved right - webhook-payload: ISO timestamp overflowed its 180px panel into the Delivery ID column -> shorter format + smaller font - wallpaper-quote, gradient-quote: wrap_width 16/18 chars produced far too many lines for 56/52px type, author block overlapped the quote -> wrap widths sized to the actual font metrics - poll-result: bar fills were hardcoded full width regardless of data -> percentage fields are numeric now, fill width = pct * 8px * style: apply cargo fmt --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): rebalance top-heavy templates + raise contrast (audit part 1/2) (#70) * fix(templates): rebalance vertically top-heavy templates 9 templates had content ending at 55-70% height leaving the bottom of the card empty: archive-card, incident-report, version-compare, version-comparison, step-process, roadmap-card, command-result, flame-graph, goal-tracker. Content groups recentered/respread; also fixes step-process badge circles using y= instead of cy=, goal-tracker progress arc not matching its percentage, and the version-compare delta badge overlapping a panel edge. * fix(templates): raise contrast and fix status color semantics - comparison: losing column raised from near-invisible grey; stray unmatched dash bar removed; rows respread over full canvas - dependency-graph: leaf labels readable; serde_json connector now originates from serde (elbow connectors) - token-display, color-palette: dark swatches get a subtle stroke - api-key-display: redaction dots visible - health-check: healthy services render green (status mapping now accepts ok/healthy/online case-insensitively; down stays red) * fix(templates): compute goal-tracker ring arc from current/target The arc was hardcoded to match the default 68% (CodeCora code-scanning alert). current/target are numeric schema fields now; the ring renders slide.current/slide.target of the circumference for any data. * fix(templates): resolve goal-tracker conflict markers + data-driven arc; adaptive comparison pitch - goal-tracker: a conflicted stash-application left both ring markups in the file; keep the rebalanced geometry (r=180) and compute the arc from slide.current/slide.target (circumference 1131) - comparison: row pitch adapts min(370/(n-1), 150) so wrapped text never overflows the canvas while 3-line defaults keep the verified balance --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): overflow, glyph and polish fixes (audit part 2/2) (#71) * fix(templates): fix overflow, collisions and line spacing - feature-grid, recipe-card: descriptions/steps wrapped via wordwrap+tspan inside panel bounds - password-generator: crack-time wrapped with padding, STRONG label centered inside the fill, layout spread over full canvas - qr-code-display: finder squares inside the QR panel - credit-badge: headline no longer overlaps the star - podcast-cover: normal title leading, one step larger - changelog: even line rhythm, NEW/FIXED bullet dots, respread - dev-quote: code indentation preserved (xml:space=preserve) - newsletter-cta: vertical rhythm computed from line counts * fix(templates): repair glyphs, proportional fills and composition - tweet-embed: reply/retweet icons drawn as SVG paths (glyphs were missing from bundled fonts); testimonial-grid: proper quote mark - carousel-default, checklist: stray cursor-like accent rects removed - progress-card: fill width proportional to numeric percentage (schema type number, poll-result pattern), 78% now renders 78% - snippet-yaml: YAML indentation preserved (xml:space=preserve) - gradient-mesh: text contrast shielded from bright mesh, rebalanced - instagram-story: badge grouped with centered title block - matrix-display: table vertically centered * fix(templates): polish remaining low-severity visual findings - api-endpoint: auth chip inset from bar edge - author-bio: width-adaptive tag chips with even padding - benchmark-result: winner badge grouped with bars - book-club: cover placeholder visible - calendar-event: date tile typography rebalanced - database-schema: duplicate overlapping header text fixed (garbled glyph), title deduplicated - dev-quote-card: quote-mark gap tightened - gradient-banner: stray accent bar moved clear of text - quote-stack: quote glyph breathing room - stats-dashboard: metric digits in Inter for unambiguous 1/7 - webhook-card: response value follows key with natural spacing --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * chore(release): v0.2.0 148 templates, renderer XML-escaping, full vision-audit fix wave (#66/#67), numeric schema fields, docs gallery. See CHANGELOG. --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com>
ajianaz
added a commit
that referenced
this pull request
Sep 29, 2026
* fix(ci): use mlugg/setup-zig action for cargo-zigbuild apt-get zig not available on ubuntu-24.04. Switch to mlugg/setup-zig@v1. Also fix packaging to find binary in zigbuild output path. * fix(ci): drop cargo-zigbuild, use standard cargo build mlugg/setup-zig returning 404. Simplify to standard cargo build for v0.1.0. GLIBC compatibility can be addressed in a future release. * chore(release): v0.2.0 (#72) * chore: sync main to develop (release workflow fixes) (#30) * fix(ci): use mlugg/setup-zig action for cargo-zigbuild apt-get zig not available on ubuntu-24.04. Switch to mlugg/setup-zig@v1. Also fix packaging to find binary in zigbuild output path. * fix(ci): drop cargo-zigbuild, use standard cargo build mlugg/setup-zig returning 404. Simplify to standard cargo build for v0.1.0. GLIBC compatibility can be addressed in a future release. --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(docs): add VitePress documentation site with API reference and template gallery (#31) - VitePress setup with Catppuccin Mocha brand theme - Guide pages: installation, quick start, CLI reference, HTTP server, Docker, configuration, branding - Template gallery: all 18 templates with schema reference and JSON examples - API reference: health check, render endpoint, authentication - Template authoring guide (moved from docs/ to docs/guide/) - GitHub Pages CI workflow (bun-based, auto-deploy on docs/** push) - 32 HTML pages generated, builds in ~8s Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(docs): add sample images and field descriptions for all 18 templates (#32) - Render all 18 templates with CodeCora brand as visual samples - Embed sample PNG in each template page (docs/public/samples/) - Add human-readable field descriptions (was empty from schema.json) - Add aspect ratio to dimensions table - Clean up example JSON with realistic data Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(docs): correct brand in sample images to Ajianaz @ajianaz (#33) All 18 sample images were rendered with CodeCora/@codecoradev branding. Re-rendered with correct brand: Ajianaz / @ajianaz. Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(docs): all sample images now use ajianaz consistently (#34) Replaced all author/speaker/guest names in sample data with 'ajianaz'. No personal names in any sample image. Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 1) (#35) New templates: - numbered-tips: Numbered list card (1080x1350) - progress-card: Progress bar with percentage (1080x1080) - pinterest-pin: Vertical Pinterest format (1000x1500) - blog-hero: Wide blog post header (1200x675) - poll-result: Poll results with percentage bars (1080x1080) - quote-minimal: Clean minimal quote card (1080x1080) - step-process: Step-by-step flow diagram (1080x1080) - faq-card: Q&A card layout (1080x1080) - metric-grid: 2x2 grid of metrics (1080x1080) - author-bio: Profile/bio card with tags (1080x1080) Total templates: 18 → 28 Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 2) (#36) New templates: - feature-highlight: Single feature with icon badge (1080x1080) - timeline: Vertical timeline with milestones (1080x1350) - comparison-table: Side-by-side comparison (1080x1080) - cta-card: Call-to-action card with URL (1080x1080) - book-cover: Book/ebook cover design (1080x1620) - roadmap-card: Horizontal roadmap phases (1080x1080) - discount-badge: Circular promo badge (800x800) - code-snippet: Code editor card for social (1200x630) - big-number: Oversized number/stat (1080x1080) - event-flyer: Event flyer with details (1080x1350) Total templates: 28 -> 38 Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 3) (#37) New templates: - polaroid-quote: Polaroid-style quote card (1080x1080) - review-card: Product review with rating (1080x1080) - changelog: Release notes card (1080x1350) - gradient-hero: Bold hero banner (1200x630) - testimonial-grid: 3-column testimonials (1080x1080) - stat-comparison: Before/after comparison (1080x1080) - calendar-event: Calendar-style event card (1080x1080) - pricing-card: Single pricing tier (1080x1080) - github-star: Repo showcase card (1200x630) - minimal-text: Ultra-minimal text-only (1080x1080) Total templates: 38 -> 48 Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 4) (#38) New templates: - quick-tip: Tip card with lightbulb icon (1080x1080) - tweet-embed: Tweet-style card with avatar (1200x675) - newsletter-cta: Newsletter signup card (1080x1080) - retro-badge: Retro circular badge (600x600) - matrix-card: 2x2 decision matrix (1080x1080) - certificate: Certificate of achievement (1200x900) - quote-stack: Stacked quotes with authors (1080x1350) - webhook-card: API endpoint card (1200x630) - goal-tracker: Goal progress with checklist (1080x1080) - color-palette: Design palette showcase (1080x1080) Total: 48 -> 58 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 5) (#39) New templates: - qr-business-card: Digital business card with QR (1080x1080) - gradient-quote: Full-bleed gradient quote (1080x1080) - stat-highlight: Bold single statistic (1200x630) - faq-single: Single FAQ card (1080x1080) - feature-list: Product features with checkmarks (1080x1350) - team-member: Team profile card (1080x1080) - kanban-card: Kanban board with columns (1200x630) - podcast-episode: Podcast episode card (1080x1080) - release-notes: Versioned release notes (1080x1350) - wallpaper-quote: Phone wallpaper quote (1080x1920) Total: 58 -> 68 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 6) (#40) New templates: - social-poll: Poll card with percentage bars (1080x1080) - command-card: Terminal command with description (1200x630) - week-schedule: Weekly content schedule grid (1080x1080) - gradient-banner: Wide gradient banner (1200x630) - data-counter: 4-metric counter grid (1080x1080) - recipe-card: Recipe with ingredients and steps (1080x1350) - css-snippet: CSS code with syntax highlighting (1200x630) - milestone-celebration: Big number celebration (1080x1080) - book-club: Book recommendation card (1080x1350) - terminal-output: Terminal window output (1200x630) Total: 68 -> 78 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 7) (#41) New templates: - github-issue: GitHub issue card with labels (1200x630) - github-pr: GitHub PR card with merge status (1200x630) - api-endpoint: API endpoint documentation (1200x630) - docker-command: Docker command card (1200x630) - rust-snippet: Rust code with editor style (1200x630) - vscode-config: VS Code settings JSON (1200x630) - dev-quote-card: Developer quote card (1080x1080) - chart-bar: Bar chart visualization (1080x1080) - git-diff: Git diff visualization (1200x630) - package-json: package.json dependencies (1200x630) Total: 78 -> 88 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 8) (#42) New templates: - github-profile: GitHub profile card with avatar and stats (1080x1080) - tech-stack: Technology stack grid (1080x1080) - contributor-card: OSS contributor appreciation (1200x630) - release-tag: Git release/tag announcement (1200x630) - ci-pipeline: CI/CD pipeline visualization (1200x630) - dependency-graph: Dependency tree visualization (1080x1080) - feature-flags: Feature flag toggle board (1080x1080) - uptime-monitor: Service uptime dashboard (1080x1080) - api-response: API JSON response viewer (1200x630) - error-404: 404 error page design (1080x1080) Total: 88 -> 98 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 9) (#43) New templates: - log-viewer: Server log output viewer (1200x630) - database-schema: Database table schema visualization (1200x630) - dockerfile: Dockerfile instructions viewer (1200x630) - makefile: Makefile targets viewer (1200x630) - license-card: Open source license info card (1080x1080) - pull-request: GitHub PR review card (1200x630) - code-review: Code review comment card (1200x630) - version-comparison: Side-by-side version comparison (1080x1080) - env-setup: Dev environment setup instructions (1200x630) - security-advisory: Security vulnerability advisory (1200x630) Total: 98 -> 108 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 10) (#44) New templates: - kudos-card: Team appreciation card (1080x1080) - star-tracker: GitHub stars milestone tracker (1080x1080) - terminal-prompt: Terminal command prompt snippet (1200x630) - flame-graph: Performance profiling flame graph (1080x1080) - migration-status: Database migration progress tracker (1080x1080) - api-key-display: API key/token reveal card (1200x630) - credit-badge: Achievement or skill badge (1080x1080) - roadmap-timeline: Project roadmap horizontal timeline (1080x1080) - stats-dashboard: Multi-metric dashboard 2x2 grid (1080x1080) - swagger-endpoint: OpenAPI endpoint documentation (1200x630) Total: 108 -> 118 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 11) (#45) New templates: - webhook-payload: Incoming webhook event payload viewer (1200x630) - password-generator: Generated password display card (1080x1080) - qr-code-display: QR code with label and URL (1080x1080) - diff-viewer: Code diff comparison viewer (1200x630) - cert-pinned: SSL/TLS certificate details card (1080x1080) - rate-limit: API rate limit status card (1200x630) - command-result: CLI command execution result (1080x1080) - config-display: Configuration key-value display (1200x630) - health-check: Service health check status board (1080x1080) - changelog-entry: Release changelog entry card (1200x630) Total: 118 -> 128 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 12) (#46) New templates: - incident-report: Post-mortem incident report (1080x1080) - deploy-status: Deployment pipeline tracker (1080x1080) - snippet-go: Go code snippet (1200x630) - snippet-python: Python code snippet (1200x630) - snippet-typescript: TypeScript code snippet (1200x630) - ascii-art: ASCII art display (1200x630) - matrix-display: Color-coded comparison matrix (1080x1080) - gradient-mesh: Abstract gradient mesh art (1080x1080) - token-display: Design token showcase (1200x630) - feature-grid: Feature showcase 2x2 grid (1080x1080) Total: 128 -> 138 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 13) (#47) New templates: - snippet-rust: Rust code snippet (1200x630) - snippet-bash: Bash/shell snippet (1200x630) - snippet-sql: SQL query snippet (1200x630) - snippet-yaml: YAML config snippet (1200x630) - leaderboard: Ranked leaderboard (1080x1080) - sponsor-card: OSS sponsor appreciation (1080x1080) - version-compare: Side-by-side version comparison (1200x630) - status-badge: Service status badge (1200x630) - benchmark-result: Performance benchmark bars (1080x1080) - archive-card: Blog post archive entry (1080x1350) Total: 138 -> 148 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * docs: add 148 template pages with MinIO preview images (#48) - Generate doc page for all 148 templates (fields, dimensions, usage) - Preview images served from MinIO CDN (slim repo, no binary assets) - Update sidebar: 11 categories, collapsible, all 148 templates - Update index.md: responsive gallery grid with lazy loading - VitePress build: 162 HTML pages, all passing Total: 18 -> 148 template doc pages Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * docs: change VitePress base to / for Cloudflare Pages (#49) Deployed to CF Pages project: cosy-docs Production URL: https://cosy-docs-4f5.pages.dev/ Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(docs): Pinterest-style masonry layout for templates gallery (#50) - Replace CSS grid with CSS columns (masonry/pinterest flow) - Images display at natural aspect ratio — no cropping - Responsive: 5 cols desktop → 4 → 3 → 2 → 1 mobile - Cards use break-inside: avoid for clean column flow - Deployed to CF Pages production Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(docs): reduce masonry to 3 columns default (4 on ultra-wide) Desktop default 3 cols, 4 only on 1440px+, gap widened to 16px * fix(templates): watermark position + border radius consolidation (#51) Watermark fixes (8 templates): - linkedin-card: brand_name moved from top (y=95) to bottom-right (y=590) - twitter-quote: brand_name moved from top (y=120) to bottom-right (y=635) - dev-quote: brand_name moved from y=968 to y=1040 (40px from bottom) - instagram-story: y=1780 → y=1870 (50px from bottom) - tiktok-quote: y=1250 → y=1310 (40px from bottom) - pinterest-pin: y=1400 → y=1460 (40px from bottom) - book-cover: y=1530 → y=1580 (40px from bottom) - youtube-thumb: y=630 → y=690 (30px from bottom) - twitter-quote + linkedin-card: accent font → muted credit style (20px, #7f849c) Border radius consolidation (81 templates): - Standardized 25+ rx values to 4-tier system: 8/12/20/30 - rx 1-5 → 8 (small), rx 6-14 → 12 (default), rx 15-24 → 20 (large), rx 25-40 → 30 (pill) - rx=0 preserved (intentionally sharp corners) Refs: miifb (make-interfaces-feel-better), hallmark design audit Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): watermark default off + show_brand toggle (#52) - Added 'show_brand' boolean field to all 148 schema.json files (default: false) - Added 'Boolean' variant to FieldType enum in src/schema.rs - Wrapped all brand_name text elements in {% if brand.show_brand %} conditional in all 147 template.svg files that had brand_name - Watermark/brand now OFF by default — only renders when show_brand: true - Updated existing 18 defaults.json with show_brand: false Breaking change: brand_name no longer appears by default. To enable: pass {"brand": {"show_brand": true, "brand_name": "..."}} Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): real-case defaults for all 148 templates (#53) Replace generic sample data with realistic, template-relevant content: - deploy-status: production v2.1.0 deployment with service statuses - changelog: real version notes with breaking changes and features - benchmark-result: Rust vs Node.js vs Python render performance - code-snippet: actual Rust async render handler code - blog-hero: 'Why We Replaced Puppeteer with Pure Rust' - big-number: '149 templates available' - And 142 more templates with contextually relevant content All defaults now include show_brand: false (no watermark by default). Fixed SVG-breaking characters in code samples (< > and && removed). Fixed float-parsing issues (% suffixes removed from numeric fields). 148/148 templates render successfully. Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * docs: border radius 4-tier standard + sub-5px decorative exception (#54) (#57) Document the radius tier system (8/12/20/30) standardized in #51 and add an explicit exception for thin decorative elements (<=5px) so automated audits stop flagging divider bars as non-standard rx. Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): tighten max length on big-number fields (#55) (#58) Reduce max from 10-20 to 8 chars for hero-size number fields that render at 140-220px font size — longer values clip at the canvas edge. Templates: stat-card, big-number, stat-highlight, star-tracker (current_stars/goal_stars), milestone-celebration. Descriptions note the clipping constraint. Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): replace emoji with SVG icon + normalize type scale (#56) (#59) - github-star: replace star emoji with inline SVG star (accent gradient fill), optically aligned to text baseline - feature-highlight: schema description no longer suggests emoji - type-scale: normalize off-scale font sizes (13->14, 15->16, 34->32, 38->36, 46->48, 68->64, 76->72) across 17 templates - pricing-card: drop invented sample metrics from defaults ('All 149 templates' -> 'All templates included') Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(schema): validate field types and correct numeric field declarations (#64) Audit of all 148 templates with max-length edge inputs found 7 templates (benchmark-result, chart-bar, flame-graph, password-generator, rate-limit, social-poll, star-tracker) that crash with a confusing Tera 'invalid float literal' error when a field used in arithmetic receives string input. Root causes (both fixed): - schemas declared arithmetic fields as type 'text'; corrected 26 fields to type 'number' (display-only fields like b*_ops stay text) - validate_input never checked field types; render never called validate_input at all. Render now validates first and fails fast with field-level messages (JSON errors stay machine-readable for --json-output) Also fixed test data for carousel-default which was silently invalid (missing required 'headline') — previously passing only because render did no validation. Closes #60 Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * docs(cli): document render-time schema validation (#65) Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): standardize watermark footer across all 148 templates (#62) (#63) - Bottom-center, 30px margin, Inter 20px w600 #7f849c everywhere - Move carousel-default & og-image watermark from top-left to bottom-center - Add missing watermark block to newsletter-header - Document watermark spec in template-authoring guide Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): repair 10 high-severity visual defects from vision audit (#66) (#68) * fix(renderer): xml-escape context text so &, <, > render safely Literal ampersands in template data previously broke SVG parsing (malformed entity reference). All string context values are now XML-escaped before minijinja rendering. Includes unit tests. * fix(templates): correct default data found by full visual audit - fit 5 default values to their schema max_length (render blockers): changelog-entry, credit-badge, css-snippet, incident-report, qr-code-display - drop prefixes/suffixes the templates already render themselves: vv version (changelog-entry, release-notes, security-advisory), votes votes (poll-result), subscribers subscribers (newsletter-cta), EP EP (podcast-episode), $ $ (terminal-output), 5/5 / 5 (book-club), doubled diff markers (diff-viewer, git-diff) - restore real ampersands previously mangled to 'and' (rust-snippet, snippet-go, quick-tip), now safe with xml escaping * fix(templates): repair 10 high-severity visual defects (#66) Verified visually against each template's default render: - command-card, docker-command: command text overflowed its terminal panel (63px/141px past the edge) -> fit font size to panel width - tech-stack: third card column ended at x=1180 on a 1080 canvas, clipping 'Tokio'/'Docker' mid-glyph -> redistribute columns - roadmap-timeline, week-schedule: per-column descriptions wider than their columns overlapped into garbled lines -> wordwrap + tspan line breaking per column - vscode-config: 29-char keys collided with values -> smaller font, value column moved right - webhook-payload: ISO timestamp overflowed its 180px panel into the Delivery ID column -> shorter format + smaller font - wallpaper-quote, gradient-quote: wrap_width 16/18 chars produced far too many lines for 56/52px type, author block overlapped the quote -> wrap widths sized to the actual font metrics - poll-result: bar fills were hardcoded full width regardless of data -> percentage fields are numeric now, fill width = pct * 8px * style: apply cargo fmt --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): rebalance top-heavy templates + raise contrast (audit part 1/2) (#70) * fix(templates): rebalance vertically top-heavy templates 9 templates had content ending at 55-70% height leaving the bottom of the card empty: archive-card, incident-report, version-compare, version-comparison, step-process, roadmap-card, command-result, flame-graph, goal-tracker. Content groups recentered/respread; also fixes step-process badge circles using y= instead of cy=, goal-tracker progress arc not matching its percentage, and the version-compare delta badge overlapping a panel edge. * fix(templates): raise contrast and fix status color semantics - comparison: losing column raised from near-invisible grey; stray unmatched dash bar removed; rows respread over full canvas - dependency-graph: leaf labels readable; serde_json connector now originates from serde (elbow connectors) - token-display, color-palette: dark swatches get a subtle stroke - api-key-display: redaction dots visible - health-check: healthy services render green (status mapping now accepts ok/healthy/online case-insensitively; down stays red) * fix(templates): compute goal-tracker ring arc from current/target The arc was hardcoded to match the default 68% (CodeCora code-scanning alert). current/target are numeric schema fields now; the ring renders slide.current/slide.target of the circumference for any data. * fix(templates): resolve goal-tracker conflict markers + data-driven arc; adaptive comparison pitch - goal-tracker: a conflicted stash-application left both ring markups in the file; keep the rebalanced geometry (r=180) and compute the arc from slide.current/slide.target (circumference 1131) - comparison: row pitch adapts min(370/(n-1), 150) so wrapped text never overflows the canvas while 3-line defaults keep the verified balance --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): overflow, glyph and polish fixes (audit part 2/2) (#71) * fix(templates): fix overflow, collisions and line spacing - feature-grid, recipe-card: descriptions/steps wrapped via wordwrap+tspan inside panel bounds - password-generator: crack-time wrapped with padding, STRONG label centered inside the fill, layout spread over full canvas - qr-code-display: finder squares inside the QR panel - credit-badge: headline no longer overlaps the star - podcast-cover: normal title leading, one step larger - changelog: even line rhythm, NEW/FIXED bullet dots, respread - dev-quote: code indentation preserved (xml:space=preserve) - newsletter-cta: vertical rhythm computed from line counts * fix(templates): repair glyphs, proportional fills and composition - tweet-embed: reply/retweet icons drawn as SVG paths (glyphs were missing from bundled fonts); testimonial-grid: proper quote mark - carousel-default, checklist: stray cursor-like accent rects removed - progress-card: fill width proportional to numeric percentage (schema type number, poll-result pattern), 78% now renders 78% - snippet-yaml: YAML indentation preserved (xml:space=preserve) - gradient-mesh: text contrast shielded from bright mesh, rebalanced - instagram-story: badge grouped with centered title block - matrix-display: table vertically centered * fix(templates): polish remaining low-severity visual findings - api-endpoint: auth chip inset from bar edge - author-bio: width-adaptive tag chips with even padding - benchmark-result: winner badge grouped with bars - book-club: cover placeholder visible - calendar-event: date tile typography rebalanced - database-schema: duplicate overlapping header text fixed (garbled glyph), title deduplicated - dev-quote-card: quote-mark gap tightened - gradient-banner: stray accent bar moved clear of text - quote-stack: quote glyph breathing room - stats-dashboard: metric digits in Inter for unambiguous 1/7 - webhook-card: response value follows key with natural spacing --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * chore(release): v0.2.0 148 templates, renderer XML-escaping, full vision-audit fix wave (#66/#67), numeric schema fields, docs gallery. See CHANGELOG. --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * chore: GitHub issue templates for template and feature requests Add two YAML issue forms (template request with platform/content-field structure, feature request with area taxonomy) plus a config pointing to the docs site. Gives structured demand data for template priorities instead of free-form issues. Closes #98. --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com>
ajianaz
added a commit
that referenced
this pull request
Sep 29, 2026
* fix(ci): use mlugg/setup-zig action for cargo-zigbuild apt-get zig not available on ubuntu-24.04. Switch to mlugg/setup-zig@v1. Also fix packaging to find binary in zigbuild output path. * fix(ci): drop cargo-zigbuild, use standard cargo build mlugg/setup-zig returning 404. Simplify to standard cargo build for v0.1.0. GLIBC compatibility can be addressed in a future release. * chore(release): v0.2.0 (#72) * chore: sync main to develop (release workflow fixes) (#30) * fix(ci): use mlugg/setup-zig action for cargo-zigbuild apt-get zig not available on ubuntu-24.04. Switch to mlugg/setup-zig@v1. Also fix packaging to find binary in zigbuild output path. * fix(ci): drop cargo-zigbuild, use standard cargo build mlugg/setup-zig returning 404. Simplify to standard cargo build for v0.1.0. GLIBC compatibility can be addressed in a future release. --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(docs): add VitePress documentation site with API reference and template gallery (#31) - VitePress setup with Catppuccin Mocha brand theme - Guide pages: installation, quick start, CLI reference, HTTP server, Docker, configuration, branding - Template gallery: all 18 templates with schema reference and JSON examples - API reference: health check, render endpoint, authentication - Template authoring guide (moved from docs/ to docs/guide/) - GitHub Pages CI workflow (bun-based, auto-deploy on docs/** push) - 32 HTML pages generated, builds in ~8s Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(docs): add sample images and field descriptions for all 18 templates (#32) - Render all 18 templates with CodeCora brand as visual samples - Embed sample PNG in each template page (docs/public/samples/) - Add human-readable field descriptions (was empty from schema.json) - Add aspect ratio to dimensions table - Clean up example JSON with realistic data Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(docs): correct brand in sample images to Ajianaz @ajianaz (#33) All 18 sample images were rendered with CodeCora/@codecoradev branding. Re-rendered with correct brand: Ajianaz / @ajianaz. Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(docs): all sample images now use ajianaz consistently (#34) Replaced all author/speaker/guest names in sample data with 'ajianaz'. No personal names in any sample image. Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 1) (#35) New templates: - numbered-tips: Numbered list card (1080x1350) - progress-card: Progress bar with percentage (1080x1080) - pinterest-pin: Vertical Pinterest format (1000x1500) - blog-hero: Wide blog post header (1200x675) - poll-result: Poll results with percentage bars (1080x1080) - quote-minimal: Clean minimal quote card (1080x1080) - step-process: Step-by-step flow diagram (1080x1080) - faq-card: Q&A card layout (1080x1080) - metric-grid: 2x2 grid of metrics (1080x1080) - author-bio: Profile/bio card with tags (1080x1080) Total templates: 18 → 28 Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 2) (#36) New templates: - feature-highlight: Single feature with icon badge (1080x1080) - timeline: Vertical timeline with milestones (1080x1350) - comparison-table: Side-by-side comparison (1080x1080) - cta-card: Call-to-action card with URL (1080x1080) - book-cover: Book/ebook cover design (1080x1620) - roadmap-card: Horizontal roadmap phases (1080x1080) - discount-badge: Circular promo badge (800x800) - code-snippet: Code editor card for social (1200x630) - big-number: Oversized number/stat (1080x1080) - event-flyer: Event flyer with details (1080x1350) Total templates: 28 -> 38 Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 3) (#37) New templates: - polaroid-quote: Polaroid-style quote card (1080x1080) - review-card: Product review with rating (1080x1080) - changelog: Release notes card (1080x1350) - gradient-hero: Bold hero banner (1200x630) - testimonial-grid: 3-column testimonials (1080x1080) - stat-comparison: Before/after comparison (1080x1080) - calendar-event: Calendar-style event card (1080x1080) - pricing-card: Single pricing tier (1080x1080) - github-star: Repo showcase card (1200x630) - minimal-text: Ultra-minimal text-only (1080x1080) Total templates: 38 -> 48 Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 4) (#38) New templates: - quick-tip: Tip card with lightbulb icon (1080x1080) - tweet-embed: Tweet-style card with avatar (1200x675) - newsletter-cta: Newsletter signup card (1080x1080) - retro-badge: Retro circular badge (600x600) - matrix-card: 2x2 decision matrix (1080x1080) - certificate: Certificate of achievement (1200x900) - quote-stack: Stacked quotes with authors (1080x1350) - webhook-card: API endpoint card (1200x630) - goal-tracker: Goal progress with checklist (1080x1080) - color-palette: Design palette showcase (1080x1080) Total: 48 -> 58 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 5) (#39) New templates: - qr-business-card: Digital business card with QR (1080x1080) - gradient-quote: Full-bleed gradient quote (1080x1080) - stat-highlight: Bold single statistic (1200x630) - faq-single: Single FAQ card (1080x1080) - feature-list: Product features with checkmarks (1080x1350) - team-member: Team profile card (1080x1080) - kanban-card: Kanban board with columns (1200x630) - podcast-episode: Podcast episode card (1080x1080) - release-notes: Versioned release notes (1080x1350) - wallpaper-quote: Phone wallpaper quote (1080x1920) Total: 58 -> 68 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 6) (#40) New templates: - social-poll: Poll card with percentage bars (1080x1080) - command-card: Terminal command with description (1200x630) - week-schedule: Weekly content schedule grid (1080x1080) - gradient-banner: Wide gradient banner (1200x630) - data-counter: 4-metric counter grid (1080x1080) - recipe-card: Recipe with ingredients and steps (1080x1350) - css-snippet: CSS code with syntax highlighting (1200x630) - milestone-celebration: Big number celebration (1080x1080) - book-club: Book recommendation card (1080x1350) - terminal-output: Terminal window output (1200x630) Total: 68 -> 78 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 7) (#41) New templates: - github-issue: GitHub issue card with labels (1200x630) - github-pr: GitHub PR card with merge status (1200x630) - api-endpoint: API endpoint documentation (1200x630) - docker-command: Docker command card (1200x630) - rust-snippet: Rust code with editor style (1200x630) - vscode-config: VS Code settings JSON (1200x630) - dev-quote-card: Developer quote card (1080x1080) - chart-bar: Bar chart visualization (1080x1080) - git-diff: Git diff visualization (1200x630) - package-json: package.json dependencies (1200x630) Total: 78 -> 88 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 8) (#42) New templates: - github-profile: GitHub profile card with avatar and stats (1080x1080) - tech-stack: Technology stack grid (1080x1080) - contributor-card: OSS contributor appreciation (1200x630) - release-tag: Git release/tag announcement (1200x630) - ci-pipeline: CI/CD pipeline visualization (1200x630) - dependency-graph: Dependency tree visualization (1080x1080) - feature-flags: Feature flag toggle board (1080x1080) - uptime-monitor: Service uptime dashboard (1080x1080) - api-response: API JSON response viewer (1200x630) - error-404: 404 error page design (1080x1080) Total: 88 -> 98 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 9) (#43) New templates: - log-viewer: Server log output viewer (1200x630) - database-schema: Database table schema visualization (1200x630) - dockerfile: Dockerfile instructions viewer (1200x630) - makefile: Makefile targets viewer (1200x630) - license-card: Open source license info card (1080x1080) - pull-request: GitHub PR review card (1200x630) - code-review: Code review comment card (1200x630) - version-comparison: Side-by-side version comparison (1080x1080) - env-setup: Dev environment setup instructions (1200x630) - security-advisory: Security vulnerability advisory (1200x630) Total: 98 -> 108 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 10) (#44) New templates: - kudos-card: Team appreciation card (1080x1080) - star-tracker: GitHub stars milestone tracker (1080x1080) - terminal-prompt: Terminal command prompt snippet (1200x630) - flame-graph: Performance profiling flame graph (1080x1080) - migration-status: Database migration progress tracker (1080x1080) - api-key-display: API key/token reveal card (1200x630) - credit-badge: Achievement or skill badge (1080x1080) - roadmap-timeline: Project roadmap horizontal timeline (1080x1080) - stats-dashboard: Multi-metric dashboard 2x2 grid (1080x1080) - swagger-endpoint: OpenAPI endpoint documentation (1200x630) Total: 108 -> 118 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 11) (#45) New templates: - webhook-payload: Incoming webhook event payload viewer (1200x630) - password-generator: Generated password display card (1080x1080) - qr-code-display: QR code with label and URL (1080x1080) - diff-viewer: Code diff comparison viewer (1200x630) - cert-pinned: SSL/TLS certificate details card (1080x1080) - rate-limit: API rate limit status card (1200x630) - command-result: CLI command execution result (1080x1080) - config-display: Configuration key-value display (1200x630) - health-check: Service health check status board (1080x1080) - changelog-entry: Release changelog entry card (1200x630) Total: 118 -> 128 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 12) (#46) New templates: - incident-report: Post-mortem incident report (1080x1080) - deploy-status: Deployment pipeline tracker (1080x1080) - snippet-go: Go code snippet (1200x630) - snippet-python: Python code snippet (1200x630) - snippet-typescript: TypeScript code snippet (1200x630) - ascii-art: ASCII art display (1200x630) - matrix-display: Color-coded comparison matrix (1080x1080) - gradient-mesh: Abstract gradient mesh art (1080x1080) - token-display: Design token showcase (1200x630) - feature-grid: Feature showcase 2x2 grid (1080x1080) Total: 128 -> 138 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): add 10 new templates (batch 13) (#47) New templates: - snippet-rust: Rust code snippet (1200x630) - snippet-bash: Bash/shell snippet (1200x630) - snippet-sql: SQL query snippet (1200x630) - snippet-yaml: YAML config snippet (1200x630) - leaderboard: Ranked leaderboard (1080x1080) - sponsor-card: OSS sponsor appreciation (1080x1080) - version-compare: Side-by-side version comparison (1200x630) - status-badge: Service status badge (1200x630) - benchmark-result: Performance benchmark bars (1080x1080) - archive-card: Blog post archive entry (1080x1350) Total: 138 -> 148 templates Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * docs: add 148 template pages with MinIO preview images (#48) - Generate doc page for all 148 templates (fields, dimensions, usage) - Preview images served from MinIO CDN (slim repo, no binary assets) - Update sidebar: 11 categories, collapsible, all 148 templates - Update index.md: responsive gallery grid with lazy loading - VitePress build: 162 HTML pages, all passing Total: 18 -> 148 template doc pages Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * docs: change VitePress base to / for Cloudflare Pages (#49) Deployed to CF Pages project: cosy-docs Production URL: https://cosy-docs-4f5.pages.dev/ Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(docs): Pinterest-style masonry layout for templates gallery (#50) - Replace CSS grid with CSS columns (masonry/pinterest flow) - Images display at natural aspect ratio — no cropping - Responsive: 5 cols desktop → 4 → 3 → 2 → 1 mobile - Cards use break-inside: avoid for clean column flow - Deployed to CF Pages production Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(docs): reduce masonry to 3 columns default (4 on ultra-wide) Desktop default 3 cols, 4 only on 1440px+, gap widened to 16px * fix(templates): watermark position + border radius consolidation (#51) Watermark fixes (8 templates): - linkedin-card: brand_name moved from top (y=95) to bottom-right (y=590) - twitter-quote: brand_name moved from top (y=120) to bottom-right (y=635) - dev-quote: brand_name moved from y=968 to y=1040 (40px from bottom) - instagram-story: y=1780 → y=1870 (50px from bottom) - tiktok-quote: y=1250 → y=1310 (40px from bottom) - pinterest-pin: y=1400 → y=1460 (40px from bottom) - book-cover: y=1530 → y=1580 (40px from bottom) - youtube-thumb: y=630 → y=690 (30px from bottom) - twitter-quote + linkedin-card: accent font → muted credit style (20px, #7f849c) Border radius consolidation (81 templates): - Standardized 25+ rx values to 4-tier system: 8/12/20/30 - rx 1-5 → 8 (small), rx 6-14 → 12 (default), rx 15-24 → 20 (large), rx 25-40 → 30 (pill) - rx=0 preserved (intentionally sharp corners) Refs: miifb (make-interfaces-feel-better), hallmark design audit Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): watermark default off + show_brand toggle (#52) - Added 'show_brand' boolean field to all 148 schema.json files (default: false) - Added 'Boolean' variant to FieldType enum in src/schema.rs - Wrapped all brand_name text elements in {% if brand.show_brand %} conditional in all 147 template.svg files that had brand_name - Watermark/brand now OFF by default — only renders when show_brand: true - Updated existing 18 defaults.json with show_brand: false Breaking change: brand_name no longer appears by default. To enable: pass {"brand": {"show_brand": true, "brand_name": "..."}} Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat(templates): real-case defaults for all 148 templates (#53) Replace generic sample data with realistic, template-relevant content: - deploy-status: production v2.1.0 deployment with service statuses - changelog: real version notes with breaking changes and features - benchmark-result: Rust vs Node.js vs Python render performance - code-snippet: actual Rust async render handler code - blog-hero: 'Why We Replaced Puppeteer with Pure Rust' - big-number: '149 templates available' - And 142 more templates with contextually relevant content All defaults now include show_brand: false (no watermark by default). Fixed SVG-breaking characters in code samples (< > and && removed). Fixed float-parsing issues (% suffixes removed from numeric fields). 148/148 templates render successfully. Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * docs: border radius 4-tier standard + sub-5px decorative exception (#54) (#57) Document the radius tier system (8/12/20/30) standardized in #51 and add an explicit exception for thin decorative elements (<=5px) so automated audits stop flagging divider bars as non-standard rx. Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): tighten max length on big-number fields (#55) (#58) Reduce max from 10-20 to 8 chars for hero-size number fields that render at 140-220px font size — longer values clip at the canvas edge. Templates: stat-card, big-number, stat-highlight, star-tracker (current_stars/goal_stars), milestone-celebration. Descriptions note the clipping constraint. Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): replace emoji with SVG icon + normalize type scale (#56) (#59) - github-star: replace star emoji with inline SVG star (accent gradient fill), optically aligned to text baseline - feature-highlight: schema description no longer suggests emoji - type-scale: normalize off-scale font sizes (13->14, 15->16, 34->32, 38->36, 46->48, 68->64, 76->72) across 17 templates - pricing-card: drop invented sample metrics from defaults ('All 149 templates' -> 'All templates included') Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(schema): validate field types and correct numeric field declarations (#64) Audit of all 148 templates with max-length edge inputs found 7 templates (benchmark-result, chart-bar, flame-graph, password-generator, rate-limit, social-poll, star-tracker) that crash with a confusing Tera 'invalid float literal' error when a field used in arithmetic receives string input. Root causes (both fixed): - schemas declared arithmetic fields as type 'text'; corrected 26 fields to type 'number' (display-only fields like b*_ops stay text) - validate_input never checked field types; render never called validate_input at all. Render now validates first and fails fast with field-level messages (JSON errors stay machine-readable for --json-output) Also fixed test data for carousel-default which was silently invalid (missing required 'headline') — previously passing only because render did no validation. Closes #60 Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * docs(cli): document render-time schema validation (#65) Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): standardize watermark footer across all 148 templates (#62) (#63) - Bottom-center, 30px margin, Inter 20px w600 #7f849c everywhere - Move carousel-default & og-image watermark from top-left to bottom-center - Add missing watermark block to newsletter-header - Document watermark spec in template-authoring guide Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): repair 10 high-severity visual defects from vision audit (#66) (#68) * fix(renderer): xml-escape context text so &, <, > render safely Literal ampersands in template data previously broke SVG parsing (malformed entity reference). All string context values are now XML-escaped before minijinja rendering. Includes unit tests. * fix(templates): correct default data found by full visual audit - fit 5 default values to their schema max_length (render blockers): changelog-entry, credit-badge, css-snippet, incident-report, qr-code-display - drop prefixes/suffixes the templates already render themselves: vv version (changelog-entry, release-notes, security-advisory), votes votes (poll-result), subscribers subscribers (newsletter-cta), EP EP (podcast-episode), $ $ (terminal-output), 5/5 / 5 (book-club), doubled diff markers (diff-viewer, git-diff) - restore real ampersands previously mangled to 'and' (rust-snippet, snippet-go, quick-tip), now safe with xml escaping * fix(templates): repair 10 high-severity visual defects (#66) Verified visually against each template's default render: - command-card, docker-command: command text overflowed its terminal panel (63px/141px past the edge) -> fit font size to panel width - tech-stack: third card column ended at x=1180 on a 1080 canvas, clipping 'Tokio'/'Docker' mid-glyph -> redistribute columns - roadmap-timeline, week-schedule: per-column descriptions wider than their columns overlapped into garbled lines -> wordwrap + tspan line breaking per column - vscode-config: 29-char keys collided with values -> smaller font, value column moved right - webhook-payload: ISO timestamp overflowed its 180px panel into the Delivery ID column -> shorter format + smaller font - wallpaper-quote, gradient-quote: wrap_width 16/18 chars produced far too many lines for 56/52px type, author block overlapped the quote -> wrap widths sized to the actual font metrics - poll-result: bar fills were hardcoded full width regardless of data -> percentage fields are numeric now, fill width = pct * 8px * style: apply cargo fmt --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): rebalance top-heavy templates + raise contrast (audit part 1/2) (#70) * fix(templates): rebalance vertically top-heavy templates 9 templates had content ending at 55-70% height leaving the bottom of the card empty: archive-card, incident-report, version-compare, version-comparison, step-process, roadmap-card, command-result, flame-graph, goal-tracker. Content groups recentered/respread; also fixes step-process badge circles using y= instead of cy=, goal-tracker progress arc not matching its percentage, and the version-compare delta badge overlapping a panel edge. * fix(templates): raise contrast and fix status color semantics - comparison: losing column raised from near-invisible grey; stray unmatched dash bar removed; rows respread over full canvas - dependency-graph: leaf labels readable; serde_json connector now originates from serde (elbow connectors) - token-display, color-palette: dark swatches get a subtle stroke - api-key-display: redaction dots visible - health-check: healthy services render green (status mapping now accepts ok/healthy/online case-insensitively; down stays red) * fix(templates): compute goal-tracker ring arc from current/target The arc was hardcoded to match the default 68% (CodeCora code-scanning alert). current/target are numeric schema fields now; the ring renders slide.current/slide.target of the circumference for any data. * fix(templates): resolve goal-tracker conflict markers + data-driven arc; adaptive comparison pitch - goal-tracker: a conflicted stash-application left both ring markups in the file; keep the rebalanced geometry (r=180) and compute the arc from slide.current/slide.target (circumference 1131) - comparison: row pitch adapts min(370/(n-1), 150) so wrapped text never overflows the canvas while 3-line defaults keep the verified balance --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * fix(templates): overflow, glyph and polish fixes (audit part 2/2) (#71) * fix(templates): fix overflow, collisions and line spacing - feature-grid, recipe-card: descriptions/steps wrapped via wordwrap+tspan inside panel bounds - password-generator: crack-time wrapped with padding, STRONG label centered inside the fill, layout spread over full canvas - qr-code-display: finder squares inside the QR panel - credit-badge: headline no longer overlaps the star - podcast-cover: normal title leading, one step larger - changelog: even line rhythm, NEW/FIXED bullet dots, respread - dev-quote: code indentation preserved (xml:space=preserve) - newsletter-cta: vertical rhythm computed from line counts * fix(templates): repair glyphs, proportional fills and composition - tweet-embed: reply/retweet icons drawn as SVG paths (glyphs were missing from bundled fonts); testimonial-grid: proper quote mark - carousel-default, checklist: stray cursor-like accent rects removed - progress-card: fill width proportional to numeric percentage (schema type number, poll-result pattern), 78% now renders 78% - snippet-yaml: YAML indentation preserved (xml:space=preserve) - gradient-mesh: text contrast shielded from bright mesh, rebalanced - instagram-story: badge grouped with centered title block - matrix-display: table vertically centered * fix(templates): polish remaining low-severity visual findings - api-endpoint: auth chip inset from bar edge - author-bio: width-adaptive tag chips with even padding - benchmark-result: winner badge grouped with bars - book-club: cover placeholder visible - calendar-event: date tile typography rebalanced - database-schema: duplicate overlapping header text fixed (garbled glyph), title deduplicated - dev-quote-card: quote-mark gap tightened - gradient-banner: stray accent bar moved clear of text - quote-stack: quote glyph breathing room - stats-dashboard: metric digits in Inter for unambiguous 1/7 - webhook-card: response value follows key with natural spacing --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * chore(release): v0.2.0 148 templates, renderer XML-escaping, full vision-audit fix wave (#66/#67), numeric schema fields, docs gallery. See CHANGELOG. --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> * feat: code-screenshot template with syntax highlighting Add a macOS-style code editor screenshot template (1200x675): traffic lights, window title, filename + language badge, 13-line clip-path code window, dark/light theme palettes. Real syntax highlighting via the new highlight module: per-line tokenization into styled segments (comments, strings, numbers, language-aware keywords for rust/go/python/ts/js/ bash/sql) rendered through the existing tspan segment machinery. New schema option options:["code"] emits <field>_lines and <field>_segments from the sibling code_lang field — reusable by other templates. Pixel-verified token colors, stress-tested at max code length, vision-QA'd on both themes. Closes #93. * fix(templates): make code-screenshot line 13 actually visible Baseline math made the 13th line start at y=603 while the clip rect ended at y=590, so it was silently clipped away and only 12 lines ever showed. Shift the first baseline to 192 and tighten leading to 33px: line 13 now lands at y=588, inside the clip (verified by pixel-scan ink check at the line-13 band). Found by the CodeCora code-scanning gate before merge. * fix(highlight): theme-aware token palettes for light editor background Token colors were hardcoded to the dark Mocha palette, so the light theme rendered pastel greens/mauves on white at ~1.6-2:1 contrast (unreadable) while the template's light palette definition sat unused. highlight_line/highlight now take the theme and pick a Latte-style palette (keyword #8839ef, string #40a02b, number #fe640b, comment #838ba7) for light editors; template.rs passes the sibling theme field through. Pixel-verified: dark palette absent on light renders, Latte tokens present; vision QA confirms >=4.5:1 on keywords. Found by the CodeCora code-scanning gate before merge. * fix(highlight): case-insensitive SQL keywords The SQL keyword list is stored uppercase and matched with exact equality, so conventional lowercase SQL (select id from users) got zero keyword coloring. SQL now matches keywords ASCII-case-insensitively; the test previously only fed uppercase input despite its name, and now exercises both cases. Found by the CodeCora code-scanning gate. --------- Co-authored-by: ajianaz <ajianaz@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Replace all generic sample data with real-case content relevant to each template type.
Changes (148 defaults.json files)
New defaults (130 templates)
Previously the 130 batch templates had no defaults.json. Now all of them do, with realistic content:
Fixed existing defaults (18 templates)
Bug fixes
Verification