<?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: Iheme Uchenna Uchenna</title>
    <description>The latest articles on DEV Community by Iheme Uchenna Uchenna (@howelldevs).</description>
    <link>https://dev.to/howelldevs</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%2F3997929%2F3a9b48d2-5992-4103-af1d-731ba59d5adb.jpeg</url>
      <title>DEV Community: Iheme Uchenna Uchenna</title>
      <link>https://dev.to/howelldevs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/howelldevs"/>
    <language>en</language>
    <item>
      <title>Switch Icons v0.2.0: A React Icon Library Built for the Icons Developers Actually Need</title>
      <dc:creator>Iheme Uchenna Uchenna</dc:creator>
      <pubDate>Thu, 20 Aug 2026 06:21:20 +0000</pubDate>
      <link>https://dev.to/howelldevs/switch-icons-v020-a-react-icon-library-built-for-the-icons-developers-actually-need-2g68</link>
      <guid>https://dev.to/howelldevs/switch-icons-v020-a-react-icon-library-built-for-the-icons-developers-actually-need-2g68</guid>
      <description>&lt;p&gt;Modern web applications rarely need only arrows, menus, and generic interface icons.&lt;/p&gt;

&lt;p&gt;A fintech dashboard needs payment and banking icons. A logistics platform needs waybills, packages, warehouses, and delivery trucks. An AI application needs model, prompt, and AI-related visual language. An African commerce platform may need icons that represent local payment methods such as Naira, USSD, POS, and bank transfers.&lt;/p&gt;

&lt;p&gt;That is the idea behind Switch Icons.&lt;/p&gt;

&lt;p&gt;Switch Icons is a modern, developer-focused React icon library designed around practical icons for real-world applications—not simply another collection of unrelated SVGs.&lt;/p&gt;

&lt;p&gt;Why Switch Icons?&lt;/p&gt;

&lt;p&gt;There are already plenty of excellent icon libraries available. But while building modern applications, there is often a gap between the generic icons most libraries provide and the domain-specific icons developers actually need.&lt;/p&gt;

&lt;p&gt;Switch Icons is being built around that gap.&lt;/p&gt;

&lt;p&gt;Instead of focusing exclusively on generic UI elements, the library combines familiar interface icons with categories such as:&lt;/p&gt;

&lt;p&gt;Fintech and payment rails&lt;br&gt;
Logistics&lt;br&gt;
AI&lt;br&gt;
Commerce&lt;br&gt;
Technology&lt;br&gt;
Security&lt;br&gt;
Social&lt;br&gt;
Business and CRM&lt;br&gt;
Communication&lt;br&gt;
Media&lt;/p&gt;

&lt;p&gt;The goal is simple: make it easier for developers to find the right icon without having to create or hunt down an SVG every time they build a feature.&lt;/p&gt;

&lt;p&gt;What's New in v0.2.0?&lt;/p&gt;

&lt;p&gt;Switch Icons has now reached its first public npm release.&lt;/p&gt;

&lt;p&gt;Version 0.2.0 includes 93 icons across 9 major categories, along with 14 solid variants for icons where a filled visual style makes more sense.&lt;/p&gt;

&lt;p&gt;The current collection includes:&lt;/p&gt;

&lt;p&gt;Navigation &amp;amp; UI&lt;/p&gt;

&lt;p&gt;Essential icons for navigation, actions, and common interface patterns.&lt;/p&gt;

&lt;p&gt;People &amp;amp; Communication&lt;/p&gt;

&lt;p&gt;Icons for users, teams, messaging, communication, and related functionality.&lt;/p&gt;

&lt;p&gt;Business &amp;amp; CRM&lt;/p&gt;

&lt;p&gt;Icons designed for business applications and customer-management interfaces.&lt;/p&gt;

&lt;p&gt;Fintech &amp;amp; Payment Rails&lt;/p&gt;

&lt;p&gt;This is one of the areas that makes Switch Icons particularly different.&lt;/p&gt;

