20 Contributor Sprint
20 Contributor Sprint
This sprint is the practical path to the Claude for OSS community-builder criterion: 20+ unique external contributors with merged PRs in the last 12 months.
The goal is not to manufacture activity. The goal is to make twenty useful, reviewable first contributions genuinely easy.
Current Status
- Repository:
https://github.com/duct-tape2/ai-language-partner - Contributor page:
https://duct-tape2.github.io/ai-language-partner/ - Hosted web demo:
https://duct-tape2.github.io/ai-language-partner/demo/ - Korean contributor page:
https://duct-tape2.github.io/ai-language-partner/ko/ - Japanese contributor page:
https://duct-tape2.github.io/ai-language-partner/ja/ - Contributor landing:
docs/community/CONTRIBUTOR_LANDING.md - Call for contributors:
docs/community/CALL_FOR_CONTRIBUTORS.md - Korean call for contributors:
docs/community/CALL_FOR_CONTRIBUTORS_KO.md - Japanese call for contributors:
docs/community/CALL_FOR_CONTRIBUTORS_JA.md - Call for contributors discussion:
https://github.com/duct-tape2/ai-language-partner/discussions/55 - Web demo prerelease:
https://github.com/duct-tape2/ai-language-partner/releases/tag/demo-web-2026-07-09 - First issue matcher:
docs/community/FIRST_ISSUE_MATCHER.md - Five-minute first PR guide:
docs/community/FIVE_MINUTE_FIRST_PR.md - Korean five-minute first PR guide:
docs/community/FIVE_MINUTE_FIRST_PR_KO.md - Japanese five-minute first PR guide:
docs/community/FIVE_MINUTE_FIRST_PR_JA.md - Language review first PR kit:
docs/community/LANGUAGE_REVIEW_FIRST_PR_KIT.md - Starter issue index:
docs/community/STARTER_ISSUE_INDEX.md - No-install first PR board:
docs/community/NO_INSTALL_FIRST_PRS.mdwith 27 browser-editable issue slots - No-install board sprint update:
https://github.com/duct-tape2/ai-language-partner/issues/52#issuecomment-4914131827 - Contributor sprint status comment:
https://github.com/duct-tape2/ai-language-partner/issues/52#issuecomment-4914319802 - Contributor funnel status comment:
https://github.com/duct-tape2/ai-language-partner/issues/52#issuecomment-4921732560generated byscripts/snapshot_contributor_funnel.py - Contributor call discussion update:
scripts/post_contributor_call_update.pyupdates discussion #55 with the current first-PR routes and contributor-count statushttps://github.com/duct-tape2/ai-language-partner/discussions/55#discussioncomment-17582486 - No-install guide comments:
docs/community/NO_INSTALL_FIRST_PR_COMMENTS.mdgenerated for 27 issues - First PR recipes:
docs/community/FIRST_PR_RECIPES.md - Good first issues:
https://github.com/duct-tape2/ai-language-partner/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 - First issue matcher page:
https://duct-tape2.github.io/ai-language-partner/community/FIRST_ISSUE_MATCHER.html - Discovery labels:
up-for-grabsmarks scoped external work;first-timers-onlymarks the lowest-context issues for a first OSS PR. Current discovery count: 34up-for-grabs, 24first-timers-only, and 26good first issueitems. - Up For Grabs listing PR: merged and live
https://github.com/up-for-grabs/up-for-grabs.net/pull/5916 - Awesome for Beginners listing PR:
https://github.com/MunGell/awesome-for-beginners/pull/2072hosted-demo follow-up:https://github.com/MunGell/awesome-for-beginners/pull/2072#issuecomment-4921750431 - Awesome for Non-Programmers listing PR: merged and live
https://github.com/szabgab/awesome-for-non-programmers/pull/107hosted-demo follow-up:https://github.com/szabgab/awesome-for-non-programmers/pull/107#issuecomment-4921750475 - Awesome Language Learning listing PR:
https://github.com/Vuizur/awesome-language-learning/pull/31hosted-demo follow-up:https://github.com/Vuizur/awesome-language-learning/pull/31#issuecomment-4921750535 - Awesome Japanese Learning Resources listing PR:
https://github.com/ailanguagetutor/awesome-japanese-learning-resources/pull/5 - Awesome Japanese Study Materials listing PR:
https://github.com/naghim/Awesome-Japanese-Study-Materials/pull/8 - Awesome Japanese Resources listing PR:
https://github.com/Sara-Lib/Awesome-Japanese-resources/pull/1 - Awesome Local-First listing PR:
https://github.com/alexanderop/awesome-local-first/pull/46 - Awesome Language Learning Japanese page listing PR:
https://github.com/jqhoogland/awesome-language-learning/pull/20 - Awesome Open Source School listing PR:
https://github.com/zefanja/awesome-opensource-school/pull/16 - Awesome Japanese listing suggestion issue: deferred until the app has a
stronger app-store/release-build path; the hosted web demo is the first
maturity step
https://github.com/yudataguy/awesome-japanese/issues/149 - Discovery listing tracker:
docs/community/DISCOVERY_LISTINGS.md - First PR recipe comments: posted to 26 open
good first issueitems on 2026-07-08; rerunscripts/post_first_pr_recipes.py --applyto create or update marker-based comments. - Evidence packet:
docs/CLAUDE_FOR_OSS_APPLICATION.md - Kickoff issue:
https://github.com/duct-tape2/ai-language-partner/issues/52 - Kickoff issue is pinned on the repository issue list for contributor discovery.
- First PR help desk discussion:
https://github.com/duct-tape2/ai-language-partner/discussions/53 - Contributor interest form:
https://github.com/duct-tape2/ai-language-partner/issues/new?template=contributor_interest.yml - Korean contributor interest form:
https://github.com/duct-tape2/ai-language-partner/issues/new?template=contributor_interest_ko.yml - Japanese contributor interest form:
https://github.com/duct-tape2/ai-language-partner/issues/new?template=contributor_interest_ja.yml - Contributor interest triage workflow:
.github/workflows/contributor-interest-triage.yml - Issue claim guidance workflow:
.github/workflows/issue-claim-guidance.yml - Contributor sprint status workflow:
.github/workflows/contributor-sprint-status.yml - Contributor funnel monitor workflow:
.github/workflows/contributor-funnel-monitor.yml - Contributor call update workflow:
.github/workflows/contributor-call-update.yml - Claude for OSS evidence refresh workflow:
.github/workflows/claude-oss-evidence-refresh.yml - Outreach queue:
docs/community/OUTREACH_QUEUE.json - Outreach messages:
docs/community/OUTREACH_MESSAGES.md - Contributor share kit:
docs/community/SHARE_KIT.md - Outreach batch status workflow:
.github/workflows/outreach-batch-status.ymlupdates the kickoff issue with the next concrete recruiting batch - Starter issue index workflow:
.github/workflows/starter-issue-index.ymlopens a refresh PR instead of pushing directly to protectedmain. - Maintainer review runbook:
docs/community/MAINTAINER_PR_REVIEW_RUNBOOK.md - Maintainer response snippets:
docs/community/MAINTAINER_RESPONSE_SNIPPETS.md - Counted external contributors: 0
- Remaining external contributors needed: 20
- Maintainer-authored PRs do not count.
Sprint Rules
- One counted PR per unique external human contributor.
- Every counted PR must link an issue or clearly name the problem it solves.
- Every counted PR must improve docs, content, accessibility, tests, API examples, setup clarity, or maintainability.
- Every counted PR needs a maintainer review comment before merge.
- Do not count bots, duplicate identities, maintainer-controlled accounts, or trivial PR splits.
Issue Lanes
Use these lanes to invite contributors by skill level and domain. Keep the links focused so a first-time contributor sees a short menu, not a wall of fifty issues.
Contributors can comment /claim on an issue before starting. The
Issue Claim Guidance workflow replies once with the short PR checklist and
reminds them to link the issue from the PR body. It also applies the
claimed label so maintainers can avoid routing two first-time contributors
to the same issue.
| Lane | Target contributors | Starter issues | What counts |
|---|---|---|---|
| Korean docs | Korean-speaking learners and technical writers | #1, #11, #34, #44, #46 | Clearer setup, learner notes, or first-PR guidance |
| Japanese review | Japanese speakers and language reviewers | #2, #8, #35, #37 | Naturalness, beginner safety, tone consistency |
| Dialogue content | Language teachers, JLPT reviewers, bilingual learners | #7, #9, #10, #36, #47 | Reviewed source text without generated audio/binaries |
| Accessibility/mobile | Expo, React Native, accessibility reviewers | #13, #14, #18, #38, #39, #48 | Better labels, touch targets, no narrow-screen overlap |
| Backend/API docs | FastAPI users and API docs contributors | #6, #19, #20, #40, #41 | OpenAPI examples, provider docs, threshold explanations |
| Tests/tooling | Python/TypeScript contributors | #21, #22, #25, #28, #42, #43, #49 | Focused tests or repo checks that run locally/CI |
| Release/community | OSS maintainers and process reviewers | #29, #30, #45, #50, #54 | Cleaner labels, review checklist, roadmap, release/demo process |
20-Slot Contributor Board
Fill this only after real PRs are opened or merged. Do not pre-fill names.
| Slot | Contributor | Issue | PR | Area | Status | Counting decision |
|---|---|---|---|---|---|---|
| 1 | TBD | TBD | TBD | TBD | recruiting | TBD |
| 2 | TBD | TBD | TBD | TBD | recruiting | TBD |
| 3 | TBD | TBD | TBD | TBD | recruiting | TBD |
| 4 | TBD | TBD | TBD | TBD | recruiting | TBD |
| 5 | TBD | TBD | TBD | TBD | recruiting | TBD |
| 6 | TBD | TBD | TBD | TBD | recruiting | TBD |
| 7 | TBD | TBD | TBD | TBD | recruiting | TBD |
| 8 | TBD | TBD | TBD | TBD | recruiting | TBD |
| 9 | TBD | TBD | TBD | TBD | recruiting | TBD |
| 10 | TBD | TBD | TBD | TBD | recruiting | TBD |
| 11 | TBD | TBD | TBD | TBD | recruiting | TBD |
| 12 | TBD | TBD | TBD | TBD | recruiting | TBD |
| 13 | TBD | TBD | TBD | TBD | recruiting | TBD |
| 14 | TBD | TBD | TBD | TBD | recruiting | TBD |
| 15 | TBD | TBD | TBD | TBD | recruiting | TBD |
| 16 | TBD | TBD | TBD | TBD | recruiting | TBD |
| 17 | TBD | TBD | TBD | TBD | recruiting | TBD |
| 18 | TBD | TBD | TBD | TBD | recruiting | TBD |
| 19 | TBD | TBD | TBD | TBD | recruiting | TBD |
| 20 | TBD | TBD | TBD | TBD | recruiting | TBD |
Status values:
recruiting: contributor has not committed to an issue yetassigned: contributor is working on a scoped issuepr-open: PR is open and needs reviewchanges-requested: maintainer left actionable reviewmerged-counted: merged and eligible for the evidence packetmerged-not-counted: merged but excluded from the external contributor count
First Outreach Batch
Use this batch before broad posting. Send targeted messages to people who can review language, docs, or accessibility without installing local engines.
| Batch | Audience | Issues to send | Ask |
|---|---|---|---|
| A | Korean Japanese learners | #1, #11, #34, #46 | Improve Korean explanations or setup notes |
| B | Native/fluent Japanese reviewers | #8, #35, #37 | Review naturalness and beginner level |
| C | React Native/accessibility contributors | #13, #14, #38, #39 | Audit labels, touch targets, small screens |
| D | FastAPI/API docs contributors | #6, #19, #40, #41 | Add examples and provider/status docs |
| E | Test-minded contributors | #21, #22, #25, #42, #49 | Add narrow tests or repo checks |
Message Templates
Short Korean
한국어권 일본어 학습자를 위한 local-first OSS를 공개했습니다.
런타임 LLM 없이 사전 저작 dialogue bank + 로컬 STT/TTS로 회화 연습을 만드는 프로젝트입니다.
처음 기여하기 쉬운 작은 이슈를 찾고 있어요:
{issue_url}
문서/언어 검수 PR도 실제 사용자 가치가 있으면 환영합니다. 생성 음성, 로컬 엔진, private data는 필요 없습니다.
Short Japanese
韓国語話者向けの日本語学習アプリ OSS を公開しました。
実行時に LLM を呼ばず、事前作成の dialogue bank とローカル STT/TTS で会話練習を行う local-first プロジェクトです。
小さな貢献を募集しています:
{issue_url}
日本語の自然さ、初級者向け表現、ドキュメント改善などの PR を歓迎します。
Short English
I opened ai-language-partner, a local-first Japanese speaking practice app for Korean learners.
The core loop avoids runtime LLM calls: local STT, reviewed dialogue-bank lines, and local TTS assets.
I'm looking for small, useful first contributions:
{issue_url}
Docs, content review, accessibility, API examples, and focused tests all help.
Maintainer Review Script
Use this comment shape on every PR that might count:
Thanks for the focused contribution. I checked:
- linked issue / problem statement:
- user or contributor value:
- no generated/private assets:
- no runtime-LLM dependency added:
- relevant check:
Decision: merge / request changes / merge but do not count for Claude for OSS evidence.
New PRs also receive the automated PR Welcome workflow comment. Keep that
comment lightweight: it is contributor guidance, not a counting decision.
Evidence Update
After every merged external PR:
python scripts/build_pr_review_packet.py duct-tape2/ai-language-partner <PR_NUMBER>
python scripts/export_claude_for_oss_evidence.py duct-tape2/ai-language-partner --since 2025-07-08
python scripts/update_claude_application_evidence.py duct-tape2/ai-language-partner --since 2025-07-08
python scripts/verify_claude_for_oss_readiness.py duct-tape2/ai-language-partner
The Claude OSS Evidence Refresh workflow also runs after merged PR activity
and opens a refresh PR when docs/CLAUDE_FOR_OSS_APPLICATION.md changes.
For a non-failing status artifact suitable for weekly monitoring:
python scripts/snapshot_claude_for_oss_status.py duct-tape2/ai-language-partner --since 2025-07-08
python scripts/post_contributor_sprint_status.py duct-tape2/ai-language-partner --since 2025-07-08 --out contributor-sprint-status.md
python scripts/verify_outreach_queue.py
python scripts/render_outreach_messages.py
python scripts/post_first_pr_recipes.py duct-tape2/ai-language-partner --date 2026-07-08
GITHUB_TOKEN=... python scripts/apply_discovery_labels.py duct-tape2/ai-language-partner
Only submit the Phase B application when the readiness script proves 20 unique external merged PR contributors.