Skip to content
Back to skills

Github Portfolio

ASecurity

Create or update GitHub portfolio documentation from repository analysis

  • 25 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added June 2, 2026
developmentjavascripttypescriptpythongojavabashnodegitapiperformance

Works with

  • claude code
  • terminal
  • api

Security analysis

A100/100

Scanned June 2, 2026

npx -y skills add reggiechan74/JobOps --skill github-portfolio --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Github Portfolio?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Github Portfolio
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/reggiechan74-github-portfolio/badge)](https://www.skillsdirectory.com/skills/reggiechan74-github-portfolio)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: github-portfolio
description: Create or update GitHub portfolio documentation from repository analysis
disable-model-invocation: true
---

## Configuration

Read `.jobops/config.json`. If missing, stop with:

> JOBOPS NOT CONFIGURED
> Run /jobops:setup to initialize your workspace.

Use `config.directories.<key>` for all file paths in this skill.
Use `config.preferences.cultural_profile` if this skill generates resume-style content.
Use `config.preferences.default_jurisdiction` if this skill has jurisdiction-sensitive logic (crisis/legal skills accept `--jurisdiction=<ISO-3166-2>` to override).

## Usage and Arguments

Creates or updates a GitHub portfolio document.

**Output file:** `{config.directories.career_analysis}/github_portfolio_{YYYYMMDD}.md` — a fresh timestamped snapshot is written on every run (create, add, or refresh).

**Usage forms:**
- `/github-portfolio <repository-url>` — create if no prior snapshot exists, otherwise add the repo to the latest snapshot.
- `/github-portfolio <repository-url> -create` — force a brand-new snapshot (first repository).
- `/github-portfolio <repository-url> -update` — add the repository to the latest existing snapshot.
- `/github-portfolio -update` — full portfolio refresh/reorganization of the latest snapshot (no URL needed).

**Arguments:**
- `$1`: Repository URL (required for adding repositories) OR the `-update` flag for refresh-only mode.
- `$2`: Mode flag (optional, defaults to auto-detect):
  - `-create`: Force create a new portfolio snapshot.
  - `-update`: Force update of the latest portfolio snapshot.

## Step 1: Parse Arguments and Determine Mode

**Repository URL**: $1
**Mode Flag**: ${2:-auto}

Checking arguments:
- If `$1` is `-update` and no `$2`: **Refresh Mode** (reorganize existing portfolio)
- If `$1` is a URL: **Repository Addition Mode** (create or update)
  - If portfolio exists: Update mode
  - If portfolio doesn't exist: Create mode
  - Mode can be forced with `$2` flag

---

## Step 2: Check Portfolio Existence

Checking whether a prior portfolio snapshot already exists in `{config.directories.career_analysis}/` (any file matching `github_portfolio_*.md`). When more than one exists, use the most recent by date suffix as the working snapshot for add/refresh operations.

**Result**: [Snapshot exists/does not exist]

---

## Step 3: Mode Selection

Based on arguments and portfolio existence:
- **Mode**: [CREATE NEW | ADD TO EXISTING | REFRESH EXISTING]

---

## Mode: CREATE NEW PORTFOLIO

**Purpose**: Create initial `github_portfolio_{YYYYMMDD}.md` snapshot with first repository.

**Repository URL Provided**: $1

### Step 3.1: Attempt to Access Repository

I'll try to access the repository directly to read its README and structure.

Attempting to fetch: $1

**Access Methods**:
1. Try WebFetch to read README.md from GitHub URL
2. If that fails (403, private repo, etc.), provide manual analysis script

### Step 3.2A: If Repository Accessible

[If WebFetch succeeds]:
- Read README.md content
- Parse repository name, description
- Attempt to infer technical details from README
- Ask user for additional details (commits, file counts, specific metrics)
- Proceed to create portfolio entry

### Step 3.2B: If Repository NOT Accessible (Most Likely)

[If WebFetch fails with 403/private/inaccessible]:

**The repository is not publicly accessible or I cannot reach it directly.**

No problem! Please run this analysis script in the repository's codespace/terminal and paste the complete results back to me:

```bash
#!/bin/bash
echo "=== REPOSITORY ANALYSIS FOR PORTFOLIO DOCUMENTATION ==="
echo ""
echo "## Basic Repository Information"
echo "Repository: $(basename $(git rev-parse --show-toplevel 2>/dev/null || pwd))"
echo "Current Branch: $(git branch --show-current 2>/dev/null || echo 'N/A')"
echo "Total Commits: $(git rev-list --count HEAD 2>/dev/null || echo 'N/A')"
echo "Last Commit: $(git log -1 --format='%h - %s (%ar)' 2>/dev/null || echo 'N/A')"
echo ""

echo "## File Structure"
echo "Total Files: $(find . -type f -not -path '*/\.*' | wc -l)"
echo ""
echo "Directory Tree (top 3 levels):"
tree -L 3 -I 'node_modules|.git|__pycache__|*.pyc' 2>/dev/null || find . -type d -not -path '*/\.*' -maxdepth 3 | sort
echo ""

echo "## README Content"
if [ -f README.md ]; then
    echo "--- START README.md ---"
    cat README.md
    echo "--- END README.md ---"
else
    echo "No README.md found"
fi
echo ""

echo "## Package/Dependency Information"
if [ -f package.json ]; then
    echo "--- package.json ---"
    cat package.json
fi
if [ -f requirements.txt ]; then
    echo "--- requirements.txt ---"
    cat requirements.txt
fi
if [ -f pyproject.toml ]; then
    echo "--- pyproject.toml ---"
    cat pyproject.toml
fi
echo ""

echo "## Code Statistics"
echo "Python files: $(find . -name '*.py' -not -path '*/\.*' | wc -l)"
echo "JavaScript files: $(find . -name '*.js' -not -path '*/\.*' | wc -l)"
echo "TypeScript files: $(find . -name '*.ts' -not -path '*/\.*' | wc -l)"
echo "Bash scripts: $(find . -name '*.sh' -not -path '*/\.*' | wc -l)"
echo "Markdown files: $(find . -name '*.md' -not -path '*/\.*' | wc -l)"
echo ""

echo "## Sample Code (largest Python/Bash/TypeScript files)"
for file in $(find . \( -name '*.py' -o -name '*.sh' -o -name '*.ts' \) | grep -v '.git' | grep -v 'node_modules' | head -5); do
    echo "--- $file ($(wc -l < "$file") lines) ---"
    head -50 "$file"
    echo ""
done

echo "## Git Activity"
echo "Commit History (last 10):"
git log --oneline -10 2>/dev/null || echo "Git history not available"
echo ""

echo "Recent Contributors:"
git shortlog -sn --no-merges | head -5 2>/dev/null || echo "N/A"
echo ""

echo "=== END ANALYSIS ==="
```

**Instructions**:
1. Open a terminal in the repository's codespace or local clone
2. Copy the entire script above
3. Paste it into the terminal and press Enter
4. Copy ALL the output (from "=== REPOSITORY ANALYSIS" to "=== END ANALYSIS ===")
5. Paste the complete output in your next message

Once you provide the analysis, I'll create your initial portfolio entry.

---

## Mode: ADD TO EXISTING PORTFOLIO

**Purpose**: Add new repository to the latest snapshot and write a new timestamped snapshot.

**Repository URL Provided**: $1

### Step 3.1: Read Latest Portfolio Snapshot

Read the most recent `{config.directories.career_analysis}/github_portfolio_*.md` file.

**Current Portfolio Status**:
- Total repositories: [count from file]
- Next repository number: [N+1]
- Portfolio version: [current version]
- Last updated: [date from file]

### Step 3.2: Attempt to Access Repository

Attempting to fetch: $1

**Access Methods**:
1. Try WebFetch to read README.md from GitHub URL
2. If that fails, provide manual analysis script

### Step 3.3A: If Repository Accessible

[If WebFetch succeeds]:
- Parse repository information
- Ask for additional metrics if needed
- Create comprehensive repository entry
- Update portfolio

### Step 3.3B: If Repository NOT Accessible

**The repository is not publicly accessible.**

Please run this analysis script in the repository's codespace and paste the results:

```bash
#!/bin/bash
echo "=== REPOSITORY ANALYSIS FOR PORTFOLIO DOCUMENTATION ==="
echo ""
echo "## Basic Repository Information"
echo "Repository: $(basename $(git rev-parse --show-toplevel 2>/dev/null || pwd))"
echo "Current Branch: $(git branch --show-current 2>/dev/null || echo 'N/A')"
echo "Total Commits: $(git rev-list --count HEAD 2>/dev/null || echo 'N/A')"
echo "Last Commit: $(git log -1 --format='%h - %s (%ar)' 2>/dev/null || echo 'N/A')"
echo ""

echo "## File Structure"
echo "Total Files: $(find . -type f -not -path '*/\.*' | wc -l)"
echo ""
echo "Directory Tree (top 3 levels):"
tree -L 3 -I 'node_modules|.git|__pycache__|*.pyc' 2>/dev/null || find . -type d -not -path '*/\.*' -maxdepth 3 | sort
echo ""

echo "## README Content"
if [ -f README.md ]; then
    echo "--- START README.md ---"
    cat README.md
    echo "--- END README.md ---"
else
    echo "No README.md found"
fi
echo ""

echo "## Package/Dependency Information"
if [ -f package.json ]; then
    echo "--- package.json ---"
    cat package.json
fi
if [ -f requirements.txt ]; then
    echo "--- requirements.txt ---"
    cat requirements.txt
fi
if [ -f pyproject.toml ]; then
    echo "--- pyproject.toml ---"
    cat pyproject.toml
fi
echo ""

echo "## Code Statistics"
echo "Python files: $(find . -name '*.py' -not -path '*/\.*' | wc -l)"
echo "JavaScript files: $(find . -name '*.js' -not -path '*/\.*' | wc -l)"
echo "TypeScript files: $(find . -name '*.ts' -not -path '*/\.*' | wc -l)"
echo "Bash scripts: $(find . -name '*.sh' -not -path '*/\.*' | wc -l)"
echo "Markdown files: $(find . -name '*.md' -not -path '*/\.*' | wc -l)"
echo ""

echo "## Sample Code (largest Python/Bash/TypeScript files)"
for file in $(find . \( -name '*.py' -o -name '*.sh' -o -name '*.ts' \) | grep -v '.git' | grep -v 'node_modules' | head -5); do
    echo "--- $file ($(wc -l < "$file") lines) ---"
    head -50 "$file"
    echo ""
done

echo "## Git Activity"
echo "Commit History (last 10):"
git log --oneline -10 2>/dev/null || echo "Git history not available"
echo ""

echo "Recent Contributors:"
git shortlog -sn --no-merges | head -5 2>/dev/null || echo "N/A"
echo ""

echo "=== END ANALYSIS ==="
```

**After receiving analysis**:
1. Parse repository analysis output
2. Create comprehensive repository entry following established format
3. Insert into Primary Repositories section (next available number)
4. Update capability matrices with new skills/technologies
5. Update conclusion to reference new repository count
6. Increment portfolio version number
7. Update "Last Updated" date

---

## Mode: REFRESH EXISTING PORTFOLIO

**Purpose**: Full portfolio reorganization and content refresh without adding new repositories.

**Triggered When**: User runs `/github-portfolio -update` with no URL

### Step 3.1: Read Latest Portfolio Snapshot

Read the most recent `{config.directories.career_analysis}/github_portfolio_*.md` file as the working snapshot.

**Current Portfolio Status**:
- Total repositories: [count]
- Portfolio version: [current version]
- Last updated: [date]

### Step 3.2: Comprehensive Review Tasks

1. **Repository Entries Consistency**:
   - Verify all entries follow current template format
   - Check for complete sections in each entry
   - Ensure consistent emoji usage and status indicators
   - Verify all repository links work

2. **Capability Matrices Accuracy**:
   - Review all 11 matrices for current proficiency levels
   - Add any new skills/technologies from recent work
   - Ensure honest positioning (AI-collaborative vs independent)
   - Check evidence references are current

3. **Positioning and Messaging**:
   - Refresh conclusion with current repository count
   - Update "What I Bring" / "What I Don't Claim" sections
   - Review application language examples for relevance
   - Ensure "AI-Collaborative Builder" philosophy is consistent

4. **Table of Contents**:
   - Verify all anchor links work correctly
   - Ensure all repositories are listed
   - Check capability matrix links
   - Confirm career positioning sections are linked

5. **Version and Date**:
   - Increment portfolio version (minor: X.Y+1)
   - Update lastUpdated to today's date in YAML frontmatter
   - Update "Last Updated" at bottom of document

6. **Quality Checks**:
   - Remove any outdated information
   - Fix broken internal references
   - Ensure development philosophy remains honest and accurate
   - Verify all repository counts match

### Step 3.3: Generate Update Summary

After refresh, provide summary of:
- Changes made
- New version number
- Items requiring user attention (if any)

---

## Repository Entry Template

When adding a new repository, use this comprehensive structure:

```markdown
### N. [repository-name](https://github.com/username/repo-name)
**Status**: Production (vX.Y.Z) | **License**: [License] | **Commits**: N

One-paragraph description highlighting core purpose and key technologies.

**Technical Architecture**:
- **Key Component 1**: Description with metrics
- **Key Component 2**: Description with metrics
- **Key Component 3**: Description with metrics
- **Key Component 4**: Description with metrics
- **Key Component 5**: Description with metrics

**Technical Sophistication**:
- **Scale Metric**: Total files, lines of code, complexity indicators
- **Advanced Pattern 1**: Specific implementation details
- **Advanced Pattern 2**: Specific implementation details
- **Advanced Pattern 3**: Specific implementation details
- **Advanced Pattern 4**: Specific implementation details

**Skills Demonstrated**:
- **Skill 1** (proficiency level: specific evidence)
- **Skill 2** (proficiency level: specific evidence)
- **Skill 3** (proficiency level: specific evidence)
- **Skill 4** (proficiency level: specific evidence)
- **Skill 5** (proficiency level: specific evidence)
- **Skill 6** (proficiency level: specific evidence)

**Business Impact**:
- Quantified improvement 1
- Quantified improvement 2
- Quantified improvement 3
- Use case or application context

**Development Approach**:
How this was built, key learning journey, relationship to other repositories, development philosophy demonstrated.

**Domain Specialization** (if applicable):
Specific industry domain, technical specialty, or problem space this addresses.

**Key Innovation**:
**Bold Innovation Name**: One-paragraph description of the unique approach, pattern, or solution this repository demonstrates. What makes this different or notable.

**[Optional] Component Breakdown**:
- **Category 1**: List of components/features
- **Category 2**: List of components/features
```

---

## Capability Matrices to Maintain

When updating portfolio, ensure these capability matrices remain comprehensive and accurate:

1. **Core Programming & Software Engineering** (7 capabilities)
2. **Data Science & Machine Learning** (5 capabilities)
3. **Financial Domain & Real Estate** (4 capabilities)
4. **AI Collaboration & Modern Development** (6 capabilities)
5. **AI Agent Systems & Orchestration** (6 capabilities)
6. **API & Data Integration** (5 capabilities)
7. **Bash Scripting & System Automation** (6 capabilities)
8. **Research Automation & Knowledge Management** (7 capabilities)
9. **Performance Engineering & Optimization** (5 capabilities)
10. **Workflow Automation & Process Design** (6 capabilities)
11. **Strategic & Analytical Capabilities** (5 capabilities)

**Matrix Format**:
```markdown
| Capability | Proficiency | Evidence | Development Method |
|---|---|---|---|
| **Capability Name** | Proficiency description | Specific evidence from repositories | How acquired/developed |
```

---

## Development Philosophy Principles

**Always maintain these core positioning principles**:

1. **Radical Honesty**: "Zero software engineering experience, ALL built through Claude Code collaboration"
2. **AI-Collaborative Builder**: Domain expert who learned to leverage AI as development partner
3. **What I Bring**: Domain expertise, architectural thinking, AI collaboration skills, proof of capability
4. **What I Don't Claim**: Traditional SWE credentials, ability to code independently, ML engineering qualification
5. **Value Proposition**: Living case study of domain expert to AI builder transformation

---

## Output Requirements

**File Location**: `{config.directories.career_analysis}/github_portfolio_{YYYYMMDD}.md` (new timestamped snapshot per run)

**YAML Front Matter**:
```yaml
---
title: GitHub Repositories & Derived Technical Capabilities
person: Reggie Chan
lastUpdated: YYYY-MM-DD (today's date)
category: Technology Portfolio
keywords: AI-assisted-development, Python, machine-learning, financial-systems, Claude-Code
shareable: true
profileType: technical-portfolio
---
```

**Version Tracking**:
- Update `lastUpdated` field to today's date
- Increment `Portfolio Version` at end of document (format: X.Y)
  - Major version (X): Adding new repository or major restructuring
  - Minor version (Y): Content updates, refinements, corrections

**Quality Checks**:
- [ ] All repository entries follow consistent format
- [ ] Table of Contents links work correctly
- [ ] Capability matrices are complete and accurate
- [ ] Conclusion reflects current repository count
- [ ] Application language examples are current
- [ ] Repository Links section is complete
- [ ] Version and date are updated

---

Let me proceed with the selected mode.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.