areibman / areibman/bottleneck
Feature: Add contributed and forked repositories to the repository list
- Dominant language
- TypeScript
- Stars
- 156
- Forks
- 21
- PR merge metrics
- No merged PRs in 30d
Description
## Feature Request
Add functionality to include repositories that you've contributed to and/or forked in the repository dropdown/list, not just owned repositories.
## Description
Currently, the repository list may only show repositories you own. Users often work on forked repositories or contribute to other projects, and these should be easily accessible in the repository selector without having to manually search or remember repository names.
## Core Features
### 1. Repository Categories
#### Repository Types to Include
```javascript
const repositoryCategories = {
owned: {
label: "My Repositories",
icon: "π",
description: "Repositories you own",
filter: (repo) => repo.owner.login === currentUser.login
},
forked: {
label: "Forked Repositories",
icon: "π±",
description: "Your forks of other repositories",
filter: (repo) => repo.fork === true,
showParent: true // Show original repo reference
},
contributed: {
label: "Contributed To",
icon: "π€",
description: "Repositories you've contributed to",
filter: (repo) => repo.permissions.push || repo.hasUserCommits,
minCommits: 1 // Configurable threshold
},
starred: {
label: "Starred",
icon: "β",
description: "Repositories you've starred",
filter: (repo) => repo.starred === true
},
watched: {
label: "Watching",
icon: "ποΈ",
description: "Repositories you're watching",
filter: (repo) => repo.watching === true
},
recent: {
label: "Recently Accessed",
icon: "π",
description: "Recently viewed or worked on",
limit: 10,
sortBy: "lastAccessed"
}
};
```
### 2. Smart Repository Discovery
#### Contribution Detection
```javascript
class ContributionDetector {
async findContributedRepos(username) {
const contributions = {
// Direct contributions
pullRequests: await this.fetchUserPRs(username),
issues: await this.fetchUserIssues(username),
commits: await this.fetchUserCommits(username),
// Indirect signals
reviews: await this.fetchReviewedPRs(username),
comments: await this.fetchCommentedRepos(username),
reactions: await this.fetchReactedRepos(username)
};
return this.aggregateUniqueRepos(contributions);
}
getContributionLevel(repo) {
return {
commits: repo.userCommitCount,
prs: repo.userPRCount,
issues: repo.userIssueCount,
lastActivity: repo.lastUserActivity,
role: this.determineRole(repo) // 'contributor', 'maintainer', 'collaborator'
};
}
}
```
### 3. Enhanced Repository Display
#### Repository Card Information
```typescript
interface EnhancedRepoCard {
// Basic info
name: string;
owner: string;
description: string;
// Relationship indicators
relationship: {
isOwner: boolean;
isFork: boolean;
isContributor: boolean;
contributionCount: number;
lastContribution: Date;
role: 'owner' | 'maintainer' | 'contributor' | 'viewer';
};
// Fork information (if applicable)
fork?: {
parent: {
owner: string;
name: string;
url: string;
};
ahead: number; // commits ahead of parent
behind: number; // commits behind parent
lastSynced: Date;
};
// Activity metrics
activity: {
stars: number;
forks: number;
openIssues: number;
openPRs: number;
lastPush: Date;
isArchived: boolean;
};
// Personal metrics
personal: {
lastAccessed: Date;
accessCount: number;
isPinned: boolean;
hasNotifications: boolean;
};
}
```
### 4. Repository List UI
#### Grouped Display
```
βββββββββββββββββββββββββββββββββββββββββββββββ
β π My Repositories (12) β
βββββββββββββββββββββββββββββββββββββββββββββββ€
β βΆ bottleneck β
β Main project repository β
β β
β βΆ my-app β
β Personal application β
βββββββββββββββββββββββββββββββββββββββββββββββ€
β π± Forked Repositories (5) β
βββββββββββββββββββββββββββββββββββββββββββββββ€
β βΆ facebook/react (forked from) β
β β³ myusername/react β
β 2 commits ahead, 145 behind β
β β
β βΆ nodejs/node (forked from) β
β β³ myusername/node β
β In sync with upstream β
βββββββββββββββββββββββββββββββββββββββββββββββ€
β π€ Contributed To (8) β
βββββββββββββββββββββββββββββββββββββββββββββββ€
β βΆ vuejs/vue β
β 15 commits, 3 PRs merged β
β β
β βΆ microsoft/vscode β
β 2 PRs merged, active contributor β
βββββββββββββββββββββββββββββββββββββββββββββββ
```
### 5. Search and Filter
#### Advanced Search
```javascript
class RepoSearch {
constructor() {
this.searchConfig = {
// Search across
searchIn: ['name', 'description', 'owner', 'topics'],
// Filters
filters: {
relationship: ['owned', 'forked', 'contributed'],
language: ['javascript', 'python', 'go'],
activity: ['active', 'stale', 'archived'],
visibility: ['public', 'private'],
hasIssues: true,
hasOpenPRs: true
},
// Sorting
sortBy: [
'relevance',
'lastAccessed',
'lastUpdated',
'stars',
'contributionCount',
'alphabetical'
]
};
}
async search(query) {
const results = await this.performSearch(query);
return this.rankByRelevance(results, {
weights: {
owned: 1.0,
recentlyAccessed: 0.9,
contributed: 0.8,
forked: 0.7,
starred: 0.5
}
});
}
}
```
### 6. Sync and Update
#### Repository Sync Manager
```javascript
class RepoSyncManager {
async syncRepositories() {
const sources = await Promise.all([
this.fetchOwnedRepos(),
this.fetchForkedRepos(),
this.fetchContributedRepos(),
this.fetchStarredRepos(),
this.fetchFromLocalHistory()
]);
return this.mergeAndCache(sources);
}
async syncForkStatus(fork) {
const parent = await this.getParentRepo(fork);
return {
ahead: await this.compareCommits(fork, parent, 'ahead'),
behind: await this.compareCommits(fork, parent, 'behind'),
hasConflicts: await this.checkConflicts(fork, parent),
canFastForward: await this.canFastForward(fork, parent)
};
}
schedulePeriodicSync() {
// Sync owned repos every 5 minutes
// Sync contributed repos every 15 minutes
// Sync forked repos every 30 minutes
// Full sync daily
}
}
```
### 7. Quick Actions
#### Repository-Specific Actions
- **For Owned**: Clone, Settings, Delete
- **For Forked**: Sync with upstream, Create PR to parent, Delete fork
- **For Contributed**: Watch, Star, Fork, View my contributions
- **For All**: Open in browser, Copy URL, View README
### 8. Configuration Options
```json
{
"repositories": {
"include": {
"owned": true,
"forked": true,
"contributed": true,
"starred": false,
"watched": false
},
"contributionThreshold": {
"minCommits": 1,
"minPRs": 0,
"minIssues": 0,
"withinDays": 365
},
"display": {
"groupByCategory": true,
"showForkParent": true,
"showContributionStats": true,
"showLastActivity": true,
"maxReposPerCategory": 50
},
"sync": {
"autoSync": true,
"syncInterval": 300000, // 5 minutes
"syncOnStartup": true,
"cacheExpiry": 86400000 // 24 hours
}
}
}
```
### 9. Fork Management Features
#### Fork-Specific Tools
```javascript
class ForkManager {
async manageFork(fork) {
return {
// Sync operations
syncWithUpstream: () => this.pullUpstream(fork),
// Compare with parent
viewDifferences: () => this.compareWithParent(fork),
// PR creation
createPullRequest: () => this.openPRToParent(fork),
// Status checks
checkStatus: () => ({
upToDate: this.isUpToDate(fork),
hasConflicts: this.hasConflicts(fork),
divergence: this.getDivergence(fork)
}),
// Automated sync
enableAutoSync: () => this.setupAutoSync(fork)
};
}
}
```
### 10. Contribution Insights
#### Contribution Dashboard
- Timeline of contributions
- Impact metrics (lines changed, issues closed)
- Contribution graph
- Language breakdown
- Most active repositories
- Contribution streaks
## Benefits
- **Complete Overview**: See all repositories you work with
- **Better Organization**: Categorized repository list
- **Fork Management**: Easy sync and PR creation
- **Contribution Tracking**: See your impact across projects
- **Improved Workflow**: Quick access to all relevant repos
- **Time Saving**: No manual searching for repos
## Acceptance Criteria
- [ ] Forked repositories appear in the list
- [ ] Contributed repositories are detected and shown
- [ ] Repository categories are clearly separated
- [ ] Fork parent information is displayed
- [ ] Contribution statistics are accurate
- [ ] Search works across all repository types
- [ ] Sync with upstream works for forks
- [ ] Performance remains good with many repos
- [ ] Filtering options work correctly
- [ ] Recent repositories are tracked
- [ ] UI clearly indicates repository relationship
- [ ] Cache management works properly
- [ ] Settings are configurable and persist
## Future Enhancements
- Organization repositories support
- Team repositories
- Repository templates
- Archived repository handling
- Repository recommendations
- Contribution goals and gamification
- Integration with GitHub Codespaces
- Multi-account support
π€ Generated with [Claude Code](https://claude.ai/code)
Contributor guide
No contributing guide indexed for this repository
Research direction
The issue does not identify implementation files, tests, or entry points; begin by locating the repository dropdown/list and its existing owned-repository loading flow. Done means forked and contributed repositories are displayed with their relationships, search and filtering work across categories, and the listed synchronization, caching, and configuration acceptance criteria are covered.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- electron, github, typescript
- Domain
- api, desktop, frontend
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100