<?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: Vani Chitkara</title>
    <description>The latest articles on DEV Community by Vani Chitkara (@vanichitkara).</description>
    <link>https://dev.to/vanichitkara</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%2F490765%2F6289f36d-0e00-464a-9eec-4b1f66fc1ca4.jpg</url>
      <title>DEV Community: Vani Chitkara</title>
      <link>https://dev.to/vanichitkara</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vanichitkara"/>
    <language>en</language>
    <item>
      <title>Building Parallax: The Vision-Powered UI Navigator Agent</title>
      <dc:creator>Vani Chitkara</dc:creator>
      <pubDate>Sun, 15 Mar 2026 16:08:18 +0000</pubDate>
      <link>https://dev.to/vanichitkara/building-parallax-the-vision-powered-ui-navigator-agent-1id2</link>
      <guid>https://dev.to/vanichitkara/building-parallax-the-vision-powered-ui-navigator-agent-1id2</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This piece of content was created specifically for the purposes of entering the Gemini Live Agent Challenge hackathon. #GeminiLiveAgentChallenge&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Traditional automated testing is broken. It relies on "cheating" by looking at the underlying HTML code (the DOM) to find buttons and links. But humans don’t browse the web by reading code; we browse by seeing pixels.&lt;/p&gt;

&lt;p&gt;When we (my teammate and I) set out to build &lt;strong&gt;Parallax&lt;/strong&gt;, we wanted to create a truly human-centric testing agent. We didn't want a scraper; we wanted an agent with "eyes." To achieve this, we turned to the cutting-edge capabilities of &lt;strong&gt;Google Gemini 2.5 Flash&lt;/strong&gt; and the &lt;strong&gt;Google Cloud&lt;/strong&gt; ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 The Core: A Vision-to-Action Brain
&lt;/h2&gt;

&lt;p&gt;At the heart of Parallax is the &lt;strong&gt;Gemini 2.5 Flash&lt;/strong&gt; model. We chose this model specifically for its industry-leading multimodal performance and low latency.&lt;/p&gt;

&lt;p&gt;In Parallax, we don't send a single line of HTML to the AI. Instead, our agent loop performs the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Capture&lt;/strong&gt;: Using Playwright, we snap a high-resolution screenshot of the browser viewport.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analyze&lt;/strong&gt;: We send that raw image to gemini-2.5-flash with a specific user persona context (e.g., "You are Martha, a 72-year-old with low tech literacy").&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Act&lt;/strong&gt;: The model "sees" the UI elements and returns raw pixel coordinates for the next action—be it a click, a scroll, or a type.
By using gemini-2.5-flash, the agent can identify UX friction that code-based tests ignore, such as poor color contrast, overlapping elements, or confusing visual hierarchies.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🛠️ Multi-Agent Orchestration with Google ADK
&lt;/h2&gt;

&lt;p&gt;Parallax doesn't just run one test; it runs a "swarm" of diverse perspectives. We used the &lt;strong&gt;Google Agent Development Kit (ADK)&lt;/strong&gt; to orchestrate these independent persona agents. The ADK allowed us to create distinct cognitive models for each persona, ensuring that "Martha" (our 72-year-old dear grandmother), "Raj" (our 28-year-old power user), and our 5 other agents with diverse personas can navigate the same site simultaneously, each reporting unique findings based on their specific technological background.&lt;/p&gt;

&lt;h2&gt;
  
  
  📈 Scaling on Google Cloud
&lt;/h2&gt;

