<?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: Allen Labrague</title>
    <description>The latest articles on DEV Community by Allen Labrague (@a11en).</description>
    <link>https://dev.to/a11en</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%2F2658553%2F60cc84e4-2344-4037-aae9-1e71a879ced3.PNG</url>
      <title>DEV Community: Allen Labrague</title>
      <link>https://dev.to/a11en</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/a11en"/>
    <language>en</language>
    <item>
      <title>Introducing Spark UI v1: An Open-Source React Component Registry with an Agent Skill</title>
      <dc:creator>Allen Labrague</dc:creator>
      <pubDate>Sun, 12 Jul 2026 14:14:27 +0000</pubDate>
      <link>https://dev.to/a11en/introducing-spark-ui-v1-an-open-source-react-component-registry-with-an-agent-skill-kn3</link>
      <guid>https://dev.to/a11en/introducing-spark-ui-v1-an-open-source-react-component-registry-with-an-agent-skill-kn3</guid>
      <description>&lt;h1&gt;
  
  
  Introducing Spark UI v1: An Open-Source React Component Registry with an Agent Skill ⚡
&lt;/h1&gt;

&lt;p&gt;I’m excited to share &lt;strong&gt;Spark UI v1&lt;/strong&gt;, the first public version of an open-source component collection built for modern React applications.&lt;/p&gt;

&lt;p&gt;Spark UI currently includes &lt;strong&gt;35 reusable components&lt;/strong&gt;, ranging from familiar UI primitives such as buttons, dialogs, tables, and form controls to more visual and interactive components such as kanban boards, shimmer text, image trails, animated gradients, Spotify cards, and branded interface elements.&lt;/p&gt;

&lt;p&gt;The project is designed around a simple idea:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Developers should be able to install a component, read its source code, customize it freely, and keep full ownership of the final implementation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Spark UI is not intended to be a closed component package that hides its implementation behind an npm dependency. It follows a &lt;strong&gt;shadcn-compatible source registry approach&lt;/strong&gt;, which means the component source code is copied directly into your project.&lt;/p&gt;

&lt;p&gt;That makes the components easier to understand, modify, debug, and adapt to the needs of a real application.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is Spark UI?
&lt;/h2&gt;

&lt;p&gt;Spark UI is an open-source component registry built with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;React 19&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Next.js App Router&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TypeScript&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tailwind CSS v4&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;shadcn design tokens and registry conventions&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Radix UI primitives&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;class-variance-authority&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Framer Motion&lt;/strong&gt; for selected animated components&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The library includes both practical application components and more expressive interface elements.&lt;/p&gt;

&lt;p&gt;Some examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Buttons and form controls&lt;/li&gt;
&lt;li&gt;Dialogs and overlays&lt;/li&gt;
&lt;li&gt;Tables and layout primitives&lt;/li&gt;
&lt;li&gt;Kanban boards&lt;/li&gt;
&lt;li&gt;Shimmer text&lt;/li&gt;
&lt;li&gt;Animated gradients&lt;/li&gt;
&lt;li&gt;Image trails&lt;/li&gt;
&lt;li&gt;QR-related components&lt;/li&gt;
&lt;li&gt;Spotify-inspired cards&lt;/li&gt;
&lt;li&gt;Navigation components&lt;/li&gt;
&lt;li&gt;Responsive interface patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not only to provide attractive components, but also to make them useful in real projects where maintainability, accessibility, and customization matter.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why a source registry instead of a traditional package?
&lt;/h2&gt;

&lt;p&gt;Many UI libraries are distributed as npm packages.&lt;/p&gt;

&lt;p&gt;That approach can be useful, but it also means your project depends on the library’s published API, internal implementation, release cycle, and styling decisions.&lt;/p&gt;

&lt;p&gt;Spark UI takes a different approach.&lt;/p&gt;

&lt;p&gt;When you install a Spark UI component, the component source is added directly to your project.&lt;/p&gt;

