A static site generator for DataTalks.Club course FAQs with automated AI-powered FAQ maintenance.
- Static Site Generation: Converts markdown FAQs to a beautiful, searchable HTML site
- Automated FAQ Management: AI-powered bot that processes new FAQ proposals
- Intelligent Triage: Automatically determines if proposals should create new entries, update existing ones, or are duplicates
- GitHub Integration: Seamless workflow via GitHub Issues and Pull Requests
faq/
├── _questions/ # FAQ content organized by course
│ ├── machine-learning-zoomcamp/
│ │ ├── _metadata.yaml # Course configuration
│ │ ├── general/ # General course questions
│ │ ├── module-1/ # Module-specific questions
│ │ └── ...
│ ├── data-engineering-zoomcamp/
│ └── ...
├── _layouts/ # Jinja2 HTML templates
│ ├── base.html
│ ├── course.html
│ └── index.html
├── assets/ # CSS and static assets
├── faq_automation/ # FAQ automation module
│ ├── core.py # Core FAQ processing functions
│ ├── rag_agent.py # AI-powered decision agent
│ ├── actions.py # GitHub Actions integration
│ └── cli.py # Command-line interface
├── tests/ # Test suite
├── generate_website.py # Main site generator
└── Makefile # Build commands
See CONTRIBUTING.md for detailed instructions.
# Install dependencies
uv sync --devFor testing the FAQ automation locally, you'll need to set your OpenAI API key:
export OPENAI_API_KEY='your-api-key-here'Or add it to your shell configuration file (e.g., ~/.bashrc, ~/.zshrc).
To test the FAQ automation locally, create a test_issue.txt file:
cat > test_issue.txt << 'EOF'
### Course
machine-learning-zoomcamp
### Question
How do I check my Python version?
### Answer
Run `python --version` in your terminal.
EOFThen process the FAQ proposal:
uv run python -m faq_automation.cli \
--issue-body "$(cat test_issue.txt)" \
--issue-number 42# Generate static website
make website
# Run all tests
make test
# Run unit tests only
make test-unit
# Run integration tests only
make test-intSee testing documentation for detailed information about the test suite, including how to run specific test files or methods, test coverage details, and guidelines for adding new tests.
-
Collection (
collect_questions()):- Reads all markdown files from
_questions/ - Parses YAML frontmatter
- Loads course metadata for section ordering
- Reads all markdown files from
-
Processing (
process_markdown()):- Converts markdown to HTML
- Applies syntax highlighting (Pygments)
- Auto-links plain text URLs
- Handles image placeholders
-
Sorting (
sort_sections_and_questions()):- Orders sections per
_metadata.yaml - Sorts questions by
sort_orderfield
- Orders sections per
-
Rendering (
generate_site()):- Applies Jinja2 templates
- Generates course pages and index
- Copies assets to
_site/