An open API service indexing awesome lists of open source software.

https://github.com/nahombefekadu/portfolio-as-code-template

Template repository for Portfolio as Code workflow - track your professional development in Git
https://github.com/nahombefekadu/portfolio-as-code-template

codex git markdown portfolio professional-development template

Last synced: 3 months ago
JSON representation

Template repository for Portfolio as Code workflow - track your professional development in Git

Awesome Lists containing this project

README

          

# Portfolio as Code Template

> Treat your professional development like code: version controlled, structured, and systematically maintained.

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](http://makeapullrequest.com)
[![Template](https://img.shields.io/badge/template-repository-blue.svg)](https://github.com/example/portfolio-as-code-template/generate)

## 🎯 What is Portfolio as Code?

Portfolio as Code applies software development principles to professional growth tracking. Instead of scattered notes and outdated LinkedIn profiles, maintain your professional journey as a structured, version-controlled repository.

### The Problem

Most developers struggle with:
- **Inconsistent Updates**: Portfolios become outdated within months
- **Lost Context**: Forgetting details about past projects and learnings
- **Scattered Information**: Professional story fragmented across tools
- **Poor Searchability**: Can't find relevant experience when needed
- **No Growth Tracking**: No systematic way to measure and plan development

### The Solution

Treat your professional portfolio like a codebase:
- **📚 Structured Content**: Consistent formats for learnings, achievements, projects
- **🔍 Searchable Knowledge**: Find any experience, skill, or insight quickly
- **📈 Growth Tracking**: Measure learning patterns and career progression
- **🔄 Version Control**: Track your professional evolution over time
- **🤖 Automation**: Sync with tools, generate resumes, update profiles
- **🔗 Integration**: Connect with databases, websites, and applications

## 🚀 Quick Start

### 1. Use This Template

Click "Use this template" or:

```bash
git clone https://github.com/example/portfolio-as-code-template.git my-portfolio
cd my-portfolio
rm -rf .git
git init
git add .
git commit -m "Initial portfolio setup"
```

### 2. Explore the Structure

```
portfolio-repo/
├── content/ # Your professional content
│ ├── learnings/YYYY/ # Technical learnings and insights
│ ├── achievements/YYYY/ # Milestones and accomplishments
│ ├── blog/ # Published and draft blog posts
│ │ ├── published/
│ │ └── drafts/
│ ├── prompts/ # Reusable AI prompts
│ │ ├── coding/
│ │ ├── writing/
│ │ └── analysis/
│ └── reviews/YYYY/ # Periodic reflections
├── assets/ # Supporting materials
│ ├── images/
│ └── documents/
├── templates/ # Content templates for consistency
├── docs/ # Documentation and guides
├── codex.config.json # Configuration for tools
└── README.md # This file
```

### 3. Start Adding Content

Copy a template and start documenting:

```bash
# Document a new learning
cp templates/learning-template.md content/learnings/2024/my-first-learning.md

# Record an achievement
cp templates/achievement-template.md content/achievements/2024/project-launch.md

# Start a blog post
cp templates/blog-template.md content/blog/drafts/my-thoughts.md
```

### 4. Integrate with Tools

- **[Codex App](https://github.com/example/codex-app)**: Database-driven portfolio management
- **Static Site Generators**: Generate portfolio websites
- **Resume Builders**: Export structured data to resume formats
- **Social Media**: Auto-post achievements and learnings
- **Analytics**: Track learning patterns and growth metrics

## 📁 Content Types

### 📚 Learnings (`content/learnings/YYYY/`)

Document technical concepts, tools, and insights as you discover them.

```yaml
# Example frontmatter
---
title: "Advanced TypeScript Patterns"
date: "2024-03-15"
tags: ["typescript", "patterns", "generics"]
category: "technical"
difficulty: "advanced"
source: "practice"
time_spent: "3 hours"
related_projects: ["codex-app"]
---
```

**What to include:**
- New technologies and frameworks
- Problem-solving approaches
- Architecture patterns
- Performance optimizations
- Debugging techniques
- Best practices and anti-patterns

### 🏆 Achievements (`content/achievements/YYYY/`)

Track milestones, launches, recognitions, and career progression.

```yaml
# Example frontmatter
---
title: "Launched Codex Portfolio Application"
date: "2024-08-15"
type: "project-launch"
tags: ["remix", "typescript", "product-launch"]
impact: "high"
effort: "6 months"
metrics:
- "100+ users in first month"
- "99.9% uptime achieved"
---
```

**What to include:**
- Product launches and releases
- Conference talks and presentations
- Open source contributions
- Team leadership initiatives
- Awards and recognition
- Skill certifications

### ✍️ Blog Posts (`content/blog/`)

Manage your writing pipeline from idea to publication.

- **`published/`**: Completed blog posts
- **`drafts/`**: Work-in-progress content

```yaml
# Example frontmatter
---
title: "Building a Portfolio as Code"
published: true
slug: "building-portfolio-as-code"
tags: ["portfolio", "knowledge-management"]
excerpt: "Why developers need structured professional growth tracking"
target_publications: ["dev.to", "personal-blog"]
---
```

### 🤖 AI Prompts (`content/prompts/`)

Curate reusable AI prompts for different purposes.

- **`coding/`**: Development and debugging prompts
- **`writing/`**: Content creation and editing prompts
- **`analysis/`**: Decision-making and evaluation prompts

```yaml
# Example frontmatter
---
title: "Code Review Checklist Generator"
tags: ["code-review", "quality-assurance"]
usage_count: 15
effectiveness: "high"
ai_models: ["claude-3.5-sonnet", "gpt-4"]
---
```

### 📊 Reviews (`content/reviews/YYYY/`)

Periodic reflection and planning documents.

- **Quarterly Reviews**: Strategic planning and major goal assessment
- **Weekly Reviews**: Tactical progress and adjustment
- **Project Retrospectives**: Lessons learned from specific initiatives

```yaml
# Example frontmatter
---
title: "Q3 2024 Quarterly Review"
period: "Q3 2024"
type: "quarterly"
quarter_theme: "Deep Technical Growth"
overall_rating: "9/10"
---
```

## 🛠️ Integration and Tools

### Codex Application

The [Codex app](https://github.com/example/codex-app) provides a database-driven interface for your portfolio:

- Rich markdown editor with live preview
- Full-text search across all content
- Tag-based organization and filtering
- Analytics and growth tracking
- Export capabilities

**Setup:**
1. Clone and set up the Codex application
2. Configure `codex.config.json` with your repository details
3. Run the sync command to import your content
4. Use the web interface for editing and searching

### Static Site Generation

Generate portfolio websites from your content:

```bash
# Example with Next.js
npx create-next-app my-portfolio --typescript
# Add content parsing and rendering logic
```

### Resume Generation

Export structured data to resume formats:

```bash
# Example workflow
node scripts/generate-resume.js --format pdf --template modern
```

### Automation Examples

```bash
# Daily learning capture
echo "What did you learn today?" | portfolio-cli add-learning

# Weekly review reminder
portfolio-cli generate-weekly-review --template retrospective

# Social media sharing
portfolio-cli share-achievement --platform linkedin --latest
```

## 📋 Best Practices

### Content Organization

1. **Consistent Naming**: Use clear, descriptive filenames with dates
2. **Rich Frontmatter**: Include comprehensive metadata for searchability
3. **Cross-References**: Link related content across different types
4. **Regular Updates**: Capture learnings immediately while context is fresh
5. **Quality Over Quantity**: Better to have fewer, well-documented items

### 📝 Filename and Title Matching

**Important**: For optimal sync performance with the Codex application, ensure your filenames match your content titles:

- ✅ **Good**: Title "Advanced TypeScript Patterns" → File `advanced-typescript-patterns.md`
- ❌ **Avoid**: Title "Advanced TypeScript Patterns" → File `random-name.md`

**Naming Convention:**
- Convert title to lowercase
- Replace spaces with hyphens (`-`)
- Remove special characters and punctuation
- Keep only letters, numbers, and hyphens

**Examples:**
```bash
# Learning examples
"React Server Components Deep Dive" → react-server-components-deep-dive.md
"Database Indexing Strategies" → database-indexing-strategies.md
"TypeScript 5.0 Decorators" → typescript-50-decorators.md

# Achievement examples
"Launched Codex Portfolio App" → launched-codex-portfolio-app.md
"Led Performance Task Force" → led-performance-task-force.md

# Blog post examples
"Building a Portfolio as Code" → building-a-portfolio-as-code.md
"AI-Powered Code Reviews" → ai-powered-code-reviews.md
```

**Why This Matters:**
- Prevents duplicate file creation during sync operations
- Ensures consistent Git history tracking
- Improves searchability and organization
- Maintains predictable file paths for integrations

💡 **Tip**: If you create files remotely in Git with non-matching names, the sync will still work but may create new files with standardized names during export operations.

### Git Workflow

```bash
# Feature branch for major content additions
git checkout -b add-typescript-learning
git add content/learnings/2024/typescript-advanced-patterns.md
git commit -m "Add advanced TypeScript patterns learning"

# Quick commits for daily updates
git add content/learnings/2024/daily-standup-insights.md
git commit -m "Daily learning: team communication patterns"

# Release tags for major milestones
git tag -a v2024.3 -m "Q3 2024 quarterly review complete"
```

### Maintenance Schedule

- **Daily**: Capture immediate learnings and insights (5-10 minutes)
- **Weekly**: Review and organize content, update drafts (30 minutes)
- **Monthly**: Assess learning patterns, plan content gaps (1 hour)
- **Quarterly**: Major review, goal setting, content audit (2-3 hours)

## 🔧 Configuration

### codex.config.json

> **Note**: The configuration below shows all available options for reference. For a simpler setup, start with just the basic fields (`version`, `metadata`, `sync`, and `content`) and add other sections as needed. Most integrations are disabled by default and can be enabled when you're ready to use them.

```json
{
"version": "1.0",
"metadata": {
"name": "Portfolio as Code Template",
"description": "Template repository for structured professional development tracking",
"author": "Your Name",
"created": "2024-01-01",
"lastUpdated": "2025-01-28"
},
"sync": {
"enabled": true,
"direction": "bidirectional",
"autoCommit": false,
"conflictResolution": "manual",
"schedule": {
"enabled": false,
"frequency": "daily",
"time": "09:00"
},
"hooks": {
"preSyncValidation": true,
"postSyncNotification": true
}
},
"content": {
"types": {
"learnings": {
"enabled": true,
"path": "content/learnings",
"yearlySubdirectories": true,
"requiredFields": ["title", "date", "tags", "category"],
"optionalFields": ["difficulty", "source", "time_spent", "related_projects"]
},
"achievements": {
"enabled": true,
"path": "content/achievements",
"yearlySubdirectories": true,
"requiredFields": ["title", "date", "type", "tags"],
"optionalFields": ["impact", "effort", "metrics", "team_size"]
},
"blog": {
"enabled": true,
"path": "content/blog",
"subdirectories": ["published", "drafts"],
"requiredFields": ["title", "date", "published", "slug"],
"optionalFields": ["tags", "excerpt", "reading_time", "canonical_url"]
},
"prompts": {
"enabled": true,
"path": "content/prompts",
"subdirectories": ["coding", "writing", "analysis"],
"requiredFields": ["title", "date", "tags"],
"optionalFields": ["usage_count", "effectiveness", "ai_models"]
},
"reviews": {
"enabled": true,
"path": "content/reviews",
"yearlySubdirectories": true,
"requiredFields": ["title", "date", "period", "type"],
"optionalFields": ["overall_rating", "key_metrics", "quarter_theme"]
}
},
"formatting": {
"dateFormat": "YYYY-MM-DD",
"tagNormalization": true,
"slugGeneration": "auto",
"frontmatterValidation": true
},
"validation": {
"requiredFrontmatter": true,
"linkValidation": false,
"spellCheck": false,
"wordCount": {
"enabled": false,
"minimums": {
"learnings": 200,
"achievements": 300,
"blog": 500,
"reviews": 1000
}
}
}
},
"assets": {
"path": "assets",
"subdirectories": ["images", "documents"],
"allowedTypes": {
"images": [".jpg", ".jpeg", ".png", ".gif", ".svg", ".webp"],
"documents": [".pdf", ".doc", ".docx", ".txt", ".md"]
},
"maxFileSize": "10MB",
"optimization": {
"images": {
"enabled": false,
"quality": 85,
"maxWidth": 1920
}
}
},
"templates": {
"path": "templates",
"autoGenerate": false,
"customFields": {
"learnings": {
"difficulty": ["beginner", "intermediate", "advanced"],
"source": ["book", "course", "practice", "conference", "mentor"]
},
"achievements": {
"type": ["project-launch", "speaking", "open-source", "certification", "promotion"],
"impact": ["low", "medium", "high", "very-high"]
}
}
},
"integrations": {
"git": {
"enabled": true,
"repository": "username/portfolio-as-code-template",
"branch": "main",
"commitMessageTemplate": "{type}: {title}",
"autoCreateBranches": false
},
"github": {
"enabled": false,
"token": "",
"features": {
"issueTracking": false,
"milestoneSync": false,
"releaseNotes": false
}
},
"analytics": {
"enabled": false,
"provider": "custom",
"trackingId": "",
"events": {
"contentCreated": true,
"contentUpdated": true,
"syncCompleted": true
}
},
"socialMedia": {
"twitter": {
"enabled": false,
"apiKey": "",
"autoPost": {
"achievements": false,
"blog": false
}
},
"linkedin": {
"enabled": false,
"apiKey": "",
"autoUpdate": {
"profile": false,
"achievements": false
}
}
},
"notion": {
"enabled": false,
"apiKey": "",
"databaseId": "",
"syncDirection": "bidirectional"
},
"obsidian": {
"enabled": false,
"vaultPath": "",
"syncTags": true,
"linkFormat": "wikilink"
}
},
"export": {
"formats": {
"json": {
"enabled": true,
"path": "exports/portfolio.json",
"includeContent": true,
"minify": false
},
"yaml": {
"enabled": false,
"path": "exports/portfolio.yaml"
},
"csv": {
"enabled": false,
"path": "exports",
"separateFiles": true
},
"html": {
"enabled": false,
"path": "exports/portfolio.html",
"template": "default",
"includeAssets": true
}
},
"resume": {
"enabled": false,
"templates": ["modern", "classic", "technical"],
"outputPath": "exports/resume",
"includeTypes": ["achievements", "learnings"],
"dateRange": "2 years"
}
},
"search": {
"indexing": {
"enabled": true,
"updateOnSync": true,
"includeContent": true,
"includeTags": true
},
"engine": "builtin",
"stopWords": ["the", "a", "an", "and", "or", "but"],
"stemming": true,
"fuzzyMatching": true
},
"backup": {
"enabled": false,
"frequency": "weekly",
"retention": "1 year",
"location": "cloud",
"providers": {
"s3": {
"bucket": "",
"region": "us-east-1"
},
"dropbox": {
"path": "/portfolio-backups"
}
}
},
"notifications": {
"enabled": false,
"channels": {
"email": {
"enabled": false,
"address": "",
"events": ["syncCompleted", "backupCompleted", "errorOccurred"]
},
"slack": {
"enabled": false,
"webhookUrl": "",
"events": ["achievementAdded", "syncCompleted"]
},
"discord": {
"enabled": false,
"webhookUrl": "",
"events": ["achievementAdded"]
}
}
},
"security": {
"sensitiveFields": ["api_key", "token", "password"],
"redactInLogs": true,
"encryptBackups": false,
"allowExternalLinks": true
},
"performance": {
"caching": {
"enabled": true,
"ttl": 3600,
"maxItems": 1000
},
"compression": {
"enabled": false,
"algorithm": "gzip"
},
"concurrency": {
"maxConcurrentSyncs": 5,
"rateLimiting": {
"enabled": false,
"requestsPerMinute": 60
}
}
},
"development": {
"debugMode": false,
"verboseLogging": false,
"testMode": false,
"mockData": false
},
"ui": {
"theme": "auto",
"dateFormat": "MMMM DD, YYYY",
"timeFormat": "12h",
"language": "en",
"timezone": "auto",
"itemsPerPage": 20,
"defaultView": "grid",
"showPreview": true
},
"customFields": {
"global": {
"project_status": ["planning", "in-progress", "completed", "on-hold"],
"priority": ["low", "medium", "high", "critical"],
"visibility": ["public", "private", "team", "internal"]
},
"learnings": {
"learning_type": ["technical", "soft-skills", "business", "process"],
"application_status": ["theoretical", "applied", "mastered", "teaching"]
},
"achievements": {
"recognition_level": ["internal", "team", "company", "industry", "public"],
"collaboration_type": ["solo", "pair", "small-team", "large-team", "cross-functional"]
}
},
"workflows": {
"dailyCapture": {
"enabled": false,
"reminderTime": "17:00",
"template": "daily-learning",
"autoCommit": false
},
"weeklyReview": {
"enabled": false,
"scheduleDay": "friday",
"template": "weekly-review",
"includeMetrics": true
},
"monthlyAnalytics": {
"enabled": false,
"generateReport": true,
"emailReport": false
},
"quarterlyPlanning": {
"enabled": false,
"template": "quarterly-review",
"goalTracking": true
}
}
}
```

### .gitignore

```gitignore
# OS files
.DS_Store
Thumbs.db

# Editor files
.vscode/
.idea/
*.swp
*.swo

# Build outputs
dist/
build/
.next/

# Dependencies
node_modules/
vendor/

# Environment files
.env
.env.local

# Temporary files
.tmp/
temp/
*.tmp

# Database files (if using local DB)
*.db
*.sqlite

# Cache directories
.cache/
.parcel-cache/
```

## 🎨 Customization

### Templates

Create custom templates in the `templates/` directory:

```markdown

---
title: ""
date: ""
tags: []
category: ""
difficulty: ""
source: ""
related_projects: []
custom_field: ""
---

# Title

## Context

## Key Concepts

## Applied Learning

## Next Steps

## Resources
```

### Frontmatter Schema

Extend frontmatter for your specific needs:

```yaml
# Standard fields (recommended to keep)
title: string
date: string (YYYY-MM-DD)
tags: array of strings
category: string

# Optional extensions
custom_rating: number (1-10)
team_members: array of strings
business_impact: string
technologies: array of strings
external_links: array of objects
```

## 📈 Analytics and Insights

### Learning Patterns

Track your learning patterns over time:

```bash
# Generate learning analytics
portfolio-cli analytics --type learning --period quarterly

# Output:
# - Most frequent tags
# - Learning velocity trends
# - Knowledge gap analysis
# - Time investment by category
```

### Growth Tracking

Monitor professional development:

```bash
# Skill progression analysis
portfolio-cli skills --progression --timeframe 2024

# Achievement impact assessment
portfolio-cli achievements --impact --metrics business
```

### Content Quality

Maintain high content standards:

```bash
# Content audit
portfolio-cli audit --check-links --validate-frontmatter --suggest-tags

# Writing analysis
portfolio-cli writing-stats --readability --engagement --seo
```

## 🔧 Troubleshooting

### Common Sync Issues and Solutions

**Blog Slug Validation Errors**
- Error: `Unique constraint failed on the fields: (slug)`
- Solution: Ensure blog post slugs are unique across all posts
- Check: Review existing blog posts for duplicate slugs

**Import Validation Failures**
- Error: Content files failing to import during sync
- Solution: Verify required frontmatter fields are present
- Required: `title`, `date`, `type`, `id` (auto-generated if missing)

**Duplicate File Creation**
- Issue: Sync creates new files instead of updating existing ones
- Solution: Ensure filename matches title (see naming conventions above)
- Example: Title "My Learning" → File `my-learning.md`

### ✅ Content Validation Checklist

Before syncing, ensure your content meets these requirements:

**All Content Types:**
- [ ] Valid frontmatter with required fields
- [ ] Filename matches title using kebab-case convention
- [ ] Date in YYYY-MM-DD format
- [ ] Content body is valid markdown

**Blog Posts Specifically:**
- [ ] Unique slug field (auto-generated from title if missing)
- [ ] Summary field for better organization
- [ ] publishedAt date if post is published

**Learnings/Achievements:**
- [ ] Descriptive tags for better categorization
- [ ] Source information when applicable

### 🛡️ Data Protection During Sync

The bidirectional sync includes several safety mechanisms:

- **Import-First Strategy**: Git changes are imported before database changes export
- **Failure Protection**: Export is skipped if import fails, preventing data loss
- **Change Detection**: Only modified content is processed to maintain performance
- **Version History**: All changes are tracked with full audit trails
- **Error Recovery**: Detailed error messages help identify and fix issues quickly

## 🤝 Community and Contributions

### Getting Help

- **GitHub Issues**: Bug reports and feature requests
- **Discussions**: Questions and community support
- **Discord**: Real-time community chat
- **Documentation**: Comprehensive guides and tutorials

### Contributing

We welcome contributions! Please see:

- [Contributing Guidelines](CONTRIBUTING.md)
- [Code of Conduct](CODE_OF_CONDUCT.md)
- [Development Setup](docs/development.md)

### Community Templates

Share your templates and configurations:

- [Template Gallery](https://github.com/example/portfolio-templates)
- [Configuration Examples](https://github.com/example/portfolio-configs)
- [Integration Guides](docs/integrations/)

## 🔗 Ecosystem

### Related Projects

- **[Codex App](https://github.com/example/codex-app)**: Web interface for portfolio management
- **[Portfolio CLI](https://github.com/example/portfolio-cli)**: Command-line tools
- **[Resume Generator](https://github.com/example/portfolio-resume)**: Resume generation from portfolio data
- **[Analytics Dashboard](https://github.com/example/portfolio-analytics)**: Growth tracking and insights

### Integrations

- **Notion**: Bi-directional sync with Notion databases
- **Obsidian**: Plugin for vault integration
- **Linear**: Link achievements to completed work
- **GitHub**: Automatic contribution tracking
- **LinkedIn**: Profile update automation

## 📚 Resources

### Getting Started Guides

- [Your First Week with Portfolio as Code](docs/getting-started.md)
- [Migration from Other Systems](docs/migration.md)
- [Setting Up Automation](docs/automation.md)

### Advanced Topics

- [Custom Integration Development](docs/integrations.md)
- [Analytics and Reporting](docs/analytics.md)
- [Team and Organization Setup](docs/team-setup.md)
- [Enterprise Deployment](docs/enterprise.md)

### Examples and Case Studies

- [Software Engineer Portfolio](examples/software-engineer/)
- [Product Manager Portfolio](examples/product-manager/)
- [Designer Portfolio](examples/designer/)
- [Consultant Portfolio](examples/consultant/)

## 📄 License

MIT License - see [LICENSE](LICENSE) for details.

---

## 🚀 Ready to Get Started?

1. **Use this template** to create your repository
2. **Add your first learning** using the provided templates
3. **Set up integrations** with your preferred tools
4. **Start building** your structured professional knowledge base

Your professional growth deserves the same systematic approach you give to your code. Start treating your portfolio as code today!