<?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: Risbern Fernandes</title>
    <description>The latest articles on DEV Community by Risbern Fernandes (@risb21).</description>
    <link>https://dev.to/risb21</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%2F3366101%2F81a4a0a7-cb3b-472e-a06f-f91b7c5cd5c9.gif</url>
      <title>DEV Community: Risbern Fernandes</title>
      <link>https://dev.to/risb21</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/risb21"/>
    <language>en</language>
    <item>
      <title>Election Educaiton and Assistant app</title>
      <dc:creator>Risbern Fernandes</dc:creator>
      <pubDate>Mon, 27 Apr 2026 03:03:28 +0000</pubDate>
      <link>https://dev.to/risb21/election-educaiton-and-assistant-app-5632</link>
      <guid>https://dev.to/risb21/election-educaiton-and-assistant-app-5632</guid>
      <description>&lt;h1&gt;
  
  
  Building ElectAssist: Revolutionizing Democracy with AI-Driven Election Intelligence
&lt;/h1&gt;

&lt;p&gt;In an era of information overload and increasing election complexity, how can we empower citizens to make informed decisions? Enter &lt;strong&gt;ElectAssist&lt;/strong&gt;—an interactive, AI-powered election intelligence platform designed to bridge the gap between candidates and voters.&lt;/p&gt;

&lt;p&gt;In this post, we’ll dive deep into the technical architecture of ElectAssist, exploring how it leverages the latest in Google Cloud’s AI ecosystem to provide real-time, verified insights to the public.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Vision: Informed Citizenship through AI
&lt;/h2&gt;

&lt;p&gt;ElectAssist was born from a simple idea: &lt;strong&gt;Voting shouldn't be guesswork.&lt;/strong&gt; We wanted to build a platform that doesn't just list candidates but provides a context-rich, AI-moderated view of their work, promises, and the election process itself.&lt;/p&gt;

&lt;p&gt;Key goals included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Demystifying the process&lt;/strong&gt;: A step-by-step guide to voting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verifying work&lt;/strong&gt;: A community-driven "proof of work" system for candidates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility&lt;/strong&gt;: A natural language interface to ask complex election questions.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Stack
&lt;/h2&gt;

&lt;p&gt;To build a platform that is both responsive and scalable, we chose a robust modern stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: A sleek, high-performance UI built with &lt;strong&gt;React&lt;/strong&gt; and &lt;strong&gt;Vite&lt;/strong&gt;. We used &lt;strong&gt;Vanilla CSS&lt;/strong&gt; for a premium, custom feel and &lt;strong&gt;Lucide Icons&lt;/strong&gt; for a clean aesthetic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: A lightning-fast &lt;strong&gt;FastAPI&lt;/strong&gt; server running on &lt;strong&gt;Google Cloud Run&lt;/strong&gt;, providing the muscle for our AI integrations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intelligence&lt;/strong&gt;: Powered by &lt;strong&gt;Gemini 2.5 Flash&lt;/strong&gt; via &lt;strong&gt;Vertex AI&lt;/strong&gt;, enabling sophisticated RAG (Retrieval-Augmented Generation) and document summarization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time Data&lt;/strong&gt;: &lt;strong&gt;Firebase Firestore&lt;/strong&gt; for candidate profiles and leaderboard scores, with &lt;strong&gt;Firebase Auth&lt;/strong&gt; handling secure user identities.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Deep Dive: AI Features
&lt;/h2&gt;

&lt;p&gt;The heart of ElectAssist lies in its intelligent capabilities. We implemented three core AI-driven features:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The RAG-Powered Chatbot
&lt;/h3&gt;

&lt;p&gt;Instead of a static FAQ, ElectAssist features a conversational agent. Using &lt;strong&gt;Vertex AI&lt;/strong&gt;, we built a RAG pipeline that fetches live data from Firestore—candidate platforms, party manifestos, and locality info—and feeds it to &lt;strong&gt;Gemini&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;This ensures that when a user asks, &lt;em&gt;"Who is working on road infrastructure in my ward?"&lt;/em&gt;, the AI provides a grounded, data-backed response rather than general hallucination.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Community Video Proofs &amp;amp; AI Moderation
&lt;/h3&gt;

&lt;p&gt;One of our most innovative features is the &lt;strong&gt;Candidate Leaderboard&lt;/strong&gt;. Citizens can upload short videos as "proof" of a candidate's work (e.g., a new school opening). &lt;br&gt;
To maintain quality and safety:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Video Intelligence API&lt;/strong&gt; automatically tags content and moderates for inappropriate material.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini&lt;/strong&gt; generates a text summary of the video, which is then indexed for semantic search.&lt;/li&gt;
&lt;li&gt;Verified proofs contribute to the candidate's dynamic "Trust Score."&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Manifesto Summarizer
&lt;/h3&gt;

