<?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: sandromirr</title>
    <description>The latest articles on DEV Community by sandromirr (@sandromirr).</description>
    <link>https://dev.to/sandromirr</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%2F66304%2F77cdacaf-8732-498d-8c13-aefcfe52f43c.png</url>
      <title>DEV Community: sandromirr</title>
      <link>https://dev.to/sandromirr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sandromirr"/>
    <language>en</language>
    <item>
      <title>Interactive Portfolio with Profile-Grounded Gemini Chat</title>
      <dc:creator>sandromirr</dc:creator>
      <pubDate>Mon, 02 Feb 2026 05:24:59 +0000</pubDate>
      <link>https://dev.to/sandromirr/interactive-portfolio-with-profile-grounded-gemini-chat-pm7</link>
      <guid>https://dev.to/sandromirr/interactive-portfolio-with-profile-grounded-gemini-chat-pm7</guid>
      <description>&lt;p&gt;--labels dev-tutorial=devnewyear2026&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/new-year-new-you-google-ai-2025-12-31"&gt;New Year, New You Portfolio Challenge Presented by Google AI&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  About Me
&lt;/h2&gt;

&lt;p&gt;I’m Sandro, a Senior Software Engineer based in Tbilisi, Georgia. I specialise in backend-heavy systems with clean architecture, search, and messaging. Over 6+ years, I’ve shipped scalable .NET services, built search-heavy platforms, and taught programming fundamentals, algorithms, and data structures.&lt;/p&gt;

&lt;h2&gt;
  
  
  Portfolio
&lt;/h2&gt;

&lt;p&gt;My portfolio runs on Cloud Run and pairs a React single-page layout with a Gemini-powered “Career Chat” that answers questions using my own profile data.&lt;/p&gt;

&lt;p&gt;Embed your Cloud Run deployment here: &lt;a href="https://portfolio-app-707441303278.europe-west1.run.app/" rel="noopener noreferrer"&gt;https://portfolio-app-707441303278.europe-west1.run.app/&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Stack: React 18 + Vite on the client; Node.js (ESM) + Express on the server; CSS for theming; Google Generative AI (Gemini) for the chat.&lt;/li&gt;
&lt;li&gt;UX: Light/dark theme toggle with localStorage persistence; split layout with a chat panel and a resume panel; cards for About, Experience, Projects, Skills, and Contact.&lt;/li&gt;
&lt;li&gt;Gemini “Career Chat”: The client posts messages and chat history to /api/career-gemini; the server injects my profile (from profile.json) into a system prompt so answers stay grounded in my data.&lt;/li&gt;
&lt;li&gt;API: Express with CORS and JSON parsing; uses @google/generative-ai and the gemini-3-flash-preview model. In production, the server also serves the built React app from dist when present.&lt;/li&gt;
&lt;li&gt;Config: .env expects GOOGLE_API_KEY and optional PORT (defaults to 8080). Profile content is editable in profile.json, so updating the portfolio data does not require code changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I'm Most Proud Of
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A grounded Gemini chat that only answers from my curated profile data—no fluff, just my real skills and projects.&lt;/li&gt;
&lt;li&gt;A split layout that keeps the chat visible beside the resume cards, so you can explore and converse at the same time.&lt;/li&gt;
&lt;li&gt;Light/dark theming that persists and stays legible, making the portfolio comfortable in any setting.&lt;/li&gt;
&lt;li&gt;A single-container, Cloud Run–ready setup where Express serves both the API and the built client.&lt;/li&gt;
&lt;li&gt;Data-only updates: I can change my story by editing profile.json without touching code.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>googleaichallenge</category>
      <category>portfolio</category>
      <category>gemini</category>
    </item>
    <item>
      <title>Kendo React Crypto Tracker</title>
      <dc:creator>sandromirr</dc:creator>
      <pubDate>Mon, 29 Sep 2025 02:30:14 +0000</pubDate>
      <link>https://dev.to/sandromirr/kendo-react-crypto-tracker-4250</link>
      <guid>https://dev.to/sandromirr/kendo-react-crypto-tracker-4250</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/kendoreact-2025-09-10"&gt;KendoReact Free Components Challenge&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I've built a comprehensive Cryptocurrency Tracker application that helps users monitor cryptocurrency prices, track their portfolio, and stay educated about the crypto market. The application provides real-time market data, price charts, portfolio management, and educational resources - all wrapped in a beautiful, responsive UI built with KendoReact components.&lt;/p&gt;

