A dynamic static web app that automatically discovers and categorizes GitHub Pages deployments across multiple users and organizations. This centralized index organizes your web apps, Terraform modules, and documentation sites into a beautiful, searchable interface.
- Automatic Discovery: Uses GitHub API to find repositories with GitHub Pages enabled
- Scheduled Updates: GitHub Action runs every 6 hours to update repository data
- Smart Categorization: Automatically categorizes repositories into:
- π Web Applications
- ποΈ Terraform Modules
- π Documentation & Tools
- Configurable Sources: Easy-to-edit configuration file for users and organizations
- Repository Exclusions: Flexible filtering to exclude specific repositories or patterns
- Dark Mode Support: Respects system preferences with manual toggle
- Search & Filter: Find repositories quickly with real-time search
- Responsive Design: Works perfectly on desktop and mobile
- Fast Loading: Pre-generated data eliminates API rate limits and improves performance
- Modern UI: Clean, professional interface with smooth animations
Visit the live site: https://jajera.github.io/gitprofile/
The app uses a centralized configuration file to define sources and filtering rules:
{
"sources": {
"users": ["jajera"],
"organizations": ["tfstack", "jajera"]
},
"filters": {
"includePatterns": [
"has_pages",
"terraform-*",
"topic:terraform-module"
],
"excludeRepositories": [
"gitprofile",
".github",
"private-repo-example"
],
"excludePatterns": [
"archive-*",
"backup-*",
"test-*"
]
},
"categorization": {
"webApps": {
"topics": ["web-app", "webapp", "pwa", "react", "vue", "angular"],
"keywords": ["app", "tool", "converter", "generator", "calculator"]
},
"terraformModules": {
"namePrefix": "terraform-",
"topics": ["terraform-module", "terraform", "infrastructure"]
}
},
"settings": {
"rateLimitDelay": 1000,
"updateSchedule": "0 */6 * * *"
}
}users: Array of GitHub usernames to scanorganizations: Array of GitHub organization names to scan
includePatterns: Patterns that determine which repositories to includehas_pages: Include repositories with GitHub Pages enabledterraform-*: Include repositories starting with "terraform-"topic:terraform-module: Include repositories with specific topics
excludeRepositories: Exact repository names to excludeexcludePatterns: Wildcard patterns for repository names to exclude
webApps: Criteria for identifying web applicationsterraformModules: Criteria for identifying Terraform modulesdocumentation: Criteria for identifying documentation sites
The repository data is automatically updated via GitHub Actions:
- Every 6 hours: Automatic updates via cron schedule
- Manual trigger: Can be triggered manually from GitHub Actions tab
- Config changes: Automatically runs when
config.jsonis modified
- GitHub Action reads
config.json - Fetches repository data from GitHub API (authenticated)
- Applies filtering and categorization rules
- Generates
docs/repositories.jsonwith processed data - Commits updated data back to repository
- GitHub Pages automatically rebuilds and deploys
- No rate limits: Pre-generated data eliminates client-side API calls
- Fast loading: Static JSON file loads instantly
- Always current: Regular updates ensure fresh data
- Reliable: Server-side processing with proper error handling
-
Clone the repository:
git clone https://github.com/jajera/gitprofile.git cd gitprofile -
Install dependencies:
npm install
-
Start the web server:
npm start
-
Open in browser:
http://localhost:3000
You can run the repository update script locally for development and testing:
-
Set up GitHub token (optional but recommended):
export GITHUB_TOKEN=your_github_token_here -
Run the update script:
# Update repository data npm run update # Or with token inline GITHUB_TOKEN=your_token npm run update:dev
-
Test your changes:
- Modify
config.jsonto test filtering/categorization - Run the update script to see the results
- Check the generated
docs/repositories.jsonfile - Refresh the web app to see changes
- Modify
npm start- Start the web servernpm run serve- Alternative server commandnpm run dev- Start in development modenpm run update- Update repository data locallynpm run update:dev- Update with GitHub token from environment
- Make configuration changes in
config.json - Test locally with
npm run update - Verify results in
docs/repositories.json - Test the web app with
npm start - Commit changes to trigger automatic deployment
The app includes repositories that meet any of these criteria:
- Has GitHub Pages enabled (
has_pages: true) - Name starts with
terraform-(Terraform modules) - Has
terraform-moduletopic/tag - Matches custom include patterns in config
- Has GitHub Pages enabled
- Contains web app topics:
web-app,webapp,pwa,react,vue,angular,javascript,typescript - Name or description contains app keywords:
app,tool,converter,generator,calculator,game
- Name starts with
terraform- - Has
terraform-moduletopic
- Has GitHub Pages enabled
- Doesn't match web app or Terraform module criteria
To manually trigger a repository data update:
- Go to the Actions tab in your GitHub repository
- Click on "Update Repository Data" workflow
- Click "Run workflow" button
- Wait for the action to complete
# Update repository data locally
npm run update
# Or with authentication
GITHUB_TOKEN=your_token npm run update:devβββ docs/
β βββ index.html # Main HTML file
β βββ styles.css # CSS with dark mode support
β βββ app.js # Client-side application logic
β βββ repositories.json # Generated repository data
βββ scripts/
β βββ update-repositories.js # Repository update script
β βββ package.json # Script dependencies
β βββ README.md # Script documentation
βββ .github/
β βββ workflows/
β βββ pages.yml # GitHub Pages deployment
β βββ update-repositories.yml # Repository data update
βββ config.json # Configuration file
βββ package.json # Project configuration
βββ README.md # This file
The app supports dark mode with:
- System Preference: Automatically detects system preference
- Manual Toggle: Sun/moon button in header
- Persistent: Remembers your choice in localStorage
- Frontend: Vanilla HTML, CSS, JavaScript
- Styling: CSS Custom Properties (CSS Variables)
- API: GitHub REST API (server-side)
- Automation: GitHub Actions
- Deployment: GitHub Pages
- Configuration: JSON
- Runtime: Node.js (for update script)
- Scheduled updates every 6 hours
- Authenticated API access for higher rate limits
- Automatic deployment on data changes
- Manual trigger support
- Standalone update script
- NPM scripts for easy execution
- Environment variable support
- Detailed logging and error handling
- Include/exclude specific repositories
- Pattern-based filtering (wildcards)
- Topic-based categorization
- Flexible configuration
- Pre-generated static data
- No client-side API calls
- Intelligent caching
- Fast loading times
The generated repositories.json includes:
- Repository metadata (name, description, topics, etc.)
- Categorization information
- GitHub Pages URLs
- Statistics and counts
- Last updated timestamp
- GitHub token automatically provided by Actions
- No sensitive data in client-side code
- Proper API rate limiting
- Secure token handling
- Fork the repository
- Create a feature branch
- Make your changes
- Update
config.jsonif needed - Test locally with
npm run update - Test the web app with
npm start - Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
Note: Repository data is automatically updated every 6 hours via GitHub Actions. For local development, use npm run update to refresh the data manually.