&lt;p&gt;Political manifestos are notoriously long and complex. We built a service that uses Gemini to ingest these documents and output neutral, bullet-point summaries. This makes policy positions accessible to the general public in seconds.&lt;/p&gt;




&lt;h2&gt;
  
  
  Locality-Based Insights
&lt;/h2&gt;

&lt;p&gt;We integrated the &lt;strong&gt;Google Maps Embed API&lt;/strong&gt; to provide a geographical context to the election. Users can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visualize candidates per ward/constituency.&lt;/li&gt;
&lt;li&gt;Locate their nearest polling booths.&lt;/li&gt;
&lt;li&gt;See real-time leaderboard rankings based on their specific locality.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Scalable Infrastructure
&lt;/h2&gt;

&lt;p&gt;Deploying such a feature-rich application required a reliable infrastructure. By using &lt;strong&gt;Cloud Run&lt;/strong&gt;, we ensure our backend scales automatically with traffic during peak election periods. &lt;strong&gt;Firebase Cloud Messaging (FCM)&lt;/strong&gt; keeps users engaged with timely notifications about election dates and leaderboard updates, triggered by &lt;strong&gt;Cloud Scheduler&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Security &amp;amp; Integrity
&lt;/h2&gt;

&lt;p&gt;In a political context, data integrity is paramount. We implemented:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Role-Based Access Control (RBAC)&lt;/strong&gt;: Only verified admins can manage candidate profiles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Firestore Security Rules&lt;/strong&gt;: Ensuring that user endorsements (likes) are unique and protected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate Limiting&lt;/strong&gt;: Preventing gaming of the leaderboard system.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Future of ElectAssist
&lt;/h2&gt;

&lt;p&gt;ElectAssist is just the beginning. Our roadmap includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multilingual Support&lt;/strong&gt;: Real-time translation of candidate data into regional languages using Gemini's multimodal capabilities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Poll Sentiment Dashboards&lt;/strong&gt;: Aggregating public sentiment from verified community contributions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voter ID Integration&lt;/strong&gt;: Streamlining the registration check process through official APIs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By combining community involvement with cutting-edge AI, ElectAssist is setting a new standard for how technology can support and strengthen the democratic process.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Interested in the technical implementation? Check out the project on &lt;a href="https://github.com/risbern21/ElectAssist" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and stay tuned for more updates on how we're building the future of civic tech.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>googlecloud</category>
      <category>showdev</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Stadium Sync</title>
      <dc:creator>Risbern Fernandes</dc:creator>
      <pubDate>Sun, 19 Apr 2026 16:14:02 +0000</pubDate>
      <link>https://dev.to/risb21/stadium-sync-43od</link>
      <guid>https://dev.to/risb21/stadium-sync-43od</guid>
      <description>&lt;h1&gt;
  
  
  Building StadiumSync: Transforming the Live Stadium Experience with React and Firebase
&lt;/h1&gt;

&lt;p&gt;In the roar of a 50,000-seat stadium, information is often the one thing that doesn't travel fast enough. Whether it's finding the nearest pizza stall, knowing when it's your turn to leave the stand, or coordinating a massive stadium-wide chant, the gap between organizers and fans has traditionally been filled by static signs and overtaxed PA systems.&lt;/p&gt;

&lt;p&gt;Enter &lt;strong&gt;StadiumSync&lt;/strong&gt;—a real-time experience platform built to bridge that gap. In this post, I’ll dive into how I built this platform using &lt;strong&gt;React&lt;/strong&gt;, &lt;strong&gt;Firebase&lt;/strong&gt;, and &lt;strong&gt;Glassmorphism design&lt;/strong&gt; to bring the stadium experience into the digital age.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Vision: Orchestrating the Chaos
&lt;/h2&gt;

&lt;p&gt;Large-scale events are logistical puzzles. The goal for StadiumSync was simple: create a two-sided platform that empowers coordinators to manage the event flow in real-time, while giving attendees a seamless, "no-installation-required" web experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Pillars:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Real-time Coordination:&lt;/strong&gt; Broadcast exit instructions and chants instantly.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Interactive Content:&lt;/strong&gt; Digital menus and venue maps at your fingertips.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Feedback Loop:&lt;/strong&gt; Instant crowd sentiment collection for organizers.&lt;/li&gt;
&lt;/ol&gt;




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

