<?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: Chris</title>
    <description>The latest articles on DEV Community by Chris (@chrisbuildsonline).</description>
    <link>https://dev.to/chrisbuildsonline</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3499535%2F2881d626-dfa8-4d58-9743-75d025b9f7e7.png</url>
      <title>DEV Community: Chris</title>
      <link>https://dev.to/chrisbuildsonline</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chrisbuildsonline"/>
    <language>en</language>
    <item>
      <title>Your Team Doesn’t Need a Better AI Model This Week</title>
      <dc:creator>Chris</dc:creator>
      <pubDate>Thu, 28 May 2026 19:50:22 +0000</pubDate>
      <link>https://dev.to/chrisbuildsonline/your-team-doesnt-need-a-better-ai-model-this-week-igb</link>
      <guid>https://dev.to/chrisbuildsonline/your-team-doesnt-need-a-better-ai-model-this-week-igb</guid>
      <description>&lt;p&gt;The real upgrade is your workflow contract: permissions, durability, and handoffs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hook: the bottleneck moved, and most teams missed it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The fastest way to ship with AI right now is not model shopping, it’s workflow engineering.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That sounds backwards in a week where everyone is benchmarking the latest model drops and arguing which assistant “feels smarter.” But if you’ve shipped anything non-trivial with LLMs lately, you already know the pain isn’t usually “the model wrote bad code.” The pain is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;agent loops that die halfway through a task&lt;/li&gt;
&lt;li&gt;approval prompts nobody can reason about&lt;/li&gt;
&lt;li&gt;fragile context chains that can’t survive retries&lt;/li&gt;
&lt;li&gt;humans doing cleanup because automation forgot state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Translation: the constraint moved from intelligence to execution.&lt;/p&gt;

&lt;p&gt;And this week’s trend signals made that impossible to ignore.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed this week (and why it matters)
&lt;/h2&gt;

&lt;p&gt;A few threads converged hard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Big excitement around new frontier model updates (like Claude Opus 4.8 discussions).&lt;/li&gt;
&lt;li&gt;Strong traction on “just use Postgres for durable workflows” thinking.&lt;/li&gt;
&lt;li&gt;A viral little game about AI agent permission fatigue that hit too close to home.&lt;/li&gt;
&lt;li&gt;Ongoing DEV conversations about how developers are &lt;em&gt;actually&lt;/em&gt; using AI at work, not how slide decks say they should.&lt;/li&gt;
&lt;li&gt;DEV platform work on embeddings-powered relevance, reminding everyone that retrieval and ranking are now product-critical, not side quests.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Different posts, same message: capability is rising, but trust and operational control are lagging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We are entering the “orchestration tax” era.&lt;/strong&gt; If you don’t pay that tax intentionally, you pay it as outages, silent failures, and engineers babysitting bots at 11:40 PM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this lands hard in real teams
&lt;/h2&gt;

&lt;p&gt;In real codebases, AI output is rarely the final artifact. It’s an intermediate step inside a larger system: ticket triage, PR drafting, test generation, migration planning, incident response, docs updates, and customer-facing changes.&lt;/p&gt;

&lt;p&gt;That means your core problem isn’t “can the model produce text/code?” It’s:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can the task resume after a timeout?&lt;/li&gt;
&lt;li&gt;Can we audit who approved what?&lt;/li&gt;
&lt;li&gt;Can we re-run safely without duplicate side effects?&lt;/li&gt;
&lt;li&gt;Can a human take over mid-flight without starting from zero?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most teams treat those as “later” concerns. Then later becomes now, usually after one failed launch week.&lt;/p&gt;

&lt;p&gt;Here’s the uncomfortable part: senior engineers already know how to solve this class of problem. We solved it for payments, queues, and background jobs years ago. Idempotency keys, checkpoints, retries, compensating actions, transaction logs. Same movie, new actors.&lt;/p&gt;

&lt;p&gt;AI didn’t invent distributed systems pain. It just made junior failure modes happen at senior speed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The wrong question everyone keeps asking
&lt;/h2&gt;

&lt;p&gt;The wrong question is:&lt;br&gt;&lt;br&gt;
“Which model should we standardize on?”&lt;/p&gt;

&lt;p&gt;Useful question, sure. But it’s not first-order.&lt;/p&gt;

&lt;p&gt;You can run an excellent model on a brittle workflow and still get chaos. You can run a merely good model on a robust workflow and get compounding value every sprint.&lt;/p&gt;

&lt;p&gt;Model quality matters. But it is now one variable in a larger reliability equation.&lt;/p&gt;

&lt;p&gt;If your process depends on uninterrupted context windows, manual approvals with no policy, and “hope-based retries,” the model leaderboard won’t save you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choosing a model before choosing your execution contract is like picking a race engine for a car with no brakes.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The better question: what execution contract do we enforce?
&lt;/h2&gt;

&lt;p&gt;Ask this instead:&lt;/p&gt;

&lt;p&gt;“What must be true for AI work to be safe, resumable, and reviewable in our stack?”&lt;/p&gt;

&lt;p&gt;That question leads to engineering decisions, not vibes. Here’s a practical playbook you can apply this week.&lt;/p&gt;

&lt;h2&gt;
  
  
  A concrete playbook for next week’s sprint
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Define task boundaries before prompt quality
&lt;/h3&gt;

&lt;p&gt;Split AI work into explicit steps with inputs/outputs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;collect_context&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;propose_change&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;run_checks&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;request_approval&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apply_change&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;summarize_result&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not let one giant prompt own the whole lifecycle.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Persist state in boring infrastructure
&lt;/h3&gt;

&lt;p&gt;For many teams, Postgres is enough to start:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;workflow table with &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;step&lt;/code&gt;, &lt;code&gt;attempt_count&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;event log table with append-only transitions&lt;/li&gt;
&lt;li&gt;payload snapshots at key checkpoints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a worker crashes, you can recover from state, not memory.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Make retries idempotent by default
&lt;/h3&gt;

&lt;p&gt;Every side-effecting action needs a stable operation key.&lt;br&gt;&lt;br&gt;
If the same step runs twice, outcome should be identical or safely deduplicated.&lt;/p&gt;

&lt;p&gt;No idempotency, no production.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Replace permission spam with policy tiers
&lt;/h3&gt;

&lt;p&gt;Permission fatigue is real. Don’t ask for approval 17 times in a row.&lt;/p&gt;

&lt;p&gt;Create tiers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tier 0: read-only ops auto-approved&lt;/li&gt;
&lt;li&gt;Tier 1: low-risk write ops batched approval&lt;/li&gt;
&lt;li&gt;Tier 2: high-impact ops explicit human checkpoint&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then log every decision. Humans hate prompts; they like clear policy.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Instrument failure modes, not just token usage
&lt;/h3&gt;

&lt;p&gt;Track:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;step timeout rate&lt;/li&gt;
&lt;li&gt;retry success rate&lt;/li&gt;
&lt;li&gt;human intervention points&lt;/li&gt;
&lt;li&gt;rollback frequency&lt;/li&gt;
&lt;li&gt;“completed but unusable” outcomes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you only track latency and cost, you’re blind to operational quality.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Optimize prompts after workflow reliability
&lt;/h3&gt;

&lt;p&gt;Prompt tuning matters, but sequence matters more:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;reliable state transitions&lt;/li&gt;
&lt;li&gt;recoverability&lt;/li&gt;
&lt;li&gt;approval ergonomics&lt;/li&gt;
&lt;li&gt;then output polish&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Polishing unstable systems just gives you prettier failures.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Assign ownership like any other production system
&lt;/h3&gt;

&lt;p&gt;Give one team explicit ownership of AI workflow reliability.&lt;br&gt;&lt;br&gt;
If “everyone owns it,” nobody owns incident response, policy drift, or replay tooling.&lt;/p&gt;

&lt;h2&gt;
  
  
  The contrarian take
&lt;/h2&gt;

&lt;p&gt;Here it is: the hottest AI teams in 2026 might look boring from the outside.&lt;/p&gt;

&lt;p&gt;They won’t brag about autonomous agents replacing everyone. They’ll quietly run durable, observable, policy-driven pipelines that keep shipping with fewer surprises.&lt;/p&gt;

&lt;p&gt;Their superpower won’t be mystical prompts. It’ll be disciplined systems engineering applied to AI-native work.&lt;/p&gt;

&lt;p&gt;That is less cinematic. It is also what survives contact with reality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing line that should stick
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Models are getting smarter every month; your edge comes from building workflows that don’t panic when reality shows up.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>workflows</category>
      <category>agents</category>
      <category>postgres</category>
    </item>
    <item>
      <title>The New AI Workflow Is Not “More Agents”</title>
      <dc:creator>Chris</dc:creator>
      <pubDate>Thu, 21 May 2026 17:15:12 +0000</pubDate>
      <link>https://dev.to/chrisbuildsonline/the-new-ai-workflow-is-not-more-agents-14i3</link>
      <guid>https://dev.to/chrisbuildsonline/the-new-ai-workflow-is-not-more-agents-14i3</guid>
      <description>&lt;p&gt;The dev team that wins this year is not the one with the most bots. It is the one with the least confusion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your Codebase Is About To Get Crowded
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AI is no longer sitting politely in a sidebar waiting for you to ask it a question.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That was the old workflow: open editor, highlight sad function, ask the model for help, paste suspicious answer, run tests, sigh.&lt;/p&gt;

