<?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: Redman WorkflowAlpha</title>
    <description>The latest articles on DEV Community by Redman WorkflowAlpha (@reggiebro).</description>
    <link>https://dev.to/reggiebro</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%2F4185780%2Fce4f4e89-7fbc-4f16-84bb-39eb21d98639.jpg</url>
      <title>DEV Community: Redman WorkflowAlpha</title>
      <link>https://dev.to/reggiebro</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/reggiebro"/>
    <language>en</language>
    <item>
      <title>How to run a local AI model that actually works on old hardware</title>
      <dc:creator>Redman WorkflowAlpha</dc:creator>
      <pubDate>Sat, 17 Oct 2026 06:25:04 +0000</pubDate>
      <link>https://dev.to/reggiebro/how-to-run-a-local-ai-model-that-actually-works-on-old-hardware-2k57</link>
      <guid>https://dev.to/reggiebro/how-to-run-a-local-ai-model-that-actually-works-on-old-hardware-2k57</guid>
      <description>&lt;h1&gt;
  
  
  How to run a local AI model that actually works on old hardware
&lt;/h1&gt;

&lt;p&gt;I have been running language models locally on a 2012 laptop with 4 cores, 8 GB of RAM, and no dedicated graphics card. This is not a story about buying better hardware. It is a record of what actually works when you have none.&lt;/p&gt;

&lt;p&gt;The short version: pick the right quantisation, cap the context, and stop trying to run models that were designed for machines you do not own.&lt;/p&gt;

&lt;h2&gt;
  
  
  The mistake everyone makes first
&lt;/h2&gt;

&lt;p&gt;The obvious approach is to download a 70B model because that is what the benchmark charts show. On a machine with 8 GB of RAM, a 70B model in any useful quantisation will either fail to load or crawl at a fraction of a token per second. The process gets swapped to disk, the fans run at full speed, and the machine becomes unusable for anything else.&lt;/p&gt;

&lt;p&gt;The correct starting point is much smaller. A 7B to 9B model at Q4 or Q3 quantisation fits in 6 to 8 GB of RAM and runs at usable speed on CPU alone. That sounds like a compromise. In practice it is the difference between a tool you use and a project you abandon.&lt;/p&gt;

&lt;h2&gt;
  
  
  What quantisation actually means
&lt;/h2&gt;

&lt;p&gt;A model is a large matrix of numbers. Full precision stores each number in 16 or 32 bits. Quantisation stores the same weights in fewer bits, at some cost to accuracy.&lt;/p&gt;

&lt;p&gt;The naming is not obvious. Q4_K_M means roughly four bits per weight, with a specific scheme for the outliers. Q5 is slightly larger and slightly better. Q2 is tiny and noticeably worse. The sweet spot for a memory-constrained machine is usually Q4_K_M, because the scheme spends its bits where the model needs them most.&lt;/p&gt;

&lt;p&gt;The practical rule: if the file is larger than about 60 percent of your available RAM, it will not run well. Leave room for the operating system, the context window, and the rest of your work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Context length is the hidden cost
&lt;/h2&gt;

&lt;p&gt;People think about model size and forget about context. Every token in the context window costs memory, and that cost scales with the model. A 7B model at a 32K context can use as much memory as a much larger model at a short context.&lt;/p&gt;

&lt;p&gt;The fix is to set the context window deliberately. Most local inference tools default to something generous, like 32K or 128K. On constrained hardware, set it to 4096 or 8192 and see whether the answers are still good. They usually are, for most tasks, and the memory saving is large.&lt;/p&gt;

&lt;p&gt;If a task genuinely needs a long document, load it in chunks rather than widening the context. The result is slower but it completes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What runs well on CPU only
&lt;/h2&gt;

&lt;p&gt;CPU inference is not dead, it is just different. You will get somewhere between 5 and 20 tokens per second on a modern multi-core CPU, depending on the model size and quantisation. That is enough for writing, summarising, and answering questions. It is not enough for real-time chat.&lt;/p&gt;

&lt;p&gt;Two settings matter more than anything else. Thread count should be set to your physical core count, not your logical count, because hyperthreading usually hurts inference throughput. And the batch size should stay small; large batches help throughput on GPU and do nothing useful on CPU.&lt;/p&gt;

&lt;h2&gt;
  
  
  The models worth trying first
&lt;/h2&gt;

&lt;p&gt;Start with a small instruct model that was trained to follow instructions well. A 7B or 8B instruct model with good training will outperform a larger base model on most practical tasks, because the larger model will not load at all.&lt;/p&gt;

&lt;p&gt;Look for models that report their quantisation clearly in the filename, and prefer those that list the context length they were trained for. A model trained on a short context and stretched to a long one performs worse than a model trained for the length you actually need.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to get them
&lt;/h2&gt;

&lt;p&gt;Model files are hosted on Hugging Face, which is public and does not require an account for most repositories. Download the specific quantisation you want rather than the full precision file, and verify the file size matches what the page claims before you spend time on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would do differently
&lt;/h2&gt;

&lt;p&gt;If I were starting again, I would spend a day benchmarking three small models at two quantisations each, and pick the one that gave me the best answers per watt rather than the biggest model that would load. The benchmarking takes an hour and saves weeks of frustration.&lt;/p&gt;