&lt;p&gt;To handle the intensive compute requirements of headless browsers and high-frequency AI calls, we built a serverless architecture on &lt;strong&gt;Google Cloud&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Cloud Run&lt;/strong&gt;: Our FastAPI backend is fully containerized and deployed on Cloud Run. This allows us to scale horizontally as more agents are spawned, ensuring that the "Vision Loop" remains snappy and responsive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Cloud Firestore&lt;/strong&gt;: We use Firestore for real-time state management. As agents find issues, they are instantly streamed to a live dashboard, allowing developers to watch the "thinking process" of the AI in real-time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Cloud Storage (GCS)&lt;/strong&gt;: Every multimodal artifact—every screenshot the agent "saw" is persisted in GCS. This creates a visual audit trail that is invaluable for debugging UX failures.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💡 Conclusion
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parallax&lt;/strong&gt; represents a shift from "testing code" to "testing experiences." By combining the multimodal power of &lt;strong&gt;Gemini 2.5 Flash&lt;/strong&gt; with the reliability of &lt;strong&gt;Google Cloud&lt;/strong&gt;, we’ve built a tool that helps developers see their apps through the eyes of their most diverse users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check out the live project here:&lt;/strong&gt; &lt;a href="https://bit.ly/parallax-agent" rel="noopener noreferrer"&gt;https://bit.ly/parallax-agent&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gemini</category>
      <category>googlecloud</category>
      <category>gcp</category>
      <category>googleliveagentchallenge</category>
    </item>
    <item>
      <title>Building PersonaPrep: An AI Personality Coach with Kiro</title>
      <dc:creator>Vani Chitkara</dc:creator>
      <pubDate>Sat, 06 Sep 2025 10:02:14 +0000</pubDate>
      <link>https://dev.to/kirodotdev/building-personaprep-an-ai-personality-coach-with-kiro-8mn</link>
      <guid>https://dev.to/kirodotdev/building-personaprep-an-ai-personality-coach-with-kiro-8mn</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;In a world where social cues, confidence, and culture shape our day-to-day interactions, one thing remains clear: effective communication is a superpower.&lt;br&gt;
Yet, for many people, initiating conversations, navigating interviews, or simply showing up confidently in new environments—like a first day at school, college, or job—can feel like climbing a mountain.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🧠 What is PersonaPrep?
&lt;/h2&gt;

&lt;p&gt;PersonaPrep is an AI social coach that adapts to your personality type and helps you practice high-stakes or awkward social scenarios through interactive, real-time simulations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Whether you're:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Interviewing for your dream job,&lt;/li&gt;
&lt;li&gt;Speaking up in a meeting,&lt;/li&gt;
&lt;li&gt;Making friends in a new country,&lt;/li&gt;
&lt;li&gt;Or overcoming social anxiety,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;PersonaPrep lets you rehearse, refine, and reflect&lt;/strong&gt;—all in a judgment-free, deeply personalized way.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧩 Why an AI Personality Coach?
&lt;/h2&gt;

&lt;p&gt;PersonaPrep focuses on three big problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Social anxiety →&lt;/strong&gt; Rehearsing workplace introductions, meetings, or even casual small talk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adaptive learning →&lt;/strong&gt; Tailoring practice sessions based on user needs and past conversations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language barriers →&lt;/strong&gt; Practicing common phrases in a new language or cultural context.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of a static chatbot, PersonaPrep is like a &lt;strong&gt;personal coach&lt;/strong&gt; that learns and guides you to drive conversations confidently in a new environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚙️ The Tech Stack: Fast, Flexible &amp;amp; Real-Time
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Stack&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;Spring Boot (Java 17) with REST APIs + WebSocket support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;React + Tailwind for snappy, intuitive UI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;MongoDB Atlas to persist sessions and coaching history&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LLM&lt;/td&gt;
&lt;td&gt;Gemini 2.0 Flash for AI-powered coaching&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  📊 How It Works: Flow from Personality to Mastery
&lt;/h2&gt;

&lt;p&gt;PersonaPrep follows a step-by-step, coach-guided journey:&lt;/p&gt;

&lt;p&gt;1️⃣ &lt;strong&gt;Practice Conversations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Simulate real conversations with diverse AI characters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Interviewers&lt;/li&gt;
&lt;li&gt;Classmates&lt;/li&gt;
&lt;li&gt;Managers&lt;/li&gt;
&lt;li&gt;Friends or strangers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI agents are steered by personality context, dynamically adapting tone, topic depth, and challenge level.&lt;/p&gt;