&lt;p&gt;This week’s dev chatter has the same signal: local models indexing archives, practical agent demos, AI deeper in daily tools, and developers talking about “comprehension debt.”&lt;/p&gt;

&lt;p&gt;The real shift is not that models can write more code. We already crossed that bridge, burned half of it, and opened a ticket for the smoke.&lt;/p&gt;

&lt;p&gt;The shift is that AI is becoming part of the team’s operating system. It reads issues, drafts patches, explains code, summarizes threads, generates tests, and proposes migrations.&lt;/p&gt;

&lt;p&gt;Welcome to the fun part: your workflow now has coworkers that do not attend standup and will happily drive into a metaphorical flood if your guardrails are weak.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changed This Week
&lt;/h2&gt;

&lt;p&gt;Developers are getting more comfortable with AI running closer to the metal: local indexing, repo-aware assistants, workflow-specific agents, and private retrieval over messy internal context.&lt;/p&gt;

&lt;p&gt;At the same time, the skepticism is getting sharper:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What data is being sent where?&lt;/li&gt;
&lt;li&gt;Can I reproduce this locally?&lt;/li&gt;
&lt;li&gt;Does this agent understand the repo, or is it autocomplete wearing a little hat?&lt;/li&gt;
&lt;li&gt;Who reviews the work when the bot made the boring part look finished?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The hype phase asked, “Can AI code?”&lt;/p&gt;

&lt;p&gt;The useful phase asks, &lt;strong&gt;“Can this workflow reduce the number of bad decisions we ship?”&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Real Teams Should Care
&lt;/h2&gt;

&lt;p&gt;Most engineering teams do not fail because nobody can write a function.&lt;/p&gt;

&lt;p&gt;They fail because nobody remembers why the function exists.&lt;/p&gt;

&lt;p&gt;They fail because the onboarding doc lies by omission, the test suite encodes three product eras, and “simple refactor” means “summon the one senior engineer who knows where the weird billing edge case is buried.”&lt;/p&gt;

&lt;p&gt;That is comprehension debt.&lt;/p&gt;

&lt;p&gt;AI can reduce it by summarizing blast radius, finding hidden coupling, sketching migrations, and generating boring glue code. It can also deepen it by producing ten files that look plausible and make the fog thicker.&lt;/p&gt;

&lt;p&gt;The dangerous AI workflow is not the one that fails loudly. It is the one that produces code everyone accepts because it looks normal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI-generated code does not remove review responsibility. It moves the review target from typing to judgment.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Wrong Question: “Which Agent Should We Use?”
&lt;/h2&gt;

&lt;p&gt;Tool choice matters, but it is not the center of the problem.&lt;/p&gt;

&lt;p&gt;Asking “Which agent should we use?” too early is like asking which keyboard will fix your incident response process.&lt;/p&gt;

&lt;p&gt;The better question is: where is human attention being wasted?&lt;/p&gt;

&lt;p&gt;Look for work that is necessary but not judgment-heavy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Searching the repo for similar patterns&lt;/li&gt;
&lt;li&gt;Writing first-pass tests&lt;/li&gt;
&lt;li&gt;Turning vague tickets into implementation checklists&lt;/li&gt;
&lt;li&gt;Explaining legacy code to new contributors&lt;/li&gt;
&lt;li&gt;Drafting PR descriptions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are good AI entry points.&lt;/p&gt;

&lt;p&gt;Do not start by giving an agent permission to redesign your auth system because it passed a demo on a todo app. That is negligence with syntax highlighting.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Better Playbook
&lt;/h2&gt;

&lt;p&gt;Start with bounded tasks where failure is visible, review is cheap, and the output improves human decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Give AI Narrow Jobs With Receipts
&lt;/h2&gt;

&lt;p&gt;Bad prompt:&lt;/p&gt;

&lt;p&gt;“Refactor this service.”&lt;/p&gt;

&lt;p&gt;Better prompt:&lt;/p&gt;

&lt;p&gt;“Find duplicated validation logic in these three files. Propose one extraction. Do not edit yet. Include file references and risks.”&lt;/p&gt;

&lt;p&gt;Make the agent show its path: files, assumptions, tradeoffs, and test impact. If it cannot explain the work, it does not get to touch the work.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Treat Context As Infrastructure
&lt;/h2&gt;

&lt;p&gt;Your AI workflow is only as good as the context it can reliably access.&lt;/p&gt;

&lt;p&gt;That means boring artifacts matter: clear READMEs, architecture notes, decision records, issue templates, subsystem docs, and known failure modes.&lt;/p&gt;

&lt;p&gt;But AI changes the payoff. A good architecture note is no longer something a human might read someday. It becomes material your tools can use every day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Documentation is becoming part of the runtime for developer productivity.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Add Review Gates Where AI Is Most Convincing
&lt;/h2&gt;

&lt;p&gt;So add friction around the shiny parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Require tests for generated code&lt;/li&gt;
&lt;li&gt;Review dependency additions aggressively&lt;/li&gt;
&lt;li&gt;Check security-sensitive code manually&lt;/li&gt;
&lt;li&gt;Prefer small patches over heroic dumps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A 60-line AI patch with tests is a teammate. A 2,000-line AI patch titled “minor cleanup” is a haunted house with CI.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Use Local When The Data Is Weird Or Sensitive
&lt;/h2&gt;

&lt;p&gt;Local models and local indexing are getting more interesting because many workflows involve context you do not casually fling across the internet: private repos, customer logs, internal videos, design docs, incident timelines.&lt;/p&gt;

&lt;p&gt;Know which workflows belong close to the data. For many teams, the future is hybrid: cloud models for general reasoning, local retrieval for private context, and strict boundaries around what gets sent where.&lt;/p&gt;

&lt;p&gt;That is less magical than “one agent to do everything.” It is also how adults ship software.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Measure Boredom Removed, Not Code Produced
&lt;/h2&gt;

&lt;p&gt;Lines of code generated is a garbage metric.&lt;/p&gt;

&lt;p&gt;Track better signals: time from issue pickup to first useful plan, time to understand an unfamiliar subsystem, PR review quality, test coverage on changed paths, clarification loops, incident follow-up completeness, and onboarding speed.&lt;/p&gt;

&lt;p&gt;The goal is not to make developers type less. It is to help developers think at the right layer more often.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Contrarian Take
&lt;/h2&gt;

&lt;p&gt;The winning AI workflow may involve fewer agents than you expect. Not zero. Fewer.&lt;/p&gt;

&lt;p&gt;A small set of boring, reliable workflows will beat a swarm of theatrical bots. One tool that explains blast radius is worth more than five agents opening pull requests like confetti cannons.&lt;/p&gt;

&lt;p&gt;The future developer is still a builder. Just one with better instruments, sharper review habits, and less tolerance for mystery meat automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ship The Boring Magic
&lt;/h2&gt;

&lt;p&gt;This week’s signal is clear: AI is moving from novelty to workflow plumbing. That is where it gets useful.&lt;/p&gt;

&lt;p&gt;Use AI where software work is full of expensive confusion: summarizing, comparing, explaining, drafting, testing, and producing small patches with evidence.&lt;/p&gt;

&lt;p&gt;But keep judgment human, keep context clean, and keep the blast radius visible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The best AI workflow is not the one that writes the most code. It is the one that leaves the team less confused after every change.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>devtools</category>
    </item>
    <item>
      <title>The New AI Workflow Is a Supply Chain Problem</title>
      <dc:creator>Chris</dc:creator>
      <pubDate>Thu, 21 May 2026 06:00:19 +0000</pubDate>
      <link>https://dev.to/chrisbuildsonline/the-new-ai-workflow-is-a-supply-chain-problem-5h61</link>
      <guid>https://dev.to/chrisbuildsonline/the-new-ai-workflow-is-a-supply-chain-problem-5h61</guid>
      <description>&lt;p&gt;Your coding assistant is no longer just autocomplete with swagger; it is another production dependency.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Weird Thing That Changed This Week
&lt;/h2&gt;

&lt;p&gt;Most dev news is confetti with a changelog attached. This week was different.&lt;/p&gt;

&lt;p&gt;On one side, OpenAI said an internal reasoning model &lt;a href="https://openai.com/index/model-disproves-discrete-geometry-conjecture/" rel="noopener noreferrer"&gt;disproved a longstanding conjecture in discrete geometry&lt;/a&gt;. Not “wrote a nicer regex.” Not “summarized a Jira ticket.” It produced work that external mathematicians checked.&lt;/p&gt;

&lt;p&gt;On the other side, GitHub confirmed that roughly 3,800 internal repos were breached after an employee installed a &lt;a href="https://www.bleepingcomputer.com/news/security/github-confirms-breach-of-3-800-repos-via-malicious-vscode-extension/" rel="noopener noreferrer"&gt;malicious VS Code extension&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That is the whole developer moment in two tabs:&lt;/p&gt;

&lt;p&gt;AI tools are getting frighteningly capable.&lt;/p&gt;

&lt;p&gt;Developer workflows are getting hilariously porous.&lt;/p&gt;

