<?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: Sean</title>
    <description>The latest articles on DEV Community by Sean (@seann-ch).</description>
    <link>https://dev.to/seann-ch</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%2F4060816%2F448f57b6-e0d7-4a57-b26b-dc51c39174ae.png</url>
      <title>DEV Community: Sean</title>
      <link>https://dev.to/seann-ch</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/seann-ch"/>
    <language>en</language>
    <item>
      <title>We built an IOU tracker that logs favors and chores, not just money — with React Native and (yes) PHP</title>
      <dc:creator>Sean</dc:creator>
      <pubDate>Mon, 03 Aug 2026 14:15:12 +0000</pubDate>
      <link>https://dev.to/seann-ch/we-built-an-iou-tracker-that-logs-favors-and-chores-not-just-money-with-react-native-and-yes-4409</link>
      <guid>https://dev.to/seann-ch/we-built-an-iou-tracker-that-logs-favors-and-chores-not-just-money-with-react-native-and-yes-4409</guid>
      <description>&lt;p&gt;Every expense splitter my friend and I tried answered exactly one question: who owes how much &lt;em&gt;money&lt;/em&gt;. But the things we actually forget aren't only money — the drill someone borrowed, the "I'll get you next time" favor, whose turn it is to do the dishes. None of the money apps could hold any of that.&lt;/p&gt;

&lt;p&gt;So we built &lt;strong&gt;IOweU&lt;/strong&gt;: an IOU tracker for money, borrowed items, favors, and tasks/chores in one place. This post is less a pitch and more a "here's what we built and the two choices people keep asking about" — and a genuine question at the end I can't answer from the inside.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's actually different
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Either side can create the IOU.&lt;/strong&gt; You don't wait for the other person to log it — you can record what &lt;em&gt;you&lt;/em&gt; owe, too.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's not just money&lt;/strong&gt; — borrowed items, favors, and tasks/chores are first-class.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The other person can accept, reject, or propose a change&lt;/strong&gt; instead of you editing it on them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An IOU can be reassigned&lt;/strong&gt; to a third person instead of deleted and recreated.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For families&lt;/strong&gt;, parents assign chores with an optional reward, and a completed chore turns that reward into a normal IOU.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The interesting engineering bit: an IOU is a shared state machine
&lt;/h2&gt;

&lt;p&gt;The part that turned out to be more work than expected: an IOU isn't a record one person owns — it's a &lt;strong&gt;shared object two people mutate&lt;/strong&gt;, and every transition has to be legal from both sides. Ours moves through states like &lt;em&gt;proposed → accepted / rejected / withdrawn → (changes proposed) → settled / waived / reassigned&lt;/em&gt;, with notifications firing on each transition so both sides stay in sync.&lt;/p&gt;

&lt;p&gt;That's a small distributed-consensus problem hiding inside a consumer app. "Who is allowed to do what, in which state" is the real domain model — not the money field everyone assumes is the hard part.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why React Native
&lt;/h2&gt;

&lt;p&gt;Two people, two platforms, one shared domain model that has to behave identically on both. RN let us keep that logic in one place instead of maintaining two native implementations of the same state machine. For a team this size it wasn't really a debate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a PHP backend (the one people raise an eyebrow at)
&lt;/h2&gt;

&lt;p&gt;We already knew PHP well, and boring, well-understood tech let us &lt;strong&gt;ship instead of learning a new stack&lt;/strong&gt;. The backend is mostly state transitions, auth, notifications, and persistence — nothing that needed anything trendier. "Use the thing you can move fastest in" beat "use the thing that looks good in a post." Cheap to host, easy to reason about, and it hasn't been the bottleneck.&lt;/p&gt;

&lt;h2&gt;
  
  
  The question I actually can't answer
&lt;/h2&gt;

&lt;p&gt;Here's what I genuinely can't judge from inside the project: &lt;strong&gt;is "track more than money" a real need, or are we bolting features onto something that should just stay a spreadsheet?&lt;/strong&gt; Every user who tells us they love the item/favor tracking is offset by a worry that people only ever actually log money.&lt;/p&gt;

&lt;p&gt;If your money-only app already does everything you need, I'd honestly like to hear that — that's the most useful feedback we can get right now.&lt;/p&gt;

&lt;p&gt;It's free (no in-app purchases), on iOS and Android: &lt;a href="https://iou.2genio.us" rel="noopener noreferrer"&gt;https://iou.2genio.us&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;iOS: &lt;code&gt;https://apps.apple.com/app/id1519656196&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Android: &lt;code&gt;https://play.google.com/store/apps/details?id=us.twogenio.iou&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>showdev</category>
      <category>reactnative</category>
      <category>php</category>
      <category>startup</category>
    </item>
  </channel>
</rss>
