<?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: Darshan Chaudhari</title>
    <description>The latest articles on DEV Community by Darshan Chaudhari (@darshan_chaudhari_b648659).</description>
    <link>https://dev.to/darshan_chaudhari_b648659</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%2F3957886%2F195c2489-bd59-4013-8d9f-b47d2de13012.jpg</url>
      <title>DEV Community: Darshan Chaudhari</title>
      <link>https://dev.to/darshan_chaudhari_b648659</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/darshan_chaudhari_b648659"/>
    <language>en</language>
    <item>
      <title>NOVA: From 2.5 Months of Struggle to India's First Java-Powered Cross-Device Personal Assistant</title>
      <dc:creator>Darshan Chaudhari</dc:creator>
      <pubDate>Fri, 29 May 2026 16:49:50 +0000</pubDate>
      <link>https://dev.to/darshan_chaudhari_b648659/nova-from-25-months-of-struggle-to-indias-first-java-powered-cross-device-personal-assistant-4c25</link>
      <guid>https://dev.to/darshan_chaudhari_b648659/nova-from-25-months-of-struggle-to-indias-first-java-powered-cross-device-personal-assistant-4c25</guid>
      <description>&lt;p&gt;Live demo =   &lt;a href="https://youtu.be/lxXItugFHJY" rel="noopener noreferrer"&gt;https://youtu.be/lxXItugFHJY&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Project I Abandoned — Month 1&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;2.5 months ago I had a crazy idea.&lt;/p&gt;

&lt;p&gt;What if my laptop assistant could also control my phone? What if I could say "open camera" and my laptop camera opens, say "open WhatsApp" and my phone opens WhatsApp?&lt;/p&gt;

&lt;p&gt;I searched everywhere. No one had done this in Java. Python mein hai, JS mein hai, but Java? Zero.&lt;/p&gt;

&lt;p&gt;So I decided to build it.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;The Original Broken Code (Month 1 - Before Exams)&lt;/strong&gt;
&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%2Fhk1ldj4eq9odxr0q42z7.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%2Fhk1ldj4eq9odxr0q42z7.png" alt=" " width="511" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My commit message after Month 1:&lt;br&gt;
"exams aa gaye, project on hold - mobile connection totally failed, laptop commands half working. will come back... maybe"&lt;/p&gt;

&lt;p&gt;And then I didn't touch it for 1.5 months.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why I Finally Came Back&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;College exams ended. I saw the GitHub Finish-Up-A-Thon challenge and thought — this is it. This is the push I needed.&lt;/p&gt;

&lt;p&gt;But this time I had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ChatGPT for architecture decisions&lt;/li&gt;
&lt;li&gt;GitHub Copilot for writing the actual Java code I was stuck on&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  **What I Built — The After
&lt;/h2&gt;

&lt;p&gt;NOVA: Complete Cross-Device Personal Assistant**&lt;br&gt;
Laptop Controls (100% Working):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Command   Action&lt;/strong&gt;&lt;br&gt;
"Open camera"   Laptop webcam starts&lt;br&gt;
"Open browser"  Default browser launches&lt;br&gt;
"Open VS Code"  VS Code opens instantly&lt;br&gt;
"Create resume" Auto-generates professional resume from user data&lt;br&gt;
"System info"   Shows RAM, CPU, battery status&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mobile Controls (The Impossible Part):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Command Action&lt;br&gt;
"Open WhatsApp" WhatsApp opens on connected mobile&lt;br&gt;
"Open gallery"  Mobile gallery opens&lt;br&gt;
"Open settings" Phone settings open&lt;br&gt;
"Take photo"    Remote camera trigger&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resume Generator:&lt;/strong&gt;&lt;br&gt;
User provides: Name, skills, experience, education&lt;br&gt;
↓&lt;br&gt;
NOVA generates: Professional PDF resume instantly&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  The Technical Problems I Almost Gave Up On
&lt;/h2&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem 1:&lt;/strong&gt; Mobile IP Connection (Month 1 Hell)&lt;br&gt;
For 3 weeks straight, my laptop couldn't find my phone on the network.&lt;/p&gt;

&lt;p&gt;What Copilot fixed for me:&lt;br&gt;
I asked Copilot: "How to discover Android device on local network from Java without hardcoding IP?"&lt;/p&gt;

&lt;p&gt;It gave me the complete network discovery code using NetworkInterface and socket scanning that I had no idea existed in Java.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem 2:&lt;/strong&gt; API Handling Chaos&lt;br&gt;
My ChatGPT integration kept failing. Timeouts, rate limits, JSON parsing errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Copilot fixed:&lt;/strong&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%2F710vhqbjcl2zxap97qkl.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%2F710vhqbjcl2zxap97qkl.png" alt=" " width="690" height="178"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem 3:&lt;/strong&gt; Mobile Communication Protocol&lt;br&gt;
No documentation existed for Java-to-Android socket communication. I was lost.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Copilot fixed:&lt;/strong&gt;&lt;br&gt;
I described the problem in plain English. Copilot wrote the entire TCP socket server for Android and the client for desktop Java. It just worked on first try.&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  How GitHub Copilot Made This Possible
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
&lt;strong&gt;Moment 1:&lt;/strong&gt; Network Discovery (3 weeks → 20 minutes)&lt;br&gt;
I typed: "Write Java code to find all Android devices on my WiFi network by scanning ports 5555 to 5560"&lt;/p&gt;