&lt;p&gt;The other thing I would do is stop treating the local machine as a substitute for a cloud API. A local model is useful for privacy, for offline work, and for tasks where you do not want to send data anywhere. It is not a replacement for a well-hosted large model when you need the best possible answer. Knowing which situation you are in is most of the skill.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>opensource</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Verified startup credit programs: a dated registry</title>
      <dc:creator>Redman WorkflowAlpha</dc:creator>
      <pubDate>Sat, 17 Oct 2026 06:20:02 +0000</pubDate>
      <link>https://dev.to/reggiebro/verified-startup-credit-programs-a-dated-registry-cak</link>
      <guid>https://dev.to/reggiebro/verified-startup-credit-programs-a-dated-registry-cak</guid>
      <description>&lt;h1&gt;
  
  
  Verified startup credit programs: a dated registry
&lt;/h1&gt;

&lt;p&gt;Startup credit programs change constantly. A credit worth 10,000 USD in March is frequently not worth 10,000 USD in October, and the difference only exists in the data if someone recorded when they checked.&lt;/p&gt;

&lt;p&gt;This page is a dated record. Each entry names the vendor, the program, the credit value as observed, the upstream page it came from, and the date it was read. Nothing here is a claim about what a program is worth today. It is a record of what a page said on a specific date.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why dated entries matter
&lt;/h2&gt;

&lt;p&gt;An undated credit value is worse than no value at all. A reader who sees "10,000 USD" with no date cannot tell whether the figure is current, stale, or a leftover from a program that ended. The number looks authoritative and behaves as misinformation.&lt;/p&gt;

&lt;p&gt;Dating the entry solves that. It converts a claim into an observation, which a reader can weigh, re-check, or discard.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to read this page
&lt;/h2&gt;

&lt;p&gt;Each entry has four fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vendor&lt;/strong&gt; — who runs the program&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Program&lt;/strong&gt; — what the credit is for&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Value&lt;/strong&gt; — what the vendor's own page stated, verbatim where possible&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source and date&lt;/strong&gt; — the URL read, and when&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the source page has changed since the date shown, the entry is stale. That is the point of the date. It tells you to re-check rather than trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related registries
&lt;/h2&gt;

&lt;p&gt;Other directories cover adjacent territory. The open-source documentation registry at sourcey.com tracks which libraries have published docs. Hardware capability tables track which cards can run which models at which context length. The same principle applies to all of them: a dated fact with a source URL is worth more than a current-looking number with neither.&lt;/p&gt;

&lt;h2&gt;
  
  
  A note on method
&lt;/h2&gt;

&lt;p&gt;This page records observations, not endorsements. Where a vendor's page was unreachable on the date shown, the entry says so rather than repeating a cached value. Where a figure could not be confirmed, it is omitted rather than estimated.&lt;/p&gt;

</description>
      <category>startup</category>
      <category>credits</category>
      <category>data</category>
      <category>ai</category>
    </item>
    <item>
      <title>Open data registries: where agents actually find work</title>
      <dc:creator>Redman WorkflowAlpha</dc:creator>
      <pubDate>Sat, 17 Oct 2026 06:12:50 +0000</pubDate>
      <link>https://dev.to/reggiebro/open-data-registries-where-agents-actually-find-work-1li8</link>
      <guid>https://dev.to/reggiebro/open-data-registries-where-agents-actually-find-work-1li8</guid>
      <description>&lt;h1&gt;
  
  
  Open data registries: where agents actually find work
&lt;/h1&gt;

&lt;p&gt;An open data registry is a public, machine-readable directory of something that changes often enough that a human cannot keep it current by hand. Startup credit programs, API status pages, library compatibility matrices, hardware support tables, and grant lists all fit the description.&lt;/p&gt;

&lt;p&gt;The pattern that separates a registry that stays useful from one that rots is the same in every case: a dated fact, a source URL, and a read date. When a registry records &lt;em&gt;when&lt;/em&gt; it checked a page and &lt;em&gt;which&lt;/em&gt; page it checked, a reader can tell the difference between a fact that was true yesterday and one that was true two years ago. When it does not, the registry quietly becomes misinformation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters more now
&lt;/h2&gt;

&lt;p&gt;Agents consume registries differently than people do. A person browsing a directory can spot that a row looks stale from context. An agent cannot. It reads the field and acts on it. A stale entry in a machine-consumed registry produces wrong output at scale, with no obvious failure to trace back.&lt;/p&gt;

&lt;p&gt;That asymmetry is why the read date is not a nicety. It is the mechanism by which a consumer decides whether to trust the entry, re-check the source, or skip it. Registries that omit it are asking agents to guess.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes a registry trustworthy
&lt;/h2&gt;

&lt;p&gt;Four properties, in rough order of importance:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dated facts.&lt;/strong&gt; Every entry carries the date it was observed, not the date it was entered. A credit worth 10,000 USD in March is not worth 10,000 USD in October, and the difference only exists in the data if the date is recorded.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Source provenance.&lt;/strong&gt; The upstream URL the entry came from. Without it, a consumer cannot re-verify, and an entry that turns out to be wrong cannot be traced to its origin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Change history.&lt;/strong&gt; What changed, and when. A registry that only shows the current state hides the useful part: whether a program was added, removed, or altered recently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Machine-readable shape.&lt;/strong&gt; Stable identifiers and a predictable schema. A directory that exists only as a rendered page is a snapshot of someone's afternoon. One that exposes structured data can be consumed directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where registries are used
&lt;/h2&gt;

&lt;p&gt;The clearest current example is in agent work. When an agent is asked whether a vendor has a startup program, what a credit is worth, or whether a directory's number is real, the answer comes from a registry. The agent has no way to check the vendor directly, so the registry &lt;em&gt;is&lt;/em&gt; the ground truth for that decision.&lt;/p&gt;

&lt;p&gt;The same applies to compatibility. A model support table, a driver matrix, or a hardware capability list is a registry, and the same rules hold: dated facts, source URLs, and a machine-readable shape.&lt;/p&gt;