&lt;p&gt;This gives you several advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can inspect the complete implementation&lt;/li&gt;
&lt;li&gt;You can modify the component without forking a package&lt;/li&gt;
&lt;li&gt;You can remove code you do not need&lt;/li&gt;
&lt;li&gt;You can adapt styling to your own design system&lt;/li&gt;
&lt;li&gt;You can update accessibility behavior when necessary&lt;/li&gt;
&lt;li&gt;You are not locked into a hidden runtime implementation&lt;/li&gt;
&lt;li&gt;The component becomes part of your own codebase&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This model works especially well for design systems, dashboards, SaaS applications, portfolios, landing pages, and internal tools where developers often need to make targeted changes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Installing a Spark UI component
&lt;/h2&gt;

&lt;p&gt;Spark UI uses the shadcn CLI workflow.&lt;/p&gt;

&lt;p&gt;Before installing a component, you can inspect the registry item:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx shadcn@latest view https://spark-ui-olive.vercel.app/r/kanban.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After reviewing the files and dependencies, install it with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx shadcn@latest add https://spark-ui-olive.vercel.app/r/kanban.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The component source is then copied into your project, where you can import and customize it like any other local component.&lt;/p&gt;

&lt;p&gt;For example, a component may be imported from a path similar to:&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;Kanban&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;@/components/spark-ui/kanban&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 exact path depends on the project configuration and the registry item being installed.&lt;/p&gt;

&lt;p&gt;Because the code is local, you can immediately:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change the component layout&lt;/li&gt;
&lt;li&gt;Replace icons&lt;/li&gt;
&lt;li&gt;Update Tailwind classes&lt;/li&gt;
&lt;li&gt;Add or remove animations&lt;/li&gt;
&lt;li&gt;Integrate application state&lt;/li&gt;
&lt;li&gt;Connect it to your backend&lt;/li&gt;
&lt;li&gt;Adapt it to your project’s component conventions&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Spark UI includes an Agent Skill 🤖
&lt;/h2&gt;

&lt;p&gt;One of the main additions in Spark UI v1 is an &lt;strong&gt;Agent Skill&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The Agent Skill is designed for compatible AI coding agents such as Claude Code and other tools that support the open Agent Skills ecosystem.&lt;/p&gt;

&lt;p&gt;It gives the agent structured guidance about how Spark UI works.&lt;/p&gt;

&lt;p&gt;Instead of forcing the agent to guess component names, registry paths, imports, or composition rules, the skill teaches it how to work with the library more accurately.&lt;/p&gt;

&lt;p&gt;Install the skill with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add codeweb-dev/spark-ui &lt;span class="nt"&gt;--skill&lt;/span&gt; spark-ui
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The skill helps compatible agents understand how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Discover available Spark UI components&lt;/li&gt;
&lt;li&gt;Inspect registry items before installation&lt;/li&gt;
&lt;li&gt;Use the official Spark UI registry&lt;/li&gt;
&lt;li&gt;Avoid inventing component names or import paths&lt;/li&gt;
&lt;li&gt;Install only the components that are missing&lt;/li&gt;
&lt;li&gt;Read and understand the installed source&lt;/li&gt;
&lt;li&gt;Compose compound components correctly&lt;/li&gt;
&lt;li&gt;Work with shadcn design tokens&lt;/li&gt;
&lt;li&gt;Preserve accessibility behavior&lt;/li&gt;
&lt;li&gt;Customize components safely&lt;/li&gt;
&lt;li&gt;Troubleshoot common installation problems&lt;/li&gt;
&lt;li&gt;Review dependency and file changes after installation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Agent Skill also includes supply-chain guidance.&lt;/p&gt;

&lt;p&gt;It instructs agents to treat downloaded source code as code that should be reviewed, not as trusted instructions that should be executed automatically.&lt;/p&gt;

&lt;p&gt;This is important because a source registry intentionally downloads files into a project. The skill encourages the agent to inspect the registry item first, use the official registry origin, review generated changes, and avoid following instructions embedded inside downloaded source files.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why add an Agent Skill to a component library?
&lt;/h2&gt;

&lt;p&gt;AI coding tools are becoming part of many developers’ daily workflows.&lt;/p&gt;

&lt;p&gt;However, AI agents often make predictable mistakes when working with component libraries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They invent exports that do not exist&lt;/li&gt;
&lt;li&gt;They use the wrong import path&lt;/li&gt;
&lt;li&gt;They recreate a component that is already available&lt;/li&gt;
&lt;li&gt;They install the same component twice&lt;/li&gt;
&lt;li&gt;They forget required providers&lt;/li&gt;
&lt;li&gt;They break compound-component structure&lt;/li&gt;
&lt;li&gt;They use hard-coded colors instead of design tokens&lt;/li&gt;
&lt;li&gt;They omit accessibility requirements&lt;/li&gt;
&lt;li&gt;They treat examples as exact APIs without checking the source&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A dedicated skill gives the agent project-specific instructions.&lt;/p&gt;