&lt;p&gt;2️⃣ &lt;strong&gt;Feedback &amp;amp; Growth&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We log:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Confidence scores&lt;/li&gt;
&lt;li&gt;Emotional intelligence traits&lt;/li&gt;
&lt;li&gt;Communication effectiveness&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Like Kiro’s auto-generated spec summaries, this feedback is contextualized and actionable—offering insights like “Try pausing before responding” or “This phrase could sound more confident.”&lt;/p&gt;

&lt;p&gt;3️⃣ &lt;strong&gt;Mastery &amp;amp; Beyond&lt;/strong&gt;&lt;br&gt;
As users grow, they unlock:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Advanced role-plays&lt;/li&gt;
&lt;li&gt;Peer coaching&lt;/li&gt;
&lt;li&gt;Opportunities to help others—becoming mentors in their own right&lt;/li&gt;
&lt;/ul&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%2Frojoawndqt207bgi1jhq.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%2Frojoawndqt207bgi1jhq.png" alt="PersonaPrep Application Flow" width="800" height="1436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🧬 How Kiro Inspired PersonaPrep’s Architecture
&lt;/h2&gt;

&lt;p&gt;Kiro’s philosophy of spec-first, agent-powered development had a profound influence on our build.&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%2Feh3opr517x105lf85fct.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%2Feh3opr517x105lf85fct.png" alt="Kiro IDE with Vibe and Spec Mode Chat" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Spec-Driven Conversations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Just like you define a spec in Kiro before coding, our system defines interaction goals (e.g., “Nail a behavioral interview answer”) before launching a coaching session. This “spec” feeds into AI steering logic to ensure alignment.&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%2Fd46ct7ekkcmjgw77mxyh.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%2Fd46ct7ekkcmjgw77mxyh.png" alt="Kiro Spec Docs created using the Spec Mode" width="598" height="594"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔁 &lt;strong&gt;Agent Hooks &amp;amp; Triggers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We use Kiro-style hooks to automate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Feedback generation after a session&lt;/li&gt;
&lt;li&gt;Session summarization&lt;/li&gt;
&lt;li&gt;This enables an agentic feedback loop—users practice, reflect, and try again, with minimal friction.&lt;/li&gt;
&lt;/ul&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%2F0kkn79a9pcvpof8jjqt6.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%2F0kkn79a9pcvpof8jjqt6.png" alt="Kiro Hooks" width="680" height="278"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🧭 &lt;strong&gt;Steering Personalities&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Kiro uses project context and conventions to steer agents. We use personality styles (outgoing, introverted, anxious, task-oriented) to steer our coaches. This ensures communication feels natural and aligned to the user.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;An anxious user might start with low-pressure scenarios.&lt;/p&gt;

&lt;p&gt;A tool-oriented user gets measurable milestones and structure.&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%2Fq7uirnu9dduvqmzek23g.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%2Fq7uirnu9dduvqmzek23g.png" alt="Kiro Steering Docs" width="398" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benefit&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Backend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Practice interviews, presentations, and meetings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Social Comfort&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Engage in small talk, new cultures, or dating&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Emotional Intelligence&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Understand how you sound, learn empathy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Personal Growth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Track progress, unlock badges, and celebrate milestones&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  📖 Lessons Learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Kiro as a teammate:&lt;/strong&gt; Beyond just code, Kiro gave us structure, specs, and clarity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI accelerates hackathons:&lt;/strong&gt; With boilerplate handled, we spent time on features that mattered.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope discipline matters:&lt;/strong&gt; Steering docs ensured we built something shippable, not just “cool demos.”&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;PersonaPrep wasn’t just a hackathon project — it showed us the &lt;strong&gt;power of AI tools like Kiro&lt;/strong&gt; to bridge the gap between ideas and production-ready code.&lt;/p&gt;

&lt;p&gt;With Kiro’s &lt;strong&gt;spec mode&lt;/strong&gt; and &lt;strong&gt;steering docs&lt;/strong&gt;, we shipped a full-stack AI application in record time.&lt;/p&gt;

&lt;p&gt;If you’re building at hackathons (or even production projects), Kiro isn’t just an AI assistant — it’s a &lt;strong&gt;project accelerator&lt;/strong&gt;.&lt;/p&gt;

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