&lt;p&gt;The library currently includes icons such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Naira&lt;/li&gt;
&lt;li&gt;BankTransfer&lt;/li&gt;
&lt;li&gt;USSD&lt;/li&gt;
&lt;li&gt;POS&lt;/li&gt;
&lt;li&gt;QR Code&lt;/li&gt;
&lt;li&gt;Mobile Money&lt;/li&gt;
&lt;li&gt;Escrow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are useful for applications dealing with payments, financial products, commerce, and African fintech workflows.&lt;/p&gt;

&lt;p&gt;Logistics&lt;/p&gt;

&lt;p&gt;For logistics and delivery applications, Switch Icons includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Waybill&lt;/li&gt;
&lt;li&gt;Delivery Truck&lt;/li&gt;
&lt;li&gt;Package Box&lt;/li&gt;
&lt;li&gt;Warehouse&lt;/li&gt;
&lt;li&gt;AI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI-focused interfaces are becoming increasingly common, so the library includes icons such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI Spark&lt;/li&gt;
&lt;li&gt;Prompt Input&lt;/li&gt;
&lt;li&gt;Model Chip&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Security-related icons include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fingerprint&lt;/li&gt;
&lt;li&gt;Shield Lock&lt;/li&gt;
&lt;li&gt;OTP&lt;/li&gt;
&lt;li&gt;Lock&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Commerce&lt;br&gt;
For storefronts and commerce applications:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Storefront&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Barcode&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Receipt&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Technology&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Technology and developer-focused applications can use icons such as:&lt;/p&gt;

&lt;p&gt;API Connector&lt;br&gt;
Webhook&lt;br&gt;
Terminal&lt;/p&gt;

&lt;p&gt;The collection also includes dedicated Media and Social icons covering common concepts such as images, video, music, hashtags, mentions, reposts, bookmarks, polls, and trending content.&lt;/p&gt;

&lt;p&gt;Built for React and TypeScript&lt;/p&gt;

&lt;p&gt;Switch Icons is built with React and TypeScript, with an API designed to remain simple and predictable.&lt;/p&gt;

&lt;p&gt;Installation is straightforward:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;switch-icons
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or with pnpm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm add switch-icons
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or Yarn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn add switch-icons
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then import only the icons you need:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ArrowRight&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Naira&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;BankTransfer&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;switch-icons&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Example&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="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ArrowRight&lt;/span&gt; &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Naira&lt;/span&gt; &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;BankTransfer&lt;/span&gt; &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&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;No complicated API. No custom configuration required.&lt;/p&gt;

&lt;p&gt;Just import an icon and use it.&lt;/p&gt;

&lt;p&gt;Designed to Be Customizable&lt;/p&gt;

&lt;p&gt;Icons inherit the current text color by default through currentColor.&lt;/p&gt;

&lt;p&gt;That means they work naturally with CSS and utility frameworks such as Tailwind CSS.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ArrowRight&lt;/span&gt;
  &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
  &lt;span class="na"&gt;strokeWidth&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
  &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text-blue-500"&lt;/span&gt;
&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also specify a color directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Naira&lt;/span&gt;
  &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"#111827"&lt;/span&gt;
&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Size, stroke width, and color can therefore be controlled without modifying the SVG itself.&lt;/p&gt;

&lt;p&gt;Consistency Is the Point&lt;/p&gt;

&lt;p&gt;One of the biggest problems with mixing icons from different sources is visual inconsistency.&lt;/p&gt;

&lt;p&gt;You might have one icon with a heavy stroke, another with a thin stroke, different proportions, different viewBox dimensions, and completely different optical weight.&lt;/p&gt;

&lt;p&gt;They technically work together—but they don't look like they belong to the same design system.&lt;/p&gt;

&lt;p&gt;Switch Icons is designed to solve that problem.&lt;/p&gt;

