<?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: Paul Ayoade</title>
    <description>The latest articles on DEV Community by Paul Ayoade (@phoniexcryptz001).</description>
    <link>https://dev.to/phoniexcryptz001</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%2F3111065%2F09de97c5-afb8-4bb3-ade2-641380434f89.png</url>
      <title>DEV Community: Paul Ayoade</title>
      <link>https://dev.to/phoniexcryptz001</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/phoniexcryptz001"/>
    <language>en</language>
    <item>
      <title>OutsideClass: A Little Less Screen, a Little More World</title>
      <dc:creator>Paul Ayoade</dc:creator>
      <pubDate>Thu, 08 Oct 2026 18:47:52 +0000</pubDate>
      <link>https://dev.to/phoniexcryptz001/outsideclass-a-little-less-screen-a-little-more-world-2p6k</link>
      <guid>https://dev.to/phoniexcryptz001/outsideclass-a-little-less-screen-a-little-more-world-2p6k</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;A learner can read an explanation of symmetry and still walk past a leaf without noticing either half.&lt;/p&gt;

&lt;p&gt;That gap is where &lt;strong&gt;OutsideClass&lt;/strong&gt; starts.&lt;/p&gt;

&lt;p&gt;I built a learning website that turns a question into something you can notice, compare and explain in the world around you. It uses Google's open-weight &lt;strong&gt;Gemma&lt;/strong&gt; model to prepare an explanation and, when the topic suits it, a short observation activity.&lt;/p&gt;

&lt;p&gt;The learning loop is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ask a question. Read the activity. Put the screen away. Observe. Return with something you noticed.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As a teacher, I care about what remains after someone closes a lesson. Can they recognise the idea somewhere else? Can they describe their evidence? Can they consider another explanation?&lt;/p&gt;

&lt;p&gt;OutsideClass gives those questions a place in the learning process.&lt;/p&gt;

&lt;p&gt;An activity card provides a focus, manageable steps, safety notes and questions to think about afterwards. Learners can save reflections, attach their own evidence photos, try practice questions and revisit their discoveries in a notebook.&lt;/p&gt;

&lt;p&gt;For example, the prepared pattern activity asks learners to compare two nearly matching halves of a leaf. They do not need to pick it. The interesting part is looking closely enough to notice where the halves agree and where they differ.&lt;/p&gt;

&lt;p&gt;The diagram introduces the comparison. The learner's observation supplies the evidence.&lt;/p&gt;

&lt;p&gt;OutsideClass is designed for &lt;strong&gt;learners, parents and teachers&lt;/strong&gt;. Activities can be adapted to the time available, weather, time of day and a family or classroom group. Seated and window-based participation are available too.&lt;/p&gt;

&lt;p&gt;The aim is to make the screen a starting point, then give attention back to the world.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A little less screen. A little more world.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://outsideclass-phoenix.vercel.app/" rel="noopener noreferrer"&gt;Try OutsideClass&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://youtu.be/aYUbbZnnJ-I" rel="noopener noreferrer"&gt;Watch the ten-minute walkthrough on YouTube&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The walkthrough covers activities, the timer, reflections, practice questions, notebook backups, image consent and Updates. Its examples are demonstrations, not a report of a completed outdoor lesson.&lt;/p&gt;

&lt;p&gt;You can try the website without signing up or providing a phone number. Start with a labelled sample, read its safety notes, make a suitable observation and save what you noticed.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;strong&gt;Activities&lt;/strong&gt; and choose a labelled sample, or ask your own learning question.&lt;/li&gt;
&lt;li&gt;Select how you will participate and how much time you have.&lt;/li&gt;
&lt;li&gt;Read the activity and its safety notes before starting.&lt;/li&gt;
&lt;li&gt;Observe in a suitable place, then return with a reflection.&lt;/li&gt;
&lt;li&gt;Save the card in &lt;strong&gt;Notebook&lt;/strong&gt; and try its practice questions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Three prepared samples let visitors explore the format without making a fresh model request. They are clearly labelled as samples.&lt;/p&gt;

