Developer relations - community building, documentation, DevRel metrics.
npx skills add https://github.com/vibeeval/vibecosystem --skill developer-relations
| Metrik | Saglikli | Dikkat | Kritik |
|--------|---------|--------|--------|
| Time to First Response | < 24 saat | 1-3 gun | > 3 gun |
| Issue Close Rate (monthly) | > %70 | %40-70 | < %40 |
| PR Merge Time | < 3 gun | 3-7 gun | > 7 gun |
| External Contributors | > %30 | %10-30 | < %10 |
| Bus Factor | > 3 | 2-3 | 1 |
| Release Cadence | Regular (2-4 hafta) | Duzensiz | > 3 ay |
| Documentation Coverage | > %80 | %50-80 | < %50 |
Maintainer
|-- Core Contributor (write access)
| |-- Regular Contributor (frequent PRs)
| | |-- Occasional Contributor (1-5 PRs)
| | |-- First-time Contributor
|-- Reviewer (code review)
|-- Triage (issue labeling)
|-- Community Moderator (Discord/Slack)
|-- Documentation Contributor
# Issue labels taxonomy
type:
- bug # Something isn't working
- feature # New feature request
- enhancement # Improvement to existing feature
- documentation # Documentation update
- question # Community question
priority:
- critical # Production breaking
- high # Important, next release
- medium # Normal priority
- low # Nice to have
status:
- needs-triage # Awaiting maintainer review
- confirmed # Bug confirmed, feature accepted
- needs-info # Waiting for reporter input
- in-progress # Being worked on
- blocked # Dependency blocker
experience:
- good-first-issue # Newcomer friendly
- help-wanted # Community contribution welcome
- mentor-available # Maintainer will guide
# .github/workflows/community.yml
name: Community Management
on:
issues:
types: [opened]
pull_request:
types: [opened]
jobs:
welcome-new-contributor:
runs-on: ubuntu-latest
steps:
- uses: actions/first-interaction@v1
with:
issue-message: |
Welcome to the project! Thanks for opening your first issue.
Please make sure you've filled out the issue template completely.
A maintainer will review this shortly.
pr-message: |
Thanks for your first PR! A maintainer will review it soon.
Please make sure all checks pass and you've signed the CLA.
auto-label:
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@v5
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
stale-check:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
with:
stale-issue-message: "This issue has been inactive for 30 days. It will be closed in 7 days if no further activity occurs."
days-before-stale: 30
days-before-close: 7
docs/
getting-started/
installation.md # 5 dakikada calistir
quickstart.md # Ilk basari deneyimi
configuration.md # Temel ayarlar
guides/
authentication.md # How-to guide
data-migration.md # Step-by-step
deployment.md # Production setup
reference/
api/ # Auto-generated API docs
cli/ # CLI commands
configuration/ # All config options
concepts/
architecture.md # Mimari aciklama
data-model.md # Data yapisi
examples/
basic/ # Basit ornekler
advanced/ # Ileri ornekler
integrations/ # 3rd party entegrasyonlar
contributing/
CONTRIBUTING.md # Katki rehberi
CODE_OF_CONDUCT.md # Davranis kurallari
DEVELOPMENT.md # Dev environment setup
changelog/
CHANGELOG.md # Release notes
| Kriter | Aciklama |
|--------|----------|
| 5-Minute Success | Yeni kullanici 5 dk'da calisan bir sey gorebilmeli |
| Copy-Paste Ready | Kod ornekleri direkt calisabilmeli |
| Up-to-Date | Kod degisince doc da guncellenecek (CI check) |
| Searchable | Arama motoru ile bulunabilir |
| Progressive Disclosure | Basit -> Orta -> Ileri siralama |
| Error Messages | Hata mesajlari doc'a linklemeli |
| Platform Coverage | macOS, Linux, Windows ornekleri |
| Language Coverage | En az 3 dilde SDK ornegi |
## Create User
Creates a new user account.
### Request
`POST /api/v1/users`
#### Headers
| Header | Required | Description |
|--------|----------|-------------|
| Authorization | Yes | Bearer token |
| Content-Type | Yes | application/json |
#### Body
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| email | string | Yes | Valid email address |
| name | string | Yes | Full name (2-100 chars) |
| role | string | No | "admin" or "member" (default: "member") |
#### Example
\```bash
curl -X POST https://api.example.com/v1/users \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]",
"name": "Jane Smith",
"role": "member"
}'
\```
### Response
#### 201 Created
\```json
{
"id": "usr_abc123",
"email": "[email protected]",
"name": "Jane Smith",
"role": "member",
"created_at": "2026-01-15T10:30:00Z"
}
\```
#### 400 Bad Request
\```json
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid email format"
}
}
\```
#### 409 Conflict
\```json
{
"error": {
"code": "DUPLICATE_EMAIL",
"message": "A user with this email already exists"
}
}
\```
1. WHAT: Ne yapacagiz? (1 paragraf, 30 saniye okuma)
2. WHY: Neden onemli? (1 paragraf)
3. PREREQUISITES: Nelere ihtiyac var? (liste)
4. STEPS: Adim adim (her adim bitmis, calisan bir sey)
- Step 1: Setup (copy-paste)
- Step 2: Basic usage (calisan output goster)
- Step 3: Build something (gercek problem coz)
- Step 4: Advanced (opsiyonel)
5. NEXT STEPS: Sonra ne yapabilirim? (linkler)
6. TROUBLESHOOTING: Yaygın sorunlar ve cozumleri
00:00 - 00:10 Giris ve motivasyon (demo goster)
00:10 - 00:20 Setup kontrolu (herkes calisiyor mu?)
00:20 - 00:40 Guided exercise 1 (birlikte yapariz)
00:40 - 00:50 Solo exercise 1 (kendiniz yapin)
00:50 - 01:00 Ara + sorular
01:00 - 01:20 Guided exercise 2 (ileri seviye)
01:20 - 01:30 Solo exercise 2
01:30 - 01:40 Showcase (katilimcilar gosterir)
01:40 - 01:50 Q&A + next steps
Title: [Catchy, specific, searchable]
Duration: [15/25/40 min]
Audience Level: [Beginner/Intermediate/Advanced]
OUTLINE:
1. Hook (2 min)
- Surprising stat or demo
- "How many of you have...?"
2. Problem (3 min)
- Pain point everyone recognizes
- Why existing solutions fall short
3. Solution (Main Content) (60% of time)
- Core concept explanation
- Live demo or code walkthrough
- Before/After comparison
4. Deep Dive (20% of time)
- Technical details
- Architecture decisions
- Performance numbers
5. Takeaways (3 min)
- 3 actionable items
- Resources & links
- QR code to slides/repo
| Asama | Kontrol |
|-------|---------|
| Proposal | CFP'ye uygun mu? Abstract compelling mi? |
| Slides | Max 1 nokta per slide, buyuk font (24pt+) |
| Demo | Offline calisir mi? Backup video var mi? |
| Timing | Prova yapildi mi? %10 buffer biraktin mi? |
| Setup | Adaptor, clicker, backup laptop? |
| After | Slides paylastin mi? Repo public mi? |
| Tip | Odak | Ciktilar |
|-----|------|---------|
| Content Advocate | Blog, video, tutorial | Haftalik icerik |
| Community Advocate | Forum, Discord, events | Gunluk etkilesim |
| Technical Advocate | SDK, samples, integrations | Kod + doc |
| Field Advocate | Customer visits, workshops | Aylik workshop |
| Product Advocate | Feedback loop, beta testing | Feature requests |
interface AdvocateMetrics {
content: {
blog_posts: number;
videos: number;
tutorials: number;
total_views: number;
avg_engagement_rate: number;
};
community: {
questions_answered: number;
avg_response_time_hours: number;
community_satisfaction: number; // 1-5
new_members_influenced: number;
};
events: {
talks_given: number;
workshops_run: number;
attendees_reached: number;
post_event_signups: number;
};
product: {
feedback_submitted: number;
features_influenced: number;
beta_testers_recruited: number;
sdk_contributions: number;
};
}
interface GitHubHealth {
stars: number;
star_growth_weekly: number;
forks: number;
open_issues: number;
closed_issues_30d: number;
open_prs: number;
merged_prs_30d: number;
contributors_total: number;
contributors_new_30d: number;
avg_issue_close_time_hours: number;
avg_pr_merge_time_hours: number;
releases_90d: number;
commit_frequency_weekly: number;
code_frequency: { additions: number; deletions: number };
}
// GitHub API ile metrikleri cek
async function fetchGitHubHealth(owner: string, repo: string): Promise<GitHubHealth> {
const headers = { Authorization: `token ${process.env.GITHUB_TOKEN}` };
const [repoData, issues, prs, contributors, releases] = await Promise.all([
fetch(`https://api.github.com/repos/${owner}/${repo}`, { headers }).then(r => r.json()),
fetch(`https://api.github.com/repos/${owner}/${repo}/issues?state=all&per_page=100`, { headers }).then(r => r.json()),
fetch(`https://api.github.com/repos/${owner}/${repo}/pulls?state=all&per_page=100`, { headers }).then(r => r.json()),
fetch(`https://api.github.com/repos/${owner}/${repo}/contributors?per_page=100`, { headers }).then(r => r.json()),
fetch(`https://api.github.com/repos/${owner}/${repo}/releases?per_page=10`, { headers }).then(r => r.json()),
]);
return {
stars: repoData.stargazers_count,
star_growth_weekly: 0, // weekly delta hesapla
forks: repoData.forks_count,
open_issues: repoData.open_issues_count,
closed_issues_30d: issues.filter((i: any) => i.state === "closed").length,
open_prs: prs.filter((p: any) => p.state === "open").length,
merged_prs_30d: prs.filter((p: any) => p.merged_at).length,
contributors_total: contributors.length,
contributors_new_30d: 0,
avg_issue_close_time_hours: 0,
avg_pr_merge_time_hours: 0,
releases_90d: releases.length,
commit_frequency_weekly: 0,
code_frequency: { additions: 0, deletions: 0 },
};
}
| Metrik | Tanim | Hedef |
|--------|-------|-------|
| Stars / Week | Haftalik yeni star | +50/hafta |
| Fork-to-Star Ratio | forks / stars | > %10 |
| Contributor Growth | Aylik yeni contributor | +5/ay |
| Issue Activity | Acilan + kapanan issue | Kapanan > Acilan |
| PR External Ratio | external_prs / total_prs | > %30 |
| Time to First Response | Ilk yanit suresi | < 24 saat |
| Community NPS | Net Promoter Score | > 50 |
# Discord / Slack Channel Yapisi
general/
#announcements # Sadece admin yazabilir, onemli duyurular
#introductions # Yeni uyeler kendini tanitir
#general-chat # Serbest sohbet
support/
#help # Teknik sorular
#bug-reports # Bug raporlari
#feature-requests # Feature istekleri
development/
#contributing # Katki rehberi, PR tartismalari
#architecture # Tasarim tartismalari
#releases # Release duyurulari (webhook)
showcase/
#show-and-tell # Topluluk projeleri
#blog-and-content # Icerik paylasimi
moderation/
#mod-log # Moderasyon kayitlari (sadece mod)
#reports # Kural ihlali raporlari
const botCommands = {
"/help": "Yardim menusu goster",
"/docs <topic>": "Dokumantasyon linki gonder",
"/issue <title>": "GitHub issue olustur",
"/faq": "Sikca sorulan sorular",
"/status": "Servis durumunu goster",
"/version": "Son surum bilgisi",
"/search <query>": "Docs + issues + discussions ara",
"/feedback <message>": "Anonim geri bildirim gonder",
};
| Hafta | Blog | Newsletter | Social | Community |
|-------|------|-----------|--------|-----------|
| 1 | Tutorial | Monthly digest | Thread | Office hours |
| 2 | Case study | - | Tips thread | - |
| 3 | Technical deep dive | - | Demo video | Community call |
| 4 | Changelog/Release | - | Announce | Feedback survey |
| Tip | Frekans | Hedef | Uzunluk |
|-----|---------|-------|---------|
| Tutorial | Haftalik | Yeni kullanicilar | 1500-2500 kelime |
| Technical Deep Dive | 2 haftada 1 | Ileri seviye | 2000-3500 kelime |
| Case Study | Aylik | Social proof | 1000-1500 kelime |
| Release Notes | Her release | Mevcut kullanicilar | 500-1000 kelime |
| Opinion / Thought Leadership | Aylik | SEO + authority | 1500-2500 kelime |
| Boyut | Metrik | Olcum |
|-------|--------|-------|
| Time to Hello World | Ilk calisan ornek suresi | < 5 dakika |
| Error Message Quality | Hatadan cozume sure | Anket + gozlem |
| SDK Ergonomics | API calls per task | Kod analizi |
| Documentation Findability | Arama -> cozum suresi | Kullanici testi |
| Support Response Time | Ilk yanit suresi | Otomatik olcum |
| Breaking Changes | Major version upgrade suresi | Anket |
1. Urunumuzu kullanmaya baslamak ne kadar kolay? (1-5)
2. Dokumantasyonumuz ihtiyacinizi ne kadar karsiyor? (1-5)
3. Hata mesajlari problemi cozmekte ne kadar yardimci? (1-5)
4. SDK/API'miz ne kadar sezgisel? (1-5)
5. Destek ekibimizin yanit suresi nasil? (1-5)
6. En buyuk engel nedir? (acik ucu)
7. Bizi baska developer'lara onerir misiniz? (0-10, NPS)
# Contributing to [Project Name]
Thank you for your interest in contributing!
## How to Contribute
### Reporting Bugs
- Use the bug report template
- Include reproduction steps
- Include environment details (OS, runtime version)
### Suggesting Features
- Check existing issues first
- Use the feature request template
- Explain the use case, not just the solution
### Pull Requests
1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Make your changes
4. Run tests (`npm test`)
5. Run linting (`npm run lint`)
6. Commit with conventional commits (`feat: add amazing feature`)
7. Push to your fork
8. Open a Pull Request
### Development Setup
\```bash
git clone https://github.com/org/project.git
cd project
npm install
cp .env.example .env
npm run dev
\```
### Coding Standards
- TypeScript strict mode
- ESLint + Prettier formatting
- 80% test coverage minimum
- Conventional commits
### Review Process
1. Automated checks must pass (CI)
2. At least 1 maintainer approval
3. No unresolved comments
4. Squash merge to main
## Code of Conduct
This project follows the [Contributor Covenant](https://www.contributor-covenant.org/).
Be respectful, inclusive, and constructive.
| Anti-Pattern | Dogru Yol |
|-------------|-----------|
| "Build it and they will come" | Aktif community management yap |
| Sadece star sayisina bakmak | Contributor diversity ve engagement olc |
| Doc'u bir kere yazip unutmak | CI'da doc freshness check koy |
| Tek kanal community | Multi-platform varlik (GitHub + Discord + Twitter) |
| Sadece ingilizce | i18n doc + lokal community |
| PR'lari haftalarca bekletmek | 72 saat iceinde ilk review |
| Negativity'yi ignore etmek | Code of Conduct + aktif moderasyon |
| Feedback almamak | Duzeli anket + office hours |
Comprehensive spreadsheet creation, editing, and analysis with support for formulas, formatting, data analysis, and visualization. When Claude needs to work with spreadsheets (.xlsx, .xlsm, .csv, .tsv, etc) for: (1) Creating new spreadsheets with formulas and formatting, (2) Reading or analyzing data, (3) Modify existing spreadsheets while preserving formulas, (4) Data analysis and visualization in spreadsheets, or (5) Recalculating formulas
Use this skill any time a spreadsheet file is the primary input or output. This means any task where the user wants to: open, read, edit, or fix an existing .xlsx, .xlsm, .csv, or .tsv file (e.g., adding columns, computing formulas, formatting, charting, cleaning messy data); create a new spreadsheet from scratch or from other data sources; or convert between tabular file formats. Trigger especially when the user references a spreadsheet file by name or path — even casually (like \"the xlsx in my downloads\") — and wants something done to it or produced from it. Also trigger for cleaning or restructuring messy tabular data files (malformed rows, misplaced headers, junk data) into proper spreadsheets. The deliverable must be a spreadsheet file. Do NOT trigger when the primary deliverable is a Word document, HTML report, standalone Python script, database pipeline, or Google Sheets API integration, even if tabular data is involved.
Picks random winners from lists, spreadsheets, or Google Sheets for giveaways, raffles, and contests. Ensures fair, unbiased selection with transparency.
Query openFDA API for drugs, devices, adverse events, recalls, regulatory submissions (510k, PMA), substance identification (UNII), for FDA regulatory data analysis and safety research.
MATLAB and GNU Octave numerical computing for matrix operations, data analysis, visualization, and scientific computing. Use when writing MATLAB/Octave scripts for linear algebra, signal processing, image processing, differential equations, optimization, statistics, or creating scientific visualizations. Also use when the user needs help with MATLAB syntax, functions, or wants to convert between MATLAB and Python code. Scripts can be executed with MATLAB or the open-source GNU Octave interpreter.
UMAP dimensionality reduction. Fast nonlinear manifold learning for 2D/3D visualization, clustering preprocessing (HDBSCAN), supervised/parametric UMAP, for high-dimensional data.
Creating interactive data visualisations using d3.js. This skill should be used when creating custom charts, graphs, network diagrams, geographic visualisations, or any complex SVG-based data visualisation that requires fine-grained control over visual elements, transitions, or interactions. Use this for bespoke visualisations beyond standard charting libraries, whether in React, Vue, Svelte, vanilla JavaScript, or any other environment.
Access AlphaFold 200M+ AI-predicted protein structures. Retrieve structures by UniProt ID, download PDB/mmCIF files, analyze confidence metrics (pLDDT, PAE), for drug discovery and structural biology.
Take vibeeval/developer-relations from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference npm.
Without those the skill loads but fails at the first command.