&lt;p&gt;Every icon follows a shared visual system:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;24×24 viewBox&lt;/li&gt;
&lt;li&gt;Consistent optical weight&lt;/li&gt;
&lt;li&gt;Consistent stroke behavior&lt;/li&gt;
&lt;li&gt;Controlled geometry&lt;/li&gt;
&lt;li&gt;Predictable scaling&lt;/li&gt;
&lt;li&gt;currentColor compatibility&lt;/li&gt;
&lt;li&gt;Developer-friendly APIs&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The icons are also built through shared icon factories, including createIcon and createSolidIcon, so common behavior remains consistent across the collection.&lt;/p&gt;

&lt;p&gt;Solid Variants&lt;/p&gt;

&lt;p&gt;Not every icon works best as an outline.&lt;/p&gt;

&lt;p&gt;Switch Icons v0.2.0 introduces 14 solid variants for icons where a filled treatment provides better visual communication.&lt;/p&gt;

&lt;p&gt;The current solid variants include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Star&lt;/li&gt;
&lt;li&gt;Heart&lt;/li&gt;
&lt;li&gt;Bell&lt;/li&gt;
&lt;li&gt;Home&lt;/li&gt;
&lt;li&gt;User&lt;/li&gt;
&lt;li&gt;Users&lt;/li&gt;
&lt;li&gt;Mail&lt;/li&gt;
&lt;li&gt;Lock&lt;/li&gt;
&lt;li&gt;Shield Lock&lt;/li&gt;
&lt;li&gt;Escrow&lt;/li&gt;
&lt;li&gt;Play Circle&lt;/li&gt;
&lt;li&gt;Pause Circle&lt;/li&gt;
&lt;li&gt;Bookmark&lt;/li&gt;
&lt;li&gt;AI Spark&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal isn't to create a solid version of every icon simply because it is possible.&lt;/p&gt;

&lt;p&gt;Solid variants are being added where they genuinely improve the visual result.&lt;/p&gt;

&lt;p&gt;Tree-Shakeable&lt;/p&gt;

&lt;p&gt;Switch Icons is also designed with modern frontend tooling in mind.&lt;/p&gt;

&lt;p&gt;The package uses named exports and sideEffects: false, allowing bundlers to remove icons that aren't being used.&lt;/p&gt;

&lt;p&gt;That means importing a small number of icons doesn't need to mean shipping the entire icon collection to the browser.&lt;/p&gt;

&lt;p&gt;For modern applications where bundle size matters, this is an important part of the architecture.&lt;/p&gt;

&lt;p&gt;More Than Generic Icons&lt;/p&gt;

&lt;p&gt;The philosophy behind Switch Icons can be summarized in one sentence:&lt;/p&gt;

&lt;p&gt;Build the icons developers actually need.&lt;/p&gt;

&lt;p&gt;A developer building a dashboard shouldn't have to create a custom SVG every time they need a bank transfer icon.&lt;/p&gt;

&lt;p&gt;A logistics startup shouldn't have to search through multiple libraries for a waybill.&lt;/p&gt;

&lt;p&gt;A fintech application shouldn't have to settle for a generic dollar icon when the interface is specifically dealing with Naira transactions.&lt;/p&gt;

&lt;p&gt;An AI application shouldn't have to combine unrelated icons to communicate AI concepts.&lt;/p&gt;

&lt;p&gt;These are small problems individually, but they appear repeatedly across projects.&lt;/p&gt;

&lt;p&gt;Switch Icons is an attempt to solve them at the library level.&lt;/p&gt;

&lt;p&gt;What's Next?&lt;/p&gt;

&lt;p&gt;Version 0.2.0 is only the beginning.&lt;/p&gt;

&lt;p&gt;The project is currently under active development, and the collection and API may continue to evolve before the first stable release.&lt;/p&gt;

