惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Security Archives - TechRepublic
Security Archives - TechRepublic
罗磊的独立博客
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
Apple Machine Learning Research
Apple Machine Learning Research
The Register - Security
The Register - Security
J
Java Code Geeks
V2EX - 技术
V2EX - 技术
Vercel News
Vercel News
N
News and Events Feed by Topic
腾讯CDC
P
Proofpoint News Feed
N
News | PayPal Newsroom
www.infosecurity-magazine.com
www.infosecurity-magazine.com
爱范儿
爱范儿
O
OpenAI News
酷 壳 – CoolShell
酷 壳 – CoolShell
月光博客
月光博客
Martin Fowler
Martin Fowler
Engineering at Meta
Engineering at Meta
D
Docker
Y
Y Combinator Blog
博客园 - 聂微东
G
Google Developers Blog
S
Security @ Cisco Blogs
Simon Willison's Weblog
Simon Willison's Weblog
S
Schneier on Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
S
SegmentFault 最新的问题
云风的 BLOG
云风的 BLOG
阮一峰的网络日志
阮一峰的网络日志
C
CXSECURITY Database RSS Feed - CXSecurity.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
CERT Recently Published Vulnerability Notes
I
Intezer
G
GRAHAM CLULEY
有赞技术团队
有赞技术团队
Attack and Defense Labs
Attack and Defense Labs
V
Visual Studio Blog
博客园 - Franky
博客园 - 三生石上(FineUI控件)
W
WeLiveSecurity
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Hugging Face - Blog
Hugging Face - Blog
Scott Helme
Scott Helme
T
Troy Hunt's Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
L
LINUX DO - 最新话题
C
Cybersecurity and Infrastructure Security Agency CISA

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
I Built a Git-Tracked Book Production Pipeline
Michael Smit · 2026-05-27 · via DEV Community

I Built a Git-Tracked Book Production Pipeline

Meta Description: Discover how I built a Git-tracked book production pipeline that streamlined my entire publishing workflow — from manuscript drafts to print-ready files. Here's exactly how it works.


TL;DR

I replaced a chaotic folder full of final_FINAL_v3_REAL.docx files with a fully automated, Git-tracked book production pipeline. Using plain-text source files, version control, and automated build scripts, I now produce print-ready PDFs, ePubs, and web previews from a single command. This article walks through every component, the tools involved, and how you can replicate it for your own book projects.


Why I Needed a Better Book Production System

Anyone who has written a book — or even a long-form technical document — knows the folder graveyard problem. You start with Chapter1.docx, and six months later you're staring at Chapter1_edits_FINAL_editorNotes_USE_THIS_ONE.docx and genuinely cannot remember which version your copy editor approved.

I hit this wall while producing a technical book in early 2025. I had three collaborators, two rounds of professional editing, a layout designer working in parallel, and a publisher asking for both print and digital formats. The file management alone was consuming hours every week.

The solution I landed on — a Git-tracked book production pipeline — didn't just solve the version control problem. It transformed how I think about writing and publishing as a software engineering problem. And the results were dramatic: fewer errors, faster iteration cycles, and a reproducible output that I can rebuild from scratch at any time.

[INTERNAL_LINK: version control for writers]


What Is a Git-Tracked Book Production Pipeline?

At its core, a Git-tracked book production pipeline treats your manuscript the same way software developers treat source code:

  • Source content lives in plain-text files (Markdown, AsciiDoc, or LaTeX)
  • Version control (Git) tracks every change, who made it, and why
  • Build tools compile those source files into finished formats (PDF, ePub, MOBI, HTML)
  • Automation handles repetitive tasks like formatting, linting, and file generation

The analogy is exact: just as a developer checks in code and a CI/CD pipeline compiles and tests it, I check in manuscript changes and a build pipeline compiles a polished, formatted book.


The Full Stack: Tools I Actually Use

Here's an honest breakdown of every tool in my pipeline, including what I'd change if I were starting over.

Source Format: Markdown + Pandoc

I write in Markdown using plain .md files. Every chapter is a separate file. Frontmatter metadata (title, author, ISBN, edition) lives in a book.yaml configuration file.

Pandoc is the backbone of the entire system. It converts Markdown to virtually any output format — PDF via LaTeX, ePub, HTML, DOCX — using a single command. Pandoc is free, open source, and frankly one of the most underrated tools in the writing world.

Honest assessment: Pandoc's default output is functional but not beautiful. You'll spend real time customizing LaTeX templates for print-quality PDFs. That investment pays off, but budget a week for it.

Version Control: Git + GitHub