&lt;p&gt;The current app also includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An activity timer with pause and recovery after refresh.&lt;/li&gt;
&lt;li&gt;Reflections and locally stored evidence photos.&lt;/li&gt;
&lt;li&gt;Practice questions with feedback.&lt;/li&gt;
&lt;li&gt;Saved activities and return visits to named spots.&lt;/li&gt;
&lt;li&gt;Notebook downloads and restoration.&lt;/li&gt;
&lt;li&gt;Printable lessons and classroom activity packs.&lt;/li&gt;
&lt;li&gt;Optional image questions with consent before sending.&lt;/li&gt;
&lt;li&gt;An Updates page with search, category filters and RSS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Personalisation is deliberately simple. An optional first name or nickname and a Learner, Teacher or Parent role can personalise the greeting. These preferences stay in the browser. They are not a verified account and do not provide automatic device sync.&lt;/p&gt;

&lt;p&gt;I have also prepared a ten-minute walkthrough covering the learning flow, notebook, practice, image consent and Updates. Its examples are demonstrations, not a report of a completed outdoor lesson.&lt;/p&gt;

&lt;p&gt;The walkthrough was assembled using Brag, Hyperframes and F5-TTS, with my own voice recording as the narration reference.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/PHONIEXz/OutsideClass" rel="noopener noreferrer"&gt;OutsideClass on GitHub&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The repository is public, and the application source is &lt;strong&gt;MIT-licensed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The repository and its first commits were created on &lt;strong&gt;October 6, 2026&lt;/strong&gt;, during this challenge.&lt;/p&gt;

&lt;p&gt;The README covers local setup, Gemma configuration, privacy boundaries and current limitations. The prepared samples can run locally without an API key.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The starting configuration uses &lt;strong&gt;&lt;code&gt;gemma-4-26b-a4b-it&lt;/code&gt;&lt;/strong&gt;, served through Google's Gemini API.&lt;/p&gt;

&lt;p&gt;The API is the hosting interface. The model requested by OutsideClass is &lt;strong&gt;Gemma&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Gemma generates learning explanations, observation activities and practice questions from the learner's question and selected context. Follow-up requests can include the earlier answer, while return visits can use the learner's selected observation context.&lt;/p&gt;

&lt;p&gt;This makes Gemma part of the main learning flow: it prepares the material that the learner takes into an observation and returns to afterwards.&lt;/p&gt;

&lt;h3&gt;
  
  
  Keeping generated content usable
&lt;/h3&gt;

&lt;p&gt;The server validates bounded inputs, applies a request timeout and asks for a structured response. It checks the returned content before rendering it.&lt;/p&gt;

&lt;p&gt;The API key stays on the server.&lt;/p&gt;

&lt;p&gt;Safety guidance also lives in application code. The app can add relevant notes for children, groups, weather and participation choices, rather than depending entirely on a generated response to remember them.&lt;/p&gt;

&lt;p&gt;Generated explanations can still be wrong. Adults should review lessons for children, and practice results are learning feedback rather than formal grades.&lt;/p&gt;

&lt;h3&gt;
  
  
  Keeping the notebook local
&lt;/h3&gt;

&lt;p&gt;OutsideClass uses HTML, CSS and browser JavaScript, with a Node.js development server and a Vercel API handler for hosted inference. The application has no runtime npm dependencies.&lt;/p&gt;

&lt;p&gt;Saved cards and reflections live in browser localStorage. Evidence photos use IndexedDB. A service worker caches supported pages and resources after an online visit.&lt;/p&gt;

&lt;p&gt;There are two separate image flows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Question images:&lt;/strong&gt; up to two selected images, resized before sending to Google and requiring consent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notebook evidence:&lt;/strong&gt; photos attached to saved work, kept locally and not automatically sent to the model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Weather and time of day are selected manually. The app does not require GPS, camera or microphone access.&lt;/p&gt;

&lt;p&gt;A lesson pack excludes personal reflections and photos. A notebook backup can contain them. Keeping those exports separate helps teachers share a lesson without accidentally sharing a learner's private work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fixing the parts that could lose someone's work
&lt;/h3&gt;