&lt;p&gt;For Spark UI, that means the agent can understand not only what components exist, but also how they are expected to be installed, composed, styled, and validated.&lt;/p&gt;

&lt;p&gt;The goal is to make AI-assisted development more reliable and reduce the amount of correction needed after generated code.&lt;/p&gt;




&lt;h2&gt;
  
  
  Security improvements in Version 1
&lt;/h2&gt;

&lt;p&gt;Because Spark UI distributes source code through a remote registry, security and transparency are important.&lt;/p&gt;

&lt;p&gt;The project now documents the official registry origin:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://spark-ui-olive.vercel.app/r
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The recommended workflow is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inspect the registry item&lt;/li&gt;
&lt;li&gt;Review the files and dependencies&lt;/li&gt;
&lt;li&gt;Install only from the official registry&lt;/li&gt;
&lt;li&gt;Inspect the resulting Git diff&lt;/li&gt;
&lt;li&gt;Run the project’s validation commands&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Spark UI does not require users to upload environment variables, secrets, local files, tokens, or private project data to install a component.&lt;/p&gt;

&lt;p&gt;The project also hardened the Spotify metadata functionality to reduce SSRF risk.&lt;/p&gt;

&lt;p&gt;Instead of allowing arbitrary server-side URL fetching, the implementation validates Spotify track identifiers and constructs the Spotify URL on the server. Redirects, retries, timeout behavior, and response-size limits are also controlled.&lt;/p&gt;

&lt;p&gt;These changes were made because open-source components should be easy to inspect and safe to integrate.&lt;/p&gt;




&lt;h2&gt;
  
  
  Designed for customization
&lt;/h2&gt;

&lt;p&gt;Spark UI components are intended to be starting points, not untouchable black boxes.&lt;/p&gt;

&lt;p&gt;You can use them as they are, but the source-first approach makes customization one of the main features.&lt;/p&gt;

&lt;p&gt;You can change:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Typography&lt;/li&gt;
&lt;li&gt;Spacing&lt;/li&gt;
&lt;li&gt;Border radius&lt;/li&gt;
&lt;li&gt;Shadows&lt;/li&gt;
&lt;li&gt;Colors&lt;/li&gt;
&lt;li&gt;Motion behavior&lt;/li&gt;
&lt;li&gt;Responsive breakpoints&lt;/li&gt;
&lt;li&gt;Icons&lt;/li&gt;
&lt;li&gt;Component states&lt;/li&gt;
&lt;li&gt;Data structures&lt;/li&gt;
&lt;li&gt;Event handling&lt;/li&gt;
&lt;li&gt;Accessibility labels&lt;/li&gt;
&lt;li&gt;Layout composition&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Where possible, components use semantic shadcn and Tailwind design tokens such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;--background&lt;/span&gt;
&lt;span class="nt"&gt;--foreground&lt;/span&gt;
&lt;span class="nt"&gt;--primary&lt;/span&gt;
&lt;span class="nt"&gt;--muted&lt;/span&gt;
&lt;span class="nt"&gt;--muted-foreground&lt;/span&gt;
&lt;span class="nt"&gt;--border&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows components to adapt more naturally to light mode, dark mode, and custom themes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Looking for developers to try Spark UI v1
&lt;/h2&gt;

&lt;p&gt;Spark UI is now available publicly, and I’m looking for developers who are willing to try the first version.&lt;/p&gt;

&lt;p&gt;You do not need to use every component.&lt;/p&gt;

&lt;p&gt;Even testing one component and sharing your experience would be useful.&lt;/p&gt;