&lt;p&gt;The roadmap includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More icon categories&lt;/li&gt;
&lt;li&gt;Expanded UI collection&lt;/li&gt;
&lt;li&gt;More social icons&lt;/li&gt;
&lt;li&gt;More technology icons&lt;/li&gt;
&lt;li&gt;More AI icons&lt;/li&gt;
&lt;li&gt;More logistics icons&lt;/li&gt;
&lt;li&gt;More commerce icons&lt;/li&gt;
&lt;li&gt;More brand icons&lt;/li&gt;
&lt;li&gt;Icon search&lt;/li&gt;
&lt;li&gt;Icon metadata&lt;/li&gt;
&lt;li&gt;Copy JSX&lt;/li&gt;
&lt;li&gt;Copy imports&lt;/li&gt;
&lt;li&gt;SVG downloads&lt;/li&gt;
&lt;li&gt;Additional solid variants&lt;/li&gt;
&lt;li&gt;Full documentation website&lt;/li&gt;
&lt;li&gt;Interactive icon playground&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project already has a separate interactive documentation and icon explorer site planned around these features.&lt;/p&gt;

&lt;p&gt;Try Switch Icons&lt;/p&gt;

&lt;p&gt;If you're building a React application and want a lightweight icon library with a stronger focus on practical, domain-specific icons, you can install Switch Icons today.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm add switch-icons
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then:&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;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Naira&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Waybill&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ShieldLock&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;switch-icons&lt;/span&gt;&lt;span class="dl"&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 project is open source and released under the MIT License.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;GitHub: ihemehowell/switchicons&lt;/p&gt;

&lt;p&gt;npm: switch-icons&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Switch Icons is still growing, and the goal is not to become the library with the most icons.&lt;/p&gt;

&lt;p&gt;The goal is to become the library that has the right icons when developers need them.&lt;/p&gt;

</description>
      <category>react</category>
      <category>typescript</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Building Meetric: An AI Meeting Agent on Qwen Cloud</title>
      <dc:creator>Iheme Uchenna Uchenna</dc:creator>
      <pubDate>Thu, 25 Jun 2026 14:25:32 +0000</pubDate>
      <link>https://dev.to/howelldevs/building-minutely-an-ai-meeting-agent-on-qwen-cloud-3620</link>
      <guid>https://dev.to/howelldevs/building-minutely-an-ai-meeting-agent-on-qwen-cloud-3620</guid>
      <description>&lt;h2&gt;
  
  
  My journey building an autonomous meeting-intelligence agent for the Qwen Cloud Global AI Hackathon (Track 4: Autopilot Agent)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The problem I wanted to solve&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you've ever run a small team, church group, or SME, you know the pattern: a meeting happens, someone half-takes notes, and three days later nobody remembers who was supposed to follow up with the supplier, or what the actual decision was on the budget line. Meeting notes get written, then they die in a Notes app or a WhatsApp thread.&lt;/p&gt;

&lt;p&gt;I wanted to build something that didn't just transcribe a meeting, but actually understood it — pulled out the decisions, the action items, who owns what, and then closed the loop by drafting the follow-up emails itself. That's the idea behind Minutely.&lt;/p&gt;

&lt;p&gt;When I saw Qwen Cloud's hackathon had a Track 4: Autopilot Agent category — built for agents that automate real business workflows end-to-end, with human-in-the-loop checkpoints — it was a clean fit for what I was already building.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The stack&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Meetric runs on:&lt;/p&gt;

&lt;p&gt;Next.js (App Router) + TypeScript for the frontend and API routes&lt;br&gt;
Tailwind + shadcn/ui for the interface&lt;br&gt;
Supabase (Postgres) for persistence&lt;br&gt;
Clerk for authentication&lt;br&gt;
Qwen Cloud (qwen-plus and qwen-turbo, with qwen-max reserved for a future paid tier) as the reasoning layer&lt;/p&gt;