&lt;p&gt;An attractive activity card is not enough if a learner loses the reflection they just wrote.&lt;/p&gt;

&lt;p&gt;During testing, finishing a timer after returning to its card exposed a problem with unsaved practice answers. I fixed that flow so timer completion preserves the open card's work.&lt;/p&gt;

&lt;p&gt;Notebook capacity also refuses new cards at the limit instead of silently removing older discoveries.&lt;/p&gt;

&lt;p&gt;The current release passes &lt;strong&gt;72 automated tests and its build check&lt;/strong&gt;. Coverage includes response validation, provider failures, image consent, practice scoring, storage failures, timer recovery and backup restoration.&lt;/p&gt;

&lt;p&gt;Desktop browser checks exercised live Gemma responses and restoring notes, practice results and evidence photos into a fresh notebook. I also tested the app on my phone, and the flows I tried worked.&lt;/p&gt;

&lt;p&gt;The current limits are clear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fresh Gemma requests need internet.&lt;/li&gt;
&lt;li&gt;Cached pages, prepared samples and saved work can work offline after an online visit.&lt;/li&gt;
&lt;li&gt;The timer is not a background alarm.&lt;/li&gt;
&lt;li&gt;Notebook transfer uses downloaded backups, not automatic cloud sync.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;For me, the value is being able to inspect and change the learning process around an open-weight model.&lt;/p&gt;

&lt;p&gt;Gemma's available weights leave room to explore a different inference deployment later, including local inference on suitable hardware. That option matters for an app intended to move learning beyond a reliable internet connection.&lt;/p&gt;

&lt;p&gt;For this release, I chose hosted inference so learners can open the website without downloading a model. OutsideClass does not currently run Gemma locally, and changing providers would require adapting the server integration.&lt;/p&gt;

&lt;p&gt;Opening the application source is equally useful.&lt;/p&gt;

&lt;p&gt;Someone can inspect how questions become activities, read the safety rules, change the prompts, select another supported Gemma model or build on the notebook tools. A teacher working with a different curriculum can examine the assumptions and adapt them.&lt;/p&gt;

&lt;p&gt;The combination gives others access to the application logic today and a path to experiment with the model's deployment in the future.&lt;/p&gt;

&lt;p&gt;The privacy boundaries come from the application design: notebook reflections and evidence photos stay local, while submitted questions and consented question images are processed by Google.&lt;/p&gt;

&lt;p&gt;That boundary needs to be explained honestly.&lt;/p&gt;

&lt;p&gt;For this challenge, the working contribution is a learning loop that connects an open-weight model to observation, evidence and reflection.&lt;/p&gt;

&lt;p&gt;The next question should sometimes come from something the learner noticed outside, rather than another suggestion on a screen.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;The GitHub repository includes the implementation, commit history and verification notes behind the build. A public DevRelay session is not included in this submission.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Gemma&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;OutsideClass uses Google's Gemma open-weight model to generate its learning explanations, observation activities and practice questions.&lt;/p&gt;

&lt;p&gt;Gemma powers the core feature connecting a learner's question to an activity they can take into the world.&lt;/p&gt;