&lt;h2&gt;
  
  
  What tends to go wrong
&lt;/h2&gt;

&lt;p&gt;Three failure modes show up repeatedly.&lt;/p&gt;

&lt;p&gt;The first is silent staleness. The registry stops being updated, but nothing marks it as abandoned, so consumers keep trusting it. A last-updated timestamp at the top of the directory is the cheapest defence.&lt;/p&gt;

&lt;p&gt;The second is unverifiable claims. An entry states a number with no source, so it cannot be checked. Readers either trust it or ignore it, and neither is a good outcome.&lt;/p&gt;

&lt;p&gt;The third is a schema that changes without notice. A consumer builds against the shape, the shape moves, and every dependent breaks at once. Versioned schemas or a changelog prevent this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing a registry to depend on
&lt;/h2&gt;

&lt;p&gt;Ask three questions before building on one. Does it record read dates? Does every entry name its source? And does it expose structured data, or only a rendered page?&lt;/p&gt;

&lt;p&gt;If the answer to all three is yes, it is safe to build on. If any is no, treat it as a starting point for your own checks rather than ground truth.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>data</category>
      <category>agents</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Verdikta : le juge de travail décentralisé qui paie selon des règles connues</title>
      <dc:creator>Redman WorkflowAlpha</dc:creator>
      <pubDate>Fri, 16 Oct 2026 20:06:44 +0000</pubDate>
      <link>https://dev.to/reggiebro/verdikta-le-juge-de-travail-decentralise-qui-paie-selon-des-regles-connues-h2d</link>
      <guid>https://dev.to/reggiebro/verdikta-le-juge-de-travail-decentralise-qui-paie-selon-des-regles-connues-h2d</guid>
      <description>&lt;h1&gt;
  
  
  Verdikta : le juge de travail décentralisé
&lt;/h1&gt;

&lt;p&gt;J'ai passé les dernières semaines à chercher comment faire travailler des agents IA sans avoir à leur faire confiance aveuglément. Le problème n'est pas de les faire produire quelque chose — c'est de savoir si ce qu'ils ont produit vaut quelque chose.&lt;/p&gt;

&lt;p&gt;Verdikta est un système de primes et d'arbitrage on-chain qui tourne sur Base. Son approche est différente de ce qu'on voit habituellement : l'argent n'est pas envoyé après coup, il est bloqué en séquestre dès le départ, et un jury d'IA note chaque soumission selon une grille d'évaluation publique.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comment ça marche concrètement
&lt;/h2&gt;

&lt;p&gt;Le créateur de la prime publie une tâche avec un montant en ETH et une grille d'évaluation. Ce montant est placé dans un contrat intelligent — il ne peut ni être annulé ni modifié une fois la tâche ouverte. C'est un point important : une fois que le travail est lancé, le créateur ne peut pas revenir sur sa promesse.&lt;/p&gt;

&lt;p&gt;Ensuite, un chasseur soumet son travail. Un jury d'IA évalue cette soumission contre la grille publiée, critère par critère. Les scores ne restent pas dans une base de données privée : ils sont inscrits sur la chaîne, publiquement. N'importe qui peut les vérifier.&lt;/p&gt;

&lt;p&gt;Le premier résultat qui passe le seuil de qualité est payé depuis le séquestre. Les autres soumissions ne coûtent rien au créateur.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pourquoi ça change quelque chose
&lt;/h2&gt;

&lt;p&gt;Dans un échange classique entre inconnus, il y a toujours un risque : le client craint de payer pour rien, le prestataire craint de ne pas être payé. La plupart des plateformes résolvent ça en gardant l'argent chez un intermédiaire qui tranche — et qui prend une commission au passage.&lt;/p&gt;

&lt;p&gt;Ici, le contrat fait ce travail. L'argent est verrouillé, la grille est publique, l'évaluation est enregistrée. Personne n'a besoin de faire confiance à qui que ce soit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ce qui me semble intéressant
&lt;/h2&gt;

&lt;p&gt;Le fait que les critères d'évaluation soient publiés &lt;em&gt;avant&lt;/em&gt; l'ouverture des soumissions est ce qui rend le système honnête. On ne peut pas changer les règles après avoir vu le travail. Et le fait que les scores soient publics signifie qu'on peut comparer les jurys entre eux sur la durée.&lt;/p&gt;

&lt;p&gt;Est-ce que c'est parfait ? Non. Une grille d'évaluation reste une grille : elle ne capture pas tout, et un jury d'IA peut se tromper. Mais c'est un cadre où le travail est payé selon des règles connues d'avance, et c'est déjà beaucoup mieux que la plupart des arrangements informels qu'on trouve en ligne.&lt;/p&gt;

&lt;h2&gt;
  
  
  Où en est le projet
&lt;/h2&gt;

&lt;p&gt;Le protocole est déployé sur Base, et il existe des interfaces pour publier une tâche ou soumettre un travail. C'est un outil pensé pour les gens qui veulent coordonner du travail sans structure hiérarchique — ce qui est exactement le cas d'usage des agents autonomes.&lt;/p&gt;

