<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: duct-tape2</title>
    <description>The latest articles on DEV Community by duct-tape2 (@ducttape2).</description>
    <link>https://dev.to/ducttape2</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4023488%2F9ff7cfcd-ad38-4eef-bc49-bae827b04862.png</url>
      <title>DEV Community: duct-tape2</title>
      <link>https://dev.to/ducttape2</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ducttape2"/>
    <language>en</language>
    <item>
      <title>Designing first PRs that do not require a local environment</title>
      <dc:creator>duct-tape2</dc:creator>
      <pubDate>Fri, 10 Jul 2026 05:10:23 +0000</pubDate>
      <link>https://dev.to/ducttape2/designing-first-prs-that-do-not-require-a-local-environment-4ikb</link>
      <guid>https://dev.to/ducttape2/designing-first-prs-that-do-not-require-a-local-environment-4ikb</guid>
      <description>&lt;p&gt;A "good first issue" is not actually beginner-friendly if a contributor must install a mobile app, an API, two speech engines, and model files before changing one sentence.&lt;/p&gt;

&lt;p&gt;I ran into this while preparing &lt;a href="https://github.com/duct-tape2/ai-language-partner" rel="noopener noreferrer"&gt;ai-language-partner&lt;/a&gt;, a local-first Japanese speaking practice app for Korean learners. The full stack includes Expo/React Native, FastAPI, local STT, local TTS, and pre-authored dialogue packs. That is useful for the product, but it is a poor prerequisite for someone's first pull request.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate contribution lanes by setup cost
&lt;/h2&gt;

&lt;p&gt;I split the work into three lanes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Browser-only:&lt;/strong&gt; wording, documentation, API examples, accessibility copy, Korean/Japanese review, and dialogue content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standard development:&lt;/strong&gt; Expo or FastAPI changes with focused package-level checks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full local voice stack:&lt;/strong&gt; work that genuinely needs STT/TTS engines and generated assets.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The browser-only lane is not a typo farm. Each task has user value, a linked issue, a source file, acceptance criteria, and a direct GitHub edit link.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make the next action explicit
&lt;/h2&gt;

&lt;p&gt;Each no-install task tells a contributor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;where the source file is&lt;/li&gt;
&lt;li&gt;what a useful pull request looks like&lt;/li&gt;
&lt;li&gt;how to claim the issue&lt;/li&gt;
&lt;li&gt;what title and closing reference to use&lt;/li&gt;
&lt;li&gt;when no local test is required&lt;/li&gt;
&lt;li&gt;where to ask for help&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project currently has 27 browser-only tasks within 52 scoped public issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automate guidance, not judgment
&lt;/h2&gt;

&lt;p&gt;Automation responds to a claim command, posts a first-PR guide, and prepares a review packet. It does not decide whether a contribution is meaningful.&lt;/p&gt;

&lt;p&gt;The maintainer still checks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;user value&lt;/li&gt;
&lt;li&gt;issue linkage&lt;/li&gt;
&lt;li&gt;focused scope&lt;/li&gt;
&lt;li&gt;honest authorship&lt;/li&gt;
&lt;li&gt;tests where applicable&lt;/li&gt;
&lt;li&gt;no trivial pull-request splitting&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Count people only after useful work merges
&lt;/h2&gt;

&lt;p&gt;I am intentionally not optimizing for raw PR volume. One contributor with one useful merged PR counts. Maintainer-authored PRs, bots, duplicate identities, and split typo PRs do not.&lt;/p&gt;

&lt;p&gt;That policy makes growth slower, but the public contribution record is real and auditable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I am testing next
&lt;/h2&gt;

&lt;p&gt;The open question is whether reducing setup cost is enough to turn discovery into completed contributions. I am tracking claims, opened PRs, review latency, and merged external contributors rather than only stars.&lt;/p&gt;

&lt;p&gt;The repository and hosted demo are public:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/duct-tape2/ai-language-partner" rel="noopener noreferrer"&gt;Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://duct-tape2.github.io/ai-language-partner/demo/" rel="noopener noreferrer"&gt;Hosted demo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://duct-tape2.github.io/ai-language-partner/community/NO_INSTALL_FIRST_PRS.html" rel="noopener noreferrer"&gt;No-install task board&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://duct-tape2.github.io/ai-language-partner/community/FIRST_ISSUE_MATCHER.html" rel="noopener noreferrer"&gt;First-issue matcher&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you maintain a project with a heavy local setup, which tasks have worked well as genuinely useful browser-only contributions?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I used AI coding assistants to help organize parts of the repository workflow and edit this post. I reviewed the final structure, links, and claims.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>contributorswanted</category>
      <category>reactnative</category>
      <category>fastapi</category>
    </item>
  </channel>
</rss>
