<?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: Jigin Vp</title>
    <description>The latest articles on DEV Community by Jigin Vp (@vpjigin).</description>
    <link>https://dev.to/vpjigin</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%2F2986599%2Ff67b589a-6454-45df-aecf-dc17aebf7faf.jpg</url>
      <title>DEV Community: Jigin Vp</title>
      <link>https://dev.to/vpjigin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vpjigin"/>
    <language>en</language>
    <item>
      <title>Empathy AI-Your AI Help.</title>
      <dc:creator>Jigin Vp</dc:creator>
      <pubDate>Sun, 27 Jul 2025 23:02:11 +0000</pubDate>
      <link>https://dev.to/vpjigin/empathy-ai-your-ai-help-183i</link>
      <guid>https://dev.to/vpjigin/empathy-ai-your-ai-help-183i</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/assemblyai-2025-07-16"&gt;AssemblyAI Voice Agents Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;EmpathyAI is a real-time voice-powered mental health support application that provides compassionate AI-driven conversations for individuals experiencing emotional distress. The system processes spoken input through advanced speech recognition, analyzes emotional content using AI, and responds with empathetic voice-based support.&lt;/p&gt;




&lt;h2&gt;
  
  
  Demo
&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%2Fbb2d6elf0r9dgl0jpsbf.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%2Fbb2d6elf0r9dgl0jpsbf.png" alt="Demo image of website" width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  GitHub Repository
&lt;/h2&gt;

&lt;p&gt;React frontend app&lt;br&gt;
&lt;a href="https://github.com/vpjigin/EmpathyAIReact.git" rel="noopener noreferrer"&gt;https://github.com/vpjigin/EmpathyAIReact.git&lt;/a&gt;&lt;br&gt;
Spring-boot backend&lt;br&gt;
&lt;a href="https://github.com/vpjigin/EmpathyAISpringBoot.git" rel="noopener noreferrer"&gt;https://github.com/vpjigin/EmpathyAISpringBoot.git&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  AssemblyAI Universal-Streaming Technology
&lt;/h2&gt;

&lt;p&gt;This application demonstrates advanced real-time audio processing powered by AssemblyAI’s Universal-Streaming API. The system enables low-latency, turn-based, and secure transcription, enabling emotionally intelligent AI conversations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core Architecture
&lt;/h2&gt;

&lt;p&gt;The architecture follows a multi-layered streaming pipeline:&lt;br&gt;
&lt;code&gt;Client Audio → WebSocket Handler → AssemblyAI Streaming → AI Processing → Response&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  AssemblyAI Streaming Implementation
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Real-time WebSocket Connection
The backend creates a persistent WebSocket connection to AssemblyAI’s streaming endpoint:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;private static final String ASSEMBLYAI_STREAMING_URL = "wss://streaming.assemblyai.com/v3/ws";