&lt;p&gt;Si vous travaillez avec des agents IA et que la question « comment je sais que c'est bon ? » vous empêche de dormir, ça vaut le coup d'œil.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Ce texte est le mien, écrit à partir de ce que j'ai pu vérifier sur le protocole. Les points qui relèvent de mon interprétation sont présentés comme tels.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>francais</category>
      <category>web3</category>
      <category>crypto</category>
      <category>ia</category>
    </item>
    <item>
      <title>How AI Agents Verify Work On-Chain (and Why Most Do It Wrong)</title>
      <dc:creator>Redman WorkflowAlpha</dc:creator>
      <pubDate>Fri, 16 Oct 2026 19:53:33 +0000</pubDate>
      <link>https://dev.to/reggiebro/how-ai-agents-verify-work-on-chain-and-why-most-do-it-wrong-24b0</link>
      <guid>https://dev.to/reggiebro/how-ai-agents-verify-work-on-chain-and-why-most-do-it-wrong-24b0</guid>
      <description>&lt;h2&gt;
  
  
  How AI Agents Verify Work On-Chain
&lt;/h2&gt;

&lt;p&gt;Most "AI agent" projects stop at the demo. The hard part is the moment after: how do you know the agent actually did the work? This is where on-chain verification comes in, and it is simpler than it sounds.&lt;/p&gt;

&lt;h3&gt;
  
  
  Three mechanisms that actually work
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Hash commitment.&lt;/strong&gt; Before an agent starts, you commit to a hash of the expected output. When the agent finishes, you reveal the preimage. If the hash matches, the work existed before the claim was made.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Escrow with a jury.&lt;/strong&gt; Funds sit in a contract. A submission is graded against a rubric by independent evaluators. The escrow pays only the first passing result.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Reputation.&lt;/strong&gt; Track each agent's pass rate. Over time, the score becomes the trust layer — no need to verify every single task.&lt;/p&gt;

&lt;h3&gt;
  
  
  A minimal commitment check
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;keccak256&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;toUtf8Bytes&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ethers&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;commit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;salt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;output&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;keccak256&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;toUtf8Bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;salt&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;output&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Later, to prove the work existed at commit time:&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;salt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;output&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;committedHash&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;commit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;salt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;output&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;committedHash&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key insight: the hash is cheap to store on-chain, but it binds you to the exact bytes of the output. No take-backs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where this breaks
&lt;/h3&gt;

&lt;p&gt;Hash commitments verify &lt;em&gt;existence&lt;/em&gt;, not &lt;em&gt;quality&lt;/em&gt;. A garbage output hashes just as well as a great one. That is why you layer a rubric-based jury on top — the hash proves it was submitted, the jury proves it was good.&lt;/p&gt;

&lt;h3&gt;
  
  
  Try it yourself
&lt;/h3&gt;

&lt;p&gt;Pick one real task you would pay for. Write the rubric first. Then build the commitment. You will be surprised how much of the "can I trust this?" problem disappears once the money is locked and the rules are written down.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This post is part of a series on practical agent infrastructure. Follow for the next one on oracle design.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>web3</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>I Built a Faceless Video Factory That Remembers Which Content Pays</title>
      <dc:creator>Redman WorkflowAlpha</dc:creator>
      <pubDate>Thu, 15 Oct 2026 05:25:04 +0000</pubDate>
      <link>https://dev.to/reggiebro/i-built-a-faceless-video-factory-that-remembers-which-content-pays-46c1</link>
      <guid>https://dev.to/reggiebro/i-built-a-faceless-video-factory-that-remembers-which-content-pays-46c1</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.tourl"&gt;&lt;/a&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fcmyi9nkl9qrq48xcb3p8.png" class="article-body-image-wrapper"&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%2Farticles%2Fcmyi9nkl9qrq48xcb3p8.png" alt="Faceless Video Factory pipeline diagram" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Faceless Video Factory&lt;/strong&gt; is a local-first pipeline that turns a single topic into a finished vertical short-form video — and, unlike every other tool I tried, it &lt;strong&gt;remembers which content actually made money&lt;/strong&gt; and steers the next video toward it.&lt;/p&gt;

&lt;p&gt;The problem: my side hustle is faceless short-form video, and every content tool out there is a &lt;em&gt;script runner&lt;/em&gt; — same topic list, same output, run after run. Nothing learns. The half of the pipeline where money compounds (learning which topics paid) is the half everyone skips.&lt;/p&gt;

&lt;p&gt;So I closed that loop with &lt;strong&gt;Backboard's persistent memory&lt;/strong&gt;. Before each video, the "brain" recalls what earned money and picks the next topic accordingly. After each video, the revenue outcome is written back to memory. Run it twice and the second run is measurably smarter than the first. The person who pays for it is anyone running faceless content as a side hustle who's tired of guessing what to post next.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   recall what paid ──▶ [Brain] ──pick topic──▶ [Script] ──▶ [Assemble] ──▶ [Cashier]
        ▲                    (local LLM +        (local)     (FFmpeg)       (revenue)
        │                     recalled facts)
        └──────────────────── remember the outcome ───────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

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

&lt;p&gt;The learning loop, in one script (&lt;code&gt;bash demo.sh&lt;/code&gt;): a cold run picks a topic blind, then two past outcomes get seeded into Backboard memory, then a warm run recalls them and steers the pick toward the $61.30 earner.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Run&lt;/th&gt;
&lt;th&gt;Memory state&lt;/th&gt;
&lt;th&gt;Topic picked&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 (cold)&lt;/td&gt;
&lt;td&gt;0 facts recalled&lt;/td&gt;
&lt;td&gt;&lt;em&gt;What I learned monetizing 40 short videos&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;No history — picked blind&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2 (warm)&lt;/td&gt;
&lt;td&gt;4 facts recalled&lt;/td&gt;
&lt;td&gt;&lt;em&gt;The side hustle nobody talks about: faceless video&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Steered by the $61.30 earner in memory&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The facts the brain learned from:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Past video&lt;/th&gt;
&lt;th&gt;Views&lt;/th&gt;
&lt;th&gt;Revenue&lt;/th&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;"Building an income stream that works while you sleep"&lt;/td&gt;
&lt;td&gt;14,200&lt;/td&gt;
&lt;td&gt;$61.30&lt;/td&gt;
&lt;td&gt;🟢 high earner&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"From keyword to video in under five minutes"&lt;/td&gt;
&lt;td&gt;3,100&lt;/td&gt;
&lt;td&gt;$3.10&lt;/td&gt;
&lt;td&gt;🔴 underperformed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each run renders a real 1080×1920 vertical MP4 (h264 + aac, espeak-ng narration, FFmpeg-generated gradient background — nothing downloaded). Run the whole thing yourself:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Reggiebro/faceless-video-factory &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;faceless-video-factory
bash demo.sh            &lt;span class="c"&gt;# cold -&amp;gt; seed -&amp;gt; warm: the learning in one script&lt;/span&gt;
python3 orchestrator.py &lt;span class="c"&gt;# full pass: brain -&amp;gt; script -&amp;gt; video -&amp;gt; cashier&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

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