&lt;p&gt;The future is not “AI writes all the code.” The future is “AI can reason better than your Friday brain, while your editor extension can quietly steal the kingdom.”&lt;/p&gt;

&lt;p&gt;Welcome to the new job.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tool Is Not The Workflow
&lt;/h2&gt;

&lt;p&gt;A lot of teams are still treating AI coding tools like fancy autocomplete. Add the extension. Add the chat panel. Tell everyone to “use it responsibly.” Then wonder why the codebase feels like it got edited by five interns and a caffeinated spellchecker.&lt;/p&gt;

&lt;p&gt;That model is dead.&lt;/p&gt;

&lt;p&gt;The better framing is this: AI is now part of your software supply chain.&lt;/p&gt;

&lt;p&gt;It reads code. It writes code. It suggests dependencies. It drafts tests. It explains failures. It may touch secrets, logs, architecture docs, stack traces, customer-shaped data, and everything else people paste when they are tired.&lt;/p&gt;

&lt;p&gt;That means “which model should we use?” is only one small question. The bigger question is: what boundaries does this thing operate inside?&lt;/p&gt;

&lt;p&gt;Because an assistant that can help solve hard problems can also help ship subtle nonsense at scale. And an extension that looks like productivity can become an incident report with syntax highlighting.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Wrong Question Developers Ask
&lt;/h2&gt;

&lt;p&gt;The wrong question is:&lt;/p&gt;

&lt;p&gt;“Can AI do this task?”&lt;/p&gt;

&lt;p&gt;That question is too easy now. For more and more tasks, the answer is “yes, kind of, depending on how much context and verification you give it.”&lt;/p&gt;

&lt;p&gt;Can it write a migration? Sure.&lt;/p&gt;

&lt;p&gt;Can it refactor a service? Often.&lt;/p&gt;

&lt;p&gt;Can it debug CI? Sometimes faster than you.&lt;/p&gt;

&lt;p&gt;Can it produce a convincing explanation for a bug it does not understand? Absolutely. It was born for that.&lt;/p&gt;

&lt;p&gt;The dangerous part is not that AI fails. We already know software fails. The dangerous part is that AI fails with confidence, speed, and excellent formatting.&lt;/p&gt;

&lt;p&gt;So the better question is:&lt;/p&gt;

&lt;p&gt;“What system catches it when it is wrong?”&lt;/p&gt;

&lt;p&gt;That is where real engineering starts.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Better AI Workflow
&lt;/h2&gt;

&lt;p&gt;Here is the boring, useful playbook. It will not trend as hard as “10 prompts that replaced my staff engineer,” but it will keep your repo breathing.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Give AI Smaller Blast Zones
&lt;/h2&gt;

&lt;p&gt;Do not ask an assistant to “clean up the auth system” unless you enjoy archaeological debugging.&lt;/p&gt;

&lt;p&gt;Give it narrow tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Add validation for this input path.”&lt;/li&gt;
&lt;li&gt;“Write tests around this function before changing behavior.”&lt;/li&gt;
&lt;li&gt;“Explain why this query regressed.”&lt;/li&gt;
&lt;li&gt;“Refactor this file without changing public interfaces.”&lt;/li&gt;
&lt;li&gt;“Generate a migration and list rollback risks.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Small tasks create reviewable diffs. Reviewable diffs create actual trust.&lt;/p&gt;

&lt;p&gt;Big vague prompts create code fog.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Treat AI Output Like A Pull Request From A Stranger
&lt;/h2&gt;

&lt;p&gt;Not an enemy. Not a genius. A stranger.&lt;/p&gt;

&lt;p&gt;You would not merge a stranger’s PR because the comments sounded confident. You would check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the change match the existing design?&lt;/li&gt;
&lt;li&gt;Are the tests meaningful or just decorative?&lt;/li&gt;
&lt;li&gt;Did it introduce a dependency for a three-line helper?&lt;/li&gt;
&lt;li&gt;Did it change behavior outside the requested scope?&lt;/li&gt;
&lt;li&gt;Is the error handling real?&lt;/li&gt;
&lt;li&gt;Are edge cases named and covered?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The trick is to make this normal, not dramatic. AI code should go through the same path as human code: tests, review, observability, rollback plan when appropriate.&lt;/p&gt;

&lt;p&gt;No special shrine. No special panic.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Lock Down The Editor Like It Matters
&lt;/h2&gt;

&lt;p&gt;That GitHub incident is a reminder that the developer workstation is production-adjacent now.&lt;/p&gt;

&lt;p&gt;If your editor can read private repos, tokens, env files, SSH configs, internal docs, and generated code, then editor extensions are not “personal preference.” They are executable supply-chain decisions.&lt;/p&gt;

&lt;p&gt;Practical moves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Maintain an allowlist for extensions in company environments.&lt;/li&gt;
&lt;li&gt;Remove abandoned extensions from critical workflows.&lt;/li&gt;
&lt;li&gt;Prefer vendors with clear provenance and update history.&lt;/li&gt;
&lt;li&gt;Disable workspace trust bypasses.&lt;/li&gt;
&lt;li&gt;Keep secrets out of local files where possible.&lt;/li&gt;
&lt;li&gt;Rotate tokens when developer tooling gets weird, not three meetings later.&lt;/li&gt;
&lt;li&gt;Audit extensions that request broad filesystem or network access.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The edgiest thing your team can do in 2026 is basic hygiene.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Make The Compiler And CI Part Of The Conversation
&lt;/h2&gt;

&lt;p&gt;One underrated trend: tooling is getting better at producing machine-readable feedback. GCC 16 work includes &lt;a href="https://developers.redhat.com/articles/2026/04/28/gcc-16-improved-error-messages-sarif-output" rel="noopener noreferrer"&gt;improved diagnostics and SARIF output&lt;/a&gt;, which fits a larger shift: compilers, linters, scanners, and CI systems are becoming structured signal feeds.&lt;/p&gt;

&lt;p&gt;That matters because AI works better when it gets concrete feedback instead of vibes.&lt;/p&gt;

&lt;p&gt;Bad loop:&lt;/p&gt;

&lt;p&gt;“Fix the build.”&lt;/p&gt;

&lt;p&gt;Better loop:&lt;/p&gt;

&lt;p&gt;“Here is the failing test, compiler diagnostic, changed files, and expected behavior. Propose the smallest fix.”&lt;/p&gt;

&lt;p&gt;Best loop:&lt;/p&gt;

&lt;p&gt;AI proposes. Tools verify. Human reviews intent. CI blocks nonsense. The assistant gets the failure output and tries again inside a narrow scope.&lt;/p&gt;

&lt;p&gt;That is not magic. That is a feedback system.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Stop Rewarding Prompt Theater
&lt;/h2&gt;

&lt;p&gt;Contrarian take: prompt engineering is overrated inside mature engineering teams.&lt;/p&gt;

&lt;p&gt;Not useless. Overrated.&lt;/p&gt;

&lt;p&gt;The teams that win will not be the ones with the fanciest incantations. They will be the ones with clean interfaces, fast tests, readable errors, documented invariants, and boring automation.&lt;/p&gt;

&lt;p&gt;AI loves a healthy codebase. It struggles in the same swamps humans do: hidden side effects, mystery globals, flaky tests, tribal deployment knowledge, and functions named &lt;code&gt;handleThing2&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Want better AI output? Improve the terrain.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Write smaller modules.&lt;/li&gt;
&lt;li&gt;Keep architectural decisions close to the code.&lt;/li&gt;
&lt;li&gt;Add examples to tests.&lt;/li&gt;
&lt;li&gt;Delete dead paths.&lt;/li&gt;
&lt;li&gt;Make local setup boring.&lt;/li&gt;
&lt;li&gt;Put invariants in types, schemas, and assertions.&lt;/li&gt;
&lt;li&gt;Make failure messages specific.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The prompt is not the product. The system is.&lt;/p&gt;

&lt;h2&gt;
  
  
  The New Senior Developer Skill
&lt;/h2&gt;

&lt;p&gt;The senior move is no longer “I can personally hold the entire codebase in my head.”&lt;/p&gt;

&lt;p&gt;That was always a cursed party trick.&lt;/p&gt;

&lt;p&gt;The new senior move is designing workflows where humans and machines can both be useful without being trusted blindly.&lt;/p&gt;

&lt;p&gt;That means knowing when to delegate to AI, when to pin it inside a sandbox, when to demand tests first, when to distrust a plausible answer, and when to turn the tool off and read the code like an adult.&lt;/p&gt;

&lt;p&gt;AI is becoming a real collaborator. Great. Collaborators need boundaries.&lt;/p&gt;

&lt;p&gt;Your editor is becoming a bigger attack surface. Fine. Attack surfaces need controls.&lt;/p&gt;

&lt;p&gt;Your CI is becoming a negotiation partner. Excellent. Give it sharp teeth.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Takeaway
&lt;/h2&gt;

&lt;p&gt;This week did not say “developers are obsolete.”&lt;/p&gt;

&lt;p&gt;It said the job is moving up a layer.&lt;/p&gt;

&lt;p&gt;Less typing boilerplate. More designing guardrails. Less worshipping tools. More owning workflows. Less “can AI write code?” More “can our system survive code written at AI speed?”&lt;/p&gt;