GitHub hosts the repository. Every collaborator works on branches. Editorial changes come in as pull requests, which means I can review a copy editor's suggestions line by line before accepting them — exactly like code review.

The .gitignore file excludes compiled outputs (PDFs, ePubs) from the repository, keeping it lean. Only source files are tracked.

Branching strategy I use:

  • main — always production-ready, tagged at each edition release
  • drafts/chapter-XX — active writing branches
  • editorial/round-1 — editor's tracked changes as a branch
  • layout/print-v1 — layout-specific adjustments

Build Automation: Make + Shell Scripts

A Makefile at the root of the project defines build targets:

pdf:
    pandoc $(CHAPTERS) -o dist/book.pdf --template=templates/print.tex

epub:
    pandoc $(CHAPTERS) -o dist/book.epub --epub-cover-image=assets/cover.jpg

html:
    pandoc $(CHAPTERS) -o dist/preview/index.html --template=templates/web.html

Enter fullscreen mode Exit fullscreen mode

Running make pdf from the terminal produces a fully formatted PDF in seconds. Running make all builds every output format simultaneously.

Why Make over a fancier tool? It's available everywhere, has no dependencies, and any collaborator can understand it in ten minutes.

Continuous Integration: GitHub Actions

Every push to main triggers a GitHub Actions workflow that:

  1. Installs Pandoc and a minimal LaTeX distribution (TeX Live)
  2. Runs the full build
  3. Uploads compiled artifacts (PDF, ePub) to a release draft
  4. Runs a custom linting script that checks for common errors

That linting script is worth highlighting. It catches things like:

  • Unclosed footnotes
  • Missing image alt text
  • Chapter cross-references pointing to nonexistent anchors
  • Inconsistent character name spellings (yes, this happens)

Typography and Layout: LaTeX Templates

For print-quality output, I maintain a custom LaTeX template based on the memoir class. This handles:

  • Chapter opening styles
  • Running headers and footers
  • Drop caps and ornamental dividers
  • Proper hyphenation and justification
  • Bleed-ready margins for print-on-demand

This is the hardest part of the pipeline to set up, but once it's done, every future book inherits it.

Spell-Check and Style Linting: Vale

Vale is a command-line prose linter that enforces style rules. I've configured it with:

  • A custom style guide (consistent terminology, preferred spellings)
  • The Microsoft Writing Style Guide rules
  • A dictionary of technical terms specific to my book's subject matter

Vale runs as part of the CI pipeline, and pull requests that introduce style violations are flagged automatically.


How the Workflow Actually Runs Day-to-Day

Here's what a typical writing session looks like:

  1. Pull latest changes from main to sync with any collaborator edits
  2. Create or switch to a chapter branch (git checkout -b drafts/chapter-07)
  3. Write in Markdown using Obsidian or VS Code with the Markdown preview extension
  4. Run make pdf locally to preview the formatted output
  5. Commit with a meaningful message (git commit -m "Chapter 7: Add section on distributed systems")
  6. Push and open a pull request — this triggers CI, which builds all formats and runs linters
  7. Merge when green — the compiled artifacts are automatically attached to the latest release draft

For editorial rounds, I export a clean DOCX from Pandoc, send it to the copy editor, and receive it back with tracked changes. I then convert those changes manually back to Markdown (or use a diff tool). It's the one part of the pipeline that isn't fully automated, and it's a known pain point.

[INTERNAL_LINK: working with copy editors on technical books]


Comparison: Traditional Workflow vs. Git-Tracked Pipeline

Feature Traditional (Word/Google Docs) Git-Tracked Pipeline
Version history Manual file naming Full commit history
Collaboration Email attachments or shared drives Pull requests, branching
Output formats Manual export, per-format Single command, all formats
Reproducibility Low (depends on local software) High (containerizable)
Linting/QA Manual proofreading only Automated style + structure checks
Learning curve Low Medium-High
Cost Low to moderate Low (mostly free tools)
Recovery from errors Difficult git revert or git checkout

The Biggest Wins (And Honest Limitations)

What Worked Exceptionally Well

Reproducibility. Three months after finishing the first edition, my publisher asked for a corrected reprint with 12 specific changes. I made the edits, ran make pdf, and had a corrected print-ready file in 20 minutes. With a traditional workflow, that would have meant re-opening InDesign files, re-checking styles, and manually re-exporting.

Collaboration transparency. Every change has an author, a timestamp, and a commit message. When my technical reviewer suggested restructuring Chapter 4, I could see exactly what they changed and why — and revert it if needed.

Multi-format output. The same source files produce the print PDF, the ePub for digital retailers, and an HTML preview site. There's no manual reformatting between formats.

