<?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: Chinonyerem</title>
    <description>The latest articles on DEV Community by Chinonyerem (@chnnyrm).</description>
    <link>https://dev.to/chnnyrm</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%2F4219379%2F1f040760-aa58-4784-8a53-4572c1ee8c02.png</url>
      <title>DEV Community: Chinonyerem</title>
      <link>https://dev.to/chnnyrm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chnnyrm"/>
    <language>en</language>
    <item>
      <title>I asked an AI Builder to build a forecasting app in one pass.</title>
      <dc:creator>Chinonyerem</dc:creator>
      <pubDate>Sat, 31 Oct 2026 17:02:24 +0000</pubDate>
      <link>https://dev.to/chnnyrm/i-asked-an-ai-builder-to-build-a-forecasting-app-in-one-pass-3dke</link>
      <guid>https://dev.to/chnnyrm/i-asked-an-ai-builder-to-build-a-forecasting-app-in-one-pass-3dke</guid>
      <description>&lt;p&gt;I wanted a forecasting app. Not a dashboard, not a chart with a line on it. An app that takes positions on prediction markets and keeps a record of those positions,so that when someone claims they called it, you can check when they actually said it.&lt;/p&gt;

&lt;p&gt;I wrote a specification. It was long. It named the fonts, the sizes, the spacing scale, the radius rules, and the exact hex values. Then I pressed generate.&lt;/p&gt;

&lt;p&gt;The app came back in about five minutes, working, with a server proxy and three screens. It had also read every one of those colour instructions and applied them&lt;br&gt;
backwards.&lt;/p&gt;

&lt;p&gt;Here is what happened. The design system has a token called &lt;code&gt;primary&lt;/code&gt;. In that system &lt;code&gt;primary&lt;/code&gt; is the colour of text. The generated components used it as a&lt;br&gt;
background. So &lt;code&gt;bg-primary&lt;/code&gt; painted the page white, and the accent came out blue,which is the colour the design system uses before you tell it anything.&lt;/p&gt;

&lt;p&gt;The colours were not missing. They were defined exactly as I asked, sitting in the config, unused, while the page rendered in the default palette. &lt;br&gt;
It is a specific kind of failure: the instructions were followed, and then ignored.&lt;/p&gt;

&lt;p&gt;I fixed it by overriding five custom properties and setting one attribute on the html element. That is the whole fix. It took twenty minutes to find and two minutes to apply.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the app actually does
&lt;/h2&gt;

&lt;p&gt;Prediction markets are markets where people trade on whether something will happen. The price of a position is roughly what the market thinks the chance is. If&lt;br&gt;
a position costs six cents, the market is saying six percent.&lt;/p&gt;

&lt;p&gt;Reckon reads those markets, lets you take a position, and writes that position to Walrus Memory before the outcome is known. Walrus Memory stores the data as objects&lt;br&gt;
on the Sui blockchain, which means the write carries a timestamp that nobody can backdate.&lt;/p&gt;

&lt;p&gt;Then it grades every position against the current price. Not against how the market&lt;br&gt;
resolved, because these markets resolve in 2027 and a grading system that waits for&lt;br&gt;
resolution shows you an empty table for a year.&lt;/p&gt;

&lt;p&gt;The second customer is software. An AI agent working on someone's behalf needs to&lt;br&gt;
decide whether a forecast is worth trusting. It cannot make an account. It has no email address, it cannot accept terms, and it has no way to read a reputation. So&lt;br&gt;
Reckon answers its request with a price. The agent pays one cent of USDC on Sui testnet, and the payment is gasless, so the agent does not need any SUI for fees.&lt;br&gt;
Reckon reads that transaction on chain, and returns the forecast.&lt;/p&gt;

&lt;p&gt;One payment, one call. Send the same payment twice and it is refused.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bit that was genuinely hard
&lt;/h2&gt;

&lt;p&gt;Walrus Memory writes are asynchronous. You ask it to remember something, it hands&lt;br&gt;
you a job, and about twelve seconds later a blob exists. So the record cannot be read from your own file, because a serverless function does not keep one between requests. It has to be read back from the memory service.&lt;/p&gt;

&lt;p&gt;That means the memory service is the database, and the local file is a cache. Which is fine, until recall fails and you serve a cache and the page shows four positions&lt;br&gt;
where there are seven, with nothing on screen to say so. We added a line that names the reason. A short list that looks complete is worse than an error.&lt;/p&gt;

&lt;p&gt;The other thing worth knowing: recall needs a seal session. Without one, the service returns a successful response with an empty list and a field called&lt;br&gt;
&lt;code&gt;dropped_count&lt;/code&gt; with a number greater than zero. It looks exactly like an empty namespace. We spent time looking for a bug in our own write path before working out&lt;br&gt;
that the data was there and simply would not decrypt.&lt;/p&gt;

&lt;h2&gt;
  
  
  About the builder
&lt;/h2&gt;

&lt;p&gt;The generated code was readable, and extending it was not painful. The workflow around it was the problem.&lt;/p&gt;

&lt;p&gt;There is no way to edit code in the builder itself. The interface says coming soon.&lt;br&gt;
So every small change is another prompt, and a prompt that changes one line regenerates a lot more than one line.&lt;/p&gt;

&lt;p&gt;The sync also only runs one way. The builder pushes to GitHub. There is no way to pull hand written changes back into the builder's copy. Once I had edited the project outside the builder, those two copies could never meet again. Which is a strange limitation for a tool whose whole purpose is to generate a project you then own.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would tell someone starting
&lt;/h2&gt;

&lt;p&gt;Write the specification. It is worth it, even when the tool gets parts of it wrong.&lt;/p&gt;

&lt;p&gt;Then expect to finish the work by hand. The generated shell is a real head start,and the part that takes the time is never the shell.&lt;/p&gt;

&lt;p&gt;Also: check what it did with your colours. Not whether it used them. Whether it used them the right way round.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>walrus</category>
      <category>tatum</category>
      <category>sui</category>
    </item>
  </channel>
</rss>