&lt;p&gt;Because the future belongs to teams that can move fast without letting every shiny extension hold the keys to the vault.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>tooling</category>
      <category>devops</category>
    </item>
    <item>
      <title>Stop Asking “Which Model?” and Start Fixing Your Team’s AI Supply Chain [Image Test C]</title>
      <dc:creator>Chris</dc:creator>
      <pubDate>Wed, 20 May 2026 17:04:39 +0000</pubDate>
      <link>https://dev.to/chrisbuildsonline/stop-asking-which-model-and-start-fixing-your-teams-ai-supply-chain-image-test-c-5ka</link>
      <guid>https://dev.to/chrisbuildsonline/stop-asking-which-model-and-start-fixing-your-teams-ai-supply-chain-image-test-c-5ka</guid>
      <description>&lt;p&gt;This week made one thing obvious: AI coding speed is up, but trust in code is now your real bottleneck.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hook: the scary part isn’t wrong code anymore
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The biggest AI risk in software teams right now is not bad output, it’s bad provenance.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most senior devs I know can smell shaky code in a PR. We’ve trained that instinct for years.&lt;br&gt;&lt;br&gt;
What’s newer (and nastier) is code that looks fine, ships fast, and quietly breaks ownership, traceability, or security assumptions.&lt;/p&gt;

&lt;p&gt;If your workflow still treats AI as “just a faster autocomplete,” you’re defending the wrong perimeter.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed this week (and why it’s not random noise)
&lt;/h2&gt;

&lt;p&gt;A few trend signals lined up this week in a way that matters:&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.amazonaws.com%2Fuploads%2Farticles%2Fdavr894mzlvab9pynhdl.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.amazonaws.com%2Fuploads%2Farticles%2Fdavr894mzlvab9pynhdl.png" alt="article visual 1" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Anthropic acquired Stainless, which is a strong hint that “model + API lifecycle” is becoming one product surface, not two separate tools.&lt;/li&gt;
&lt;li&gt;A repo maintainer story on HN showed AI bot spam getting blocked using Git’s &lt;code&gt;--author&lt;/code&gt; flag strategy. Not glamorous, but very real: identity and attribution are now active attack surfaces.&lt;/li&gt;
&lt;li&gt;Local-first and self-controlled tooling kept getting attention (for example, Files.md traction, Haiku-on-M1 discussions). That’s not nostalgia; it’s developers reclaiming control planes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Different stories, same direction: we’re shifting from “Can AI write code?” to “Can our system verify who/what changed code, why, and under what guardrails?”&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters in real teams
&lt;/h2&gt;

&lt;p&gt;In a solo project, you can vibe-code and recover. In a team, ambiguity compounds.&lt;/p&gt;

&lt;p&gt;Here’s what I’m seeing across real delivery environments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PR volume grows faster than review depth.&lt;/li&gt;
&lt;li&gt;Generated code lands without enough architectural context.&lt;/li&gt;
&lt;li&gt;Ownership gets fuzzy: “the assistant wrote it” is not an accountability model.&lt;/li&gt;
&lt;li&gt;Security and compliance teams get pulled in late, when the blast radius is already big.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The painful part: velocity looks great on paper right until one messy incident forces a freeze, and then everyone pretends this was unpredictable.&lt;/p&gt;

&lt;p&gt;It was predictable.&lt;/p&gt;

&lt;p&gt;AI didn’t remove software engineering constraints. It moved them.&lt;br&gt;&lt;br&gt;
You used to spend more time producing code; now you spend more time proving code deserves to exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  The wrong question most people ask
&lt;/h2&gt;

&lt;p&gt;“Which model should we standardize on?”&lt;/p&gt;

&lt;p&gt;That’s not useless, but it’s not first-order anymore.&lt;/p&gt;

&lt;p&gt;Model choice matters, yes. But teams are overfocusing on model IQ while underinvesting in workflow integrity. A stronger model in a weak workflow just lets you create ambiguity at higher throughput.&lt;/p&gt;

&lt;p&gt;Contrarian angle: &lt;strong&gt;for most teams, upgrading process quality will outperform upgrading model quality.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Not forever, but definitely this quarter.&lt;/p&gt;

&lt;p&gt;If your branch strategy is chaos, your review contract is vague, and your commit identity rules are loose, model gains are mostly cosmetic.&lt;/p&gt;

&lt;h2&gt;
  
  
  The better question: where does trust break in our AI workflow?
&lt;/h2&gt;

&lt;p&gt;Ask this instead:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“At which exact handoffs can low-context AI output become high-impact production risk, and what lightweight controls close those gaps?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then run this playbook.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical playbook you can apply this sprint
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1) Add a provenance contract to PRs
&lt;/h3&gt;

&lt;p&gt;Every AI-assisted PR should include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what was generated (files or modules)&lt;/li&gt;
&lt;li&gt;what was human-authored&lt;/li&gt;
&lt;li&gt;what checks were run&lt;/li&gt;
&lt;li&gt;what remains unverified&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep it short and mandatory. You’re not writing a thesis; you’re creating an audit trail.&lt;/p&gt;

&lt;h3&gt;
  
  
  2) Enforce commit identity hygiene
&lt;/h3&gt;

&lt;p&gt;If bot noise or unclear authorship is possible in your flow, lock this down now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;require verified commit emails/domains where possible&lt;/li&gt;
&lt;li&gt;define rules for bot/service authors&lt;/li&gt;
&lt;li&gt;reject unexpected author patterns in CI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The HN bot-spam story is your warning shot: attribution is a security control now.&lt;/p&gt;

&lt;h3&gt;
  
  
  3) Split AI usage into lanes
&lt;/h3&gt;

&lt;p&gt;Stop using one giant “AI helped” bucket.&lt;/p&gt;

&lt;p&gt;Create 3 lanes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;drafting&lt;/code&gt;: scaffolding, boilerplate, test seed generation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;transforming&lt;/code&gt;: refactors, migrations, repetitive edits&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;deciding&lt;/code&gt;: architecture, security-sensitive logic, data contracts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lane 3 always gets human-first review. No exceptions.&lt;/p&gt;

&lt;h3&gt;
  
  
  4) Upgrade review prompts, not just generation prompts
&lt;/h3&gt;

&lt;p&gt;Most teams polish generation prompts and ignore review prompts.&lt;/p&gt;

&lt;p&gt;Use reviewer checklists tuned for AI-heavy diffs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;does this change preserve invariants?&lt;/li&gt;
&lt;li&gt;did naming drift from domain language?&lt;/li&gt;
&lt;li&gt;are edge cases tested or only happy path?&lt;/li&gt;
&lt;li&gt;did hidden coupling increase?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Treat review as an explicit system, not heroics.&lt;/p&gt;

&lt;h3&gt;
  
  
  5) Track one metric that reveals workflow health
&lt;/h3&gt;

&lt;p&gt;Pick one, start simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PR reopen rate&lt;/li&gt;
&lt;li&gt;hotfixes within 7 days of merge&lt;/li&gt;
&lt;li&gt;median review rounds per AI-assisted PR&lt;/li&gt;
&lt;li&gt;percent of AI-assisted PRs with complete provenance note&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don’t build a dashboard empire. One honest metric beats ten vanity charts.&lt;/p&gt;

&lt;h3&gt;
  
  
  6) Keep a “human judgment list”
&lt;/h3&gt;

&lt;p&gt;Document decisions AI should not make alone in your codebase:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;auth boundaries&lt;/li&gt;
&lt;li&gt;billing logic&lt;/li&gt;
&lt;li&gt;destructive migrations&lt;/li&gt;
&lt;li&gt;incident automation steps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This avoids vague arguments mid-PR and protects your senior engineers from becoming nonstop escalation points.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing line that sticks
&lt;/h2&gt;

&lt;p&gt;AI didn’t kill software engineering fundamentals; it just made the fundamentals bill you daily.&lt;br&gt;&lt;br&gt;
Teams that win this year won’t be the ones with the flashiest model, they’ll be the ones with the cleanest trust pipeline from prompt to production.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>workflow</category>
      <category>engineering</category>
      <category>devops</category>
    </item>
    <item>
      <title>Stop Asking “Which Model?” and Start Fixing Your Team’s AI Supply Chain [Image Test B]</title>
      <dc:creator>Chris</dc:creator>
      <pubDate>Wed, 20 May 2026 17:03:30 +0000</pubDate>
      <link>https://dev.to/chrisbuildsonline/stop-asking-which-model-and-start-fixing-your-teams-ai-supply-chain-image-test-b-j04</link>
      <guid>https://dev.to/chrisbuildsonline/stop-asking-which-model-and-start-fixing-your-teams-ai-supply-chain-image-test-b-j04</guid>
      <description>&lt;p&gt;This week made one thing obvious: AI coding speed is up, but trust in code is now your real bottleneck.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hook: the scary part isn’t wrong code anymore
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The biggest AI risk in software teams right now is not bad output, it’s bad provenance.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most senior devs I know can smell shaky code in a PR. We’ve trained that instinct for years.&lt;br&gt;&lt;br&gt;
What’s newer (and nastier) is code that looks fine, ships fast, and quietly breaks ownership, traceability, or security assumptions.&lt;/p&gt;