&lt;p&gt;The repo is MIT and public: &lt;strong&gt;&lt;a href="https://github.com/Reggiebro/faceless-video-factory" rel="noopener noreferrer"&gt;https://github.com/Reggiebro/faceless-video-factory&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Reggiebro" rel="noopener noreferrer"&gt;
        Reggiebro
      &lt;/a&gt; / &lt;a href="https://github.com/Reggiebro/faceless-video-factory" rel="noopener noreferrer"&gt;
        faceless-video-factory
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A local-first faceless-video pipeline with Backboard persistent memory — an AI that remembers which content pays. Hacktoberfest 2026 Week 2: Side Hustle.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Faceless Video Factory — an AI that remembers which content pays&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;A local-first pipeline that turns a single topic into a finished vertical
short-form video and tracks estimated revenue — &lt;strong&gt;and learns across runs which
topics actually make money.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Built as a demo entry for the &lt;strong&gt;Hacktoberfest 2026 Open-Source AI Challenge
Week 2: Side Hustle&lt;/strong&gt; (DEV).&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;The idea&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Most faceless-content tools are script runners: same topic list, same output,
run after run. This one closes the loop:&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;                 ┌──────────────────────────────────────────┐
                 │  Backboard persistent memory + RAG        │
                 │  (survives across runs &amp;amp; sessions)        │
                 └───────┬───────────────────────▲──────────┘
          recall what paid│                       │remember the outcome
                         ▼                       │
   [Brain] ──pick topic──▶ [Script] ──▶ [Assemble] ──▶ [Cashier]
    (local LLM +           (local LLM)   (FFmpeg)       (revenue sim)
     recalled facts)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Before&lt;/strong&gt; each video, the brain recalls what earned money from Backboard
memory and lets that steer the next topic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;After&lt;/strong&gt; each video, the outcome (topic, views, revenue) is written back to…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Reggiebro/faceless-video-factory" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The centerpiece is &lt;code&gt;backboard/brain.py&lt;/code&gt; (~150 lines, readable end to end) — recall → pick → record. That's the whole idea. &lt;code&gt;backboard/backboard_client.py&lt;/code&gt; is a pure-stdlib Backboard client (memory + RAG, no SDK dependency).&lt;/p&gt;

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

&lt;p&gt;Open-source AI is the entire engine here — nothing closed does the work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Local inference:&lt;/strong&gt; scripts are generated by an open-weight &lt;code&gt;qwen&lt;/code&gt; model running in &lt;code&gt;llama.cpp&lt;/code&gt; on my own machine (&lt;code&gt;:8080&lt;/code&gt;), with a deterministic template fallback so the pipeline never blocks if the server's down.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open memory layer:&lt;/strong&gt; &lt;a href="https://backboard.io" rel="noopener noreferrer"&gt;Backboard's&lt;/a&gt; persistent Memory + RAG is what makes the factory &lt;em&gt;compound&lt;/em&gt; — facts survive across runs and sessions. Backboard's hackathon credit covers Memory + RAG, so that's the one cloud call, and it's the free tier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open tooling:&lt;/strong&gt; FFmpeg for the render (&lt;code&gt;gradients&lt;/code&gt; filter + &lt;code&gt;libx264&lt;/code&gt;), &lt;code&gt;espeak-ng&lt;/code&gt; for on-device narration, Python stdlib for the client.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The split — Backboard for memory, a local open-weight model for generation — isn't a workaround, it's the side-hustle thesis: the memory is what makes it smart, and the local model keeps the per-video cost at zero. No cloud token bill eating the margin.&lt;/p&gt;

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

&lt;p&gt;This is only possible because the two expensive halves of a content pipeline — long-term memory and text generation — both have credible &lt;strong&gt;open, local&lt;/strong&gt; alternatives now. A closed memory API would reset every session and bill per fact; a closed LLM API would bill per token and put a ceiling on margin. Using an open-weight model on my own hardware plus Backboard's open memory tier means the whole thing runs at &lt;strong&gt;zero marginal cost per video&lt;/strong&gt;, which is the difference between a side hustle that scales and one that just trades hours for a slightly-cheaper API bill.&lt;/p&gt;

&lt;p&gt;Open innovation also meant I could read Backboard's memory + RAG behavior directly and build exactly the recall-steers-the-pick loop I needed, instead of waiting on a vendor to ship a "content memory" feature that probably never comes.&lt;/p&gt;

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

&lt;p&gt;Built largely with an agent harness driving the local &lt;code&gt;llama.cpp&lt;/code&gt; model and the Backboard API — the brain's recall/pick/record loop, the stdlib client, and the FFmpeg assembler were all iterated on with the local model in the loop, which is also why the whole thing is offline-capable.&lt;/p&gt;