&lt;p&gt;Key features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time cryptocurrency price tracking&lt;/li&gt;
&lt;li&gt;Interactive price charts with different timeframes&lt;/li&gt;
&lt;li&gt;Portfolio management with profit/loss tracking&lt;/li&gt;
&lt;li&gt;Educational resources for crypto beginners&lt;/li&gt;
&lt;li&gt;Customizable theme and currency preferences&lt;/li&gt;
&lt;li&gt;Responsive design that works on all devices&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;a href="https://kendo-crypto-tracker.appwrite.network" rel="noopener noreferrer"&gt;Live Demo&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshots
&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.amazonaws.com%2Fuploads%2Farticles%2Fc5j9fkbsn8otc8wyxqvo.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%2Fc5j9fkbsn8otc8wyxqvo.png" alt="HomePage" width="800" height="499"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Home dashboard showing market overview and top cryptocurrencies&lt;/em&gt;&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%2Foasyfp66tbo1osvp0dtz.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%2Foasyfp66tbo1osvp0dtz.png" alt="Porfolio" width="800" height="499"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Portfolio tracking with profit/loss visualization&lt;/em&gt;&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%2Fuovtuludgm0yegw4ln7o.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%2Fuovtuludgm0yegw4ln7o.png" alt="Education" width="800" height="499"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Educational resources section&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sandromirr/kendo-crypto-tracker" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  KendoReact Components Used
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Layout &amp;amp; Navigation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AppBar&lt;/strong&gt; - Main navigation header&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Card&lt;/strong&gt; - Content containers throughout the app&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PanelBar&lt;/strong&gt; - For collapsible content sections&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dialog&lt;/strong&gt; - Modal dialogs for user interactions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Data Display
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Grid&lt;/strong&gt; - For displaying cryptocurrency data tables&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chart&lt;/strong&gt; - For price and market data visualization&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skeleton&lt;/strong&gt; - Loading placeholders&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Form Components
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Button&lt;/strong&gt; - All interactive actions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Input&lt;/strong&gt; - Text input fields&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NumericTextBox&lt;/strong&gt; - Number input fields&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Switch&lt;/strong&gt; - Toggle switches in settings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DropDownList&lt;/strong&gt; - Selection dropdowns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Form&lt;/strong&gt; - Form handling and validation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Feedback &amp;amp; Utilities
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Notification&lt;/strong&gt; - User alerts and messages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SvgIcon&lt;/strong&gt; - Consistent iconography&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fade&lt;/strong&gt; - Smooth animations&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Data Visualization
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ChartSeries&lt;/strong&gt; - Price trend visualization&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ChartCategoryAxis&lt;/strong&gt; - Time-based axis for charts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ChartValueAxis&lt;/strong&gt; - Price/value axis for charts&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Code Smarter, Not Harder prize category] AI Coding Assistant Usage
&lt;/h2&gt;

&lt;p&gt;I used the AI Coding Assistant to help with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Setting up the initial project structure with Vite + React + TypeScript&lt;/li&gt;
&lt;li&gt;Implementing complex chart configurations for the price visualization&lt;/li&gt;
&lt;li&gt;Optimizing performance for the cryptocurrency data grid&lt;/li&gt;
&lt;li&gt;Creating responsive layouts that work across different screen sizes&lt;/li&gt;
&lt;li&gt;Debugging TypeScript type issues with the KendoReact components&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>kendoreactchallenge</category>
      <category>react</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