&lt;p&gt;If your workflow still treats AI as “just a faster autocomplete,” you’re defending the wrong perimeter.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed this week (and why it’s not random noise)
&lt;/h2&gt;

&lt;p&gt;A few trend signals lined up this week in a way that matters:&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.amazonaws.com%2Fuploads%2Farticles%2F69mjsv5dwnted5o1tqac.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.amazonaws.com%2Fuploads%2Farticles%2F69mjsv5dwnted5o1tqac.png" alt="article visual 1" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Anthropic acquired Stainless, which is a strong hint that “model + API lifecycle” is becoming one product surface, not two separate tools.&lt;/li&gt;
&lt;li&gt;A repo maintainer story on HN showed AI bot spam getting blocked using Git’s &lt;code&gt;--author&lt;/code&gt; flag strategy. Not glamorous, but very real: identity and attribution are now active attack surfaces.&lt;/li&gt;
&lt;li&gt;Local-first and self-controlled tooling kept getting attention (for example, Files.md traction, Haiku-on-M1 discussions). That’s not nostalgia; it’s developers reclaiming control planes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Different stories, same direction: we’re shifting from “Can AI write code?” to “Can our system verify who/what changed code, why, and under what guardrails?”&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters in real teams
&lt;/h2&gt;

&lt;p&gt;In a solo project, you can vibe-code and recover. In a team, ambiguity compounds.&lt;/p&gt;

&lt;p&gt;Here’s what I’m seeing across real delivery environments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PR volume grows faster than review depth.&lt;/li&gt;
&lt;li&gt;Generated code lands without enough architectural context.&lt;/li&gt;
&lt;li&gt;Ownership gets fuzzy: “the assistant wrote it” is not an accountability model.&lt;/li&gt;
&lt;li&gt;Security and compliance teams get pulled in late, when the blast radius is already big.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The painful part: velocity looks great on paper right until one messy incident forces a freeze, and then everyone pretends this was unpredictable.&lt;/p&gt;

&lt;p&gt;It was predictable.&lt;/p&gt;

&lt;p&gt;AI didn’t remove software engineering constraints. It moved them.&lt;br&gt;&lt;br&gt;
You used to spend more time producing code; now you spend more time proving code deserves to exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  The wrong question most people ask
&lt;/h2&gt;

&lt;p&gt;“Which model should we standardize on?”&lt;/p&gt;

&lt;p&gt;That’s not useless, but it’s not first-order anymore.&lt;/p&gt;

&lt;p&gt;Model choice matters, yes. But teams are overfocusing on model IQ while underinvesting in workflow integrity. A stronger model in a weak workflow just lets you create ambiguity at higher throughput.&lt;/p&gt;

&lt;p&gt;Contrarian angle: &lt;strong&gt;for most teams, upgrading process quality will outperform upgrading model quality.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Not forever, but definitely this quarter.&lt;/p&gt;

&lt;p&gt;If your branch strategy is chaos, your review contract is vague, and your commit identity rules are loose, model gains are mostly cosmetic.&lt;/p&gt;

&lt;h2&gt;
  
  
  The better question: where does trust break in our AI workflow?
&lt;/h2&gt;

&lt;p&gt;Ask this instead:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“At which exact handoffs can low-context AI output become high-impact production risk, and what lightweight controls close those gaps?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then run this playbook.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical playbook you can apply this sprint
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1) Add a provenance contract to PRs
&lt;/h3&gt;

&lt;p&gt;Every AI-assisted PR should include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what was generated (files or modules)&lt;/li&gt;
&lt;li&gt;what was human-authored&lt;/li&gt;
&lt;li&gt;what checks were run&lt;/li&gt;
&lt;li&gt;what remains unverified&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep it short and mandatory. You’re not writing a thesis; you’re creating an audit trail.&lt;/p&gt;

&lt;h3&gt;
  
  
  2) Enforce commit identity hygiene
&lt;/h3&gt;

&lt;p&gt;If bot noise or unclear authorship is possible in your flow, lock this down now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;require verified commit emails/domains where possible&lt;/li&gt;
&lt;li&gt;define rules for bot/service authors&lt;/li&gt;
&lt;li&gt;reject unexpected author patterns in CI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The HN bot-spam story is your warning shot: attribution is a security control now.&lt;/p&gt;

&lt;h3&gt;
  
  
  3) Split AI usage into lanes
&lt;/h3&gt;

&lt;p&gt;Stop using one giant “AI helped” bucket.&lt;/p&gt;

&lt;p&gt;Create 3 lanes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;drafting&lt;/code&gt;: scaffolding, boilerplate, test seed generation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;transforming&lt;/code&gt;: refactors, migrations, repetitive edits&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;deciding&lt;/code&gt;: architecture, security-sensitive logic, data contracts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lane 3 always gets human-first review. No exceptions.&lt;/p&gt;

&lt;h3&gt;
  
  
  4) Upgrade review prompts, not just generation prompts
&lt;/h3&gt;

&lt;p&gt;Most teams polish generation prompts and ignore review prompts.&lt;/p&gt;

&lt;p&gt;Use reviewer checklists tuned for AI-heavy diffs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;does this change preserve invariants?&lt;/li&gt;
&lt;li&gt;did naming drift from domain language?&lt;/li&gt;
&lt;li&gt;are edge cases tested or only happy path?&lt;/li&gt;
&lt;li&gt;did hidden coupling increase?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Treat review as an explicit system, not heroics.&lt;/p&gt;

&lt;h3&gt;
  
  
  5) Track one metric that reveals workflow health
&lt;/h3&gt;

&lt;p&gt;Pick one, start simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PR reopen rate&lt;/li&gt;
&lt;li&gt;hotfixes within 7 days of merge&lt;/li&gt;
&lt;li&gt;median review rounds per AI-assisted PR&lt;/li&gt;
&lt;li&gt;percent of AI-assisted PRs with complete provenance note&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don’t build a dashboard empire. One honest metric beats ten vanity charts.&lt;/p&gt;

&lt;h3&gt;
  
  
  6) Keep a “human judgment list”
&lt;/h3&gt;

&lt;p&gt;Document decisions AI should not make alone in your codebase:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;auth boundaries&lt;/li&gt;
&lt;li&gt;billing logic&lt;/li&gt;
&lt;li&gt;destructive migrations&lt;/li&gt;
&lt;li&gt;incident automation steps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This avoids vague arguments mid-PR and protects your senior engineers from becoming nonstop escalation points.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing line that sticks
&lt;/h2&gt;

&lt;p&gt;AI didn’t kill software engineering fundamentals; it just made the fundamentals bill you daily.&lt;br&gt;&lt;br&gt;
Teams that win this year won’t be the ones with the flashiest model, they’ll be the ones with the cleanest trust pipeline from prompt to production.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>workflow</category>
      <category>engineering</category>
      <category>devops</category>
    </item>
    <item>
      <title>Stop Asking “Which Model?” and Start Fixing Your Team’s AI Supply Chain [Image Test A]</title>
      <dc:creator>Chris</dc:creator>
      <pubDate>Wed, 20 May 2026 17:03:29 +0000</pubDate>
      <link>https://dev.to/chrisbuildsonline/stop-asking-which-model-and-start-fixing-your-teams-ai-supply-chain-image-test-a-25bo</link>
      <guid>https://dev.to/chrisbuildsonline/stop-asking-which-model-and-start-fixing-your-teams-ai-supply-chain-image-test-a-25bo</guid>
      <description>&lt;p&gt;This week made one thing obvious: AI coding speed is up, but trust in code is now your real bottleneck.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hook: the scary part isn’t wrong code anymore
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The biggest AI risk in software teams right now is not bad output, it’s bad provenance.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most senior devs I know can smell shaky code in a PR. We’ve trained that instinct for years.&lt;br&gt;&lt;br&gt;
What’s newer (and nastier) is code that looks fine, ships fast, and quietly breaks ownership, traceability, or security assumptions.&lt;/p&gt;

&lt;p&gt;If your workflow still treats AI as “just a faster autocomplete,” you’re defending the wrong perimeter.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed this week (and why it’s not random noise)
&lt;/h2&gt;

&lt;p&gt;A few trend signals lined up this week in a way that matters:&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.amazonaws.com%2Fuploads%2Farticles%2F947abwki79duwbmeuq47.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.amazonaws.com%2Fuploads%2Farticles%2F947abwki79duwbmeuq47.png" alt="article visual 1" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Anthropic acquired Stainless, which is a strong hint that “model + API lifecycle” is becoming one product surface, not two separate tools.&lt;/li&gt;
&lt;li&gt;A repo maintainer story on HN showed AI bot spam getting blocked using Git’s &lt;code&gt;--author&lt;/code&gt; flag strategy. Not glamorous, but very real: identity and attribution are now active attack surfaces.&lt;/li&gt;
&lt;li&gt;Local-first and self-controlled tooling kept getting attention (for example, Files.md traction, Haiku-on-M1 discussions). That’s not nostalgia; it’s developers reclaiming control planes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Different stories, same direction: we’re shifting from “Can AI write code?” to “Can our system verify who/what changed code, why, and under what guardrails?”&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters in real teams
&lt;/h2&gt;