Honest Limitations

The learning curve is real. If you're not comfortable with the command line, Git, and at least basic LaTeX, this pipeline will feel overwhelming at first. I'd estimate 20-40 hours of setup time before it feels natural.

Rich media is harder. Complex layouts — sidebars, callout boxes, two-column layouts — require custom LaTeX or CSS work. Pandoc handles linear prose beautifully but struggles with magazine-style layouts.

Collaborator buy-in. Getting a non-technical editor or co-author to use Git is a significant ask. I've solved this partly by keeping the editorial round as a DOCX exchange, but it's a genuine friction point.

[INTERNAL_LINK: teaching non-technical collaborators to use Git]


Getting Started: Your First Git-Tracked Manuscript

If you want to replicate this pipeline, here's a practical starting point:

Minimum Viable Setup (Weekend Project)

  1. Install Git and create a GitHub account (free)
  2. Install Pandoc (free, available for all platforms)
  3. Create a repository with a /chapters folder and a book.yaml
  4. Write one chapter in Markdown
  5. Write a 5-line Makefile that runs pandoc chapters/*.md -o book.pdf
  6. Commit and push

That's it. You now have a version-controlled manuscript that produces a PDF on demand. Everything else — CI, linting, custom templates — is an incremental improvement you can add over time.

Recommended Learning Resources

  • Pro Git Book — free, comprehensive, the definitive Git reference
  • Pandoc Documentation — dense but thorough
  • The memoir LaTeX class documentation (search CTAN) — essential for print layout

Key Takeaways

  • A Git-tracked book production pipeline treats your manuscript as source code — versioned, automated, and reproducible
  • Pandoc + Git + Make is a powerful free stack that handles most book production needs
  • GitHub Actions enables automated builds and linting on every commit
  • The biggest ROI comes from reproducibility: you can rebuild any version of your book from any point in history
  • The biggest challenge is the learning curve and collaborator friction — plan for it
  • Start small: even a basic Pandoc + Git setup is dramatically better than manual file management
  • Custom LaTeX templates are the hardest part but unlock professional print-quality output

Ready to Build Your Own Pipeline?

If you're writing a book — technical or otherwise — and you're tired of file chaos and manual formatting, I'd genuinely recommend investing the time to set this up. The upfront cost is real, but every subsequent book benefits from the infrastructure you've already built.

Start this weekend: Install Pandoc, create a GitHub repository, and write your first chapter in Markdown. Run pandoc chapter1.md -o chapter1.pdf and see your formatted output in seconds. That small win will make the rest of the pipeline feel worth building.

Have questions about a specific part of this setup? Drop them in the comments — I read every one and respond to technical questions directly.

[INTERNAL_LINK: book production tools comparison 2026]


Frequently Asked Questions

Q: Do I need to know how to code to use this pipeline?
Not exactly, but you need to be comfortable with the command line, basic Git operations, and editing text configuration files. If you can follow a tutorial and aren't afraid of a terminal window, you can build this. Coding experience helps for customizing LaTeX templates and writing linting scripts, but it's not a hard requirement for the core workflow.

Q: Can I use AsciiDoc or LaTeX instead of Markdown as my source format?
Absolutely. AsciiDoc (processed by Asciidoctor) is arguably better suited for technical books with complex cross-references, admonitions, and code blocks. LaTeX gives you the most control but has the steepest learning curve. Markdown with Pandoc extensions is the easiest entry point, which is why I recommend it for most people starting out.

Q: How do you handle images and figures in the pipeline?
Images live in an /assets folder in the repository. I reference them in Markdown with standard syntax, and Pandoc resolves the paths during the build. For print, I keep source images at 300 DPI minimum. SVG files work well because they scale cleanly to any output format. Large image files can bloat the repository — I use Git LFS (Large File Storage) for anything over 1 MB.

Q: What about working with a traditional publisher who expects DOCX or InDesign files?
This is a real tension. Pandoc can export clean DOCX files that most editors can work with. For InDesign, the workflow is more complex — some publishers accept ICML (InCopy Markup Language), which Pandoc can generate. In practice, I maintain the Git pipeline internally and export to whatever format my publisher requires at submission milestones. The source of truth is always the Git repository.

Q: Is this pipeline suitable for fiction books, or is it mainly for technical writing?
It works well for both, though the tooling emphasis differs. Fiction writers typically need less of the technical apparatus (code block formatting, cross-references, complex figures) and more attention to typography and chapter styling. The core Git + Pandoc + Make stack is format-agnostic. Several novelists I know use exactly this approach, with a simpler LaTeX template focused on clean prose presentation rather than technical layout features.