&lt;p&gt;Gemma is developed by Google. Hosted access is documented in &lt;a href="https://ai.google.dev/gemma/docs/core/gemma_on_gemini_api" rel="noopener noreferrer"&gt;Google's Gemma API guide&lt;/a&gt;. Its model and service terms apply separately from the application's MIT licence.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>MARKET EVIDENCE PROJECT</title>
      <dc:creator>Paul Ayoade</dc:creator>
      <pubDate>Tue, 29 Sep 2026 12:04:38 +0000</pubDate>
      <link>https://dev.to/phoniexcryptz001/-3l0m</link>
      <guid>https://dev.to/phoniexcryptz001/-3l0m</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/phoniexcryptz001/market-evidence-desk-research-with-receipts-25gm" class="crayons-story__hidden-navigation-link"&gt;Market Evidence Desk: Research With Receipts&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/phoniexcryptz001/market-evidence-desk-research-with-receipts-25gm" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Sanity Challenge Path One Submission&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/phoniexcryptz001" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3111065%2F09de97c5-afb8-4bb3-ade2-641380434f89.png" alt="phoniexcryptz001 profile" class="crayons-avatar__image" width="800" height="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/phoniexcryptz001" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Paul Ayoade
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Paul Ayoade
                
                
              
              &lt;div id="story-author-preview-content-4724420" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/phoniexcryptz001" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3111065%2F09de97c5-afb8-4bb3-ade2-641380434f89.png" class="crayons-avatar__image" alt="" width="800" height="800"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Paul Ayoade&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/phoniexcryptz001/market-evidence-desk-research-with-receipts-25gm" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 29&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/phoniexcryptz001/market-evidence-desk-research-with-receipts-25gm" id="article-link-4724420"&gt;
          Market Evidence Desk: Research With Receipts
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/sanitychallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;sanitychallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/sanity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;sanity&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/phoniexcryptz001/market-evidence-desk-research-with-receipts-25gm" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt;&amp;nbsp;reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/phoniexcryptz001/market-evidence-desk-research-with-receipts-25gm#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Market Evidence Desk: Research With Receipts</title>
      <dc:creator>Paul Ayoade</dc:creator>
      <pubDate>Tue, 29 Sep 2026 11:53:47 +0000</pubDate>
      <link>https://dev.to/phoniexcryptz001/market-evidence-desk-research-with-receipts-25gm</link>
      <guid>https://dev.to/phoniexcryptz001/market-evidence-desk-research-with-receipts-25gm</guid>
      <description>&lt;p&gt;This is my submission for the &lt;a href="https://dev.to/devteam/join-the-sanity-challenge-2500-in-prizes-for-five-winners-514m"&gt;Sanity Challenge, Path One: Ship an Agent That Queries Real Content&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Market Evidence Desk is a public research tool for questions where a confident answer can be misleading. It focuses on crypto investor protection: proof of reserves, custody, deposit insurance, stablecoins, and the difference between international recommendations and protections actually in force.&lt;/p&gt;

&lt;p&gt;Consider a question that sounds simple: &lt;strong&gt;Can a proof-of-reserves report show that customers’ assets are safe?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Kraken describes how a customer can check whether their balance was included in a reserves snapshot. The PCAOB and SEC explain limits that such a snapshot may leave unanswered, including liabilities and what happens outside the snapshot. These publications address different parts of the question. Treating one as the complete answer would mislead a reader.&lt;/p&gt;

&lt;p&gt;The desk connects each dated claim to its original publication and research question. Visitors can inspect those connections themselves, compare attributed positions, and ask an AI agent to draft an answer from the Sanity evidence.&lt;/p&gt;

&lt;p&gt;As checked on October 1, 2026, the &lt;strong&gt;public published Sanity graph contains 101 research questions, 112 linked evidence claims, and 22 source records covering 21 distinct original URLs&lt;/strong&gt;. The relationships matter more than the count: a reader can move from a question to each claim, then to its source, date, excerpt, and recorded review information.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://market-evidence-desk.vercel.app/" rel="noopener noreferrer"&gt;Open Market Evidence Desk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://market-evidence-desk.vercel.app/web/atlas.html" rel="noopener noreferrer"&gt;Browse the evidence atlas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://market-evidence-desk.vercel.app/web/compare.html" rel="noopener noreferrer"&gt;Compare attributed claims&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://market-evidence-desk.vercel.app/web/sources.html" rel="noopener noreferrer"&gt;Inspect the sources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://market-evidence-desk.vercel.app/web/agent.html?case=dispute" rel="noopener noreferrer"&gt;Ask the agent about a disagreement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/947uwSq7p9M" rel="noopener noreferrer"&gt;Watch the video walkthrough&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  A three-step test for judges
&lt;/h3&gt;