&lt;p&gt;In a solo project, you can vibe-code and recover. In a team, ambiguity compounds.&lt;/p&gt;

&lt;p&gt;Here’s what I’m seeing across real delivery environments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PR volume grows faster than review depth.&lt;/li&gt;
&lt;li&gt;Generated code lands without enough architectural context.&lt;/li&gt;
&lt;li&gt;Ownership gets fuzzy: “the assistant wrote it” is not an accountability model.&lt;/li&gt;
&lt;li&gt;Security and compliance teams get pulled in late, when the blast radius is already big.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The painful part: velocity looks great on paper right until one messy incident forces a freeze, and then everyone pretends this was unpredictable.&lt;/p&gt;

&lt;p&gt;It was predictable.&lt;/p&gt;

&lt;p&gt;AI didn’t remove software engineering constraints. It moved them.&lt;br&gt;&lt;br&gt;
You used to spend more time producing code; now you spend more time proving code deserves to exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  The wrong question most people ask
&lt;/h2&gt;

&lt;p&gt;“Which model should we standardize on?”&lt;/p&gt;

&lt;p&gt;That’s not useless, but it’s not first-order anymore.&lt;/p&gt;

&lt;p&gt;Model choice matters, yes. But teams are overfocusing on model IQ while underinvesting in workflow integrity. A stronger model in a weak workflow just lets you create ambiguity at higher throughput.&lt;/p&gt;

&lt;p&gt;Contrarian angle: &lt;strong&gt;for most teams, upgrading process quality will outperform upgrading model quality.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Not forever, but definitely this quarter.&lt;/p&gt;

&lt;p&gt;If your branch strategy is chaos, your review contract is vague, and your commit identity rules are loose, model gains are mostly cosmetic.&lt;/p&gt;

&lt;h2&gt;
  
  
  The better question: where does trust break in our AI workflow?
&lt;/h2&gt;

&lt;p&gt;Ask this instead:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“At which exact handoffs can low-context AI output become high-impact production risk, and what lightweight controls close those gaps?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then run this playbook.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical playbook you can apply this sprint
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1) Add a provenance contract to PRs
&lt;/h3&gt;

&lt;p&gt;Every AI-assisted PR should include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what was generated (files or modules)&lt;/li&gt;
&lt;li&gt;what was human-authored&lt;/li&gt;
&lt;li&gt;what checks were run&lt;/li&gt;
&lt;li&gt;what remains unverified&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep it short and mandatory. You’re not writing a thesis; you’re creating an audit trail.&lt;/p&gt;

&lt;h3&gt;
  
  
  2) Enforce commit identity hygiene
&lt;/h3&gt;

&lt;p&gt;If bot noise or unclear authorship is possible in your flow, lock this down now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;require verified commit emails/domains where possible&lt;/li&gt;
&lt;li&gt;define rules for bot/service authors&lt;/li&gt;
&lt;li&gt;reject unexpected author patterns in CI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The HN bot-spam story is your warning shot: attribution is a security control now.&lt;/p&gt;

&lt;h3&gt;
  
  
  3) Split AI usage into lanes
&lt;/h3&gt;

&lt;p&gt;Stop using one giant “AI helped” bucket.&lt;/p&gt;

&lt;p&gt;Create 3 lanes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;drafting&lt;/code&gt;: scaffolding, boilerplate, test seed generation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;transforming&lt;/code&gt;: refactors, migrations, repetitive edits&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;deciding&lt;/code&gt;: architecture, security-sensitive logic, data contracts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lane 3 always gets human-first review. No exceptions.&lt;/p&gt;

&lt;h3&gt;
  
  
  4) Upgrade review prompts, not just generation prompts
&lt;/h3&gt;

&lt;p&gt;Most teams polish generation prompts and ignore review prompts.&lt;/p&gt;

&lt;p&gt;Use reviewer checklists tuned for AI-heavy diffs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;does this change preserve invariants?&lt;/li&gt;
&lt;li&gt;did naming drift from domain language?&lt;/li&gt;
&lt;li&gt;are edge cases tested or only happy path?&lt;/li&gt;
&lt;li&gt;did hidden coupling increase?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Treat review as an explicit system, not heroics.&lt;/p&gt;

&lt;h3&gt;
  
  
  5) Track one metric that reveals workflow health
&lt;/h3&gt;

&lt;p&gt;Pick one, start simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PR reopen rate&lt;/li&gt;
&lt;li&gt;hotfixes within 7 days of merge&lt;/li&gt;
&lt;li&gt;median review rounds per AI-assisted PR&lt;/li&gt;
&lt;li&gt;percent of AI-assisted PRs with complete provenance note&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don’t build a dashboard empire. One honest metric beats ten vanity charts.&lt;/p&gt;

&lt;h3&gt;
  
  
  6) Keep a “human judgment list”
&lt;/h3&gt;

&lt;p&gt;Document decisions AI should not make alone in your codebase:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;auth boundaries&lt;/li&gt;
&lt;li&gt;billing logic&lt;/li&gt;
&lt;li&gt;destructive migrations&lt;/li&gt;
&lt;li&gt;incident automation steps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This avoids vague arguments mid-PR and protects your senior engineers from becoming nonstop escalation points.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing line that sticks
&lt;/h2&gt;

&lt;p&gt;AI didn’t kill software engineering fundamentals; it just made the fundamentals bill you daily.&lt;br&gt;&lt;br&gt;
Teams that win this year won’t be the ones with the flashiest model, they’ll be the ones with the cleanest trust pipeline from prompt to production.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>workflow</category>
      <category>engineering</category>
      <category>devops</category>
    </item>
    <item>
      <title>We're All Juggling 4 AI Tools Now and Pretending That's Normal</title>
      <dc:creator>Chris</dc:creator>
      <pubDate>Tue, 12 May 2026 19:35:44 +0000</pubDate>
      <link>https://dev.to/chrisbuildsonline/were-all-juggling-4-ai-tools-now-and-pretending-thats-normal-25pp</link>
      <guid>https://dev.to/chrisbuildsonline/were-all-juggling-4-ai-tools-now-and-pretending-thats-normal-25pp</guid>
      <description>&lt;p&gt;If you told me two years ago that the average developer would be switching between four different AI coding assistants every day, I would've laughed. But here we are in May 2026, and according to the latest Pragmatic Engineer survey of 900+ developers, &lt;strong&gt;70% of us are using between two and four AI tools simultaneously&lt;/strong&gt;. Another 15% use five or more.&lt;/p&gt;

&lt;p&gt;That's not a workflow. That's a circus. And honestly? I kind of love it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude Code Came Out of Nowhere
&lt;/h2&gt;

&lt;p&gt;The biggest surprise in the data is Claude Code. Released in May 2025, it went from "interesting new tool" to the &lt;strong&gt;most used AI coding tool in the industry&lt;/strong&gt; in just eight months. It overtook GitHub Copilot. It overtook Cursor. At smaller companies, 75% of developers are using it.&lt;/p&gt;

&lt;p&gt;Think about that for a second. GitHub Copilot had a massive head start, Microsoft's distribution engine behind it, and enterprise deals locked in across thousands of companies. Claude Code showed up with a terminal and a dream and just... won.&lt;/p&gt;

&lt;p&gt;The developer love is real too. &lt;strong&gt;46% of surveyed devs say Claude Code is their favorite tool&lt;/strong&gt;, compared to 19% for Cursor and 9% for Copilot. That's not a close race.&lt;/p&gt;

&lt;h2&gt;
  
  
  But Cursor Isn't Going Away
&lt;/h2&gt;

&lt;p&gt;Here's where it gets interesting. Even with Claude Code's dominance, Cursor grew 35% in the same period. Both tools are thriving at the same time because developers aren't picking one and sticking with it. They're mixing and matching.&lt;/p&gt;

&lt;p&gt;Cursor just shipped version 3, putting an agentic interface front and center while pushing the traditional IDE to the background. And then there's the wild SpaceX news: a &lt;strong&gt;$60 billion option to acquire Cursor&lt;/strong&gt;, which sounds like science fiction but is apparently just how things work now.&lt;/p&gt;

&lt;p&gt;Meanwhile, OpenAI's Codex appeared out of nowhere and already has &lt;strong&gt;60% of Cursor's usage&lt;/strong&gt; despite not existing during the last survey. The speed of adoption in this space is genuinely unreal.&lt;/p&gt;

&lt;h2&gt;
  
  
  95% Weekly AI Usage Is the New Baseline
&lt;/h2&gt;

&lt;p&gt;The number that stopped me in my tracks: &lt;strong&gt;95% of developers now use AI tools at least weekly&lt;/strong&gt;. 75% use AI for half or more of their work. 56% say they do 70%+ of their engineering with AI assistance.&lt;/p&gt;

&lt;p&gt;We're past the "should developers use AI?" debate. That conversation is over. The question now is which combination of tools works best for your specific workflow, your team's codebase, and your preferred way of thinking about problems.&lt;/p&gt;

&lt;p&gt;Staff and senior engineers are leading the charge too, with 63.5% of them regularly using AI agents. The people with the most context and experience are leaning in the hardest, which says something about where the value actually lives.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google I/O Drops Next Week
&lt;/h2&gt;