&lt;p&gt;The core of the system is a multi-agent orchestration pipeline — six distinct agent steps that take a raw meeting transcript and progressively turn it into structured output: summary, decisions, action items, owners, and drafted follow-ups. Rather than one giant prompt trying to do everything, each agent has a narrow job, which made the output far more reliable and easier to debug.&lt;/p&gt;

&lt;p&gt;To keep all of that manageable, I centralized every model call into a single lib/ai-config.ts file — model selection, token limits, and prompt templates live in one place instead of being scattered across API routes. When Qwen Cloud's available models or pricing tiers shift, I only need to touch one file.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;The hard part: persistence and a stale closure bug&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Two bugs ate most of my build time, and they're the kind of thing that don't show up in a demo video but matter enormously for production-readiness.&lt;/p&gt;

&lt;p&gt;Row-Level Security vs. Clerk JWTs. Supabase's RLS expects Supabase-issued auth tokens, but I'm using Clerk for auth. That mismatch meant writes were silently failing under RLS policies that couldn't validate a Clerk-issued JWT. The fix was a full persistence rewrite using an admin Supabase client (service role) for server-side writes, while keeping RLS intact for anything touched directly from the client. It's not the prettiest solution, but it's the correct boundary: trust the server, not the browser.&lt;/p&gt;

&lt;p&gt;A stale closure in AnalysisChat. Users could chat with Minutely about a specific meeting's analysis, but edits to that analysis weren't reflected in the chat's responses. The cause: the send() function was capturing a stale analysis prop from the render it was created in, not the latest one. Classic React closure trap. The fix was making sure send() always read from a ref or the latest prop on each call rather than capturing it once.&lt;/p&gt;

&lt;p&gt;Neither of these are flashy, but they're the difference between a demo that works once on stage and an agent that's actually trustworthy across sessions — which is exactly what Track 4 judging criteria are looking for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Designing for human-in-the-loop&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Track 4 explicitly asks for agents that handle ambiguous input and include human checkpoints at critical decision points — not just full autopilot. A few of Minutely's design choices reflect that directly:&lt;/p&gt;

&lt;p&gt;The follow-up email step is editable, not auto-sent. The agent drafts the recipient, subject, and body, but a human reviews and can change the recipient before anything goes out. Meeting agents that fire off emails with zero review are a liability, not a feature.&lt;br&gt;
Upload handling is intentionally scoped to .txt and .md transcripts after I discovered FileReader.readAsText silently corrupts binary formats like .docx — better to be explicit about what's supported than to fail unpredictably on bad input.&lt;br&gt;
I'm currently working through a pdfjs-dist worker initialization issue in the upload zone, since PDF transcripts are a natural next input type — a good example of the kind of "ambiguous input handling" this track rewards, even mid-build.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's left&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before the July 9 submission deadline, my checklist is:&lt;/p&gt;

&lt;p&gt;Finalize Alibaba Cloud deployment (ECS) as proof the backend runs in production, not just on localhost&lt;br&gt;
Architecture diagram showing how Qwen Cloud, Supabase, and the Next.js frontend connect&lt;br&gt;
A clean 3-minute demo video&lt;br&gt;
Polishing the submission write-up&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this track, why now&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A lot of "AI agent" demos are impressive in a sandbox and fall apart the moment real, messy human input shows up — bad transcripts, ambiguous action items, edge cases in formatting. Building Minutely has mostly been an exercise in handling that messiness gracefully rather than chasing a flashier demo. That's the bet I'm making for Track 4: production-readiness over toy demos, exactly as the brief asks for.&lt;/p&gt;

&lt;p&gt;If you're building on Qwen Cloud too, I'd love to hear what you're running into — the orchestration and persistence problems in particular feel like they come up for almost everyone building multi-agent systems on top of a Postgres backend.&lt;/p&gt;

&lt;p&gt;Meetric is built in the open. Follow the repo here: &lt;a href="https://github.com/howelldevs/Meetric" rel="noopener noreferrer"&gt;https://github.com/howelldevs/Meetric&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>hackathon</category>
      <category>nextjs</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
