This document provides technical details about the repository structure, automated systems, and processes that power Awesome Claude Code.
THE_RESOURCES_TABLE.csv- The single source of truth for all resourcesREADME.md- Generated automatically from the CSV and templatestemplates/- Contains templates for README generationREADME.template.md- Main template structurecategories.yaml- Single source of truth for all categoriesresource-overrides.yaml- Manual overrides for specific resources
The scripts/ directory contains all automation:
parse_issue_form.py- Parses GitHub issue form submissionscreate_resource_pr.py- Creates PRs from approved submissionsgenerate_readme.py- Generates README from CSV datavalidate_single_resource.py- Validates individual resourcesvalidate_links.py- Bulk validation of all resourcesbadge_issue_notification.py- Creates notification issues on featured reposquick_id.py- Generates unique resource IDs
Located in .github/workflows/:
validate-resource-submission.yml- Runs on issue creation/editapprove-resource-submission.yml- Runs on maintainer commandsprotect-labels.yml- Prevents unauthorized label changesvalidate-links.yml- Scheduled validation of all resource links- Additional workflows for CI/CD and maintenance
The submission system uses several labels to track issue state:
resource-submission- Applied automatically to issues created via the submission formvalidation-passed- Applied when submission passes all validation checksvalidation-failed- Applied when submission fails validationapproved- Applied when maintainer approves submission with/approvepr-created- Applied after PR is successfully createderror-creating-pr- Applied if PR creation failsrejected- Applied when maintainer rejects with/rejectchanges-requested- Applied when maintainer requests changes with/request-changes
broken-links- Applied by scheduled link validation when resources become unavailableautomated- Applied alongsidebroken-linksto indicate automated detection
All submission-related labels are protected from unauthorized changes. The protect-labels.yml workflow automatically reverts any label changes made by non-maintainers (users without OWNER, MEMBER, or COLLABORATOR permissions).
- New submission →
resource-submission - After validation → adds
validation-passedORvalidation-failed - If changes requested → adds
changes-requested - When user edits and validation passes → removes
changes-requested - On approval → adds
approved+pr-created(orerror-creating-pr) - On rejection → adds
rejected
When a user submits a resource via the issue form:
# .github/ISSUE_TEMPLATE/submit-resource.yml
- Structured form with all required fields
- Auto-labels with "resource-submission"
- Validates input formatsThe validation workflow triggers immediately:
# Simplified validation flow
1. Parse issue body → extract form data
2. Validate required fields
3. Check URL accessibility
4. Verify no duplicates exist
5. Post results as comment
6. Update issue labelsValidation includes:
- URL validation (200 OK response)
- License detection from GitHub API
- Duplicate checking against existing CSV
- Field format validation
Once validation passes, maintainers can:
/approve- Triggers PR creation/request-changes [reason]- Asks for modifications/reject [reason]- Closes the submission
Notification System:
- When changes are requested, the maintainer is @-mentioned in the comment
- When the user edits their issue, the maintainer receives a notification if:
- It's the first edit after requesting changes
- The validation status changes (pass→fail or fail→pass)
- Multiple rapid edits won't spam the maintainer with notifications
Upon approval:
1. Checkout fresh main branch
2. Create unique branch: add-resource/category/name-timestamp
3. Add resource to CSV with generated ID
4. Run generate_readme.py
5. Commit changes
6. Push branch
7. Create PR via GitHub CLI
8. Link back to original issue
9. Close submission issue- Maintainer merges PR
- Badge notification system runs (if enabled)
- Submitter receives GitHub notifications
IDs follow the format: {prefix}-{hash}
prefixes = {
"Agent Skills": "skill",
"Slash-Commands": "cmd",
"Workflows & Knowledge Guides": "wf",
"Tooling": "tool",
"CLAUDE.md Files": "claude",
"Hooks": "hook",
"Official Documentation": "doc",
}
# Hash is first 8 chars of SHA256(display_name + primary_link)| Field | Description | Required | Auto-populated |
|---|---|---|---|
| ID | Unique identifier | Yes | Yes |
| Display Name | Resource name | Yes | No |
| Category | Main category | Yes | No |
| Sub-Category | Optional subcategory | No | No |
| Primary Link | Main URL | Yes | No |
| Secondary Link | Additional URL | No | No |
| Author Name | Creator name | Yes | No |
| Author Link | Creator profile | Yes | No |
| Active | TRUE/FALSE status | Yes | Yes (via validation) |
| Date Added | Addition date | No | Yes |
| Last Modified | GitHub last commit | No | Yes (from API) |
| Last Checked | Validation timestamp | Yes | Yes |
| License | SPDX identifier | Recommended | Yes (from GitHub) |
| Description | Brief description | Yes | No |
The README is generated from templates using:
# templates/categories.yaml
categories:
- id: workflows
name: "Workflows & Knowledge Guides"
prefix: wf
icon: "🧠"
order: 1
- id: statusline
name: "Status Lines"
prefix: status
icon: "📊"
order: 3Generation process:
- Load CSV data
- Apply any overrides from
resource-overrides.yaml - Group by category/subcategory
- Format using templates
- Write final README
The generated README uses HTML <details> elements for improved navigation:
- Categories without subcategories: Wrapped in
<details open>(fully collapsible) - Categories with subcategories: Regular headers (subcategories are collapsible)
- All subcategories: Wrapped in
<details open>elements - Table of Contents: Collapsible with nested sections for categories with subcategories
- All collapsible sections are open by default for easy browsing
Design Note: Initially attempted to make all categories collapsible with nested subcategories, but this caused anchor link navigation issues - links from the Table of Contents couldn't reach subcategories when their parent category was collapsed. The current design balances navigation functionality with collapsibility.
Each GitHub resource in the README automatically includes a collapsible statistics section:
- Automatic Detection: The
parse_github_urlfunction fromvalidate_links.pyidentifies GitHub repositories - Stats Display: Uses the GitHub Stats API to generate an SVG badge with repository metrics
- Collapsible Design: Stats are hidden by default in a
<details>element to keep the main list clean - Universal Support: Works with all GitHub URL formats (repository root, blob URLs, tree URLs, etc.)
- API Endpoint:
https://github-readme-stats-plus-theta.vercel.app/api/pin/?repo=REPO&username=USER&all_stats=true&stats_only=true
Example output for a GitHub resource:
[`resource-name`](https://github.com/owner/repo)
Description of the resource
<details>
<summary>📊 GitHub Stats</summary>
<br>

</details>Announcements are stored in templates/announcements.yaml:
- YAML format for structured data
- Renders as nested collapsible sections
- Each date group is collapsible
- Individual items can be simple text or collapsible with summary/text
- Falls back to
.mdfile if YAML doesn't exist
- Checks HTTP status (200-299 = valid)
- Handles redirects
- Respects rate limits
- Caches results for efficiency
For GitHub links:
- Fetches repository metadata
- Extracts license information
- Gets last commit date
- Checks if repository exists/is public
The templates/resource-overrides.yaml allows:
- Locking specific fields from updates
- Skipping validation for special cases
- Manual corrections to auto-detected data
- Input Validation - All user input is sanitized
- URL Validation - Only HTTPS URLs accepted
- GitHub Token Scoping - Minimal permissions required
- Review Process - Human review before code changes
- Automated Checks - No direct CSV manipulation by users
GITHUB_TOKEN- For API access (provided by Actions)AWESOME_CC_PAT_PUBLIC_REPO- For creating notification issuesCREATE_ISSUES- Enable/disable notification system
To test locally:
# Install dependencies
pip install -r requirements.txt
# Test validation
python scripts/validate_single_resource.py "https://example.com"
# Generate README
python scripts/generate_readme.py
# Parse a test issue
ISSUE_BODY="..." python scripts/parse_issue_form.py --validate- Monitor validation failures
- Update templates as needed
- Review and merge PRs
- Handle edge cases with overrides
# Validate all links
make validate
# Sort resources
make sort
# Regenerate README
make generateTo improve the automation:
- Test changes locally first
- Update relevant documentation
- Consider backward compatibility
- Add tests if applicable
- Submit PR with clear description
For questions about the technical implementation, please open an issue with the "enhancement" label.