&lt;p&gt;Feedback is especially welcome in these areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installation experience&lt;/li&gt;
&lt;li&gt;Registry reliability&lt;/li&gt;
&lt;li&gt;Documentation clarity&lt;/li&gt;
&lt;li&gt;Component APIs&lt;/li&gt;
&lt;li&gt;TypeScript support&lt;/li&gt;
&lt;li&gt;Dark and light themes&lt;/li&gt;
&lt;li&gt;Mobile responsiveness&lt;/li&gt;
&lt;li&gt;Accessibility&lt;/li&gt;
&lt;li&gt;Animation performance&lt;/li&gt;
&lt;li&gt;Browser compatibility&lt;/li&gt;
&lt;li&gt;Agent Skill behavior&lt;/li&gt;
&lt;li&gt;Missing components&lt;/li&gt;
&lt;li&gt;Bugs and unexpected behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Useful feedback can be as simple as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“This component installed successfully.”&lt;/li&gt;
&lt;li&gt;“The import path in the docs was unclear.”&lt;/li&gt;
&lt;li&gt;“The component breaks on mobile.”&lt;/li&gt;
&lt;li&gt;“The dark mode colors need improvement.”&lt;/li&gt;
&lt;li&gt;“The Agent Skill used the wrong component.”&lt;/li&gt;
&lt;li&gt;“This component should support another variant.”&lt;/li&gt;
&lt;li&gt;“I would like to see a component for this use case.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Real usage feedback will help shape the next version.&lt;/p&gt;




&lt;h2&gt;
  
  
  Open source and open for contributions
&lt;/h2&gt;

&lt;p&gt;Spark UI is open source and welcomes contributions.&lt;/p&gt;

&lt;p&gt;You can contribute by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding a new component&lt;/li&gt;
&lt;li&gt;Improving an existing component&lt;/li&gt;
&lt;li&gt;Fixing a bug&lt;/li&gt;
&lt;li&gt;Improving accessibility&lt;/li&gt;
&lt;li&gt;Adding keyboard interactions&lt;/li&gt;
&lt;li&gt;Improving responsive behavior&lt;/li&gt;
&lt;li&gt;Updating documentation&lt;/li&gt;
&lt;li&gt;Creating a new demo&lt;/li&gt;
&lt;li&gt;Improving TypeScript types&lt;/li&gt;
&lt;li&gt;Adding validation&lt;/li&gt;
&lt;li&gt;Reviewing existing pull requests&lt;/li&gt;
&lt;li&gt;Suggesting new features&lt;/li&gt;
&lt;li&gt;Reporting installation issues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before opening a pull request, please read the project’s &lt;a href="https://github.com/codeweb-dev/spark-ui/blob/master/CONTRIBUTING.md" rel="noopener noreferrer"&gt;&lt;code&gt;CONTRIBUTING.md&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The contribution guide explains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repository structure&lt;/li&gt;
&lt;li&gt;Component source requirements&lt;/li&gt;
&lt;li&gt;Demo requirements&lt;/li&gt;
&lt;li&gt;Registry configuration&lt;/li&gt;
&lt;li&gt;Documentation expectations&lt;/li&gt;
&lt;li&gt;Naming conventions&lt;/li&gt;
&lt;li&gt;Accessibility considerations&lt;/li&gt;
&lt;li&gt;Theme compatibility&lt;/li&gt;
&lt;li&gt;Validation commands&lt;/li&gt;
&lt;li&gt;Pull request expectations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Following the contribution guide helps keep the registry consistent and makes reviews easier.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to try Spark UI
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Visit the documentation
&lt;/h3&gt;

&lt;p&gt;Explore the available components and examples on the Spark UI website:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://spark-ui-olive.vercel.app" rel="noopener noreferrer"&gt;https://spark-ui-olive.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Inspect a registry item
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx shadcn@latest view https://spark-ui-olive.vercel.app/r/kanban.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Install a component
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx shadcn@latest add https://spark-ui-olive.vercel.app/r/kanban.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Install the Agent Skill
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add codeweb-dev/spark-ui &lt;span class="nt"&gt;--skill&lt;/span&gt; spark-ui
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Share feedback
&lt;/h3&gt;

&lt;p&gt;You can open an issue, start a discussion, or submit a pull request in the GitHub repository.&lt;/p&gt;




&lt;h2&gt;
  
  
  Project links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://spark-ui-olive.vercel.app" rel="noopener noreferrer"&gt;spark-ui-olive.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub repository:&lt;/strong&gt; &lt;a href="https://github.com/codeweb-dev/spark-ui" rel="noopener noreferrer"&gt;codeweb-dev/spark-ui&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contribution guide:&lt;/strong&gt; &lt;a href="https://github.com/codeweb-dev/spark-ui/blob/master/CONTRIBUTING.md" rel="noopener noreferrer"&gt;CONTRIBUTING.md&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What comes next?
