<?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: Shivansh Singh</title>
    <description>The latest articles on DEV Community by Shivansh Singh (@shivanshsinghh).</description>
    <link>https://dev.to/shivanshsinghh</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%2F1399391%2F18c222e1-ab49-4409-b4a7-3eb32563c73c.png</url>
      <title>DEV Community: Shivansh Singh</title>
      <link>https://dev.to/shivanshsinghh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shivanshsinghh"/>
    <language>en</language>
    <item>
      <title>I built a voice note from the match you missed</title>
      <dc:creator>Shivansh Singh</dc:creator>
      <pubDate>Sun, 12 Jul 2026 07:05:27 +0000</pubDate>
      <link>https://dev.to/shivanshsinghh/a-voice-note-from-the-match-i-built-a-recap-that-sounds-like-your-friend-was-there-427</link>
      <guid>https://dev.to/shivanshsinghh/a-voice-note-from-the-match-i-built-a-recap-that-sounds-like-your-friend-was-there-427</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;p&gt;The hardest part of missing your team's match is not finding the score. That takes one second. It is missing the text from the friend who was there: the message that starts with “you should have heard it” and somehow tells you more than a match report ever could.&lt;/p&gt;

&lt;p&gt;I call it &lt;strong&gt;A Voice Note From the Match&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;A Voice Note From the Match&lt;/strong&gt; turns a real World Cup result into a short, emotional voice note from a friend at the stadium. You pick a match, say which team you support, and choose the friend calling you. &lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/tPixk5hXUns"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;



&lt;p&gt;The app then writes and performs a recap that has the messy energy of a real post-match message: excitement, disbelief, a little heartbreak, and someone else shouting in the background.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://voice-from-the-stands.vercel.app/" rel="noopener noreferrer"&gt;A Voice From the Match&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/meshivanshsinghh/voice_from_the_stands" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the video, I would show this exact flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start on the landing page and briefly show the “score versus feeling” idea.&lt;/li&gt;
&lt;li&gt;Pick yesterday's match, enter a name, and choose a side.&lt;/li&gt;
&lt;li&gt;Show the recording state as the app builds the note.&lt;/li&gt;
&lt;li&gt;Play the result with the transcript visible.&lt;/li&gt;
&lt;li&gt;End with the share or download action.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How I Built It
&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdxonoe60uiinrm7puvkw.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%2Fdxonoe60uiinrm7puvkw.png" alt="App Architecture" width="800" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Start with real match context
&lt;/h3&gt;

&lt;p&gt;The app fetches the World Cup fixture and result feed from OpenFootball, then groups fixtures into Yesterday, Today, Coming up, and All fixtures. The selected match supplies the teams, venue, score, and scored moments used in the recap.&lt;/p&gt;

&lt;p&gt;That matters because the voice note is only convincing if the details are right. It should know which side scored, when the game turned, and whether the final result came after extra time or penalties.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Ask Gemini to write like a friend, not a commentator
&lt;/h3&gt;

&lt;p&gt;I use Gemini 3.5 Flash to turn the selected match data into a strict two-speaker JSON script. The prompt asks for a 130 to 180 word note that uses exact events, addresses the user by name, and ends with how the friend feels right now.&lt;/p&gt;

&lt;p&gt;It also asks for a single line from a second speaker. That small detail is important. A match is never just one clean voice. It has someone beside you losing their mind, the bar reacting, or the stand suddenly going quiet.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Use ElevenLabs as a performer
&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fshhwnysbmba8e8j523s0.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%2Fshhwnysbmba8e8j523s0.png" alt="ElevenLabs" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the center of the project.&lt;/p&gt;

&lt;p&gt;I use the ElevenLabs Text to Dialogue endpoint with the &lt;code&gt;eleven_v3&lt;/code&gt; model. Each line is sent with a speaker voice, so the friend and the person in the background sound like separate people in the same moment.&lt;/p&gt;

