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 = {
"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: "Statusline"
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
- 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.