&lt;/h2&gt;

&lt;p&gt;Spark UI v1 is the foundation.&lt;/p&gt;

&lt;p&gt;Future improvements may include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More application-focused components&lt;/li&gt;
&lt;li&gt;More layout and dashboard patterns&lt;/li&gt;
&lt;li&gt;Better installation examples&lt;/li&gt;
&lt;li&gt;Additional themes&lt;/li&gt;
&lt;li&gt;More accessibility testing&lt;/li&gt;
&lt;li&gt;Expanded Agent Skill documentation&lt;/li&gt;
&lt;li&gt;Improved component previews&lt;/li&gt;
&lt;li&gt;More community-contributed components&lt;/li&gt;
&lt;li&gt;Better test coverage&lt;/li&gt;
&lt;li&gt;More complete usage examples&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project will grow based on real feedback and contributions rather than only adding components for the sake of having a larger catalog.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;Spark UI started as an attempt to build a practical, customizable, and developer-friendly component collection.&lt;/p&gt;

&lt;p&gt;Version 1 is now public, but it is still the beginning.&lt;/p&gt;

&lt;p&gt;My goal is to make Spark UI useful for developers who want:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Components they can fully own&lt;/li&gt;
&lt;li&gt;Source code they can inspect&lt;/li&gt;
&lt;li&gt;Styling they can customize&lt;/li&gt;
&lt;li&gt;AI-assisted workflows that understand the library&lt;/li&gt;
&lt;li&gt;An open project they can contribute to&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would appreciate any feedback from developers who try it.&lt;/p&gt;

&lt;p&gt;GitHub stars, issues, suggestions, testing, and pull requests are all welcome.&lt;/p&gt;

&lt;p&gt;Thanks for checking out &lt;strong&gt;Spark UI v1&lt;/strong&gt;! ⚡&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>webdev</category>
      <category>react</category>
      <category>ai</category>
    </item>
    <item>
      <title>PassionCast: Turn What You Love Into a Story Worth Hearing</title>
      <dc:creator>Allen Labrague</dc:creator>
      <pubDate>Fri, 10 Jul 2026 14:56:36 +0000</pubDate>
      <link>https://dev.to/a11en/passioncast-turn-what-you-love-into-a-story-worth-hearing-51k4</link>
      <guid>https://dev.to/a11en/passioncast-turn-what-you-love-into-a-story-worth-hearing-51k4</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-07-09"&gt;Weekend Challenge: Passion Edition&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;PassionCast&lt;/strong&gt;, an AI-powered storytelling experience that turns the memories behind a person's passion into a short narrated mini-documentary.&lt;/p&gt;

&lt;p&gt;The idea came from a simple observation: people often talk about &lt;em&gt;what&lt;/em&gt; they love, but they rarely get the chance to explain &lt;em&gt;why&lt;/em&gt; it matters so much.&lt;/p&gt;

&lt;p&gt;PassionCast asks the user four questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What are you passionate about?&lt;/li&gt;
&lt;li&gt;How did that passion begin?&lt;/li&gt;
&lt;li&gt;What is your favorite memory connected to it?&lt;/li&gt;
&lt;li&gt;Why does it still matter to you?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The user can then choose a storytelling tone, such as warm and nostalgic, emotional documentary, epic and cinematic, energetic superfan, or funny and playful.&lt;/p&gt;

&lt;p&gt;Google Gemini transforms those answers into a structured story with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A memorable title&lt;/li&gt;
&lt;li&gt;A short personal mini-documentary&lt;/li&gt;
&lt;li&gt;A highlight quote&lt;/li&gt;
&lt;li&gt;A shareable caption&lt;/li&gt;
&lt;li&gt;Narration direction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ElevenLabs then turns the written story into expressive narration.&lt;/p&gt;

&lt;p&gt;The final result combines the generated story, quote, audio player, and a visual voice experience so the user can both read and hear the story behind what they love.&lt;/p&gt;