&lt;p&gt;To ensure speed and reliability, I chose a modern, lightweight stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Frontend:&lt;/strong&gt; &lt;a href="https://vitejs.dev/" rel="noopener noreferrer"&gt;Vite&lt;/a&gt; + &lt;a href="https://reactjs.org/" rel="noopener noreferrer"&gt;React&lt;/a&gt; for a lightning-fast Single Page Application (SPA).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Real-time Database:&lt;/strong&gt; &lt;a href="https://firebase.google.com/docs/firestore" rel="noopener noreferrer"&gt;Firebase Firestore&lt;/a&gt; for instant data synchronization across thousands of devices.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Cloud Storage:&lt;/strong&gt; &lt;a href="https://firebase.google.com/docs/storage" rel="noopener noreferrer"&gt;Firebase Storage&lt;/a&gt; for high-res venue maps and stall images.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Styling:&lt;/strong&gt; &lt;strong&gt;Vanilla CSS&lt;/strong&gt; with a heavy focus on &lt;strong&gt;Glassmorphism&lt;/strong&gt;. No heavy UI libraries—just lean, high-performance CSS.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Technical Deep Dive
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Real-time Sync with &lt;code&gt;onSnapshot&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The "magic" of StadiumSync comes from Firestore's &lt;code&gt;onSnapshot&lt;/code&gt;. We didn't want attendees refreshing the page for updates. When a coordinator changes the "Exit Guide" message, it pulses on every attendee's phone within milliseconds.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// A snippet of how real-time updates are handled in AttendeeView.jsx&lt;/span&gt;
&lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;unsubscribe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;onSnapshot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;config&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;egressMessage&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;setEgressData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;());&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;unsubscribe&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Clean up listener on unmount&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. The "Event Code" Gate
&lt;/h3&gt;

&lt;p&gt;Security doesn't always need to be complex. Since we wanted anyone in the stadium to join without creating an account, we implemented a &lt;strong&gt;Code Gate&lt;/strong&gt;. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Coordinators generate a unique session code.&lt;/li&gt;
&lt;li&gt;Attendees enter the code to unlock the event data.&lt;/li&gt;
&lt;li&gt;The session is persisted in &lt;code&gt;sessionStorage&lt;/code&gt;, keeping the experience friction-free.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Glassmorphism &amp;amp; Mobile-First Design
&lt;/h3&gt;

&lt;p&gt;Stadiums are high-energy, dark environments. The UI follows a "Dark Mode" aesthetic with semi-transparent, frosted-glass layers (&lt;strong&gt;Glassmorphism&lt;/strong&gt;). This ensures high legibility and a premium feel while the crowd is under the stadium lights.&lt;/p&gt;

&lt;p&gt;We used &lt;code&gt;100dvh&lt;/code&gt; (Dynamic Viewport Height) to ensure the UI fits perfectly on mobile screens, avoiding the "jumping" effect caused by mobile browser URL bars.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Features Highlights
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Dynamic Chant Broadcaster&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Ever wanted to lead a 10,000-person chant? Coordinators can push "Active Chants" to everyone's screen. A "Join" button helps fans stay in sync with the rhythm of the game.&lt;/p&gt;

&lt;h3&gt;
  
  
  🍔 &lt;strong&gt;Digital Stall Menus&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;No more squinting at distant posters. Attendees can browse all food stalls, view high-res item images, and check prices directly from their seats.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Smart Exit Logic&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Post-match congestion is a safety risk. Our real-time Egress Guide allows coordinators to broadcast "Wait" or "Go" instructions stand-by-stand, ensuring a smooth and safe exit for everyone.&lt;/p&gt;




&lt;h2&gt;
  
  
  Challenges &amp;amp; Lessons
&lt;/h2&gt;

&lt;p&gt;Building for a "Smart Stadium" context reminded me that &lt;strong&gt;connectivity is king&lt;/strong&gt;. By keeping the asset sizes small and relying on Firebase's efficient synchronization, we built a tool that works even on spotty stadium Wi-Fi.&lt;/p&gt;

&lt;p&gt;Vanilla CSS was a deliberate choice. It allowed for fine-tuned animations (like the pulsing exit alert) without the overhead of a CSS-in-JS library, keeping the Lighthouse scores high and the "Time to Interactive" low.&lt;/p&gt;




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

&lt;p&gt;StadiumSync isn't just a dashboard; it's a bridge between the physical and digital world of live sports. By leveraging real-time cloud tech, we can turn a stressful match-day experience into a seamless, interactive journey.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Built for the Virtual PromptWars Challenge #1 - Physical Event Experience&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Check out the project on GitHub:&lt;/strong&gt; [&lt;a href="https://github.com/Risbern21/StadiumSync.git" rel="noopener noreferrer"&gt;https://github.com/Risbern21/StadiumSync.git&lt;/a&gt;]&lt;br&gt;
&lt;strong&gt;Built by:&lt;/strong&gt; Antigravity AI&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>showdev</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