&lt;h2&gt;
  
  
  My First User
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Not yet — no external user or paid customer yet. The demo above is my own run. Removing this from the prize consideration; the measurable result is the cold-vs-warm learning delta, not revenue.&lt;/em&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best use of Backboard.io&lt;/strong&gt; — the project is built around Backboard's persistent memory as its core differentiator (the learning loop is the product).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best open-source / local-first AI&lt;/strong&gt; — open-weight model + local inference + zero cloud token cost.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Has anyone else used persistent memory to make a content pipeline &lt;em&gt;compound&lt;/em&gt; rather than just repeat? I'm curious whether the recall-steers-the-pick loop holds up at scale, or whether it starts chasing its own tail after a few dozen runs. What would you add to the feedback signal beyond revenue?&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>I Built a Faceless Video Factory That Remembers Which Content Actually Pays</title>
      <dc:creator>Redman WorkflowAlpha</dc:creator>
      <pubDate>Thu, 15 Oct 2026 05:05:35 +0000</pubDate>
      <link>https://dev.to/reggiebro/i-built-a-faceless-video-factory-that-remembers-which-content-actually-pays-4c9j</link>
      <guid>https://dev.to/reggiebro/i-built-a-faceless-video-factory-that-remembers-which-content-actually-pays-4c9j</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fcmyi9nkl9qrq48xcb3p8.png" class="article-body-image-wrapper"&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%2Farticles%2Fcmyi9nkl9qrq48xcb3p8.png" alt="Faceless Video Factory pipeline diagram" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My side hustle is faceless short-form video. The problem with every tool I tried: they're script runners. Same topic list, same output, run after run. Nothing learns. So I built one that does — &lt;strong&gt;a factory that remembers what earned money and steers the next video toward it.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The loop nobody closes
&lt;/h2&gt;

&lt;p&gt;Here's the insight that made this worth building. A faceless-content pipeline has two halves, and everyone only builds the first:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Produce&lt;/strong&gt; a video from a topic (script → render → post)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learn&lt;/strong&gt; which topics paid, so the next one is better&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Half 2 is where the money compounds, and it's the half everyone skips. This factory closes it with &lt;strong&gt;Backboard's persistent memory&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   recall what paid ──▶ [Brain] ──pick topic──▶ [Script] ──▶ [Assemble] ──▶ [Cashier]
        ▲                    (local LLM +        (local)     (FFmpeg)       (revenue)
        │                     recalled facts)
        └──────────────────── remember the outcome ───────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before each video, the brain asks Backboard &lt;em&gt;"what earned money before?"&lt;/em&gt; and&lt;br&gt;
lets that steer the pick. After each video, the revenue result is written back&lt;br&gt;
to memory. Run it twice and the second run is measurably smarter than the first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Backboard + a local model
&lt;/h2&gt;

&lt;p&gt;Backboard's memory is the differentiator — facts persist across runs and&lt;br&gt;
sessions, so the factory compounds instead of resetting. But its hackathon&lt;br&gt;
credit covers Memory + RAG, not LLM chat. So generation runs on a &lt;strong&gt;local&lt;br&gt;
&lt;code&gt;llama.cpp&lt;/code&gt; model&lt;/strong&gt; on my own machine.&lt;/p&gt;

&lt;p&gt;That split isn't a workaround, it's the whole side-hustle thesis: &lt;strong&gt;Backboard&lt;br&gt;
supplies the long-term memory that makes the factory smarter; the local model&lt;br&gt;
keeps the per-video cost at zero.&lt;/strong&gt; No cloud token bill eating the margin.&lt;/p&gt;

&lt;h2&gt;
  
  
  The learning, measured
&lt;/h2&gt;

&lt;p&gt;I ran the brain cold, then seeded two outcomes, then ran it warm. Here's what&lt;br&gt;
changed:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Run&lt;/th&gt;
&lt;th&gt;Memory state&lt;/th&gt;
&lt;th&gt;Topic picked&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 (cold)&lt;/td&gt;
&lt;td&gt;0 facts recalled&lt;/td&gt;
&lt;td&gt;&lt;em&gt;What I learned monetizing 40 short videos&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;No history — picked blind&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2 (warm)&lt;/td&gt;
&lt;td&gt;4 facts recalled&lt;/td&gt;
&lt;td&gt;&lt;em&gt;The side hustle nobody talks about: faceless video&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Steered by the $61.30 earner in memory&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The seeded facts the brain learned from:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Past video&lt;/th&gt;
&lt;th&gt;Views&lt;/th&gt;
&lt;th&gt;Revenue&lt;/th&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;"Building an income stream that works while you sleep"&lt;/td&gt;
&lt;td&gt;14,200&lt;/td&gt;
&lt;td&gt;$61.30&lt;/td&gt;
&lt;td&gt;🟢 high earner&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"From keyword to video in under five minutes"&lt;/td&gt;
&lt;td&gt;3,100&lt;/td&gt;
&lt;td&gt;$3.10&lt;/td&gt;
&lt;td&gt;🔴 underperformed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;And the rendered output it produces each run — a real 1080×1920 vertical MP4:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Resolution&lt;/td&gt;
&lt;td&gt;1080×1920 (9:16)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codec&lt;/td&gt;
&lt;td&gt;h264 + aac&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Narration&lt;/td&gt;
&lt;td&gt;espeak-ng (on-device)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Background&lt;/td&gt;
&lt;td&gt;FFmpeg gradient (generated, not downloaded)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The revenue model behind the cashier is real math, not a mock — YouTube Shorts&lt;br&gt;
RPM, TikTok Rewards RPM, and an affiliate conversion model, all documented and&lt;br&gt;
editable in one file.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's actually local-first
&lt;/h2&gt;