&lt;p&gt;My main goal was not to build another generic AI text generator. I wanted PassionCast to feel like a small personal documentary studio: emotional, playful, and easy to use.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://passioncast.vercel.app" rel="noopener noreferrer"&gt;Open PassionCast&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The main flow is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open PassionCast.&lt;/li&gt;
&lt;li&gt;Start with a randomized example or write your own answers.&lt;/li&gt;
&lt;li&gt;Choose a storytelling tone.&lt;/li&gt;
&lt;li&gt;Generate the mini-documentary.&lt;/li&gt;
&lt;li&gt;Read the story while the narration is prepared.&lt;/li&gt;
&lt;li&gt;Play the ElevenLabs narration.&lt;/li&gt;
&lt;li&gt;Copy the story or caption, retry the voice, or create another story.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;&lt;strong&gt;GitHub repository:&lt;/strong&gt; &lt;a href="https://github.com/codeweb-dev/passioncast" rel="noopener noreferrer"&gt;View the PassionCast source code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository includes the frontend experience, server-side AI routes, validation, reusable UI components, and the Gemini and ElevenLabs integrations.&lt;/p&gt;

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

&lt;p&gt;I built PassionCast with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Next.js App Router&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TypeScript&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tailwind CSS&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Google Gemini API&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ElevenLabs API&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zod&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;React Bits&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lucide React&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Poppins&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Browser local storage&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Story generation with Google Gemini
&lt;/h3&gt;

&lt;p&gt;The user's answers are sent to a server-side Next.js route.&lt;/p&gt;

&lt;p&gt;Gemini receives a carefully constrained storytelling prompt that tells it to preserve the user's real experience, avoid inventing names or events, and return a story that sounds natural when spoken aloud.&lt;/p&gt;

&lt;p&gt;Instead of requesting unstructured text, I ask Gemini to return a predictable object containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;title&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;story&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;quote&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;caption&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;narrationDirection&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The response is validated before it reaches the interface. This made the application more reliable and made it much easier to render the result consistently.&lt;/p&gt;

&lt;p&gt;A major design decision was to keep the story factual. Gemini can improve the emotional structure and language, but it should not fabricate details that the user never provided.&lt;/p&gt;

&lt;h3&gt;
  
  
  Narration with ElevenLabs
&lt;/h3&gt;

&lt;p&gt;After Gemini creates the story, PassionCast sends the narration text to a protected server-side ElevenLabs route.&lt;/p&gt;

&lt;p&gt;ElevenLabs gives the written story a voice and turns the result into something closer to a personal documentary than a normal generated paragraph.&lt;/p&gt;

&lt;p&gt;The audio experience includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Play and pause controls&lt;/li&gt;
&lt;li&gt;Playback progress&lt;/li&gt;
&lt;li&gt;Replay&lt;/li&gt;
&lt;li&gt;Volume controls&lt;/li&gt;
&lt;li&gt;Narration retry&lt;/li&gt;
&lt;li&gt;A visual Strands treatment around the voice experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The written story appears before narration finishes, so the user is never forced to wait for audio before seeing the main result.&lt;/p&gt;

&lt;p&gt;If narration fails, the generated story remains available. The user can still read it, copy it, or retry the voice without losing their work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Designing the experience
&lt;/h3&gt;

&lt;p&gt;I wanted PassionCast to feel human and expressive instead of looking like a generic AI dashboard.&lt;/p&gt;

&lt;p&gt;The design uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A warm editorial color palette&lt;/li&gt;
&lt;li&gt;Bold Poppins typography&lt;/li&gt;
&lt;li&gt;Large rounded content cards&lt;/li&gt;
&lt;li&gt;Asymmetrical layouts&lt;/li&gt;
&lt;li&gt;Bright accent colors&lt;/li&gt;
&lt;li&gt;Lucide React icons&lt;/li&gt;
&lt;li&gt;React Bits animations used selectively&lt;/li&gt;
&lt;li&gt;Strands as the visual language for voice&lt;/li&gt;
&lt;li&gt;Accessible controls and reduced-motion support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The visual direction is inspired by modern editorial landing pages, but the interface and brand were created specifically for PassionCast.&lt;/p&gt;

&lt;h3&gt;
  
  
  Making it easy to start
&lt;/h3&gt;

&lt;p&gt;One challenge with creative tools is the blank-page problem.&lt;/p&gt;