&lt;p&gt;The script includes ElevenLabs v3 audio tags such as &lt;code&gt;[whispers]&lt;/code&gt;, &lt;code&gt;[excited]&lt;/code&gt;, &lt;code&gt;[shouts]&lt;/code&gt;, &lt;code&gt;[gasps]&lt;/code&gt;, and &lt;code&gt;[breathes out]&lt;/code&gt;. Those are not decoration in the UI. They change the performance. A late winner should not sound like a score notification.&lt;/p&gt;

&lt;p&gt;One practical decision: I pin the two voices used by the server to voices that work with the free API tier. This prevents a model-generated Library voice from causing a paid-plan error during a demo.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Make the wait part of the story
&lt;/h3&gt;

&lt;p&gt;The generation state does not just show a spinner. It presents the selected match moment, then shows the note being shaped, emotionally directed, and given a second stadium voice. It is a small detail, but it makes the wait feel like a recording is actually happening.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of ElevenLabs:&lt;/strong&gt; ElevenLabs v3 audio tags and Text to Dialogue are core to the experience. The app uses two speakers and visible performance cues instead of treating text to speech as a generic final step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Google AI:&lt;/strong&gt; Gemini writes the match-specific, personal dialogue from real fixture data and structured event context.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I would build next
&lt;/h2&gt;

&lt;p&gt;I would let people bring their own friend's voice into the experience, with clear consent and an easy way to delete voice data. I would also add a stronger live-event source during matches so a voice note can arrive right after the final whistle.&lt;/p&gt;

&lt;p&gt;Thanks for reading, and if you missed a match you cared about, I hope this gives you back a tiny piece of the night.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
    </item>
    <item>
      <title>OpinionFlow – Real-Time Review Intelligence with Bright Data, Gemini 2.0 &amp; Pinecone</title>
      <dc:creator>Shivansh Singh</dc:creator>
      <pubDate>Mon, 26 May 2025 05:34:14 +0000</pubDate>
      <link>https://dev.to/shivanshsinghh/opinionflow-real-time-review-intelligence-with-bright-data-gemini-20-pinecone-2ec8</link>
      <guid>https://dev.to/shivanshsinghh/opinionflow-real-time-review-intelligence-with-bright-data-gemini-20-pinecone-2ec8</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/brightdata-2025-05-07"&gt;Bright Data AI Web Access Hackathon&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




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

&lt;p&gt;&lt;strong&gt;OpinionFlow&lt;/strong&gt; helps users skip the endless scroll. It's an AI-powered review assistant that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crawls live product reviews from &lt;strong&gt;Amazon&lt;/strong&gt; and &lt;strong&gt;Walmart&lt;/strong&gt; using Bright Data MCP&lt;/li&gt;
&lt;li&gt;Summarizes insights using &lt;strong&gt;Gemini Flash&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Caches results semantically using &lt;strong&gt;Pinecone&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Lets users ask product-specific questions via &lt;strong&gt;LangChain&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Want to know if the AirPods Pro have battery issues? Just ask — you’ll get instant, evidence-backed answers.&lt;/p&gt;
&lt;/blockquote&gt;




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

&lt;ul&gt;
&lt;li&gt;🌐 &lt;a href="https://opinionflowproject.netlify.app" rel="noopener noreferrer"&gt;Live App&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💻 &lt;a href="https://github.com/meshivanshsinghh/opinionflow" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🎥 Loom Demo
&lt;/li&gt;
&lt;/ul&gt;