&lt;p&gt;The public desk requires no sign-in.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the &lt;a href="https://market-evidence-desk.vercel.app/web/agent.html?case=dispute" rel="noopener noreferrer"&gt;AI agent disagreement case&lt;/a&gt; and press &lt;strong&gt;Ask the sources&lt;/strong&gt;. The answer may take up to two minutes. Look at the cited publications and the Sanity tools reported for that run.&lt;/li&gt;
&lt;li&gt;Open &lt;a href="https://market-evidence-desk.vercel.app/web/compare.html" rel="noopener noreferrer"&gt;Compare&lt;/a&gt; to see the positions attributed separately. Follow a claim into the &lt;a href="https://market-evidence-desk.vercel.app/web/research.html" rel="noopener noreferrer"&gt;research desk&lt;/a&gt; or &lt;a href="https://market-evidence-desk.vercel.app/web/sources.html" rel="noopener noreferrer"&gt;sources page&lt;/a&gt;, then inspect its original publication.&lt;/li&gt;
&lt;li&gt;Try the agent’s &lt;strong&gt;live price&lt;/strong&gt; case. The historical source collection has no live market feed. The answer should acknowledge that boundary instead of inventing a current Bitcoin price or a buy recommendation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The guided comparison reads published Sanity records directly, so visitors can still inspect the evidence if the model service is temporarily slow. The research desk labels its fictional demonstration separately from published evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/PHONIEXz/market-evidence-desk" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt; · &lt;a href="https://github.com/PHONIEXz/market-evidence-desk/blob/main/README.md" rel="noopener noreferrer"&gt;Architecture, setup, and limitations&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Used Sanity
&lt;/h2&gt;

&lt;p&gt;I modeled the research as three linked document types in Sanity:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;&lt;code&gt;source&lt;/code&gt;&lt;/strong&gt; records an original publication, its URL, publication date, and scope.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;&lt;code&gt;marketEvent&lt;/code&gt;&lt;/strong&gt; represents a focused research question.&lt;/li&gt;
&lt;li&gt;An &lt;strong&gt;&lt;code&gt;evidenceClaim&lt;/code&gt;&lt;/strong&gt; connects one question to one source. It records the claim, its stance (&lt;code&gt;supports&lt;/code&gt;, &lt;code&gt;conflicts&lt;/code&gt;, or &lt;code&gt;context&lt;/code&gt;), its observation date, and its source-check fields.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This structure gives a claim two essential links: &lt;strong&gt;What question does it address? Which publication supports its wording?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The site assembles a dossier from those links and shows where sources discuss different scopes. A company description of a customer snapshot, for example, can appear as context beside regulatory cautions about broader assurance. The interface does not force them into a false yes-or-no vote.&lt;/p&gt;

&lt;p&gt;Sanity Studio is the editing and review surface. The public site reads the &lt;strong&gt;published&lt;/strong&gt; graph through a read-only server route. Claim cards can show an excerpt, its location in the publication, and a recorded editor source check. That check describes an editor’s attestation. It is not an independent audit of the publication or approval of everything the AI might say.&lt;/p&gt;

&lt;p&gt;Question approval and claim source checks are displayed separately. For example, a dossier can show &lt;strong&gt;“Question approved · 3/3 claims source checked”&lt;/strong&gt; while still telling readers to open the original publications and assess the limits of the evidence themselves.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where Sanity Context enters
&lt;/h3&gt;

&lt;p&gt;I pointed Sanity Context at the &lt;code&gt;production&lt;/code&gt; dataset and a separate SEC investor-alert page to build the &lt;strong&gt;Market Evidence Desk Sourcebook Knowledge Base&lt;/strong&gt;. Its dataset selection is bounded to fit the Knowledge Base document budget. The published dataset remains available to the agent through a Context MCP endpoint that supports GROQ queries.&lt;/p&gt;

&lt;p&gt;For an agent question, the Python agent uses two Sanity Context tools:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;groq_query&lt;/code&gt;&lt;/strong&gt; retrieves the linked, published question, claim, and source records.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;knowledge_base_read&lt;/code&gt;&lt;/strong&gt; retrieves relevant Sourcebook entries and their source context.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The agent then drafts an answer that attributes positions and provides source links. The server checks that both required retrieval tools ran before returning a completed research answer. The public interface displays the tool names reported for the run. Model and organization credentials stay on the server.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why the structure changes the answer
&lt;/h3&gt;