&lt;p&gt;To make the app easier to try, PassionCast can prefill the form with a starter example. The user can edit everything, clear the form, or use &lt;strong&gt;Surprise Me&lt;/strong&gt; to see a different idea.&lt;/p&gt;

&lt;p&gt;This makes the main interaction understandable immediately while still encouraging users to replace the example with their own story.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reliability and validation
&lt;/h3&gt;

&lt;p&gt;I added validation to both user input and generated output.&lt;/p&gt;

&lt;p&gt;The application handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Empty or oversized inputs&lt;/li&gt;
&lt;li&gt;Invalid AI responses&lt;/li&gt;
&lt;li&gt;Network failures&lt;/li&gt;
&lt;li&gt;Gemini errors&lt;/li&gt;
&lt;li&gt;ElevenLabs errors&lt;/li&gt;
&lt;li&gt;Duplicate submissions&lt;/li&gt;
&lt;li&gt;Audio retry states&lt;/li&gt;
&lt;li&gt;Malformed local-storage data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;API keys remain on the server and are never exposed to the browser.&lt;/p&gt;

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

&lt;p&gt;I am submitting PassionCast for:&lt;/p&gt;

&lt;h3&gt;
  
  
  Best Use of Google AI
&lt;/h3&gt;

&lt;p&gt;Gemini is the narrative engine behind PassionCast.&lt;/p&gt;

&lt;p&gt;It does more than summarize the user's answers. It identifies the emotional thread connecting the beginning of the passion, the user's strongest memory, and what that passion represents today.&lt;/p&gt;

&lt;p&gt;Gemini also returns structured output, which makes the story-generation flow more reliable and allows the interface to separately present the title, story, quote, caption, and narration direction.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best Use of ElevenLabs
&lt;/h3&gt;

&lt;p&gt;ElevenLabs transforms the generated story from something the user reads into something they experience.&lt;/p&gt;

&lt;p&gt;The voice is a core part of the product rather than a decorative extra. PassionCast is designed around the idea that hearing a personal story can make it feel more intimate, memorable, and cinematic.&lt;/p&gt;

&lt;p&gt;The narration, custom audio controls, retry experience, and Strands visualization all contribute to the final listening experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges I Faced
&lt;/h2&gt;

&lt;p&gt;The hardest part was balancing creativity with truth.&lt;/p&gt;

&lt;p&gt;I wanted Gemini to produce something emotional, but I did not want the model to invent details. I solved this by placing strict limits on the prompt, using structured output, and validating the response before displaying it.&lt;/p&gt;

&lt;p&gt;Another challenge was handling two AI services in one user flow. Story generation and narration can succeed or fail independently, so I designed the result state so the written story remains useful even when audio is unavailable.&lt;/p&gt;

&lt;p&gt;The third challenge was presentation. It was easy for the project to look like a normal form followed by generated text. I spent time turning the experience into something that feels closer to an editorial feature and a small audio-documentary studio.&lt;/p&gt;

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

&lt;p&gt;This project taught me that structured AI output is especially useful when the result needs to power a real interface.&lt;/p&gt;

&lt;p&gt;I also learned that graceful failure matters a lot in multi-service AI applications. A narration error should not destroy a successful story, and a user should always know what happened and what they can do next.&lt;/p&gt;

&lt;p&gt;Most importantly, I learned that AI experiences feel more meaningful when the technology supports a clear emotional purpose. Gemini provides the structure and language, while ElevenLabs delivers the voice. Together, they help preserve the story behind a person's passion.&lt;/p&gt;

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

&lt;p&gt;Passion can be loud, quiet, competitive, creative, nostalgic, or deeply personal.&lt;/p&gt;

&lt;p&gt;PassionCast is my attempt to give those feelings a format that people can keep, hear, and share.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every passion has a story. PassionCast gives it a voice.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading, and thanks to the DEV Community for creating a challenge that encouraged me to build something personal.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
    </item>
    <item>
      <title>🚀 I Built DevBrand AI with Google AI Studio</title>
      <dc:creator>Allen Labrague</dc:creator>
      <pubDate>Sat, 27 Jun 2026 06:30:39 +0000</pubDate>
      <link>https://dev.to/a11en/i-built-devbrand-ai-with-google-ai-studio-5ehl</link>
      <guid>https://dev.to/a11en/i-built-devbrand-ai-with-google-ai-studio-5ehl</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is my submission for &lt;a href="https://dev.to/deved/build-apps-with-google-ai-studio"&gt;DEV Education Track: Build Apps with Google AI Studio&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;For this project, I built DevBrand AI, an AI-powered web application that helps developers create a complete personal branding kit in just a few clicks.&lt;/p&gt;