&lt;div&gt;
  &lt;iframe src="https://loom.com/embed/bcdb3c26a0024fb1b0504ec66df32cf8"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  🧠 How It Works
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🔍 &lt;strong&gt;Search&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Users enter a query (e.g., "Noise Buds X Prime")&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📄 &lt;strong&gt;Crawl&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Bright Data scrapes live reviews from both stores&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;✨ &lt;strong&gt;Summarize&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Gemini Flash extracts sentiment, pros/cons, and key specs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧠 &lt;strong&gt;Cache&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;MiniLM embeddings stored in Pinecone to avoid repetition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💬 &lt;strong&gt;Answer&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;LangChain generates natural-language responses with citations&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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%2F4bv6bl8eh3esxwmt22x7.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%2F4bv6bl8eh3esxwmt22x7.png" width="800" alt="Product discovery UI"&gt;&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Features at a Glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;💬 &lt;strong&gt;Instant AI Answer Box&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Summary with links to real reviews&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;👍 &lt;strong&gt;Top Pros / Cons&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Highlighted from verified buyers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📊 &lt;strong&gt;Sentiment Comparison&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Side-by-side scores from Amazon &amp;amp; Walmart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🏷️ &lt;strong&gt;Aspect Mini-Charts&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Dynamic breakdowns: battery, comfort, etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧭 &lt;strong&gt;Multi-Store Tabs&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Compare similar SKUs across platforms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔎 &lt;strong&gt;Review Explorer&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Drill down into sources and keywords&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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%2F8yf7kx3ow4gevnjk2d1a.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%2F8yf7kx3ow4gevnjk2d1a.png" width="800" alt="Sentiment analysis"&gt;&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Bright Data in Action
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;MCP Tool&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SERP API&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fetches product listings via Google Search&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Web Unlocker&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unblocks product pages seamlessly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scraping Browser&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Renders full review sections&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Browser API + Playwright&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Handles dynamic navigation like "See all reviews"&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Bright Data saved me dozens of hours — no captchas, no proxy headaches, just clean data.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧠 Architecture Overview
&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%2Fesi8377nmd5e7i6o2yud.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%2Fesi8377nmd5e7i6o2yud.png" width="800" alt="System Architecture Diagram"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;OpinionFlow is built with a &lt;strong&gt;modular microservice-style architecture&lt;/strong&gt; with FastAPI as the core backend. Key flows include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product discovery → via Bright Data SERP API&lt;/li&gt;
&lt;li&gt;Review scraping → using custom extractors&lt;/li&gt;
&lt;li&gt;Analysis → powered by Gemini Flash&lt;/li&gt;
&lt;li&gt;Semantic caching → via Pinecone vector search&lt;/li&gt;
&lt;li&gt;Natural Q&amp;amp;A → powered by LangChain and Gemini&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧰 Tech Stack
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;FastAPI&lt;/strong&gt;, &lt;strong&gt;React.js&lt;/strong&gt;, &lt;strong&gt;Bright Data MCP&lt;/strong&gt;, &lt;strong&gt;Gemini Flash&lt;/strong&gt;, &lt;strong&gt;Pinecone&lt;/strong&gt;, &lt;strong&gt;LangChain&lt;/strong&gt;, &lt;strong&gt;HuggingFace MiniLM&lt;/strong&gt;, &lt;strong&gt;Netlify&lt;/strong&gt;, &lt;strong&gt;Cloud Run&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔮 What's Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Add &lt;strong&gt;Target.com&lt;/strong&gt; integration
&lt;/li&gt;
&lt;li&gt;Launch a &lt;strong&gt;real-time price tracker&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Let users &lt;strong&gt;add their own reviews&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Enable &lt;strong&gt;Gemini-powered follow-ups&lt;/strong&gt; in chat&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🙏 Thanks
&lt;/h2&gt;

&lt;p&gt;Big thanks to &lt;strong&gt;Bright Data&lt;/strong&gt; and &lt;strong&gt;DEV&lt;/strong&gt; for the challenge. If you liked this project, consider checking out:&lt;/p&gt;

&lt;p&gt;🌟 &lt;a href="https://github.com/luminati-io/brightdata-mcp" rel="noopener noreferrer"&gt;github.com/luminati-io/brightdata-mcp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built with ❤️ by &lt;a href="https://dev.to/shivanshsinghh"&gt;@shivanshsinghh&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🏷️ Tags
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;#BrightData #Hackathon #AI #LLM #Gemini #LangChain #Ecommerce #ProductReviews #FastAPI #React #Pinecone #SemanticSearch&lt;/code&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>brightdatachallenge</category>
      <category>ai</category>
      <category>webdata</category>
    </item>
  </channel>
</rss>
