{"id":29875953,"url":"https://github.com/defremont/gitfolio","last_synced_at":"2026-05-08T04:03:15.791Z","repository":{"id":305091980,"uuid":"1021882017","full_name":"defremont/Gitfolio","owner":"defremont","description":"A powerful, modular Python application that analyzes your GitHub and GitLab repositories to generate comprehensive portfolio summaries using multiple AI providers. Built with clean architecture principles for maintainability and extensibility.","archived":false,"fork":false,"pushed_at":"2025-07-18T20:45:26.000Z","size":164,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-18T23:31:57.064Z","etag":null,"topics":["ai","api","artificial-intelligence","github","gitlab","portfolio","projects","resume","summary"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/defremont.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-18T05:19:25.000Z","updated_at":"2025-07-18T20:45:30.000Z","dependencies_parsed_at":"2025-07-18T23:31:58.995Z","dependency_job_id":null,"html_url":"https://github.com/defremont/Gitfolio","commit_stats":null,"previous_names":["defremont/gitget","defremont/gitfolio"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/defremont/Gitfolio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defremont%2FGitfolio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defremont%2FGitfolio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defremont%2FGitfolio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defremont%2FGitfolio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/defremont","download_url":"https://codeload.github.com/defremont/Gitfolio/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defremont%2FGitfolio/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267979247,"owners_count":24175272,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-31T02:00:08.723Z","response_time":66,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","api","artificial-intelligence","github","gitlab","portfolio","projects","resume","summary"],"created_at":"2025-07-31T03:00:38.728Z","updated_at":"2026-05-08T04:03:15.783Z","avatar_url":"https://github.com/defremont.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Portfolio Generator\n\n[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)\n[![Python](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)\n[![Version](https://img.shields.io/badge/version-2.0.0-green.svg)](https://github.com/yourusername/portfolio-generator/releases)\n[![Build Status](https://img.shields.io/badge/build-passing-brightgreen.svg)](https://github.com/yourusername/portfolio-generator/actions)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)\n\nA powerful, modular Python application that analyzes your GitHub and GitLab repositories to generate comprehensive portfolio summaries using multiple AI providers. Built with clean architecture principles for maintainability and extensibility.\n\n🌟 **NEW in v2.0.0**: Complete architectural refactor with modular design, improved error handling, and professional CLI interface!\n\n## 🚀 Quick Start\n\n```bash\n# Install dependencies\npip install -r requirements.txt\n\n# Set up API key (get one from https://aistudio.google.com/)\nexport GEMINI_API_KEY=\"your_gemini_api_key\"\n\n# Check configuration\npython portfolio_generator_cli.py --check-config\n\n# Generate portfolio with default settings (Google Gemini)\npython portfolio_generator_cli.py\n\n# Generate with specific AI provider\npython portfolio_generator_cli.py --model-provider anthropic --model-name claude-3-5-haiku-latest\n```\n![unnamed](https://github.com/user-attachments/assets/6fba8d05-3ea2-48d0-82c9-f5e0d6ec5b75)\n\n\n## 📋 Table of Contents\n\n- [Features](#-features)\n- [Installation](#-installation)\n- [Configuration](#-configuration)\n- [Usage](#-usage)\n- [Architecture](#-architecture)\n- [AI Models \u0026 Providers](#-ai-models--providers)\n- [API Setup](#-api-setup)\n- [Output](#-output)\n- [Troubleshooting](#-troubleshooting)\n- [Contributing](#-contributing)\n- [License](#-license)\n\n## ✨ Features\n\n### 🎯 Core Functionality\n- **Multi-platform support**: GitHub and GitLab (including self-hosted)\n- **Comprehensive analysis**: Public and private repositories\n- **Smart filtering**: Configurable commit thresholds and project selection\n- **Rate limiting**: Automatic handling with intelligent delays\n- **Stage-based execution**: Separate data collection and analysis phases\n\n### 🤖 AI-Powered Analysis\n- **Multiple AI providers**: Anthropic Claude, OpenAI GPT, Google Gemini\n- **Professional summaries**: Detailed portfolio analysis and recommendations\n- **Top project highlights**: AI-identified most significant projects\n- **Code metrics**: Estimated lines of code across all projects\n- **Interview preparation**: Generated talking points and project highlights\n\n### 🏗️ Architecture\n- **Modular design**: Clean separation of concerns\n- **Extensible**: Easy to add new AI providers or repository platforms\n- **Testable**: Comprehensive error handling and logging\n- **Professional CLI**: Rich help system and configuration validation\n\n## 🔧 Installation\n\n### Prerequisites\n- Python 3.8 or higher\n- pip package manager\n\n### Install Dependencies\n```bash\n# Clone the repository\ngit clone https://github.com/yourusername/portfolio-generator.git\ncd portfolio-generator\n\n# Install core dependencies\npip install -r requirements.txt\n\n# Optional: Install specific AI providers\npip install anthropic          # For Anthropic Claude\npip install openai            # For OpenAI GPT\npip install google-generativeai  # For Google Gemini\n```\n\n### Development Installation\n```bash\n# Install in development mode\npip install -e .\n\n# Install development dependencies\npip install -e \".[dev]\"\n```\n\n## ⚙️ Configuration\n\n### Environment Variables\n\nSet up your API keys and tokens:\n\n```bash\n# AI Provider API Keys (at least one required)\nexport GEMINI_API_KEY=\"your_gemini_api_key\"          # Google Gemini (recommended - free)\nexport ANTHROPIC_API_KEY=\"your_anthropic_api_key\"    # Anthropic Claude (paid)\nexport OPENAI_API_KEY=\"your_openai_api_key\"          # OpenAI GPT (paid/free tiers)\n\n# Repository tokens (optional - for private repos and higher rate limits)\nexport GITHUB_TOKEN=\"your_github_token\"\nexport GITLAB_TOKEN=\"your_gitlab_token\"\n\n# Optional GitLab configuration\nexport GITLAB_URL=\"https://your-gitlab-instance.com\"  # For self-hosted GitLab\n```\n\n### Configuration Check\n```bash\n# Verify your configuration\npython portfolio_generator_cli.py --check-config\n```\n\n## 🎮 Usage\n\n### Basic Usage\n\n```bash\n# Generate portfolio with default settings\npython portfolio_generator_cli.py\n\n# Use specific usernames (for public repos)\npython portfolio_generator_cli.py --github-username myuser --gitlab-username myuser\n\n# Use existing data to regenerate summary\npython portfolio_generator_cli.py --use-existing\n```\n\n### Advanced Usage\n\n```bash\n# Use specific AI provider and model\npython portfolio_generator_cli.py --model-provider anthropic --model-name claude-3-5-sonnet-latest\n\n# Analyze only GitHub repositories with limits\npython portfolio_generator_cli.py --platform github --max-commits 50 --min-commits 5\n\n# Run only data collection (Stage 1)\npython portfolio_generator_cli.py --stage 1\n\n# Run only analysis (Stage 2)\npython portfolio_generator_cli.py --stage 2\n\n# Enable debug mode\npython portfolio_generator_cli.py --debug\n```\n\n### Command Line Options\n\n| Option | Description | Default |\n|--------|-------------|---------|\n| `--github-username` | GitHub username (optional if using token) | None |\n| `--gitlab-username` | GitLab username (optional if using token) | None |\n| `--platform` | Analyze only specific platform (`github` or `gitlab`) | Both |\n| `--use-existing` | Use most recent data file instead of fetching new | False |\n| `--stage` | Run specific stage: `1`=data collection, `2`=analysis | Both |\n| `--min-commits` | Minimum user commits required for inclusion | 1 |\n| `--max-commits` | Maximum commits per project in JSON | All |\n| `--model-provider` | AI provider: `anthropic`, `openai`, `google` | `google` |\n| `--model-name` | Specific model name | Provider default |\n| `--debug` | Enable debug logging | False |\n| `--check-config` | Check configuration and exit | False |\n\n## 🏗️ Architecture\n\nThe application follows a clean, modular architecture:\n\n```\nsrc/\n├── ai_providers/           # AI provider implementations\n│   ├── anthropic_provider.py\n│   ├── openai_provider.py\n│   ├── gemini_provider.py\n│   └── factory.py\n├── repository_managers/    # Repository platform handlers\n│   ├── github_manager.py\n│   └── gitlab_manager.py\n├── config/                 # Configuration management\n│   ├── config_manager.py\n│   └── portfolio_config.py\n├── utils/                  # Utility functions\n│   ├── file_analyzer.py\n│   ├── data_processor.py\n│   └── logger.py\n└── portfolio_generator.py  # Main application\n```\n\n### Key Design Principles\n- **Single Responsibility**: Each module has one clear purpose\n- **Open/Closed**: Easy to extend without modifying existing code\n- **Dependency Inversion**: High-level modules depend on abstractions\n- **Error Handling**: Comprehensive exception handling and logging\n\nFor detailed architecture documentation, see [ARCHITECTURE.md](ARCHITECTURE.md).\n\n## 🤖 AI Models \u0026 Providers\n\n### 🎯 Recommended Models\n\n| Provider | Model | Cost | Reasoning | Best For |\n|----------|-------|------|-----------|----------|\n| **Google** | `gemini-2.5-pro` | ✅ Free | ❌ No | **Default choice** - Excellent free analysis |\n| **Google** | `gemini-2.5-flash` | ✅ Free | ❌ No | Fastest option |\n| **Anthropic** | `claude-3-5-sonnet-latest` | 💰 Paid | ❌ No | High-quality analysis |\n| **Anthropic** | `claude-3-5-haiku-latest` | 💰 Paid | ❌ No | Cheaper Claude option |\n| **OpenAI** | `gpt-4.1-nano` | 🆓 Free tier | ❌ No | Good free option |\n| **OpenAI** | `o4-mini` | 💰 Paid | ✅ Yes | Reasoning capabilities |\n\n### Quick Start Recommendations\n\n**For beginners or cost-conscious users:**\n```bash\npython portfolio_generator_cli.py  # Uses free Gemini 2.5 Pro\n```\n\n**For premium quality:**\n```bash\npython portfolio_generator_cli.py --model-provider anthropic --model-name claude-3-5-sonnet-latest\n```\n\n**For fastest results:**\n```bash\npython portfolio_generator_cli.py --model-provider google --model-name gemini-2.5-flash\n```\n\n## 🔑 API Setup\n\n### Google Gemini (Recommended)\n1. Visit [Google AI Studio](https://aistudio.google.com/)\n2. Create a new API key\n3. Set as `GEMINI_API_KEY` environment variable\n\n### Anthropic Claude\n1. Sign up at [Anthropic Console](https://console.anthropic.com/)\n2. Generate an API key\n3. Set as `ANTHROPIC_API_KEY` environment variable\n\n### OpenAI GPT\n1. Sign up at [OpenAI Platform](https://platform.openai.com/)\n2. Generate an API key\n3. Set as `OPENAI_API_KEY` environment variable\n\n### GitHub Token\n1. Go to GitHub Settings \u003e Developer settings \u003e Personal access tokens\n2. Generate token with `repo` scope (or `public_repo` for public only)\n3. Set as `GITHUB_TOKEN` environment variable\n\n### GitLab Token\n1. Go to GitLab User Settings \u003e Access Tokens\n2. Create token with `read_repository` scope\n3. Set as `GITLAB_TOKEN` environment variable\n\n## 📊 Output\n\n### Generated Files\n\n1. **`portfolio_data_[timestamp].json`** - Raw repository data\n   - Complete repository metadata\n   - Commit history and statistics\n   - Technology usage analysis\n   - Perfect for further analysis\n\n2. **`portfolio_summary_[timestamp].md`** - AI-generated portfolio\n   - Executive summary with code metrics\n   - Top 5 featured projects\n   - Technical skills analysis\n   - Development practices assessment\n   - Professional growth timeline\n   - Interview preparation recommendations\n\n### Example Output Structure\n\n```markdown\n# Portfolio Summary\n\n## Executive Summary\n- Developer profile with estimated lines of code\n- Years of experience based on project timeline\n- Primary technical focus areas\n\n## Top 5 Featured Projects\n- Detailed project analysis\n- Technical stack and complexity\n- Contribution levels and impact\n\n## Technical Skills \u0026 Expertise\n- Programming languages ranked by proficiency\n- Frameworks and libraries with context\n- Architecture patterns demonstrated\n\n[... and more sections]\n```\n\n## 🔧 Troubleshooting\n\n### Common Issues\n\n**No projects found:**\n- Check API tokens have correct permissions\n- Verify user info is retrieved correctly\n- Ensure commit email matches account email\n\n**Zero commits detected:**\n- Check git config email: `git config --global user.email`\n- Use `--min-commits 0` to include all projects\n- Check debug output for email matching\n\n**JSON too large:**\n- Use `--max-commits 10` to limit commits per project\n- Use `--min-commits 5` to filter projects\n- Use `--platform github` or `--platform gitlab`\n\n**Rate limiting:**\n- Script handles rate limiting automatically\n- Use tokens for higher rate limits\n- Consider using `--debug` for detailed output\n\n### Debug Mode\n\nEnable debug mode for detailed troubleshooting:\n\n```bash\npython portfolio_generator_cli.py --debug\n```\n\n## 🤝 Contributing\n\nWe welcome contributions! Please see our [Contributing Guidelines](CONTRIBUTING.md) for details.\n\n### Quick Contributing Steps\n1. Fork the repository\n2. Create a feature branch: `git checkout -b feature/amazing-feature`\n3. Make your changes following our coding standards\n4. Add tests for new functionality\n5. Submit a pull request\n\n## 📄 License\n\nThis project is licensed under the GNU General Public License v3.0 - see the [COPYING](COPYING) file for details.\n\n## 📚 Documentation\n\n- [Architecture Overview](ARCHITECTURE.md)\n- [Contributing Guidelines](CONTRIBUTING.md)\n- [Changelog](CHANGELOG.md)\n- [License](COPYING)\n\n## 🙏 Acknowledgments\n\n- Thanks to all contributors who help improve this project\n- Built with love for the open-source community\n- Special thanks to the AI providers for their excellent APIs\n\n---\n\n**Made with ❤️ for developers, by developers**\n\nFor support, questions, or feature requests, please [open an issue](https://github.com/yourusername/portfolio-generator/issues).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdefremont%2Fgitfolio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdefremont%2Fgitfolio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdefremont%2Fgitfolio/lists"}