← Blog
Writing · 2026-07-13 · 6 min

Open templates — a marketplace of resumes.

temploracraft is opening a public repo for community-designed resume templates. Design in the canvas, publish via GitHub, land in the gallery on the next redeploy.

Why open

Every resume tool ends up with the same trade-off: keep the templates in-house and they stay consistent but boring, or open them up and lose control of quality. Most tools pick the first, so the good layouts sit behind a paywall and the free tier looks like a Google Docs starter.

temploracraft picks the second, but leans on GitHub as the marketplace. Every template is a JSON file in a public repo (vineethpawar/temploracraft-templates), MIT-licensed, attributed to its author. If you want to fork one, tweak the accent color, and ship your own version — that's the whole point.

The loop

  1. Open the canvas author tool. It's public. No signin to design.
  2. Drop Text, Placeholder, and Section nodes onto an 816×1056 US-Letter page. Placeholders like {{firstName}} bind to fields on the app's canonical ResumeData type — pick from Google Fonts, tune typography, group things into Sections.
  3. Sections with a Repeats over value (like experience) become Repeaters on export — they render once per item in the bound array.
  4. Hit Publish. Sign in with GitHub. The app forks the templates repo, commits template.json + README.md + preview.png, and opens the PR from your GitHub account.
  5. CI schema-validates. A maintainer reviews + merges. Your template appears in the gallery on the next redeploy.

What's inside a template.json

Every template is a tree of nodes rendered onto a fixed-size page. Two consumers of the same file: the browser preview (React) and the PDF exporter (@react-pdf/renderer). Same schema, same output.

{
  "version": 1,
  "domain": "resume",
  "slug": "modern",
  "name": "Modern",
  "author": { "name": "Vineeth Pawar", "githubUsername": "vineethpawar" },
  "license": "MIT",
  "page": { "width": 816, "height": 1056 },
  "fonts": [ ... ],
  "root": {
    "type": "section",
    "layout": "absolute",
    "children": [
      { "type": "placeholder-text", "bind": "fullName", "style": {…} },
      { "type": "repeater", "bind": "experience", "template": {…} }
    ]
  }
}

Full type definitions in the marketplace repo. TypeScript + Zod, so the same schema validates PRs in CI and gates the runtime loader.

What ships today

  • Author canvas at /author/resume/new — Konva, undo/redo, layer tree, properties panel, add-menu, drag-to-move, keyboard shortcuts (⌘Z, ⌘D, Del).
  • 12 fonts — Inter, Manrope, Playfair Display, IBM Plex Sans/Serif, Merriweather, Poppins, Lora, Space Grotesk, DM Serif Display, JetBrains Mono, plus system Helvetica + Georgia.
  • Publish — Clerk GitHub OAuth for one-click PR; fallbacks for anyone who prefers manual (GitHub file editor, or a plain download).
  • Marketplace at temploracraft.com/templates with per-template detail pages, live thumbnails from raw.githubusercontent.com, and a "Fork in the canvas" button.
  • ATS-friendly PDF export. Same TemplateDoc drives the preview + the vector PDF via @react-pdf/renderer. Text stays selectable.

What's coming

  • Paid templates (phase 2) — Stripe Connect for revenue share to authors. The author field already carries the attribution.
  • Wedding, birthday, portfolio — same canvas, different data schema. The domain field on TemplateDoc is the switch.
  • Hosted portfolios at yourname.temploracraft.com — the "portfolio" domain outputs a hosted subdomain instead of a PDF.

Ship something

If you've got 20 minutes and an opinion about how a résumé should look, the canvas is right here. Every merged template ships with your GitHub handle attached.