Until now, xeve's org features had a blind spot: the People page only showed users who had signed up for xeve, and the Projects page dumped every repo onto a single unsorted list. If your GitHub org has 50+ repos and 30 members, only the 5 who installed xeve were visible. That changes today.
Full GitHub Org Member Sync
When you trigger a GitHub sync, xeve now fetches every member of your GitHub organization — not just contributors to repos. For each member, we pull their full profile: name, bio, company, email, location, and avatar. All of this lands in a new org_github_members table with automatic deduplication.
The sync runs in parallel batches of 10 user detail requests to stay under GitHub's rate limits while still being fast. A 30-member org completes in about 3 seconds.
When a GitHub member later signs up for xeve and joins your org, a database trigger automatically links their GitHub identity to their xeve account. No manual mapping needed.
AI-Inferred Roles and Titles
Most GitHub profiles don't have job titles. But their commit patterns, the repos they contribute to, and their bio text contain strong signals. The new ai-infer-roles edge function collects these signals and sends them to Claude Sonnet in batches of 10 members.
The AI returns a structured role (engineering, design, product, data, devops, management) and a specific title like "Senior Backend Engineer" or "Product Manager." These inferred titles appear on the People page with a subtle "AI" badge, so it's always clear what's human-entered vs. machine-inferred.
Inference runs at most every 30 days per member and costs about $0.05 per batch of 20 members. The signals used for inference are stored alongside the result so you can understand why the AI made a particular call.
AI-Generated Project Descriptions
When GitHub repos are synced as projects, many come through with no description — especially internal tools and services. The new ai-enrich-projects function fixes this by fetching each project's README (first 2000 chars), last 10 commit messages, and last 5 merged PR titles, then asking Claude Sonnet to write a concise 1-2 sentence description.
It only runs on projects where description IS NULL, and processes at most 10 per invocation to keep costs around $0.03 per run. Once a description is set — whether by AI or manually — it won't be overwritten.
Smart Project Filtering
The Projects page now has three filter tabs: Active (default), All, and Archived. Active means the repo was pushed to within the last 30 days. The sync function automatically updates project status based on pushed_at — but it never overrides projects you've manually marked as completed or archived.
Each project card now shows stacked contributor avatars (up to 5, with an overflow count) and total commit count. The list is sorted by last_pushed_at so your most active projects appear first. This turns what was a flat, unsorted dump of 50 repos into a useful at-a-glance view of what's actually being worked on.
The New People Page
The People page now has three sections instead of one:
- Team Members — everyone with an xeve account in your org. If they have no manual title but their GitHub identity has an AI-inferred title, it shows in italic with an "AI" badge. Search and role filtering still work.
- GitHub Members — people in your GitHub org who haven't joined xeve yet. Shows their avatar, name, inferred role/title, and email. Each row has an "Invite" button. If the member has no public email, you can type one in inline before sending.
- Pending Invites — all outstanding invitations with expiry countdown, who sent them, and actions to resend (for expired) or revoke.
The GitHub Members section only appears when a GitHub integration is active and there are unlinked members — if everyone's already on xeve, it stays hidden.
Project Detail: GitHub Contributors
Each project detail page now has a "GitHub Contributors" section showing every contributor from the repo's contributor list. Each entry shows their avatar, GitHub login (linked to their profile), and commit count. This is sourced from the contributors JSONB column that the sync now stores on every project.
What's Next
The foundation is now in place for richer team analytics: per-member contribution trends, cross-project activity heatmaps, and eventually AI-generated team insights that consider both xeve tracking data and GitHub activity together. The member sync also unlocks better meeting attendee resolution — matching GitHub usernames to meeting participants for automatic task assignment.