&lt;p&gt;A keyword search for “proof of reserves safe” can retrieve several pages. By itself, it does not tell the agent which statement is a company’s account of its own process, which is a regulator’s caution, which research question each statement addresses, or whether a claim was checked against a specific passage.&lt;/p&gt;

&lt;p&gt;The Sanity records supply those connections. GROQ follows a claim’s references to its question and source. The Sourcebook supplies navigable, source-linked context. The agent can use both to explain &lt;strong&gt;what each publication establishes and what it leaves open&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A second test concerns two SEC publications dated April 4, 2025. One describes a Division of Corporation Finance staff view of stablecoin issuer practices involving reserve reports. Commissioner Caroline A. Crenshaw challenges what such reports demonstrate. The desk identifies the speakers and keeps their positions distinct. It does not present either publication as a finding that a particular stablecoin is safe today.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sanity Project Details
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sanity project ID:&lt;/strong&gt; &lt;code&gt;cxjysvlq&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dataset:&lt;/strong&gt; &lt;code&gt;production&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Public dataset:&lt;/strong&gt; &lt;a href="https://cxjysvlq.api.sanity.io/v2025-08-15/data/query/production?query=%2A%5B_type%20in%20%5B%22source%22%2C%22marketEvent%22%2C%22evidenceClaim%22%5D%5D%5B0...20%5D%7B_id%2C_type%2Ctitle%7D" rel="noopener noreferrer"&gt;Query published source, question, and claim records&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosted Sanity Studio:&lt;/strong&gt; &lt;a href="https://phoniex-market-evidence-desk.sanity.studio/" rel="noopener noreferrer"&gt;phoniex-market-evidence-desk.sanity.studio&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sourcebook Knowledge Base ID:&lt;/strong&gt; &lt;code&gt;kbu9WNgZ9ocF&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Knowledge Base is a selected index, while the public graph contains the published research records. Their counts can differ. Publishing a dataset change also does not, by itself, prove that a previously built Sourcebook entry has incorporated it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agent Session and Evaluation
&lt;/h2&gt;

&lt;p&gt;I saved a &lt;a href="https://github.com/PHONIEXz/market-evidence-desk/blob/main/agent-sessions/2026-09-30-public-session.md" rel="noopener noreferrer"&gt;public ten-question agent session&lt;/a&gt; with returned answers, reported Sanity Context tool calls, and criteria used to check each response. Eight questions passed the first run. Two failed, including a service error that I counted as a failure.&lt;/p&gt;

&lt;p&gt;After changes to retries and source validation, I &lt;a href="https://github.com/PHONIEXz/market-evidence-desk/blob/main/agent-sessions/2026-09-30-retest.md" rel="noopener noreferrer"&gt;reran the same ten questions&lt;/a&gt;. All ten returned HTTP 200 on the first call and passed those original core criteria. This is a small recorded test, not a promise that an external model service will never fail.&lt;/p&gt;

&lt;p&gt;The tests include source comparison, the SEC staff and Commissioner disagreement, and a live Bitcoin price and buy-advice question that the historical evidence cannot answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;The difficult part was preserving the limits of each source. A dated investor alert, a company’s explanation, an international recommendation, and a Commissioner’s statement do not carry the same authority or answer the same question.&lt;/p&gt;

&lt;p&gt;Sanity let me keep those distinctions in the content itself: separate records, explicit references, dates, stances, source locations, and review fields. Sanity Context then gave the agent a way to retrieve that structure and the Sourcebook context before writing.&lt;/p&gt;

&lt;p&gt;The result is a research draft whose claims a reader can trace back to the original publications, challenge, and revise. Market Evidence Desk remains a historical evidence tool. It has no live price feed and does not issue trading decisions. Its AI answers are drafts for readers to check against the receipts.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>sanitychallenge</category>
      <category>sanity</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