&lt;p&gt;Instead of manually writing bios, portfolio headlines, README introductions, or designing graphics, users simply provide their GitHub username, role, tech stack, experience, and preferred design theme. The application then generates everything automatically.&lt;/p&gt;

&lt;p&gt;Prompt Used&lt;/p&gt;

&lt;p&gt;I used Google AI Studio's Build apps with Gemini feature with a prompt similar to this:&lt;/p&gt;

&lt;p&gt;Build a modern React + TypeScript application called DevBrand AI that generates a complete developer branding kit. Use Gemini to generate professional bios, portfolio headlines, GitHub README introductions, project ideas, mission statements, social media introductions, CTAs, and branding recommendations. Use Imagen to generate a modern 3D developer mascot, hero illustration, and portfolio banner. Create a responsive UI using Tailwind CSS with reusable React components, loading animations, copy buttons, and download functionality.&lt;/p&gt;

&lt;p&gt;Features&lt;br&gt;
🤖 AI-generated developer bio&lt;br&gt;
🎯 Personal tagline&lt;br&gt;
💻 Portfolio headline&lt;br&gt;
📄 GitHub README introduction&lt;br&gt;
💡 Project ideas&lt;br&gt;
🌈 Suggested branding colors&lt;br&gt;
📢 Social media introduction&lt;br&gt;
🚀 Portfolio call-to-action&lt;br&gt;
🎨 AI-generated developer mascot&lt;br&gt;
🖼️ Hero illustration&lt;br&gt;
🌐 Portfolio banner&lt;br&gt;
📋 Copy buttons&lt;br&gt;
📥 Download generated content&lt;br&gt;
📱 Responsive modern interface&lt;br&gt;
Demo&lt;/p&gt;

&lt;p&gt;Screenshots&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr7efyg2zftta49m77zrm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr7efyg2zftta49m77zrm.png" alt=" " width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Live Demo&lt;/p&gt;

&lt;p&gt;App: &lt;a href="https://devbrand-ai-706459620449.asia-southeast1.run.app" rel="noopener noreferrer"&gt;https://devbrand-ai-706459620449.asia-southeast1.run.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My Experience&lt;/p&gt;

&lt;p&gt;This project was my first time using the new Build apps with Gemini experience in Google AI Studio, and it was surprisingly fast to go from an idea to a working application.&lt;/p&gt;

&lt;p&gt;What impressed me most was how the AI generated a well-structured React + TypeScript project instead of just producing a single file. The generated components, services, and overall architecture made the project easy to understand and extend.&lt;/p&gt;

&lt;p&gt;I also enjoyed combining Gemini for structured text generation with Imagen for visual assets. Seeing both models work together in one application made it feel like building a complete product rather than just experimenting with AI.&lt;/p&gt;

&lt;p&gt;Overall, this experience showed me how AI can significantly accelerate prototyping while still leaving room for customization and refinement. I'll definitely continue using Google AI Studio to quickly validate ideas and build future projects.&lt;/p&gt;

&lt;p&gt;Thanks for reading! Feedback is always welcome.&lt;/p&gt;

</description>
      <category>deved</category>
      <category>learngoogleaistudio</category>
      <category>ai</category>
      <category>gemini</category>
    </item>
    <item>
      <title>Who Is JSON?</title>
      <dc:creator>Allen Labrague</dc:creator>
      <pubDate>Sat, 27 Jun 2026 06:04:18 +0000</pubDate>
      <link>https://dev.to/a11en/who-is-json-4f4i</link>
      <guid>https://dev.to/a11en/who-is-json-4f4i</guid>
      <description>&lt;p&gt;Asked AI "Who is JSON?" and it introduced me to JSON Derulo. I wasn't expecting that one. 😂&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpq26th9vtb410a7f99iy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpq26th9vtb410a7f99iy.jpg" alt=" " width="746" height="955"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>memes</category>
      <category>jokes</category>
    </item>
  </channel>
</rss>
