A simple, flexible documentation system for internal use. Write documents in Markdown, organize them with JSON, get a beautiful website.
# Install required Python packages
pip install markdown pygments
# Put .md files in the assets folder
assets/
001.md β Your first document
002.md β Your second document
010.md β Another document
Edit config.json to list your documents:
{
"categories": [
{
"name": "Getting Started",
"items": [
{
"type": "document",
"file": "001.md",
"title": "Introduction",
"order": 1
}
]
}
]
}
# Windows
build_site.bat
# Or manually
python build_site.py
Open index.html in your browser!
your-docs/
βββ index.html β Generated home page
βββ config.json β Your table of contents
βββ build_site.py β Site builder
βββ build_site.bat β Windows helper
βββ md_to_html.py β Markdown converter
βββ convert_md.vbs β Drag & drop converter
βββ assets/ β All your .md files here
β βββ 001.md
β βββ 002.md
β βββ ...
βββ README.md β This file
This is the brain of your documentation system.
{
"site": {
"title": "Your Documentation Title",
"subtitle": "Optional subtitle",
"homeUrl": "index.html"
},
"categories": [
{
"id": "unique-id",
"name": "Category Name",
"description": "What this category contains",
"project_number": "PRJ-2024-001",
"items": [...]
}
]
}
{
"type": "document",
"file": "001.md",
"title": "Document Title",
"subtitle": "Short description",
"date": "2026-02-02",
"order": 1,
"hidden": false,
"note": "Internal note (not displayed)"
}
Fields:
- file - Filename in assets folder (required)
- title - Display title (required)
- subtitle - Short description (optional)
- date - Document date (optional)
- order - Sort order within category (optional)
- hidden - Hide from index (soft-delete, optional)
- note - Internal comment (optional)
{
"type": "chapter",
"name": "Chapter Name",
"order": 1,
"items": [
{
"type": "document",
"file": "010.md",
"title": "Sub-document",
"order": 1
}
]
}
Create the .md file:
bash
assets/050.md
Write in Markdown:
```markdown
# My New Document
## Introduction
Content here...
```
Add to config.json:
json
{
"type": "document",
"file": "050.md",
"title": "My New Document",
"order": 5
}
Rebuild:
bash
build_site.bat
Done!
Don't delete the file or config entry. Just set hidden: true:
{
"type": "document",
"file": "098.md",
"title": "Old Method",
"hidden": true,
"note": "Deprecated - kept for reference"
}
The file stays in assets/, but won't appear in the index.
Just change the order values:
{
"file": "001.md",
"order": 5 β Changed from 1
}
No need to rename or move files!
Add a new category object:
{
"id": "new-category",
"name": "New Category",
"description": "Description here",
"items": [...]
}
Think of filenames as post box numbers:
- 001.md = permanent address
- 099.md = another permanent address
- Numbers don't need to be sequential
Don't: Rename files when reordering
Do: Change order in config.json
build_site.batindex.htmlassets/ folder (with all .html files)config.json (optional, for future rebuilds)Upload:
- config.json
- build_site.py
- md_to_html.py
- assets/*.md files
Run on server:
bash
python build_site.py
Install Python 3.6+ from python.org
pip install markdown pygments
Check:
- File exists in assets/ folder
- Filename matches config.json
- hidden is not set to true
- Rebuild with build_site.bat
Rebuild the site - nav bar is added during build
Make sure you're using the updated md_to_html.py with responsive CSS
{
"project_number": "PRJ-2024-001",
"items": [...]
}
Shows in category header.
{
"type": "chapter",
"name": "Main Topic",
"items": [
{
"type": "chapter",
"name": "Subtopic",
"items": [
{"type": "document", "file": "..."}
]
}
]
}
Go as deep as needed.
Just reference it multiple times:
// Category 1
{"file": "050.md", "title": "Important Doc"}
// Category 2
{"file": "050.md", "title": "Important Doc"}
File stored once, appears twice.
Possible additions:
- PDF download buttons
- Logo and branding
- Search functionality
- Dark mode
- Version history
But remember: Keep it simple! Only add what you actually need.
For questions or issues:
1. Check this README
2. Review the example config.json
3. Look at the two sample documents (001.md, 002.md)
Created: February 2, 2026
System: Markdown Documentation Generator
Version: 1.0