A single-source documentation pipeline for generating CVs, websites, and architecture documentation — fully reproducible and CI-ready.
Maintaining a personal profile across multiple platforms is painful and error-prone.
This project solves that by using a single source of truth...
- Documentation as Code in practice
- Reproducible builds across environments
- Separation of content and presentation
- Automated personal branding pipeline
- 📚 Generate HTML, PDF, and Markdown from AsciiDoc
- 🔁 Multi-step pipeline (Asciidoctor → DocBook → Pandoc)
- 🧩 Modular Gradle build (custom tasks, reusable config)
- 🐳 Fully containerized build environment
- ⚙️ Works locally and in GitHub Actions
- 🎯 Deterministic builds (no “works on my machine”)
graph TD
A[AsciiDoc] --> B[Asciidoctor]
B --> C[HTML / PDF]
A --> D[DocBook]
D --> E[Pandoc]
E --> F[Markdown]
Additional steps:
- Asset processing (fonts, images, icons)
- Cleanup / housekeeping
- CI/CD deployment
Available tasks:
- buildSite
- buildReadme
- buildCVPersonal
- buildArchitecture
./build.sh <task>./gradlew <task>| Target | Output |
|---|---|
| README | build/readme/README.md |
| README | build/readme/README.html |
| Website | build/site/index.html |
| CV (HTML) | build/site/cv.html |
| CV (PDF) | build/site/cv/cv.pdf |
| Personal PDF | build/cv/ |
| Architecture documentation | build/architecture/ |
This project uses the docker image ghcr.io/dieterbaier/docs-toolbox to have all necessary tools available.
- Java 17+
- Pandoc
- Graphviz
The build is implemented using Gradle:
- Custom tasks (e.g. Pandoc integration)
- Asset pipeline (Copy tasks)
- Cleanup (Delete tasks)
- Environment checks
src-content/
docs/ # Architecture documentation
profile/ # Personal profile sources
cv/
readme/
site/
theme/
includes/
build/ # Destination for the generated target artifacts
This project started with a simple problem:
Maintaining a personal profile across multiple platforms is painful and error-prone.
- GitHub personal README
- GitLab personal README
- Personal website
- CV as HTML
- CV as PDF
- Tailored CVs for project applications
All of these share the same core information — but differ in format, level of detail, and audience.
Maintain one single source of truth and generate multiple tailored outputs.
-
Write everything in AsciiDoc
-
Use a build pipeline to generate:
- Website
- Public CV
- Private CV (with personal data)
- README files
-
Inject environment-specific data (e.g. contact details; check
.env-exampleto get an idea what personal information can be injected via the environment; if you rename.env-exampleto.envand insert your personal info,./build.sh buildCVPersonalwill inject these values into thebuild/cv/cv.pdf) only when needed
- No duplication
- No inconsistencies
- Fully automated publishing
- Reproducible builds across environments
This project is both:
- a real-world solution for personal branding
- and a technical exploration of documentation as code
- Link validation
- Build verification tests
- Improved theming
- Multi-tenant site generation
- Website: https://dieterbaier.eu
- Architecture: https://dieterbaier.github.io/profile
This repository is a combination of open-source code and proprietary content.
Licensed under the MIT License.
You are free to:
- use, modify, and distribute the code
- reuse the project structure and tooling
The content in the following directories is not open source:
src-content
This includes:
- personal profile information
- architectural documentation
- written texts and descriptions
👉 This content is proprietary and may not be reused, modified, or redistributed without explicit permission.
| Part | License |
|---|---|
| Code & build tooling | MIT |
| Project structure | MIT |
| Personal content | All rights reserved |
For details see: