🤖 AI-Generated: This documentation was made with AI help. Feel free to edit and improve it :)
Welcome to the Shaazzz-Guide project maintenance documentation. This guide provides comprehensive instructions for contributors and maintainers on how to update and maintain the project effectively.
- Project Overview
- Project Structure
- Adding Problems to the Problem Sheet
- Creating Blog Posts
- Update Process
- Configuration Files
- Deployment
- Important Guidelines
- Contributing
- Support
The Shaazzz Guide consists of two main components that work together to create a comprehensive competitive programming resource:
- Educational Blog Posts: Detailed tutorials and explanations for various competitive programming topics
- Curated Problem Sheet: A collection of problems organized by topics and difficulty levels
Each problem in the problem sheet is automatically associated with relevant blog posts through a tag system, creating a seamless learning experience for users.
Shaazzz-Guide/
├── README.md # This documentation
├── problems.csv # Downloaded problem data (auto-generated)
├── problems.json # Processed problem data (auto-generated)
├── judges.json # Judge configurations
├── tags.json # Topic/tag configurations
├── Posts/ # Source markdown files for blog posts
│ ├── intro.md
│ ├── implementation.md
│ └── ...
├── Blog/ # MkDocs configuration and generated content
│ ├── mkdocs.yml
│ ├── docs/ # Generated documentation (auto-generated)
│ └── site/ # Built site (auto-generated)
└── scripts/ # Automation scripts
├── csv_to_json.py
├── blog_generator.py
└── ...
Problems are managed through a centralized Google Spreadsheet that ensures consistency and collaborative editing.
The problems are maintained in this Google Spreadsheet: Shaazzz Guide Problem Sheet
⚠️ Access Required: Contact one of the project administrators to request edit access to the spreadsheet.
The spreadsheet contains 5 essential columns:
| Column | Description | Guidelines |
|---|---|---|
| Judge | The platform where the problem is hosted | Use consistent naming (e.g., cf not codeforces) |
| Name | Complete problem title | Copy and paste exactly, preserving case |
| URL | Direct link to the problem | Ensure the link is accessible and permanent |
| TAG | Problem topic/category | Use existing tags when possible, separate multiple tags with | |
| Difficulty | Problem difficulty rating | Base on Codeforces rating scale (800-3500) |
🚨 CRITICAL TAGGING RULES:
-
Minimize Multiple Tags: Use single tags whenever possible. A problem should only have multiple tags if it genuinely requires multiple advanced concepts.
-
Main Topic Focus: Tag based on the primary algorithmic concept. For example:
- ✅ A segment tree problem that uses binary search for implementation → Tag:
segment_tree - ❌ Don't tag as:
segment_tree | binary_search
- ✅ A segment tree problem that uses binary search for implementation → Tag:
-
Audience Considerations: When using multiple tags for different skill levels (e.g.,
binary_search | segment_tree), ensure the problem has high difficulty to avoid confusing beginners.
- Base Scale: Use Codeforces rating system (800-3500)
- Independent Assessment: Don't rely solely on official ratings, especially for older problems
- Community Input: Discuss difficulty ratings with other contributors when possible
- Cross-Platform Consistency: Rate non-Codeforces problems as if they were Codeforces problems
All blog posts must be created in the Posts/ directory as Markdown (.md) files.
- No Title Headers: Don't include H1 or H2 headers - these are automatically generated
- Start with H3: Begin your content with level 3 headers (
###) - Markdown Support: Full Markdown syntax is supported
- Material for MkDocs: You can use Material for MkDocs features for enhanced formatting
### یک تاپیک دلخواه
یک سری توضیح
### پیادهسازی
```cpp
// کد نمونهAfter creating your blog post, update the tags.json file:
{
"Level1": {
"your_topic": {
"path": "your_topic.md",
"blog_title": "عنوان فارسی موضوع"
}
}
}Important Notes:
- The key (
your_topic) must match the tag names used in the problem sheet pathis relative to thePosts/directoryblog_titleis the Persian title displayed on the website
Before running the automation scripts, you need to clean up generated directories and download the latest problem data from the Google Spreadsheet.
First, remove the automatically generated directories that will be recreated by the scripts:
# Remove generated directories
rm -rf Blog/docs/ Blog/site/Why this is necessary:
Blog/docs/contains the generated documentation filesBlog/site/contains the built static site files- These directories must be removed to ensure clean regeneration
- The scripts will recreate these directories with updated content
Download the most recent problem data from the Google Spreadsheet as a CSV file:
# Download latest problem data
URL="https://docs.google.com/spreadsheets/d/e/2PACX-1vT4u9dg9TRV_VjxMhv4TuXOTRcKUGQz2_vt2eh2-PUn6sC6wEi9_djsKzVLMpK2R63XvIKO94TVjmmZ/pub?gid=1911820389&single=true&output=csv"
curl -Ls $URL -o "problems.csv"Important Notes:
- This command works even if you don't have direct edit access to the Google Sheet
- The URL is a public export link that provides read-only access to the data
- The
-Lflag follows redirects,-smakes it silent for cleaner output - The file will be saved as
problems.csvin the main directory - This CSV file will be processed by the
csv_to_json.pyscript in the next step
Run the automation scripts from the main directory:
# Convert CSV to JSON
python scripts/csv_to_json.py
# Generate blog content
python scripts/blog_generator.pyScript Functions:
csv_to_json.py: Converts the CSV data to a structured JSON formatblog_generator.py: Generates blog posts with embedded problems and updates the complete problem set
For administrators with push access:
cd Blog
mkdocs gh-deployFor contributors:
- Create a pull request with your changes
- Wait for administrator review and approval
Defines all supported online judges and their display properties.
Structure:
{
"judge_key": {
"name": "Display Name",
"icon": "judge-iconname",
"url": "https://judge-website.com/",
"admonition": { // Optional
"type": "warning",
"title": "Warning Title",
"content": "Warning message"
}
}
}Adding New Judges:
- Add the judge configuration to
judges.json - Create an SVG icon at
Blog/overrides/.icons/judge/iconname.svg - Use consistent naming between the problem sheet and configuration
Organizes topics by difficulty levels and maps them to blog posts.
Structure:
{
"Level1": {
"tag_name": {
"path": "filename.md",
"blog_title": "Persian Title"
}
},
"Level2": {},
...
}🚨 DO NOT MODIFY MANUALLY - This file is automatically generated by csv_to_json.py.
The project uses MkDocs with the Material theme for documentation generation and GitHub Pages for hosting.
cd Blog
mkdocs servecd Blog
mkdocs gh-deploy🚨 NEVER MODIFY the nav section in mkdocs.yml - it's automatically generated based on tags.json.
- ✅ Write posts in
Posts/directory - ❌ Never write directly in
Blog/docs/directory
Blog/docs/andBlog/site/are automatically generated- Always remove these directories before regenerating content
problems.csvandproblems.jsonare temporary/generated files
- Test locally before submitting changes
- Verify all links work correctly
- Ensure Persian text displays properly
- Check that problems are correctly associated with topics
- Fork the repository
- Create your blog posts in
Posts/(and add problems to the spreadsheet if you want) - Update
tags.jsonappropriately - Follow the update process
- Submit a pull request with a clear description
Website: guide.shaazzz.ir