&lt;p&gt;As if the tool landscape wasn't moving fast enough, Google I/O 2026 kicks off May 19 and the preview signals are everywhere. The Android Show streamed today with early looks at Android 17, which includes &lt;strong&gt;agentic Gemini capabilities that can execute tasks from the lock screen&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We're expecting Gemini 4.0, the Aluminium OS announcement (Google's Android based PC operating system), and expanded agent building toolkits. Google already shipped "Auto Browse" into Chrome with Gemini 3, letting AI autonomously handle form filling, travel booking, and multi step web tasks right in the browser.&lt;/p&gt;

&lt;p&gt;If you build for the web, next week is going to be a firehose of new capabilities to think about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Node.js 26 and the Temporal API
&lt;/h2&gt;

&lt;p&gt;In non AI news that still matters a lot: &lt;strong&gt;Node.js v26.0.0 dropped on May 5&lt;/strong&gt; and the biggest change is that the Temporal API is now enabled by default. If you've ever wrestled with JavaScript's &lt;code&gt;Date&lt;/code&gt; object (and we all have), this is the upgrade we've been waiting years for.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Temporal.Now.zonedDateTimeISO()&lt;/code&gt; is real. It works. No more timezone math nightmares or reaching for moment.js. The future of dates in JavaScript is finally here, and it doesn't require a flag or a polyfill.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm Taking Away From All This
&lt;/h2&gt;

&lt;p&gt;The developer experience is evolving faster than any of us can keep up with, and that's actually okay. You don't need to master every new tool the week it launches. The developers who seem to be thriving are the ones who &lt;strong&gt;pick two or three tools that click with their brain&lt;/strong&gt; and go deep rather than spreading thin across everything.&lt;/p&gt;

&lt;p&gt;Claude Code is clearly the momentum leader right now. Cursor is the power user's choice. Copilot is the enterprise default. And Codex is the dark horse worth watching.&lt;/p&gt;

&lt;p&gt;Find your combo. Ship your code. And maybe clear your schedule for Google I/O next week because things are about to get even more interesting.&lt;/p&gt;

&lt;p&gt;Now go try that Temporal API. You deserve nice dates. 📅&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Building 1000 Candles: A Digital Memorial That Taught Me About Scale, Optimization, and Remembrance</title>
      <dc:creator>Chris</dc:creator>
      <pubDate>Thu, 20 Nov 2025 17:12:25 +0000</pubDate>
      <link>https://dev.to/chrisbuildsonline/building-1000-candles-a-digital-memorial-that-taught-me-about-scale-optimization-and-remembrance-3ok3</link>
      <guid>https://dev.to/chrisbuildsonline/building-1000-candles-a-digital-memorial-that-taught-me-about-scale-optimization-and-remembrance-3ok3</guid>
      <description>&lt;p&gt;When I started building 1000 Candles for the Kiroween Hackathon, I thought I was just creating a cool 3D visualization. What I ended up with was something much more meaningful. A digital space where people can light virtual candles in memory of loved ones, and a deep dive into the challenges of building real-time, scalable web applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Concept: A Graveyard of Light
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2Ftj626mqwk5dkb9isrp3m.gif" 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.amazonaws.com%2Fuploads%2Farticles%2Ftj626mqwk5dkb9isrp3m.gif" alt=" " width="600" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The idea was simple but powerful. Create a haunting 3D graveyard where users can light candles with personal dedications. Each candle would glow with realistic flame physics, positioned among hundreds of others, creating a collective memorial that grows over time.&lt;/p&gt;

&lt;p&gt;But as any developer knows, simple ideas rarely stay simple.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tech Stack: Choosing the Right Tools
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2Fpt37d613mdr04gg2dgzq.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.amazonaws.com%2Fuploads%2Farticles%2Fpt37d613mdr04gg2dgzq.png" alt=" " width="316" height="159"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I built 1000 Candles with Next.js 14, Three.js, and React Three Fiber for the 3D rendering. I wrote custom GLSL shaders for the flame effects because I wanted them to look really realistic. For the database, I used SQLite locally and Turso for production since it works great with serverless. Tailwind CSS handled the styling, and I added Tone.js for spatial audio to make it more immersive.&lt;/p&gt;

&lt;p&gt;The choice of Three.js was obvious. I needed real-time 3D rendering with good performance. But the database choice? That's where things got interesting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenge #1: The Polling Problem
&lt;/h2&gt;

&lt;p&gt;Users needed to see new candles appear in real-time. My first approach? Poll the database every 5 seconds.&lt;/p&gt;

&lt;p&gt;With 100 concurrent users, that's 1,200 requests per minute, or 72,000 requests per hour. Each request fetches 200+ candle records. That's 14.4 million row reads per hour!&lt;/p&gt;

&lt;p&gt;On Turso, that would cost around $20 per month. Not terrible, but not great for a hackathon project.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Optimization Journey
&lt;/h3&gt;

&lt;p&gt;I explored several solutions. Server-Sent Events would be real-time but keeps serverless functions alive which costs money on Vercel. WebSockets would be perfect but they're not supported on Vercel serverless. Third-party services like Pusher or Ably are great but cost $29 to $49 per month.&lt;/p&gt;

&lt;p&gt;None of these felt right for a memorial site that should be simple and sustainable.&lt;/p&gt;

&lt;p&gt;Here's what I built. A metadata table with a single row storing the last candle timestamp. A lightweight endpoint that returns just this timestamp. localStorage to cache the last known timestamp. And smart polling that only fetches full data when the timestamp changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenge #2: Making It Beautiful
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2Fpckxo604lur1tjvfkqh8.gif" 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.amazonaws.com%2Fuploads%2Farticles%2Fpckxo604lur1tjvfkqh8.gif" alt=" " width="720" height="573"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The technical challenges were one thing, but this was a memorial site. It needed to feel special.&lt;/p&gt;

&lt;h3&gt;
  
  
  Custom GLSL Shaders
&lt;/h3&gt;

&lt;p&gt;I wrote custom vertex and fragment shaders for the candle flames:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight glsl"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Flickering flame effect&lt;/span&gt;
&lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;flicker&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;glow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;vec3&lt;/span&gt; &lt;span class="n"&gt;flameColor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="kt"&gt;vec3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;  &lt;span class="c1"&gt;// Orange&lt;/span&gt;
  &lt;span class="kt"&gt;vec3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;  &lt;span class="c1"&gt;// Yellow&lt;/span&gt;
  &lt;span class="n"&gt;glow&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;flicker&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each flame flickers independently, creating a mesmerizing effect when you see hundreds of them together.&lt;/p&gt;

&lt;h3&gt;
  
  
  Particle Systems
&lt;/h3&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.amazonaws.com%2Fuploads%2Farticles%2Feysqd0t0ebt2q2i7uqob.gif" 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.amazonaws.com%2Fuploads%2Farticles%2Feysqd0t0ebt2q2i7uqob.gif" alt=" " width="434" height="220"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I added atmospheric effects. Fireflies drifting through the scene. Falling leaves for autumn ambiance. Floating ash particles. Ground fog using volumetric techniques. And stars twinkling in the background.&lt;/p&gt;

&lt;h3&gt;
  
  
  Spatial Audio
&lt;/h3&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.amazonaws.com%2Fuploads%2Farticles%2Fujh9233vhwh1e8jwsjac.gif" 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.amazonaws.com%2Fuploads%2Farticles%2Fujh9233vhwh1e8jwsjac.gif" alt=" " width="594" height="264"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using Tone.js, I implemented spatial audio. Ambient wind sounds. Crackling fire positioned at each candle. Distant owl hoots. Rustling leaves. The audio responds to camera position, creating an immersive 3D soundscape.&lt;/p&gt;

&lt;p&gt;Lesson learned: Technical excellence means nothing if the experience doesn't move people.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenge #3: Content Moderation
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2F6c4m8g3x6rrj6c94mo8s.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.amazonaws.com%2Fuploads%2Farticles%2F6c4m8g3x6rrj6c94mo8s.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a public memorial. I needed to ensure respectful content without manual review.&lt;/p&gt;

&lt;p&gt;I integrated Pollinations AI for content moderation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;moderateContent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dedication&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`Is this memorial dedication appropriate and respectful?
  Dedication: "&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;dedication&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"
  From: "&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"

  Respond with YES or NO and a brief reason.`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://text.pollinations.ai/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="c1"&gt;// Parse AI response and validate&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The system checks for inappropriate content and validates against spam patterns. If the AI is down, it fails open and allows the content through. Better to let something through than block legitimate memorials. It also provides helpful error messages when something is rejected.&lt;/p&gt;

&lt;p&gt;Lesson learned: AI moderation isn't perfect, but it's a good first line of defense.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenge #4: Rate Limiting
&lt;/h2&gt;

&lt;p&gt;To prevent abuse, I implemented server-side rate limiting:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// User sessions table&lt;/span&gt;
&lt;span class="nx"&gt;CREATE&lt;/span&gt; &lt;span class="nx"&gt;TABLE&lt;/span&gt; &lt;span class="nf"&gt;user_sessions &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;user_fingerprint&lt;/span&gt; &lt;span class="nx"&gt;TEXT&lt;/span&gt; &lt;span class="nx"&gt;PRIMARY&lt;/span&gt; &lt;span class="nx"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;last_candle_lit_at&lt;/span&gt; &lt;span class="nx"&gt;INTEGER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;daily_candle_count&lt;/span&gt; &lt;span class="nx"&gt;INTEGER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;last_reset_date&lt;/span&gt; &lt;span class="nx"&gt;TEXT&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I use browser fingerprinting which is privacy-conscious. Daily limits are configurable via environment variables. Everything resets automatically at midnight. And when users hit the limit, they get helpful error messages showing exactly when they can light another candle.&lt;/p&gt;

&lt;p&gt;Lesson learned: Rate limiting is essential, but make it transparent and user-friendly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The User Experience
&lt;/h2&gt;

&lt;p&gt;When you visit 1000 Candles, you see an intro sequence with typing animation. Then the 3D graveyard appears with a blood moon and atmospheric effects. Click "Light a Candle" to open the ritual modal. Enter your dedication and name. Watch your candle appear with a smooth camera animation. You can explore other candles with hover tooltips. And search for specific memorials by pressing F.&lt;/p&gt;

&lt;p&gt;The experience is designed to be respectful with somber colors and gentle animations. It's immersive with the 3D environment and spatial audio. It's accessible with keyboard shortcuts and mobile-friendly controls. And it's performant, running at 60fps even with over 1000 candles.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance Optimizations
&lt;/h2&gt;

&lt;p&gt;To render 1000+ candles at 60fps, I implemented:&lt;/p&gt;

&lt;h3&gt;
  
  
  Frustum Culling
&lt;/h3&gt;

&lt;p&gt;Only render candles visible to the camera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;frustum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Frustum&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;frustum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setFromProjectionMatrix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;projectionMatrix&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;candles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;candle&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;frustum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;containsPoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Render this candle&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;h3&gt;
  
  
  Level of Detail (LOD)
&lt;/h3&gt;

&lt;p&gt;Reduce geometry for distant candles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;distance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;distanceTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;candle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;geometry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;distance&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt; 
  &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;lowPolyGeometry&lt;/span&gt; 
  &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;highPolyGeometry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Instancing
&lt;/h3&gt;

&lt;p&gt;Reuse geometries for multiple candles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;instancedMesh&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;InstancedMesh&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;geometry&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;material&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;candleCount&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result: Smooth 60fps with over 1000 candles on mid-range hardware.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Technical Stuff
&lt;/h3&gt;

&lt;p&gt;Abstraction is powerful. The database adapter saved me countless hours. I learned to optimize for the common case because 99% of polls don't need full data. I also learned to measure before optimizing because I almost over-engineered the solution. Serverless has constraints but they force you to think differently. And localStorage is seriously underrated. It's simple, fast, and works everywhere.&lt;/p&gt;

&lt;h3&gt;
  
  
  Design Stuff
&lt;/h3&gt;

&lt;p&gt;Performance is a feature. Users notice lag, especially in 3D. Atmosphere matters. The audio and particles make it special. You have to respect the subject. This is a memorial, not a game. Accessibility counts. Keyboard shortcuts and mobile support aren't optional. And less is more. I removed features that didn't serve the core experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Personal Stuff
&lt;/h3&gt;

&lt;p&gt;Scope creep is real. I almost added multiplayer cursors which would have been cool but totally unnecessary. Deadlines help. The hackathon forced me to ship instead of endlessly tweaking. Community feedback is gold. Early testers found issues I completely missed. Documentation matters. Future me will thank present me. And most importantly, have fun. This was a joy to build.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Numbers
&lt;/h2&gt;

&lt;p&gt;After launch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;60fps&lt;/strong&gt; average framerate&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;99.5% reduction&lt;/strong&gt; in database reads&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$0.10/month&lt;/strong&gt; database costs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;0 downtime&lt;/strong&gt; on Vercel&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Countless memories&lt;/strong&gt; preserved&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;

&lt;p&gt;Visit &lt;a href="https://1000candles.online" rel="noopener noreferrer"&gt;1000candles.online&lt;/a&gt; and light a candle for someone you remember.&lt;/p&gt;

&lt;p&gt;The code is open source: &lt;a href="https://github.com/chrisbuildsonline/1000candles" rel="noopener noreferrer"&gt;github.com/chrisbuildsonline/1000candles&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2F19kzs7lpe3hhbl06ndsu.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.amazonaws.com%2Fuploads%2Farticles%2F19kzs7lpe3hhbl06ndsu.png" alt=" " width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm considering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Candle colors&lt;/strong&gt; - Let users choose flame colors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shared candles&lt;/strong&gt; - Multiple people can contribute to one candle&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Export memories&lt;/strong&gt; - Download a screenshot of your candle&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seasonal themes&lt;/strong&gt; - Different atmospheres for holidays&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile app&lt;/strong&gt; - Native iOS/Android with AR features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But for now, I'm happy with what it is: a simple, beautiful space for remembrance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Building 1000 Candles taught me that the best projects are the ones that solve real problems, even if that problem is just "I want a beautiful place to remember someone."&lt;/p&gt;

&lt;p&gt;The technical challenges were fun to solve, but what matters most is that people are using it. They're lighting candles for grandparents, friends, pets, and even abstract concepts like "hope" and "peace."&lt;/p&gt;

&lt;p&gt;That's the magic of the web: you can build something meaningful, deploy it globally, and watch it touch lives you'll never meet.&lt;/p&gt;

&lt;p&gt;If you're working on a hackathon project, remember:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Start with why&lt;/strong&gt; - What problem are you solving?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ship early&lt;/strong&gt; - Perfect is the enemy of done&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimize later&lt;/strong&gt; - But measure first&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make it beautiful&lt;/strong&gt; - People remember how it feels&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Have fun&lt;/strong&gt; - That's what hackathons are for&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thank you for reading, and thank you to the Kiroween Hackathon organizers for the inspiration.&lt;/p&gt;

&lt;p&gt;Now go light a candle. 🕯️&lt;/p&gt;




</description>
      <category>kiro</category>
      <category>webdev</category>
      <category>hackathon</category>
    </item>
    <item>
      <title>HumanReplies: AI Social Replies for Everyone (No Paywall, No Barriers)</title>
      <dc:creator>Chris</dc:creator>
      <pubDate>Mon, 15 Sep 2025 15:51:38 +0000</pubDate>
      <link>https://dev.to/chrisbuildsonline/humanreplies-ai-social-replies-for-everyone-no-paywall-no-barriers-1amh</link>
      <guid>https://dev.to/chrisbuildsonline/humanreplies-ai-social-replies-for-everyone-no-paywall-no-barriers-1amh</guid>
      <description>&lt;h1&gt;
  
  
  HumanReplies: AI Replies for Everyone
&lt;/h1&gt;

&lt;p&gt;What if every social media user, no matter where they live or how much they spend, could access truly helpful AI tools to engage in conversations?  &lt;/p&gt;

&lt;p&gt;That question inspired me to create &lt;strong&gt;HumanReplies&lt;/strong&gt;. It makes fast, contextual, and customizable AI replies available to anyone—completely free, with privacy built in.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Accessibility Matters
&lt;/h2&gt;

&lt;p&gt;Most AI tools are locked behind paywalls, subscriptions, or technical setups that make them inaccessible to everyday people. That’s a shame, because automation and smart assistance aren’t just for “power users.” They can help all of us participate more, respond faster, and keep up with the pace of real conversations.  &lt;/p&gt;

&lt;p&gt;With HumanReplies, I wanted to prove a different path:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No paywall&lt;/strong&gt;  Every feature is free: reply generation, tone customization, analytics.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Simple setup&lt;/strong&gt;  Install the Chrome extension, log in, and you’re ready. No credit card, no hidden trial.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Privacy first&lt;/strong&gt;  Nothing you write is stored. Only minimal usage stats are kept, and they’re visible to you.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Open values&lt;/strong&gt;  Built in public, with transparency. You can see what’s coming next.  &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;Kiro was the reason I could move fast enough to ship this project during the hackathon.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It generated boilerplate for my FastAPI backend, including secure API routes and authentication.
&lt;/li&gt;
&lt;li&gt;It scaffolded database models and endpoints from short specs, saving days of manual coding.
&lt;/li&gt;
&lt;li&gt;It automated setup tasks and let me focus on what mattered: making HumanReplies simple and accessible.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I experimented with other AI coding tools like Claude Code and ChatGPT for brainstorming, but they couldn’t keep up with the hackathon’s requirements—especially around spec-to-code fidelity and backend integrations. Kiro became my main IDE because it actually delivered production-ready results.  &lt;/p&gt;




&lt;h2&gt;
  
  
  The Result: Open, Accessible, Useful for All
&lt;/h2&gt;

&lt;p&gt;HumanReplies is my submission to &lt;strong&gt;#kiro&lt;/strong&gt;. It proves that AI UX can be accessible, ethical, and fun for everyone—not just for big spenders or people willing to trade their privacy.  &lt;/p&gt;

&lt;p&gt;I hope you’ll check it out and see how it makes replying online faster, more human, and more engaging.  &lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Links&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://humanreplies.com" rel="noopener noreferrer"&gt;Chrome Extension &amp;amp; Demo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>kiro</category>
    </item>
  </channel>
</rss>