&lt;p&gt;Copilot wrote the complete multi-threaded scanner. I didn't even know Java could do that.&lt;/p&gt;

&lt;p&gt;**Moment 2: **Resume PDF Generation&lt;br&gt;
I had never generated PDFs in Java. Copilot wrote the iText implementation with proper formatting, fonts, and layout. Added error handling I wouldn't have thought of.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Moment 3:&lt;/strong&gt; Voice Command Parsing&lt;br&gt;
My NLP was terrible. Copilot suggested using regex patterns with confidence scoring. It showed me how to handle "open camera" vs "open the camera" vs "camera open" — all mapping to the same function.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Moment 4:&lt;/strong&gt; Mobile Socket Keep-Alive&lt;br&gt;
The mobile connection kept dropping every 30 seconds. Copilot suggested heartbeat messages and reconnection logic with exponential backoff. I didn't even know what "heartbeat" meant in networking.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;## Technical Architecture&lt;br&gt;
*&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%2F418mgo8fe80yjzddih36.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%2F418mgo8fe80yjzddih36.png" alt=" " width="655" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tech Stack:&lt;/p&gt;

&lt;p&gt;Layer               Technology&lt;br&gt;
Language        Java 17&lt;br&gt;
UI Framework        JavaFX&lt;br&gt;
AI Assistance       ChatGPT (architecture) + GitHub Copilot (code)&lt;br&gt;
Mobile Connection   TCP/IP Sockets&lt;br&gt;
PDF Generation      iText / Apache PDFBox&lt;br&gt;
Network Discovery   Java Network Interface&lt;br&gt;
Input Method        Text commands + Optional voice-to-text&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  The Before vs After Summary
&lt;/h2&gt;

&lt;p&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%2F30vyltl0g907r2630li3.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%2F30vyltl0g907r2630li3.png" alt=" " width="800" height="527"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

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

&lt;p&gt;**&lt;br&gt;
&lt;strong&gt;1. Java is more powerful than people think&lt;/strong&gt;&lt;br&gt;
Everyone said "use Python" for automation. But Java's Runtime.exec(), Robot class, and network libraries are just as capable. I proved it works.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. GitHub Copilot is a Java expert (I didn't know)&lt;/strong&gt;&lt;br&gt;
I thought Copilot was for JavaScript/Python. But it wrote multithreading, socket programming, and PDF generation in Java flawlessly. It knew Java APIs I had never heard of.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Old abandoned projects are gold mines&lt;/strong&gt;&lt;br&gt;
That broken code from Month 1? It had the right architecture. I just didn't have the skills to complete it. Copilot filled every gap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Cross-device in Java IS possible&lt;/strong&gt;&lt;br&gt;
No StackOverflow answer said this was possible. No YouTube tutorial showed it. But I built it. Sometimes you have to build what doesn't exist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. 2.5 months is worth it&lt;/strong&gt;&lt;br&gt;
Month 1: Algorithms + APIs (stopped due to exams)&lt;br&gt;
Month 2: Implementation + mobile integration&lt;br&gt;
Month 3: Testing + fixing + finishing&lt;/p&gt;

&lt;p&gt;Every single problem I faced taught me something new.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Makes NOVA Unique?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Feature&lt;/strong&gt;  &lt;strong&gt;Other Assistants&lt;/strong&gt;           &lt;strong&gt;NOVA&lt;/strong&gt;&lt;br&gt;
Language       Python/JS                      JAVA (first of its kind)&lt;br&gt;
Laptop Control     Yes                            Yes&lt;br&gt;
Mobile Control     Requires separate app      Direct via network&lt;br&gt;
Resume Generation  No                             Auto-create PDF&lt;br&gt;
Open Source    Rare                           Coming soon&lt;/p&gt;

&lt;p&gt;No one has built a cross-device personal assistant in Java before. NOVA is the first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How Mobile Commands Work&lt;/strong&gt;&lt;br&gt;
The underscore (_) is the magic character that tells NOVA:&lt;/p&gt;

&lt;p&gt;"This command is NOT for laptop. Send it to the connected mobile device."&lt;br&gt;
Example = open_camera.&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  They said Java can't do cross-device automation. They said build what already exists. I said watch me. 2.5 months later, NOVA is here — and it's just getting started.
&lt;/h2&gt;

&lt;p&gt;**&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>api</category>
      <category>android</category>
    </item>
  </channel>
</rss>