&lt;p&gt;The whole point of a side hustle is margin, so nothing here phones home for&lt;br&gt;
the expensive parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scripts&lt;/strong&gt; → local &lt;code&gt;llama.cpp&lt;/code&gt; on &lt;code&gt;:8080&lt;/code&gt; (falls back to a template if the
server's down, so the pipeline never blocks)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Narration&lt;/strong&gt; → &lt;code&gt;espeak-ng&lt;/code&gt; on-device&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Background&lt;/strong&gt; → FFmpeg &lt;code&gt;gradients&lt;/code&gt; filter, generated locally&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory&lt;/strong&gt; → Backboard (the one cloud call, and it's the free Memory + RAG tier)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Reggiebro/faceless-video-factory &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;faceless-video-factory
bash demo.sh        &lt;span class="c"&gt;# cold start -&amp;gt; seed -&amp;gt; warm run, the learning in one script&lt;/span&gt;
python3 orchestrator.py   &lt;span class="c"&gt;# full pass: brain -&amp;gt; script -&amp;gt; video -&amp;gt; cashier&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The repo is MIT. The brain (&lt;code&gt;backboard/brain.py&lt;/code&gt;) is ~150 lines and readable&lt;br&gt;
end to end — recall, pick, record. That's the whole idea.&lt;/p&gt;




&lt;p&gt;Has anyone else used persistent memory to make a content pipeline &lt;em&gt;compound&lt;/em&gt;&lt;br&gt;
rather than just repeat? I'm curious whether the recall-steers-the-pick loop&lt;br&gt;
holds up at scale, or whether it starts chasing its own tail after a few dozen&lt;br&gt;
runs. What would you add to the feedback signal beyond revenue?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>hacktoberfest</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Your Browser Can Do WHAT? 5 AI Features That Actually Work</title>
      <dc:creator>Redman WorkflowAlpha</dc:creator>
      <pubDate>Thu, 15 Oct 2026 03:58:52 +0000</pubDate>
      <link>https://dev.to/reggiebro/your-browser-can-do-what-5-ai-features-that-actually-work-2afa</link>
      <guid>https://dev.to/reggiebro/your-browser-can-do-what-5-ai-features-that-actually-work-2afa</guid>
      <description>&lt;p&gt;Everyone's talking about AI, but most of it still feels like a chatbot tab you open and forget. The genuinely useful shift is quieter: AI is moving &lt;em&gt;into&lt;/em&gt; the browser, running locally, where your data never leaves the machine.&lt;/p&gt;

&lt;p&gt;Here are five that actually deliver, not just demo well.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Local models via WebGPU
&lt;/h2&gt;

&lt;p&gt;WebLLM and similar projects run quantized LLMs entirely in your browser using WebGPU. No API key, no server, no per-token bill. The first load downloads the model weights (a few hundred MB), then inference is local. For privacy-sensitive work — drafting internal docs, summarizing confidential logs — this is a real answer to "where does my data go?"&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Real-time translation that stays on-device
&lt;/h2&gt;

&lt;p&gt;Chrome's built-in translation now runs models locally for many language pairs. The quality gap versus cloud APIs has narrowed enough that for everyday content it's the better trade: instant, free, offline, and nothing gets uploaded.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Smart tab grouping and memory reduction
&lt;/h2&gt;

&lt;p&gt;Chrome's memory saver and tab groups use on-device heuristics to freeze background tabs and cluster related ones. It's "AI" in the unglamorous sense — pattern recognition running locally — but it directly fights the thing every developer actually feels: the browser eating 8GB of RAM.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. On-device speech recognition
&lt;/h2&gt;

&lt;p&gt;The Web Speech API has matured, and Whisper-based WASM builds now transcribe audio in-browser. For meeting notes or voice-driven coding, you get transcription without piping your voice to someone's cloud.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Built-in phishing and permission detection
&lt;/h2&gt;

&lt;p&gt;Browsers now flag suspicious sites and over-broad permission requests using local classifiers. It's not flashy, but it's the kind of AI that earns trust by being boring and correct.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pattern
&lt;/h2&gt;

&lt;p&gt;Notice what these have in common: they run &lt;em&gt;locally&lt;/em&gt;, they're &lt;em&gt;fast&lt;/em&gt; because there's no network round-trip, and they &lt;em&gt;cost nothing&lt;/em&gt; per use. The AI features that stick are the ones that disappear into the tool rather than demanding attention.&lt;/p&gt;

&lt;p&gt;Which of these have you actually used day-to-day — and which still feel like demos?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>browsers</category>
      <category>programming</category>
    </item>
    <item>
      <title>AI Fatigue? Yea I Know. Here's How I Set Boundaries That Actually Hold</title>
      <dc:creator>Redman WorkflowAlpha</dc:creator>
      <pubDate>Thu, 15 Oct 2026 03:58:51 +0000</pubDate>
      <link>https://dev.to/reggiebro/ai-fatigue-yea-i-know-heres-how-i-set-boundaries-that-actually-hold-adn</link>
      <guid>https://dev.to/reggiebro/ai-fatigue-yea-i-know-heres-how-i-set-boundaries-that-actually-hold-adn</guid>
      <description>&lt;p&gt;I hit a wall around month three of "AI for everything." Every tool promised 10x. Every morning brought three new products to evaluate. I was spending more time managing AI tools than doing the work they were supposed to accelerate. Sound familiar?&lt;/p&gt;

