The Problem
I was approached by a technology company specializing in training and certification software to help them create a content build system for their product. Their web application uses a standardized XML format called DITA (Darwin Information Typing Architecture), as well as leveraging a custom markup language to generate dynamic content.
Their goal was to publish a web accessible content preview, both for topics, images, and test items, before submitting the content for final use within the web application. This content preview would allow content developers to iterate on content without requiring in-house software developer support.
Key Criteria for Success
- Easy to Use and Support: The system must be easy to use by content developers and support by IT staff.
- Input Processing: Handles DITA maps, DITA files, XML files, and custom markup language files.
- Automated Builds: Supports nightly builds of the entire site and ad-hoc builds triggered by Git pushes.
- Interactive Preview: Provides a clean, searchable interface with preview of custom markup language and support for interactive elements like accordions.
- Modular Transformation: Allows for individual file processing and full DITA map builds.
- Performance: Aims for quick rebuild times (< 1 minute for individual files, < 10 minutes for the entire site).
- Security: Implements access control for internal and external users.
The Solution
I developed an end-to-end solution using modular Python scripts, a Dockerized Bottle.py API server, and Jenkins jobs for building and deploying the static site. In addition, I created a custom vanilla Javascript library to power interactive elements like accordions and communication with the backend API to trigger builds and check build status.
Workflow
- Content developers edit files in their current tools, OWA/Oxygen.
- Changes are pushed to the Git repository.
- Content developers trigger builds for affected files or the entire site.
- The system processes the input, generating static HTML/CSS/JS files.
- Processed content is deployed to a web server for preview.