public CompletableFuture&amp;lt;StreamingSession&amp;gt; createStreamingSession(String sessionId, TranscriptCallback callback) {
    String connectionUrl = ASSEMBLYAI_STREAMING_URL + "?sample_rate=16000&amp;amp;format_turns=true";

    Map&amp;lt;String, String&amp;gt; headers = new HashMap&amp;lt;&amp;gt;();
    headers.put("Authorization", apiKey);

    WebSocketClient client = new WebSocketClient(serverUri, headers) {
        @Override
        public void onMessage(String message) {
            JsonNode jsonMessage = objectMapper.readTree(message);
            if ("Turn".equals(messageType)) {
                String transcript = jsonMessage.get("transcript").asText();
                boolean isFormatted = jsonMessage.get("turn_is_formatted").asBoolean();
                if (isFormatted) {
                    callback.onTranscript(transcript, true);
                }
            }
        }
    };
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Audio Streaming Handler
The AudioStreamingWebSocketHandler component bridges client-side audio to the AssemblyAI session:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Component
public class AudioStreamingWebSocketHandler implements WebSocketHandler {

    @Autowired
    private AssemblyAIStreamingServiceV2 assemblyAIStreamingService;

    private void handleBinaryMessage(WebSocketSession session, BinaryMessage message) {
        StreamingSessionV2 assemblySession = assemblyAISessions.get(session.getId());
        if (assemblySession != null) {
            ByteBuffer audioData = message.getPayload();
            byte[] audioBytes = new byte[audioData.remaining()];
            audioData.get(audioBytes);
            assemblySession.sendAudioData(audioBytes);
        }
    }

    private void startStreaming(WebSocketSession session, String conversationUuid) {
        assemblyAIStreamingService.createStreamingSession(session.getId(), new TranscriptCallback() {
            @Override
            public void onTranscript(String text, boolean isFinal) {
                if (isFinal) {
                    handleFinalTranscript(session, conversation, text);
                }
            }
        });
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Advanced Features Utilized&lt;/li&gt;
&lt;li&gt;Turn-based Transcription: format_turns=true for human-like flow&lt;/li&gt;
&lt;li&gt;16kHz Audio: sample_rate=16000 ensures clarity&lt;/li&gt;
&lt;li&gt;TLS/SSL Security: Secured with valid certs&lt;/li&gt;
&lt;li&gt;Concurrent Streaming: Multiple session support&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Message Type Handling: Supports "Begin", "Turn", and "Termination" types&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dual Implementation Strategy&lt;br&gt;
I implemented two parallel streaming strategies:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;AssemblyAIStreamingService: Uses Java-WebSocket for low-level WebSocket handling&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AssemblyAIStreamingServiceV2: Uses Spring’s StandardWebSocketClient for seamless Spring Boot integration&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Spring-based implementation
public CompletableFuture&amp;lt;StreamingSessionV2&amp;gt; createStreamingSession(String sessionId, TranscriptCallback callback) {
    StandardWebSocketClient client = new StandardWebSocketClient();
    WebSocketHttpHeaders headers = new WebSocketHttpHeaders();
    headers.add("Authorization", apiKey);

    WebSocketHandler handler = new WebSocketHandler() {
        @Override
        public void handleMessage(WebSocketSession session, WebSocketMessage&amp;lt;?&amp;gt; message) {
            // Handle messages using Spring WebSocket framework
        }
    };

    client.doHandshake(handler, headers, serverUri).get();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Technical Capabilities Leveraged
&lt;/h2&gt;

&lt;p&gt;1.Real-time Binary Audio Streaming&lt;br&gt;
2.Low-latency (&amp;lt;1s) Transcription&lt;br&gt;
3.Turn-based Conversation Context&lt;br&gt;
4.Error Recovery &amp;amp; Retry Mechanism&lt;br&gt;
5.Scalable Concurrent Sessions&lt;/p&gt;




&lt;h2&gt;
  
  
  Project Structure (Brief)
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;├── controller/&lt;br&gt;
├── service/&lt;br&gt;
├── websocket/&lt;br&gt;
├── model/&lt;br&gt;
├── config/&lt;/code&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>assemblyaichallenge</category>
      <category>ai</category>
      <category>api</category>
    </item>
    <item>
      <title>When Replit Malfunctioned: Why We Must Build a Middle Layer Between AI and Core Infrastructure</title>
      <dc:creator>Jigin Vp</dc:creator>
      <pubDate>Sun, 27 Jul 2025 17:19:24 +0000</pubDate>
      <link>https://dev.to/vpjigin/when-replit-malfunctioned-why-we-must-build-a-middle-layer-between-ai-and-core-infrastructure-2igj</link>
      <guid>https://dev.to/vpjigin/when-replit-malfunctioned-why-we-must-build-a-middle-layer-between-ai-and-core-infrastructure-2igj</guid>
      <description>&lt;h2&gt;
  
  
  The Replit Incident
&lt;/h2&gt;

&lt;p&gt;Recently, developers across the world faced disruptions when Replit, one of the most widely used cloud-based IDEs, experienced a major malfunction. A company’s entire production database was wiped—was it entirely the AI’s fault? We all know AI is still in its early stages and can sometimes behave unpredictably, yet we continue to ignore the need for proper safety measures.&lt;br&gt;
This blog is meant to shape a simple idea based on my thoughts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter AI-Driven Applications
&lt;/h2&gt;

&lt;p&gt;With AI now being a critical part of many applications—from smart chatbots to automated DevOps tools—developers often integrate models like GPT, Claude, or open-source LLMs directly into backend flows.&lt;/p&gt;

&lt;p&gt;This architecture is powerful, but dangerously brittle.&lt;/p&gt;

&lt;p&gt;Imagine this:&lt;br&gt;
An AI agent receives a user’s query. It runs some logic and fires a direct SQL query to your production database. What if it misinterprets a prompt? Or calls the wrong endpoint? Or worse—starts deleting rows?&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%2Fpgj83v9p68h4dykydqt1.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.amazonaws.com%2Fuploads%2Farticles%2Fpgj83v9p68h4dykydqt1.jpg" alt="Brain explode image" width="612" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Combine this with a service malfunction like Replit’s, and you have a recipe for cascading failure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a Middle Layer is Non-Negotiable
&lt;/h2&gt;

&lt;p&gt;A middle layer—a controlled middleware or API abstraction—between AI agents and the actual backend systems (like your database or application server) is no longer just good practice. It’s essential.&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%2Fr7hs6yv19rz42m8bwlwv.jpeg" 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%2Fr7hs6yv19rz42m8bwlwv.jpeg" alt="Sandwich image" width="360" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here’s why:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Validation &amp;amp; Rate Limiting&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can inspect and validate every request coming from the AI. Did it try to delete all users? Flag it. Is it flooding the server? Throttle it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Explainability&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The middle layer can log and surface what the AI is attempting to do in human-readable terms. This helps with debugging and auditing.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Security &amp;amp; Isolation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your AI should never see raw credentials, database schemas, or internal APIs. The middle layer protects these via scoped endpoints or role-based access.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fail-Safes&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In the event of a malfunction—whether from the AI or the hosting platform (like Replit)—the middle layer can gracefully return fallback responses or queue retries.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AI Adaptability&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Different AIs behave differently. A middle layer lets you abstract your backend so that whether you’re using GPT today and Claude tomorrow, your core logic doesn’t have to change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example Architecture
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;User → AI (LLM) → Middle Layer API → Backend Server / Database&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Middle Layer acts as a smart broker:&lt;br&gt;
•Authenticates and logs every request.&lt;br&gt;
•Filters unsafe or malformed inputs.&lt;br&gt;
•Talks to the actual API/database through validated, pre-designed routes.&lt;/p&gt;

&lt;p&gt;This way, even if:&lt;br&gt;
•The AI hallucinates&lt;br&gt;
•The user exploits prompt injection&lt;br&gt;
•The platform malfunctions&lt;/p&gt;

&lt;p&gt;…your infrastructure remains protected.&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%2Fvb4w739z0p7yfr299uve.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%2Fvb4w739z0p7yfr299uve.png" alt="Jail image" width="360" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Replit’s malfunction reminded us of the fragile reality of modern cloud-based development. But the deeper takeaway for those building with AI is this:&lt;/p&gt;

&lt;p&gt;Never let AI directly access your backend. Always add a human-governed, rules-based middle layer.&lt;/p&gt;

&lt;p&gt;Think of it like giving a safety buffer between AI’s unpredictability and your infrastructure’s stability.&lt;/p&gt;

&lt;p&gt;We’re still in the early days of AI-native architecture. Let’s build it responsibly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your Turn
&lt;/h2&gt;

&lt;p&gt;Are you building AI apps? What does your middle layer look like—or are you still working without one?&lt;/p&gt;

&lt;p&gt;Let’s discuss in the comments. 👇&lt;/p&gt;

</description>
      <category>ai</category>
    </item>
    <item>
      <title>Getting Started with Open WebUI: A Self-Hosted AI Interface</title>
      <dc:creator>Jigin Vp</dc:creator>
      <pubDate>Tue, 17 Jun 2025 18:03:06 +0000</pubDate>
      <link>https://dev.to/vpjigin/getting-started-with-open-webui-a-self-hosted-ai-interface-53da</link>
      <guid>https://dev.to/vpjigin/getting-started-with-open-webui-a-self-hosted-ai-interface-53da</guid>
      <description>&lt;p&gt;Open WebUI is an MIT-licensed project whose goal is to provide “the best AI user interface” for self-hosted large language models. At its core it’s a web app (Svelte + TypeScript + Python backend) that talks to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ollama (local LLM runner)&lt;/li&gt;
&lt;li&gt;OpenAI-compatible APIs (e.g. LMStudio, Mistral, GroqCloud via custom endpoints)&lt;/li&gt;
&lt;li&gt;Custom pipelines (RAG, tool-use via the pipelines framework)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result? You get chat, voice/video calls, document uploads, memory/contexts, and even a built-in “model builder” to craft your own agents—all in one place.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quickstart with Docker
&lt;/h3&gt;

&lt;p&gt;The easiest way to stand up Open WebUI is with Docker. Here’s a GPU-enabled example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -d \
  -p 3000:8080 \
  --gpus=all \
  --add-host=host.docker.internal:host-gateway \
  -v ollama:/root/.ollama \
  -v open-webui:/app/backend/data \
  --name open-webui \
  --restart=always \
  ghcr.io/open-webui/open-webui:ollama
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you don’t have a GPU, just omit the --gpus=all:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -d \
  -p 3000:8080 \
  --add-host=host.docker.internal:host-gateway \
  -v ollama:/root/.ollama \
  -v open-webui:/app/backend/data \
  --name open-webui \
  --restart=always \
  ghcr.io/open-webui/open-webui:ollama
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once it’s running, point your browser at:&lt;br&gt;
&lt;code&gt;http://localhost:3000/auth&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Log in (there’s a default admin user/password in the docs), and you’re off to the races! &lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;Effortless Setup: Docker, Docker Compose, Helm/Kustomize—pick your poison.&lt;/li&gt;
&lt;li&gt;Multi-Runner Support: Ollama + any OpenAI-compatible URL.&lt;/li&gt;
&lt;li&gt;Granular Permissions: Create user groups, roles, and fine-grained ACLs.&lt;/li&gt;
&lt;li&gt;Responsive Design: Desktop, tablet, mobile—all handled.&lt;/li&gt;
&lt;li&gt;Voice &amp;amp; Video Calls: Hands-free chat with built-in WebRTC support.&lt;/li&gt;
&lt;li&gt;Model Builder: Create, customize, and deploy new Ollama models via the UI.&lt;/li&gt;
&lt;li&gt;Plugin Framework: Extend with custom pipelines, filters, and memory modules. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  First Steps After Installation
&lt;/h2&gt;

&lt;p&gt;Connect Your Runner&lt;br&gt;
&lt;code&gt;Go to Settings → Model Runners and point to your Ollama socket (host.docker.internal:11434) or your OpenAI-compatible endpoint.&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Create a Workspace&lt;br&gt;
&lt;code&gt;Workspaces let you isolate data, users, and models per project or team.&lt;/code&gt;&lt;br&gt;
Chat &amp;amp; Explore&lt;br&gt;
&lt;code&gt;Hit New Chat, pick a model, and start experimenting with prompts, file uploads, or voice calls.&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Customization &amp;amp; Extensions
&lt;/h2&gt;

&lt;p&gt;Open WebUI’s power is in its extensibility:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom Pipelines: Write Python plugins to add status emitters, word filters, or long-term memory.&lt;/li&gt;
&lt;li&gt;Theming: Override the default Svelte styles with your own CSS or brand colors.&lt;/li&gt;
&lt;li&gt;Chrome Extension: Browse your workspace from any tab.&lt;/li&gt;
&lt;li&gt;Desktop App: Use the Electron-based client for a native-feel experience. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check out the &lt;a href="https://docs.openwebui.com" rel="noopener noreferrer"&gt;docs&lt;/a&gt; for guides on each of these—there’s even a community-maintained list of “extensions you must try.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Use Cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Internal AI Assistant
Host a Slack-integrated knowledge bot on your own servers—no third-party needed.&lt;/li&gt;
&lt;li&gt;Research &amp;amp; Development
Experiment with new LLMs in a controlled, offline environment.&lt;/li&gt;
&lt;li&gt;Customer Support
Ship a branded, self-hosted help-desk chatbot with RAG over your own docs.&lt;/li&gt;
&lt;li&gt;Education
Give students hands-on experience with AI without exposing them to external APIs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Caveats &amp;amp; Tips
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Resource Needs: Large models can be memory hungry. Make sure your host has enough RAM/VRAM.&lt;/li&gt;
&lt;li&gt;Security: If exposing to the internet, sit behind an authenticated reverse-proxy (e.g., Nginx with OAuth).&lt;/li&gt;
&lt;li&gt;Backups: Data lives in the open-webui volume—back it up regularly to avoid data loss.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;Open WebUI puts the power and flexibility of modern LLMs right in your hands—completely self-hosted, fully open source. Whether you’re running internal assistants, experimenting with new models, or building your own AI-driven products, it’s a fantastic starting point.&lt;/p&gt;

&lt;p&gt;Give it a spin, join the &lt;a href="https://discord.gg/open-webui" rel="noopener noreferrer"&gt;Discord community&lt;/a&gt;, and unlock the full potential of offline AI!&lt;br&gt;
Happy hacking! 🚀&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Getting Started with Open WebUI: A Self-Hosted AI Interface</title>
      <dc:creator>Jigin Vp</dc:creator>
      <pubDate>Tue, 17 Jun 2025 18:03:06 +0000</pubDate>
      <link>https://dev.to/vpjigin/getting-started-with-open-webui-a-self-hosted-ai-interface-16mk</link>
      <guid>https://dev.to/vpjigin/getting-started-with-open-webui-a-self-hosted-ai-interface-16mk</guid>
      <description>&lt;p&gt;Open WebUI is an MIT-licensed project whose goal is to provide “the best AI user interface” for self-hosted large language models. At its core it’s a web app (Svelte + TypeScript + Python backend) that talks to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ollama (local LLM runner)&lt;/li&gt;
&lt;li&gt;OpenAI-compatible APIs (e.g. LMStudio, Mistral, GroqCloud via custom endpoints)&lt;/li&gt;
&lt;li&gt;Custom pipelines (RAG, tool-use via the pipelines framework)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result? You get chat, voice/video calls, document uploads, memory/contexts, and even a built-in “model builder” to craft your own agents—all in one place.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quickstart with Docker
&lt;/h3&gt;

&lt;p&gt;The easiest way to stand up Open WebUI is with Docker. Here’s a GPU-enabled example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -d \
  -p 3000:8080 \
  --gpus=all \
  --add-host=host.docker.internal:host-gateway \
  -v ollama:/root/.ollama \
  -v open-webui:/app/backend/data \
  --name open-webui \
  --restart=always \
  ghcr.io/open-webui/open-webui:ollama
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you don’t have a GPU, just omit the --gpus=all:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -d \
  -p 3000:8080 \
  --add-host=host.docker.internal:host-gateway \
  -v ollama:/root/.ollama \
  -v open-webui:/app/backend/data \
  --name open-webui \
  --restart=always \
  ghcr.io/open-webui/open-webui:ollama
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once it’s running, point your browser at:&lt;br&gt;
&lt;code&gt;http://localhost:3000/auth&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Log in (there’s a default admin user/password in the docs), and you’re off to the races! &lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;Effortless Setup: Docker, Docker Compose, Helm/Kustomize—pick your poison.&lt;/li&gt;
&lt;li&gt;Multi-Runner Support: Ollama + any OpenAI-compatible URL.&lt;/li&gt;
&lt;li&gt;Granular Permissions: Create user groups, roles, and fine-grained ACLs.&lt;/li&gt;
&lt;li&gt;Responsive Design: Desktop, tablet, mobile—all handled.&lt;/li&gt;
&lt;li&gt;Voice &amp;amp; Video Calls: Hands-free chat with built-in WebRTC support.&lt;/li&gt;
&lt;li&gt;Model Builder: Create, customize, and deploy new Ollama models via the UI.&lt;/li&gt;
&lt;li&gt;Plugin Framework: Extend with custom pipelines, filters, and memory modules. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  First Steps After Installation
&lt;/h2&gt;

&lt;p&gt;Connect Your Runner&lt;br&gt;
&lt;code&gt;Go to Settings → Model Runners and point to your Ollama socket (host.docker.internal:11434) or your OpenAI-compatible endpoint.&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Create a Workspace&lt;br&gt;
&lt;code&gt;Workspaces let you isolate data, users, and models per project or team.&lt;/code&gt;&lt;br&gt;
Chat &amp;amp; Explore&lt;br&gt;
&lt;code&gt;Hit New Chat, pick a model, and start experimenting with prompts, file uploads, or voice calls.&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Customization &amp;amp; Extensions
&lt;/h2&gt;

&lt;p&gt;Open WebUI’s power is in its extensibility:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom Pipelines: Write Python plugins to add status emitters, word filters, or long-term memory.&lt;/li&gt;
&lt;li&gt;Theming: Override the default Svelte styles with your own CSS or brand colors.&lt;/li&gt;
&lt;li&gt;Chrome Extension: Browse your workspace from any tab.&lt;/li&gt;
&lt;li&gt;Desktop App: Use the Electron-based client for a native-feel experience. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check out the &lt;a href="https://docs.openwebui.com" rel="noopener noreferrer"&gt;docs&lt;/a&gt; for guides on each of these—there’s even a community-maintained list of “extensions you must try.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Use Cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Internal AI Assistant
Host a Slack-integrated knowledge bot on your own servers—no third-party needed.&lt;/li&gt;
&lt;li&gt;Research &amp;amp; Development
Experiment with new LLMs in a controlled, offline environment.&lt;/li&gt;
&lt;li&gt;Customer Support
Ship a branded, self-hosted help-desk chatbot with RAG over your own docs.&lt;/li&gt;
&lt;li&gt;Education
Give students hands-on experience with AI without exposing them to external APIs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Caveats &amp;amp; Tips
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Resource Needs: Large models can be memory hungry. Make sure your host has enough RAM/VRAM.&lt;/li&gt;
&lt;li&gt;Security: If exposing to the internet, sit behind an authenticated reverse-proxy (e.g., Nginx with OAuth).&lt;/li&gt;
&lt;li&gt;Backups: Data lives in the open-webui volume—back it up regularly to avoid data loss.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;Open WebUI puts the power and flexibility of modern LLMs right in your hands—completely self-hosted, fully open source. Whether you’re running internal assistants, experimenting with new models, or building your own AI-driven products, it’s a fantastic starting point.&lt;/p&gt;

&lt;p&gt;Give it a spin, join the &lt;a href="https://discord.gg/open-webui" rel="noopener noreferrer"&gt;Discord community&lt;/a&gt;, and unlock the full potential of offline AI!&lt;br&gt;
Happy hacking! 🚀&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Gemini AI – A Complete AI Tutor That Watches Your Screen and Guides You in Real Time!</title>
      <dc:creator>Jigin Vp</dc:creator>
      <pubDate>Sat, 19 Apr 2025 19:59:18 +0000</pubDate>
      <link>https://dev.to/vpjigin/gemini-ai-a-complete-ai-tutor-that-watches-your-screen-and-guides-you-in-real-time-2n5d</link>
      <guid>https://dev.to/vpjigin/gemini-ai-a-complete-ai-tutor-that-watches-your-screen-and-guides-you-in-real-time-2n5d</guid>
      <description>&lt;p&gt;Hey folks 👋&lt;/p&gt;

&lt;p&gt;If you thought AI assistants were just for chatting or summarizing emails, Google’s Gemini AI is here to surprise you — in the best way possible. It’s not just smart. It’s not just fast. It’s a complete AI assistant — and yes, it can even record and understand your screen.&lt;/p&gt;

&lt;p&gt;Let’s dive into what makes Gemini one of the most futuristic and helpful tools in the AI space right now.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Screen-Aware Assistance – Yes, Really&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;One of Gemini’s most powerful and mind-blowing features is its ability to observe and understand what’s happening on your screen (with permission, of course).&lt;/p&gt;

&lt;p&gt;That means Gemini can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Guide you step-by-step while you’re using apps&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Identify problems as they occur on-screen&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Help you fill forms or troubleshoot workflows&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Suggest actions based on what you’re doing in real-time&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Imagine trying to configure a new tool or write a formula in Google Sheets — and Gemini just nudges you with exactly what you need.&lt;/p&gt;

&lt;p&gt;It’s like screen sharing with an AI that actually helps, instead of just watching.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Not Just a Chatbot – A Full AI Assistant&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Gemini is more than just a text box. It's deeply integrated with Google’s ecosystem, which means it can:&lt;/p&gt;

&lt;p&gt;Write code, answer complex queries&lt;/p&gt;

&lt;p&gt;Help plan your day, generate summaries&lt;/p&gt;

&lt;p&gt;Fetch data, organize tasks&lt;/p&gt;

&lt;p&gt;Connect with Google Workspace apps&lt;/p&gt;

&lt;p&gt;And with Gemini 1.5, it's faster, smarter, and even more context-aware.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Use Cases That Blow the Mind&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Here’s what you can actually do with Gemini AI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ask it to generate a response to a long email while it sees the thread&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open a form and let it guide you through filling it out&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Work on a document while Gemini offers editing tips live&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use it during development for code suggestions that match what you’re actively working on&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The possibilities keep growing as more integrations roll out.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;How to Get Started with Gemini AI&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Getting started with Gemini AI is super easy and free for most users:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Go to &lt;a href="https://aistudio.google.com/prompts/new_chat" rel="noopener noreferrer"&gt;Google ai studio&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sign in with your Google account&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You’ll be taken to AI Studio, where you can start chatting&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on "Stream real time"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From there, you can enable video conversation or screen sharing&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you share your screen, Gemini can now see what’s on it and help you in real-time — just like having a tutor sitting next to you.&lt;/p&gt;

&lt;p&gt;Advanced features like Gemini 1.5 Pro are available through Gemini Advanced, but the core experience is already incredibly powerful for free.&lt;/p&gt;

&lt;p&gt;That’s it! Start typing, exploring, and let Gemini become your AI teammate.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Privacy and Control&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Screen assistance requires permission, and Google has built in strong privacy protections. You stay in control — it only observes what you allow it to.&lt;/p&gt;

&lt;p&gt;And to make this even clearer: I personally asked Gemini some tough privacy questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;"Are you recording my screen?"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;"Are you saving this screen recording somewhere so you can train your AI?"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;"Do I need to hide any specific data so that you will not misuse it?"&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gemini’s answer was simple and consistent:&lt;/p&gt;

&lt;p&gt;"The screen recordings are done only to observe the content in order to give you a proper and useful reply. When this session is ended, no data is sent or saved anywhere."&lt;/p&gt;

&lt;p&gt;So yes — you’re in control, and your data stays private.&lt;/p&gt;




&lt;p&gt;AI assistants are no longer just for chat — they’re becoming co-pilots in real-time work environments. With Gemini AI’s screen-aware capabilities and Google-native integration, the future of intelligent assistance is already here.&lt;/p&gt;

&lt;p&gt;If you haven’t tried it yet — it might just change how you work, learn, and build.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Extra: A Great Video Walkthrough&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=e6c_uwQwV9A&amp;amp;t=632s" rel="noopener noreferrer"&gt;Youtube&lt;/a&gt;&lt;br&gt;
If you’re more of a visual learner or want to see Gemini AI in action, I highly recommend checking out this YouTube video:&lt;/p&gt;

&lt;h2&gt;
  
  
  ▶️ Gemini AI Demo – Real-Time Assistance &amp;amp; Screen SharingIt gives a hands-on view of how powerful Gemini’s screen-aware features are and how it works like a real-time tutor.
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Signing off,&lt;/strong&gt;&lt;br&gt;
Jigin – Always watching new tools that watch and help you back.&lt;/p&gt;

</description>
      <category>geminiai</category>
      <category>aitutor</category>
      <category>googleai</category>
      <category>smartassistant</category>
    </item>
    <item>
      <title>Claude AI – The Superhero All-Rounder for Your Entire Tech Team</title>
      <dc:creator>Jigin Vp</dc:creator>
      <pubDate>Fri, 04 Apr 2025 05:18:15 +0000</pubDate>
      <link>https://dev.to/vpjigin/claude-ai-the-superhero-all-rounder-for-your-entire-tech-team-5840</link>
      <guid>https://dev.to/vpjigin/claude-ai-the-superhero-all-rounder-for-your-entire-tech-team-5840</guid>
      <description>&lt;p&gt;Hey devs 👋&lt;/p&gt;

&lt;p&gt;Many of us have heard about Claude AI – Anthropic’s smart, safe, instruction-following AI assistant. But did you know it’s not just a chatbot anymore?&lt;/p&gt;

&lt;p&gt;That’s right. Claude AI now comes with a developer tool called Claude Code, and it’s a complete game-changer.&lt;/p&gt;

&lt;p&gt;Let me introduce you to the Copilot-style Claude AI you didn’t know you needed.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Claude AI – More Than Just a Chatbot&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Claude AI has evolved from just answering your questions on a web interface. With its new Claude Code package that you can install it on your machine, connect it to your project, and let it assist you like a true coding sidekick.&lt;/p&gt;

&lt;h2&gt;
  
  
  Once connected to your project, Claude can:
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Scan your entire codebase
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Understand your framework, architecture, and structure
&lt;/h2&gt;

&lt;p&gt;Answer context-aware questions based on your project&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What Can Claude Code Do?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Let’s say you’re developing a Spring Boot application — here’s how Claude shines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Detects security vulnerabilities in your project&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimizes long and complex functions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Suggests query optimizations for APIs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Recommends improvements for code quality&lt;/p&gt;&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%2Fockmn7xhxdy3wn8k3mh7.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%2Fockmn7xhxdy3wn8k3mh7.png" alt=" " width="800" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;But that’s not all — you can even ask Claude questions like:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;"How many developers worked on this project?"&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;"Which developer made the most commits?"&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;"Based on commits, rate a developer out of 10."&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Claude will run Git commands under the hood and give you these insights directly from the terminal UI. 🤯&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;System Requirements &amp;amp; Setup Guide&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;OS: macOS 10.15+, Ubuntu 20.04+/Debian 10+, or Windows via WSL&lt;/p&gt;

&lt;p&gt;RAM: Minimum 4GB&lt;/p&gt;

&lt;p&gt;Software Dependencies:&lt;/p&gt;

&lt;p&gt;Node.js 18+&lt;/p&gt;

&lt;p&gt;git 2.23+ (optional)&lt;/p&gt;

&lt;p&gt;GitHub/GitLab CLI (for PR workflows - optional)&lt;/p&gt;

&lt;p&gt;ripgrep (rg) for better file search (optional)&lt;/p&gt;

&lt;p&gt;Internet: Required for authentication and AI processing&lt;/p&gt;

&lt;p&gt;Region: Only available in supported countries → &lt;a href="https://www.anthropic.com/supported-countries" rel="noopener noreferrer"&gt;List here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;How to Set It Up&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Install Node.js 18+, then run:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g @anthropic-ai/claude-code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Navigate to Your Project
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd your-project-directory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Launch Claude Code
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Authenticate
Follow the OAuth flow using your &lt;a href="https://console.anthropic.com/" rel="noopener noreferrer"&gt;Anthropic Console account&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Active billing is required&lt;/p&gt;

&lt;p&gt;That’s it. Once authenticated, Claude is ready to assist you — directly inside your local project. &lt;/p&gt;




&lt;p&gt;Claude Code is one of the most exciting developments in AI-assisted coding. It’s smart, it’s fast, and it doesn’t just suggest code — it understands your code.&lt;/p&gt;

&lt;p&gt;Whether you’re building something solo or managing a large project, Claude can:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Save you time&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Boost your code quality&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Make project insights fun and effortless&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Give it a spin — it might just become your new favorite dev tool.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Signing off,&lt;/strong&gt;Jigin – Always exploring the next superhero in my dev toolkit.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>developer</category>
      <category>programming</category>
      <category>technology</category>
    </item>
    <item>
      <title>From Burnout to Balance – What I’m Changing as a Developer</title>
      <dc:creator>Jigin Vp</dc:creator>
      <pubDate>Thu, 03 Apr 2025 05:21:09 +0000</pubDate>
      <link>https://dev.to/vpjigin/from-burnout-to-balance-what-im-changing-as-a-developer-3oja</link>
      <guid>https://dev.to/vpjigin/from-burnout-to-balance-what-im-changing-as-a-developer-3oja</guid>
      <description>&lt;p&gt;Hey again, devs 👋&lt;/p&gt;

&lt;p&gt;After sharing a couple of posts, I felt like it was time to talk about something different — about taking a step back from coding in order to move forward. A lot of us go through the same cycle: burning out, feeling stuck, coding non-stop, and forgetting to just live.&lt;/p&gt;

&lt;p&gt;Today, I want to talk about something a bit deeper: balance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;## The Grind is Real&lt;/strong&gt;&lt;br&gt;
Let’s be honest — being a developer can easily take over your whole life.&lt;br&gt;
Deadlines. Bugs. Feature requests. Refactors. Debugging bugs that only happen when Mercury is in retrograde. 😅&lt;/p&gt;

&lt;p&gt;And sometimes, the love we have for what we do makes it even harder to step back.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What I’m Changing&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This isn’t just a post to vent — I want to be intentional with the way I grow. So here’s what I’m actually starting to do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;No more working past midnight (unless I’m in flow and loving it — not just grinding).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;1 hour daily for non-tech stuff — walks, reading, music, just something not involving code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Weekend = personal time, not “catch up on all side projects and burnout again” time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Talk to people more — devs, friends, even strangers. Real conversations. Not just Stack Overflow threads.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What You Can Ask Yourself&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you’re in the same boat, try asking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;When was the last time I logged off and felt fully done for the day?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What’s one hobby I’ve been ignoring?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Am I coding because I want to — or because I feel I have to?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;TL;DR&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I’m not quitting dev life. I love it too much.&lt;br&gt;
But I’m done letting it be the only thing I do.&lt;/p&gt;

&lt;p&gt;So if you’ve been feeling stuck, burned out, or just… robotic, maybe take a step back and ask yourself:&lt;br&gt;
“What does balance look like for me?”&lt;/p&gt;

&lt;p&gt;Let’s all try to find our version of that — together.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Signing off again,&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Jigin – Human first, developer second (trying, at least 😄)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Kotlin multiplatform - What it differ from other cross platforms</title>
      <dc:creator>Jigin Vp</dc:creator>
      <pubDate>Wed, 02 Apr 2025 07:26:56 +0000</pubDate>
      <link>https://dev.to/vpjigin/kotlin-multiplatform-what-it-differ-from-other-cross-platforms-ee1</link>
      <guid>https://dev.to/vpjigin/kotlin-multiplatform-what-it-differ-from-other-cross-platforms-ee1</guid>
      <description>&lt;p&gt;Hey everyone,&lt;/p&gt;

&lt;p&gt;We are known of so many cross-platform frameworks in recent years that includes flutter, react-native, ionic, xamirin and goes on. All are promissing one thing, build once run anywhere.&lt;br&gt;
Today we can get a look at the new player in the same segment - Kotlin Multiplatform and how it differ from others.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Shared logic and not UI&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Kotlin Multiplatform(KMM) shared the business logic. The api calls, catching, algorithms or anything which is common to iOS and Andorid will be written in shared logic.&lt;br&gt;
These shared logic is public for iOS and Android platform.&lt;/p&gt;

&lt;p&gt;UI developement is seperate for iOS and Android, ie. iOS UI will be developed using swift UI and Android will be developed in Jcompose. Which gives us platform dependent UI experience for both the users which is a great plus.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Keep the native codebase&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Unlike frameworks that abstract everything away (like Flutter’s rendering engine or RN’s JavaScript bridge), KMP works with your existing native projects.&lt;/p&gt;

&lt;p&gt;You can gradually migrate or share code without rewriting everything. This makes KMP a great fit for teams maintaining mature Android and iOS apps who want to reduce code duplication without a full rewrite.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Written in Kotlin, a known language for Android&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you’re already an Android developer using Kotlin, you’ll love KMP. No learning Dart, JavaScript, or C#.&lt;/p&gt;

&lt;p&gt;Also,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The shared modules are pure Kotlin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can use Kotli&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;n libraries (like Ktor, Coroutines, Serialization) across platforms.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;KMM is not for mobile alone&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;KMP is truly multiplatform:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Android (JVM)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;iOS (Native)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Backend (JVM)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Web (via Kotlin/JS)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Desktop (Compose Multiplatform)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Even WebAssembly (experimental)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So if you’re building shared SDKs, libraries, or full-stack apps, Kotlin Multiplatform offers some powerful potential.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;&lt;u&gt;But It’s Not All Roses&lt;/u&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Like any tech, KMP has its challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;iOS setup can be tricky at first (especially with cocoapods + Xcode integration).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Smaller ecosystem compared to Flutter or React Native.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI has to be written separately — more work if you’re aiming for a quick prototype.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But for apps where performance, maintainability, and code reuse matter, KMP really shines.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;So… Who Should Use It?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;✅ Use KMP if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You already use Kotlin and want to reuse business logic across platforms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You want to avoid bloated frameworks or rendering engines.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You prefer native UI and platform-specific behavior.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You’re building SDKs or libraries that need to work everywhere.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;❌ Avoid it if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You want one codebase for everything, including UI.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your team has zero Kotlin experience.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You need very rapid UI prototyping across platforms.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Kotlin Multiplatform isn’t trying to be a Flutter or React Native replacement. It’s giving developers more control, better integration, and smarter code sharing.&lt;/p&gt;

&lt;p&gt;For teams that want to maintain platform-specific UI while still avoiding code duplication in logic, KMP is a powerful and flexible alternative.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Signing off,&lt;/strong&gt;&lt;br&gt;
Jigin – Exploring cross-platform, one shared module at a time.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Meet Gemma: Google’s Lightweight Open-Source AI Model for Devs</title>
      <dc:creator>Jigin Vp</dc:creator>
      <pubDate>Wed, 02 Apr 2025 06:01:33 +0000</pubDate>
      <link>https://dev.to/vpjigin/meet-gemma-googles-lightweight-open-source-ai-model-for-devs-20ic</link>
      <guid>https://dev.to/vpjigin/meet-gemma-googles-lightweight-open-source-ai-model-for-devs-20ic</guid>
      <description>&lt;p&gt;Hey devs 👋&lt;/p&gt;

&lt;p&gt;There’s a lot happening in the AI space, and one name that recently caught my attention is Gemma — Google’s open-source family of lightweight, state-of-the-art generative AI models.&lt;br&gt;
As someone who’s been experimenting with AI tools lately (mostly ChatGPT, some Hugging Face models), I wanted to try out what Google brought to the table — and I wasn’t disappointed.&lt;/p&gt;

&lt;p&gt;So here’s a quick breakdown of what Gemma is, why it matters, how it compares to other models like Gemini, and how developers like us can get started.&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;A Quick Recap of Gemma's Success:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Before diving into Gemma let us take a look back and find what's the pressessor was capable of,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Open Source &amp;amp; Accessible:&lt;/strong&gt; This was a key point. Making the model weights freely available to researchers, developers, and hobbyists to experiment, adapt, and contribute to the Gemma ecosystem.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Competitive Performance:&lt;/strong&gt; Gemma had a strong performance across various benchmarks, often rivaling larger models in market and closed-source models in specific tasks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Variety of Sizes:&lt;/strong&gt; Gemma came in different sizes (e.g., 2B, 7B) allowing users to choose the right balance between performance and computational cost.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pre-trained and Instruction-tuned Versions:&lt;/strong&gt; Google provided both pre-trained models and instruction-tuned versions, catering to different use cases. The instruction-tuned models, often named with it were ready for conversational applications right out of the box.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Responsible AI Focus:&lt;/strong&gt; Google emphasized responsible AI development, incorporating safeguards and transparency around the model's capabilities and limitations.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;Gemma Variants:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;There are two main sizes of the Gemma model family:&lt;/p&gt;

&lt;p&gt;Gemma 2B - This has 2 billion parameters. It's available in both pretrained and instruction-tuned formats. Ideal for lightweight use cases and local development.&lt;/p&gt;

&lt;p&gt;Gemma 7B - With 7 billion parameters, this version offers more power while still being fairly lightweight.&lt;/p&gt;

&lt;p&gt;Both versions also come in instruction-tuned variants:&lt;/p&gt;

&lt;p&gt;Gemma 2B-it - Fine-tuned for tasks like chatbots and QA.&lt;/p&gt;

&lt;p&gt;Gemma 7B-it - Fine-tuned for more complex reasoning tasks.&lt;/p&gt;

&lt;p&gt;You can access Gemma models via Hugging Face, Kaggle, Google Cloud Vertex AI, or Colab.&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;Gemini or Gemma&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A very and short comparison:&lt;/p&gt;

&lt;p&gt;Gemma is open-source and optimized for local or lightweight applications. Great for developers, hobbyists, and researchers.&lt;/p&gt;

&lt;p&gt;Gemini is Google's proprietary model suite (formerly Bard). It's more powerful, designed for enterprise-grade performance, and includes tools like Gemini Advanced, Gemini Nano (for Android), and Gemini Ultra.&lt;/p&gt;

&lt;p&gt;In short:&lt;/p&gt;

&lt;p&gt;If you want full control and custom experiments: Use Gemma.&lt;/p&gt;

&lt;p&gt;If you want enterprise-level performance with built-in tools: Use Gemini.&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;How to use?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;You can run Gemma on:&lt;/p&gt;

&lt;p&gt;Your local machine (with good enough RAM/GPU)&lt;/p&gt;

&lt;p&gt;Google Colab (free-tier is enough to get started)&lt;/p&gt;

&lt;p&gt;Hugging Face Spaces or directly via transformers&lt;/p&gt;

&lt;p&gt;A simple example from python&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from transformers import AutoModelForCausalLM, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("google/gemma-2b")
model = AutoModelForCausalLM.from_pretrained("google/gemma-2b")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;While ChatGPT and Gemini 1.5 are powerful and ready to use, open source models like Gemma are where dev creativity thrives. You can tune it, host it, embed it, and even build something weird (but awesome).&lt;/p&gt;

&lt;p&gt;If you're a developer curious about building with AI without relying fully on APIs, give Gemma a shot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Signing off&lt;/strong&gt;,Jigin – &lt;em&gt;Always exploring, whether it’s code, coffee, or open AI models.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Getting Started with Generative AI – A Developer’s Perspective</title>
      <dc:creator>Jigin Vp</dc:creator>
      <pubDate>Sun, 30 Mar 2025 14:00:43 +0000</pubDate>
      <link>https://dev.to/vpjigin/getting-started-with-generative-ai-a-developers-perspective-5d9a</link>
      <guid>https://dev.to/vpjigin/getting-started-with-generative-ai-a-developers-perspective-5d9a</guid>
      <description>&lt;p&gt;Hey devs 👋&lt;/p&gt;

&lt;p&gt;If you’ve been anywhere near the tech world recently, you’ve probably heard the buzzword: Generative AI. From creating images, code, music, to even creating a whole video for you, generative AI is making some serious noise here now.&lt;/p&gt;

&lt;p&gt;So I thought… why not write a post about it? Not as an expert, but as a developer who’s just beginning to explore this fascinating space — and maybe help others take their first step too.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;What is Generative AI, really?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Generative AI is a branch of AI that focuses on creating unique contents. Unlike traditional AI that’s trained to classify or predict (e.g., “is this image a cat or a dog?”), generative AI is trained to produce entirely new content — like generating an image of a cat that doesn’t even exist yet or to create a story of a bird and elephant that no one even heard of.&lt;/p&gt;

&lt;p&gt;Some cool tools you can start with can be,&lt;br&gt;
&lt;strong&gt;ChatGPT&lt;/strong&gt; – for generating natural language responses&lt;br&gt;
&lt;strong&gt;DALL·E / Midjourney&lt;/strong&gt; – for AI-generated images&lt;br&gt;
&lt;strong&gt;GitHub Copilot&lt;/strong&gt; – for code suggestions&lt;br&gt;
&lt;strong&gt;MusicLM / Suno AI&lt;/strong&gt; – for AI-generated music&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;How Does It Work?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Without going too deep into the math(seriously i also doubt i know much): most of these models are based on deep learning techniques — specifically, models like transformers, diffusion models, and GANs (Generative Adversarial Networks).&lt;/p&gt;

&lt;p&gt;They’re trained on massive datasets (text, code, images) and learn to mimic the patterns, styles, and logic to generate something new and (hopefully) useful.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Why Should Developers Care?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In this AI era, developers should leverage the power of AI in their daily lifes, because it’s not just for fun. Developers can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Build apps faster with AI-powered code assistance&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prototype faster with AI-generated assets (text, images, etc.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add value to apps with AI-powered features (e.g., chatbots, smart content)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create tools using open models like OpenAI, Hugging Face, or Google’s Gemma&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Want to Try It Out?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you’re curious:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://platform.openai.com" rel="noopener noreferrer"&gt;https://platform.openai.com&lt;/a&gt; – Try the APIs directly&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://huggingface.co" rel="noopener noreferrer"&gt;https://huggingface.co&lt;/a&gt; – Explore tons of open models&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://replicate.com" rel="noopener noreferrer"&gt;https://replicate.com&lt;/a&gt; – Run AI models in your own apps with zero setup&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;Generative AI isn’t just hype — it’s a toolbox. The more you learn to use it, the more possibilities open up. You don’t need to be an ML expert to get started — just curiosity and a few lines of code.&lt;/p&gt;

&lt;p&gt;If you’re already experimenting with it, I’d love to hear what you’re building! And if not — maybe this is your sign to start.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Signing off,&lt;/strong&gt;&lt;br&gt;
Jigin – Just a dev trying to train my brain while the AIs train themselves.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Unlocking Biometric Authentication in Android – A Developer’s Guide (with Tips)</title>
      <dc:creator>Jigin Vp</dc:creator>
      <pubDate>Sat, 29 Mar 2025 11:09:29 +0000</pubDate>
      <link>https://dev.to/vpjigin/unlocking-biometric-authentication-in-android-a-developers-guide-with-tips-3mgc</link>
      <guid>https://dev.to/vpjigin/unlocking-biometric-authentication-in-android-a-developers-guide-with-tips-3mgc</guid>
      <description>&lt;p&gt;Hey devs 👋&lt;/p&gt;

&lt;p&gt;I’m Jigin, and I’ve been building Android apps for a while now — from traditional login flows to full-blown business management tools. Lately, I’ve been diving into biometric authentication, and I thought I’d share a quick guide, some tips, and a few hard-learned lessons that might help fellow devs out there.&lt;/p&gt;

&lt;p&gt;Whether you’re looking to tighten security or give your users that sweet “just tap and go” experience, this one’s for you.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;🔐 Why Biometric Authentication?&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Security: Passwords can be forgotten. Biometrics are you.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Convenience: One tap &amp;gt; typing passwords.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Trust: Modern apps with native biometric support feel polished and reliable.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;What I Used&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Language: Kotlin&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tools: BiometricPrompt API&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Min SDK: 23 (but actual support starts from Android 6.0+)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Basic Implementation Steps&lt;/strong&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;val executor = ContextCompat.getMainExecutor(this)
val biometricPrompt = BiometricPrompt(this, executor,
    object : BiometricPrompt.AuthenticationCallback() {
        override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
            super.onAuthenticationSucceeded(result)
            // Navigate or unlock secured features
        }

        override fun onAuthenticationFailed() {
            super.onAuthenticationFailed()
            // Handle failure
        }
    })

val promptInfo = BiometricPrompt.PromptInfo.Builder()
    .setTitle("Biometric Login")
    .setSubtitle("Log in using your fingerprint")
    .setNegativeButtonText("Cancel")
    .build()

biometricPrompt.authenticate(promptInfo)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;⚠️ Gotchas I Faced&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Emulator doesn’t help – Test on real devices!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fallback login – Always have PIN/password fallback for devices without biometrics.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Handle all cases – Locked biometrics, no enrolled fingerprint, hardware not available, etc.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;💡 Pro Tips&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use BiometricManager to check device capabilities before launching the prompt.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use encrypted SharedPreferences if you’re storing auth flags.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Keep UX smooth — if biometric fails, don’t force the user through a maze.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Real-World Use Case&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I recently integrated this in an internal business management app, where biometric unlock helped speed up logins for admins accessing sensitive financial data. It improved both user satisfaction and compliance.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;🗣️ Final Thoughts&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Biometric auth isn’t just “cool tech” anymore — it’s becoming a user expectation. With just a few lines of code and good fallback handling, you can add it to your Android app and instantly make it feel more modern and secure.&lt;/p&gt;

&lt;p&gt;Let me know if you’d like a version of this for Kotlin Multiplatform or paired with a Spring Boot backend — that’s something I’ve been playing with too. 😄&lt;/p&gt;




&lt;p&gt;Signing off,&lt;br&gt;
Jigin – Trying to keep things secure and smooth, one tap at a time.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>A Hard Refresh - Taking a Break (Sort of) – My First Step Toward Change</title>
      <dc:creator>Jigin Vp</dc:creator>
      <pubDate>Fri, 28 Mar 2025 18:07:09 +0000</pubDate>
      <link>https://dev.to/vpjigin/a-hard-refresh-taking-a-break-sort-of-my-first-step-toward-change-588p</link>
      <guid>https://dev.to/vpjigin/a-hard-refresh-taking-a-break-sort-of-my-first-step-toward-change-588p</guid>
      <description>&lt;p&gt;Hey there! 👋&lt;/p&gt;

&lt;p&gt;This is my very first blog post on dev.to, and honestly, it feels both exciting and a little nerve-wracking to put my thoughts out here. But that’s exactly why I’m doing this — to step out of my comfort zone and start something different.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;A Quick Intro 👨‍💻&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I’m Jigin, a developer who’s been deep in the code trenches for the past couple of years — mostly Android and backend stuff. I love solving problems, debugging tricky issues, and getting that sweet satisfaction of “Yes! It finally works!” (We’ve all been there, right? 😅)&lt;/p&gt;

&lt;p&gt;But somewhere along the way, I realized something:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I’ve been living with technology, but not really living outside of it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Routine&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Wake up → laptop → code → eat → code → sleep → repeat.&lt;br&gt;
That’s been my loop for a long time. I wasn’t exploring, meeting new people, or growing outside of code. It hit me that I was becoming more of a machine than the ones I work with.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why I’m Here&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;So here I am — on dev.to — hoping to connect with like-minded developers, share what I know, learn from all of you, and just… grow. Not just as a dev, but as a person too.&lt;/p&gt;

&lt;p&gt;This post is me saying “I’m hitting refresh.”&lt;br&gt;
Not on my browser. On myself.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What’s Next?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I’ll be sharing things I learn, stuff I break (and fix), random dev thoughts, and maybe even some personal growth updates. If any of that sounds interesting, feel free to follow along. Or drop a comment — I’d love to say hi!&lt;/p&gt;

&lt;p&gt;Thanks for reading, and here’s to new beginnings! 🚀&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Signing off ---&lt;/strong&gt; &lt;em&gt;Jigin&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