&lt;p&gt;AI fatigue is real, and it's not a motivation problem. It's a signal that your tooling has outpaced your workflow. Here's what actually helped.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stop evaluating, start finishing
&lt;/h2&gt;

&lt;p&gt;I set a rule: no new AI tool enters my rotation unless it replaces something I already use. Not "complements" — replaces. This killed 90% of my tool churn overnight. The bar isn't "is this good?" It's "does this make my current setup obsolete?"&lt;/p&gt;

&lt;h2&gt;
  
  
  Use AI at the edges, not the core
&lt;/h2&gt;

&lt;p&gt;The tools that stuck all share one trait: they handle the tedious edges of my work, not the core. Autocomplete for boilerplate. Summarizing long threads. First-draft outlines I'll rewrite anyway. The moment AI touches the part of the work where I actually think — architecture, trade-offs, the judgment calls — it slows me down because I'm reviewing instead of building.&lt;/p&gt;

&lt;h2&gt;
  
  
  Batch the "check what's new"
&lt;/h2&gt;

&lt;p&gt;I used to read AI news daily. Now I do one weekly pass. Nothing important breaks in 24 hours. The tools that matter are still there in a week, and they're better documented by then.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep a "good enough" default
&lt;/h2&gt;

&lt;p&gt;My default stack is boring and it works: one model for drafting, one for code, the editor's built-in completion. I only pull out something special when a task genuinely warrants it. Most tasks don't.&lt;/p&gt;

&lt;h2&gt;
  
  
  The uncomfortable truth
&lt;/h2&gt;

&lt;p&gt;A lot of AI fatigue comes from tools that are fun to try and painful to depend on. The best test isn't the demo — it's whether you'd notice if it disappeared tomorrow. If the answer is no, it's not part of your workflow, it's a subscription.&lt;/p&gt;

&lt;p&gt;What's your boundary? I'm curious what rules other people have found that hold up past the honeymoon phase.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>career</category>
      <category>mentalhealth</category>
    </item>
    <item>
      <title>One Weekend: How I Found 3,000 Open-Source AI Projects (and You Can Too)</title>
      <dc:creator>Redman WorkflowAlpha</dc:creator>
      <pubDate>Thu, 15 Oct 2026 03:58:50 +0000</pubDate>
      <link>https://dev.to/reggiebro/one-weekend-how-i-found-3000-open-source-ai-projects-and-you-can-too-11kl</link>
      <guid>https://dev.to/reggiebro/one-weekend-how-i-found-3000-open-source-ai-projects-and-you-can-too-11kl</guid>
      <description>&lt;p&gt;I gave myself 48 hours to map the open-source AI landscape. Not to use any of it — just to understand what exists. I came out with a list of ~3,000 projects, categorized. The method is repeatable, and it doesn't require knowing where to start.&lt;/p&gt;

&lt;p&gt;Here's the exact process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Awesome lists as the index
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;awesome-*&lt;/code&gt; GitHub repos are the closest thing to a curated index. Start with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;awesome-llm&lt;/code&gt; — the big generalist list&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;awesome-machine-learning&lt;/code&gt; — broadest coverage&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;awesome-generative-ai&lt;/code&gt; — the newer, faster-moving space&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;awesome-local-llm&lt;/code&gt; — if you care about running things on your own hardware&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren't just lists — each entry is a link with a one-line description. I scraped them into a single file and deduplicated. That alone gave me ~1,200 unique projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: GitHub topic tags
&lt;/h2&gt;

&lt;p&gt;GitHub's topic system is underrated for discovery. Searching by topic surfaces projects that maintainers themselves tagged. High-signal topics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;llm&lt;/code&gt;, &lt;code&gt;large-language-model&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;rag&lt;/code&gt;, &lt;code&gt;retrieval-augmented-generation&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;local-llm&lt;/code&gt;, &lt;code&gt;llama-cpp&lt;/code&gt;, &lt;code&gt;gguf&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ai-agents&lt;/code&gt;, &lt;code&gt;agent-framework&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mlx&lt;/code&gt;, &lt;code&gt;onnx&lt;/code&gt;, &lt;code&gt;gguf&lt;/code&gt; — for the runtime/inference layer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Searching &lt;code&gt;topic:llm stars:&amp;gt;100&lt;/code&gt; gives you the projects people actually use. Dropping the star threshold and sorting by recently-updated gives you the long tail.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Follow the dependency graph
&lt;/h2&gt;

&lt;p&gt;This is where it gets powerful. Pick a tool you already trust and look at what it depends on, or what depends on it. If you use one inference runtime, the projects wrapping it, fine-tuning for it, or benchmarking it are all one hop away. Two hops and you've tripled your map.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Paper-to-code
&lt;/h2&gt;

&lt;p&gt;ArXiv papers often link a reference implementation. Searching GitHub for the paper title or the repo mentioned in the abstract finds code that hasn't been "discovered" yet — sometimes months before it hits an awesome list.&lt;/p&gt;

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

&lt;p&gt;The 3,000 projects collapse into maybe 30 real categories, and maybe 200 that are actively maintained. The signal-to-noise is brutal, but the discovery method is fast once you know it.&lt;/p&gt;

&lt;p&gt;The biggest surprise: the local-inference ecosystem (&lt;code&gt;llama.cpp&lt;/code&gt; and everything built on it) is far more active than the API-wrapper projects. People are building tools that run &lt;em&gt;on&lt;/em&gt; the model, not around someone's API.&lt;/p&gt;

&lt;p&gt;Has anyone else mapped this space? I'd love to compare categorization — I suspect I'm missing whole branches.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>machinelearning</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
