<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://sherikxd.github.io/blog/</id>
    <title>Andrei Sherikhov Blog</title>
    <updated>2026-10-01T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://sherikxd.github.io/blog/"/>
    <subtitle>Andrei Sherikhov Blog</subtitle>
    <icon>https://sherikxd.github.io/img/favicon.svg</icon>
    <entry>
        <title type="html"><![CDATA[ayudaencali: a map that refuses to break]]></title>
        <id>https://sherikxd.github.io/blog/2026/10/01/ayudaencali-offline-first/</id>
        <link href="https://sherikxd.github.io/blog/2026/10/01/ayudaencali-offline-first/"/>
        <updated>2026-10-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[how i built a community emergency platform for cali that keeps working when supabase, gemini or the whole network dies.]]></summary>
        <content type="html"><![CDATA[<p>so this is the story of <strong>ayudaencali</strong>, a community emergency platform for
santiago de cali. interactive map, a needs board where the neighborhood posts
what it actually needs, and an ai assistant called <code>CaliSolidaria IA</code> on top
of the real data.</p>
<!-- -->
<p>the interesting part is not the features. it is that i built the whole thing
around one rule:</p>
<blockquote>
<p>nothing is allowed to leave a white screen.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-fallback-chain">the fallback chain<a href="https://sherikxd.github.io/blog/2026/10/01/ayudaencali-offline-first/#the-fallback-chain" class="hash-link" aria-label="Direct link to the fallback chain" title="Direct link to the fallback chain" translate="no">​</a></h2>
<p>every external service has a plan b (and sometimes a plan c):</p>
<ul>
<li class=""><strong>database:</strong> supabase → in-memory cache → <code>localStorage</code></li>
<li class=""><strong>ai:</strong> gemini → a local directory of emergency points, so the chat still
answers</li>
<li class=""><strong>server:</strong> if the browser can't even reach the api, the ui reads what it
already has</li>
</ul>
<p>so if supabase explodes, the api answers from memory. if the api is down, the
frontend reads <code>localStorage</code>. in no case does the user get nothing.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-it-actually-uses">what it actually uses<a href="https://sherikxd.github.io/blog/2026/10/01/ayudaencali-offline-first/#what-it-actually-uses" class="hash-link" aria-label="Direct link to what it actually uses" title="Direct link to what it actually uses" translate="no">​</a></h2>
<table><thead><tr><th>layer</th><th>stuff</th></tr></thead><tbody><tr><td>frontend</td><td>react 19 + typescript, vite, tailwind 4, leaflet</td></tr><tr><td>backend</td><td>node + express, and on vercel <strong>one function per route</strong></td></tr><tr><td>data</td><td>supabase (postgresql + rls, 4 tables) with memory cache</td></tr><tr><td>auth</td><td>clerk (jwt verified on the server, never trusted from the body)</td></tr><tr><td>ai</td><td>google gemini with a local fallback</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-bits-nobody-puts-in-a-demo">the bits nobody puts in a demo<a href="https://sherikxd.github.io/blog/2026/10/01/ayudaencali-offline-first/#the-bits-nobody-puts-in-a-demo" class="hash-link" aria-label="Direct link to the bits nobody puts in a demo" title="Direct link to the bits nobody puts in a demo" translate="no">​</a></h2>
<ul>
<li class=""><strong>rate limiting</strong>: 60 writes/min and 15 chat messages/min per ip. yes, i got
tired of my own spam during testing.</li>
<li class=""><strong>rate limits change per environment</strong>: on vercel each function has its own
counter, on express they share one. documented, not discovered in prod.</li>
<li class=""><strong>a real 404</strong>: <code>public/404.html</code> with <code>noindex</code>, served with an actual 404
status. the spa no longer returns 200 for a url that doesn't exist.</li>
<li class=""><strong>cookie consent that matters</strong>: third-party fonts only load if you say yes.
i didn't want to be <em>that</em> site.</li>
<li class=""><strong>ci as a gate</strong>: <code>tsc --noEmit</code> → build → jsdom tests → a 60-check smoke
test against the vercel routes. vercel only runs <code>vite build</code>, so this
pipeline is the only thing stopping me from shipping broken types.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="deploy">deploy<a href="https://sherikxd.github.io/blog/2026/10/01/ayudaencali-offline-first/#deploy" class="hash-link" aria-label="Direct link to deploy" title="Direct link to deploy" translate="no">​</a></h2>
<p>free tier everything: vercel hobby (10 functions, 2 slots left), supabase,
clerk, cloudinary for images. plus a dockerfile that runs the same
<code>server.ts</code> if i ever want cloud run instead.</p>
<p>live: <a href="https://www.ayudaencali.lat/" target="_blank" rel="noopener noreferrer" class="">https://www.ayudaencali.lat</a> · code:
<a href="https://github.com/Sherikxd/AyudaEnCali" target="_blank" rel="noopener noreferrer" class="">github.com/Sherikxd/AyudaEnCali</a></p>]]></content>
        <author>
            <name>Andrei Sherikhov</name>
            <uri>https://github.com/Sherikxd</uri>
        </author>
        <category label="devlog" term="devlog"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[trying to catch fires before they spread]]></title>
        <id>https://sherikxd.github.io/blog/2026/09/26/fire-detection-in-48-hours/</id>
        <link href="https://sherikxd.github.io/blog/2026/09/26/fire-detection-in-48-hours/"/>
        <updated>2026-09-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[natureintelligence: satellite telemetry, iot stations and thermal cameras to detect forest fires early around cali and the valle del cauca.]]></summary>
        <content type="html"><![CDATA[<p>fire season in the valle del cauca is no joke, so for a hackathon i built
<strong>natureintelligence</strong>: early detection of forest fires for santiago de cali
and the valley, with real-time verification.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-the-signal-comes-from">where the signal comes from<a href="https://sherikxd.github.io/blog/2026/09/26/fire-detection-in-48-hours/#where-the-signal-comes-from" class="hash-link" aria-label="Direct link to where the signal comes from" title="Direct link to where the signal comes from" translate="no">​</a></h2>
<p>four sources, because one is never enough:</p>
<ol>
<li class=""><strong>nasa firms / viirs</strong> + <strong>noaa goes-16</strong> satellite telemetry</li>
<li class="">a network of <strong>iot stations</strong> on the hills of cali (esp32, raspberry pi,
lorawan)</li>
<li class=""><strong>ptz thermal cameras</strong> with computer vision</li>
<li class="">a <strong>decision engine</strong> with ai on top of all of it</li>
</ol>
<p>the engine's job is not "detect smoke", it is <strong>filter</strong>: confirmed dispatch,
discarded false positive, or early monitoring. sending a truck for a sun glare
on a solar panel is how you burn budget and credibility.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="realtime-actually-realtime">realtime, actually realtime<a href="https://sherikxd.github.io/blog/2026/09/26/fire-detection-in-48-hours/#realtime-actually-realtime" class="hash-link" aria-label="Direct link to realtime, actually realtime" title="Direct link to realtime, actually realtime" translate="no">​</a></h2>
<ul>
<li class="">alerts over <strong>server-sent events</strong> (<code>/stream</code>)</li>
<li class="">telemetry over <strong>websockets</strong> (<code>/ws</code>)</li>
<li class="">a rest api to ingest hardware readings and query sensors</li>
<li class="">a sandbox with fire scenarios you can trigger manually</li>
</ul>
<p>the fun part was the <strong>spread simulator</strong> (rothermel model) in the web panel.
you pick wind and terrain, it shows where the fire would go, and you can
dispatch via whatsapp from the same screen.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="testing-is-what-kept-it-alive">testing is what kept it alive<a href="https://sherikxd.github.io/blog/2026/09/26/fire-detection-in-48-hours/#testing-is-what-kept-it-alive" class="hash-link" aria-label="Direct link to testing is what kept it alive" title="Direct link to testing is what kept it alive" translate="no">​</a></h2>
<p>we had 48 hours, so the test suite was the thing that let me refactor without
fear:</p>
<table><thead><tr><th>test</th><th>what it protects</th></tr></thead><tbody><tr><td><code>sseEvents.test.ts</code></td><td>the contract of event names</td></tr><tr><td><code>server.test.ts</code></td><td>the real server: live sse, <code>/api/simulate/spread</code></td></tr><tr><td><code>websocketService.test.ts</code></td><td>outgoing queue during handshake, manual close</td></tr><tr><td><code>fireSpreadSimulator.test.tsx</code></td><td>the real model, not a mock</td></tr><tr><td><code>snippets.test.ts</code></td><td>that every snippet in the ui actually compiles</td></tr></tbody></table>
<p><code>npm run check</code> = typecheck + the whole suite. if it is green, push.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="honest-scope">honest scope<a href="https://sherikxd.github.io/blog/2026/09/26/fire-detection-in-48-hours/#honest-scope" class="hash-link" aria-label="Direct link to honest scope" title="Direct link to honest scope" translate="no">​</a></h2>
<p>the demo works end to end for alerts, telemetry, streaming and simulation.
whatsapp dispatch and the external llm analysis are wired but stay
simulated until a real provider is configured. i'd rather say that than
pretend.</p>
<p>code: <a href="https://github.com/Sherikxd/deteccion-incendio-hackathon" target="_blank" rel="noopener noreferrer" class="">github.com/Sherikxd/deteccion-incendio-hackathon</a> ·
live: <a href="https://deteccion-incendio-hackathon.vercel.app/" target="_blank" rel="noopener noreferrer" class="">deteccion-incendio-hackathon.vercel.app</a></p>]]></content>
        <author>
            <name>Andrei Sherikhov</name>
            <uri>https://github.com/Sherikxd</uri>
        </author>
        <category label="devlog" term="devlog"/>
        <category label="ai" term="ai"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[2nd place at the EAG Global Buildathon]]></title>
        <id>https://sherikxd.github.io/blog/2026/09/22/second-place-eag-global-buildathon/</id>
        <link href="https://sherikxd.github.io/blog/2026/09/22/second-place-eag-global-buildathon/"/>
        <updated>2026-09-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[second place with Áureo at the EAG Global Buildathon in cali — 48 hours, 13 projects, 200 USDT on ethereum mainnet.]]></summary>
        <content type="html"><![CDATA[<p>on september 20, 2026, at the auditorio sidoc of universidad icesi in cali,
they announced the winners of the <strong>EAG Global Buildathon</strong> — the ethcali
builders tour stop — and i got <strong>2nd place</strong> with <strong>Áureo</strong>.</p>
<!-- -->
<p>25+ hackers, 13 projects, less than 48 hours. the track was <em>application
middleware &amp; open-source tooling</em> and the prize was 200 usdt paid on ethereum
mainnet.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-project-aureo">the project: aureo<a href="https://sherikxd.github.io/blog/2026/09/22/second-place-eag-global-buildathon/#the-project-aureo" class="hash-link" aria-label="Direct link to the project: aureo" title="Direct link to the project: aureo" translate="no">​</a></h2>
<p>áureo is open-source ethereum middleware for risk and compliance. it watches
corporate transfers registered on chain and evaluates them in real time with
deterministic speed and volume rules. then it returns a risk verdict —
<strong>high / medium / low</strong> — through cli, api and websocket, with the evidence
auditable behind it.</p>
<p>short version: it is a camera in front of <em>your</em> building, not in front of the
whole city. it only watches the contract you configure, and it tells you when
something looks off.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-the-weekend-actually-went">how the weekend actually went<a href="https://sherikxd.github.io/blog/2026/09/22/second-place-eag-global-buildathon/#how-the-weekend-actually-went" class="hash-link" aria-label="Direct link to how the weekend actually went" title="Direct link to how the weekend actually went" translate="no">​</a></h2>
<ul>
<li class=""><strong>friday night</strong>: repo, <code>AureoCore.sol</code>, hardhat + ignition, one contract
with roles and a circuit breaker.</li>
<li class=""><strong>saturday</strong>: the backend ingesting logs over rpc, a 60s analysis window and
the two deterministic rules (too many ops in a few blocks, absurd volume).</li>
<li class=""><strong>saturday night</strong>: websocket <code>/stream</code>, cli and the audit report. this is
where sleep stopped being a priority.</li>
<li class=""><strong>sunday</strong>: docs, <code>npm run docker:up</code> so a judge could run the whole thing
with one command, and a demo dapp to show the sdk live.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-i-take-from-it">what i take from it<a href="https://sherikxd.github.io/blog/2026/09/22/second-place-eag-global-buildathon/#what-i-take-from-it" class="hash-link" aria-label="Direct link to what i take from it" title="Direct link to what i take from it" translate="no">​</a></h2>
<p>honestly, the win was not the money. it was that the thing they clicked
<strong>worked on their machine</strong> — no "clone it and pray" moment. everything was
scripted: <code>setup:env</code>, <code>docker:up</code>, <code>cli stream</code>.</p>
<p>also: i'm 18 and i've been writing code since i was 7. seeing my name on that
list next to people i follow was a strange, very good feeling.</p>
<p>official winners:
<a href="https://www.ethcali.org/builders-tour/winners" target="_blank" rel="noopener noreferrer" class="">ethcali.org/builders-tour/winners</a> ·
project on devfolio: <a href="https://devfolio.co/projects/aureo-f338" target="_blank" rel="noopener noreferrer" class="">devfolio.co/projects/aureo-f338</a></p>]]></content>
        <author>
            <name>Andrei Sherikhov</name>
            <uri>https://github.com/Sherikxd</uri>
        </author>
        <category label="hackathon" term="hackathon"/>
        <category label="web3" term="web3"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[áureo: watching ethereum for sketchy transfers]]></title>
        <id>https://sherikxd.github.io/blog/2026/09/21/aureo-explained/</id>
        <link href="https://sherikxd.github.io/blog/2026/09/21/aureo-explained/"/>
        <updated>2026-09-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[how áureo turns on-chain events into an auditable risk verdict: deterministic rules first, llm second, cli/api/websocket out.]]></summary>
        <content type="html"><![CDATA[<p>áureo is the project that got me 2nd place at the EAG Global Buildathon, so
here is a less glamorous, more technical explanation of what is inside.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-problem">the problem<a href="https://sherikxd.github.io/blog/2026/09/21/aureo-explained/#the-problem" class="hash-link" aria-label="Direct link to the problem" title="Direct link to the problem" translate="no">​</a></h2>
<p>apps that move corporate money on ethereum usually have on-chain events on one
side, risk rules on another, compliance alerts on a third, and whatever
investigation tool the team uses on a fourth. by the time someone notices a
weird pattern, it is a postmortem.</p>
<p>áureo is a middleware that sits in the middle: it records operations and
alerts in <code>AureoCore</code>, watches events in real time, applies deterministic
rules, and exposes the result through <strong>api, websocket, cli and sdk</strong>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="rules-first-llm-second">rules first, llm second<a href="https://sherikxd.github.io/blog/2026/09/21/aureo-explained/#rules-first-llm-second" class="hash-link" aria-label="Direct link to rules first, llm second" title="Direct link to rules first, llm second" translate="no">​</a></h2>
<p>the deterministic rules run <em>before</em> any llm call:</p>
<ul>
<li class=""><strong>block speed</strong>: more than 3 operations from the same address within a
5-block window → risk <code>alto</code> and <code>bloquear_contrato: true</code></li>
<li class=""><strong>volume anomaly</strong>: an amount above 3x the historical average (or above
<code>OPERATIONAL_RESERVE</code>) → risk at least <code>medio</code> and <code>requiere_mfa: true</code></li>
</ul>
<p>if an llm provider is configured (openrouter, groq or xai), it only <em>enriches</em>
the analysis. if no key is available, the backend keeps going and marks the
result <code>fuente: "determinista_degradado"</code>. a missing api key never means a
down service.</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#000000;--prism-background-color:transparent"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#000000;background-color:transparent"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#000000"><span class="token punctuation" style="color:rgba(0,0,0,0.55)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#000000"><span class="token plain">  </span><span class="token property" style="color:#000000">"nivel_riesgo"</span><span class="token operator" style="color:rgba(0,0,0,0.65)">:</span><span class="token plain"> </span><span class="token string" style="color:#000000">"alto"</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#000000"><span class="token plain">  </span><span class="token property" style="color:#000000">"motivo"</span><span class="token operator" style="color:rgba(0,0,0,0.65)">:</span><span class="token plain"> </span><span class="token string" style="color:#000000">"Más de 3 operaciones en pocos bloques"</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#000000"><span class="token plain">  </span><span class="token property" style="color:#000000">"requiere_mfa"</span><span class="token operator" style="color:rgba(0,0,0,0.65)">:</span><span class="token plain"> </span><span class="token boolean" style="color:#000000">false</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#000000"><span class="token plain">  </span><span class="token property" style="color:#000000">"bloquear_contrato"</span><span class="token operator" style="color:rgba(0,0,0,0.65)">:</span><span class="token plain"> </span><span class="token boolean" style="color:#000000">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#000000"><span class="token plain"></span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">}</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-reusable-part-aureosdk">the reusable part: <code>@aureo/sdk</code><a href="https://sherikxd.github.io/blog/2026/09/21/aureo-explained/#the-reusable-part-aureosdk" class="hash-link" aria-label="Direct link to the-reusable-part-aureosdk" title="Direct link to the-reusable-part-aureosdk" translate="no">​</a></h2>
<p>the sdk is the piece i care most about. a dapp can:</p>
<ul>
<li class="">connect a signer without exposing the private key to the consumer</li>
<li class="">verify that the public address matches the private key</li>
<li class="">subscribe to evm events over websocket with explicit cleanup</li>
<li class="">run speed/volume policies deterministically</li>
<li class="">keep local metrics (operations, amounts, risk, mfa, blocks) in memory</li>
</ul>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#000000;--prism-background-color:transparent"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#000000;background-color:transparent"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#000000"><span class="token keyword module" style="color:#000000;font-weight:bold">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgba(0,0,0,0.55)">{</span><span class="token imports">createAureoClient</span><span class="token imports punctuation" style="color:rgba(0,0,0,0.55)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#000000;font-weight:bold">from</span><span class="token plain"> </span><span class="token string" style="color:#000000">'@aureo/sdk'</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#000000"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#000000"><span class="token plain"></span><span class="token keyword" style="color:#000000;font-weight:bold">const</span><span class="token plain"> aureo </span><span class="token operator" style="color:rgba(0,0,0,0.65)">=</span><span class="token plain"> </span><span class="token function" style="color:#000000">createAureoClient</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">(</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">{</span><span class="token plain">rpcUrl</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">,</span><span class="token plain"> wsRpcUrl</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">,</span><span class="token plain"> contractAddress</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">,</span><span class="token plain"> abi</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">}</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">)</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#000000"><span class="token plain"></span><span class="token keyword" style="color:#000000;font-weight:bold">const</span><span class="token plain"> unsubscribe </span><span class="token operator" style="color:rgba(0,0,0,0.65)">=</span><span class="token plain"> aureo</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">.</span><span class="token method function property-access" style="color:#000000">subscribe</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">(</span><span class="token string" style="color:#000000">'Transfer'</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">(</span><span class="token parameter">event</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:rgba(0,0,0,0.65)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#000000"><span class="token plain">  </span><span class="token console class-name" style="color:#000000">console</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">.</span><span class="token method function property-access" style="color:#000000">log</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">(</span><span class="token plain">aureo</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">.</span><span class="token method function property-access" style="color:#000000">evaluatePolicy</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">(</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">[</span><span class="token comment" style="color:rgba(0,0,0,0.45);font-style:italic">/* ... */</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">]</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">)</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">)</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#000000"><span class="token plain"></span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">}</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">)</span><span class="token punctuation" style="color:rgba(0,0,0,0.55)">;</span><br></div></code></pre></div></div>
<p>so somebody else can build smart accounts, session keys, gas abstraction or
hardware wallet flows on top without touching my backend.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="scope-said-out-loud">scope, said out loud<a href="https://sherikxd.github.io/blog/2026/09/21/aureo-explained/#scope-said-out-loud" class="hash-link" aria-label="Direct link to scope, said out loud" title="Direct link to scope, said out loud" translate="no">​</a></h2>
<p>áureo does <strong>not</strong> watch the whole blockchain. it watches the contract you
configure. it also does not custody funds and it does not pretend to replace
an hsm, a safe or an mpc provider. the circuit breaker decision is published
as an auditable verdict — the final call belongs to compliance.</p>
<p>code: <a href="https://github.com/Sherikxd/aureo" target="_blank" rel="noopener noreferrer" class="">github.com/Sherikxd/aureo</a></p>]]></content>
        <author>
            <name>Andrei Sherikhov</name>
            <uri>https://github.com/Sherikxd</uri>
        </author>
        <category label="web3" term="web3"/>
        <category label="devlog" term="devlog"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[i started coding at 7. here's what i'd tell my younger self]]></title>
        <id>https://sherikxd.github.io/blog/2026/08/12/coding-since-7/</id>
        <link href="https://sherikxd.github.io/blog/2026/08/12/coding-since-7/"/>
        <updated>2026-08-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[eleven years in, 18 years old, 31 public repos — the stuff i wish someone told me when i was a kid copying tutorials.]]></summary>
        <content type="html"><![CDATA[<p>i wrote my first lines of code when i was <strong>7</strong>. today i'm 18, so that's
eleven years of "quick experiments" that sometimes turn into real projects.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-actually-mattered">what actually mattered<a href="https://sherikxd.github.io/blog/2026/08/12/coding-since-7/#what-actually-mattered" class="hash-link" aria-label="Direct link to what actually mattered" title="Direct link to what actually mattered" translate="no">​</a></h2>
<p><strong>1. copy everything, at first.</strong>
my early "projects" were tutorials with the names changed. that's fine. copying
is how your hands learn the syntax. just don't stop there — change one thing,
break it, fix it.</p>
<p><strong>2. finish something boring.</strong>
i have a graveyard of exciting half-projects. the thing that taught me the
most was a boring tool that i actually deployed and used for a month. finish
line &gt; perfect line.</p>
<p><strong>3. build for a real person.</strong>
<code>AyudaEnCali</code> stopped being a react exercise the moment i thought "my neighbor
needs to find a shelter with a bad signal and 5% battery". every fallback in
that app comes from that image, not from a blog post.</p>
<p><strong>4. write tests when you're scared, not when you're confident.</strong>
in the fire detection project the test suite existed because i had 48 hours and
no room to find out the websocket was broken. green check = keep going.</p>
<p><strong>5. linux.</strong>
not because it's cool (ok, partly), but because nothing teaches you how a
computer works like breaking your own setup on a friday night.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-im-doing-now">what i'm doing now<a href="https://sherikxd.github.io/blog/2026/08/12/coding-since-7/#what-im-doing-now" class="hash-link" aria-label="Direct link to what i'm doing now" title="Direct link to what i'm doing now" translate="no">​</a></h2>
<ul>
<li class="">maintaining <strong>AyudaEnCali</strong> and <strong>Áureo</strong></li>
<li class="">learning <strong>pytorch</strong> and <strong>react native</strong></li>
<li class="">shipping open source stuff around ethereum and ai</li>
<li class="">trying to reply to messages faster than once a month</li>
</ul>
<p>if you're 7, 12 or 17 and reading this: you don't need permission, you need a
terminal and one idea that annoys you enough to fix it.</p>]]></content>
        <author>
            <name>Andrei Sherikhov</name>
            <uri>https://github.com/Sherikxd</uri>
        </author>
        <category label="life" term="life"/>
    </entry>
</feed>