<?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: JohnX4321</title>
    <description>The latest articles on DEV Community by JohnX4321 (@johnx4321).</description>
    <link>https://dev.to/johnx4321</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1071919%2F895fa95a-0154-47d1-bc3e-4f52a6a59489.jpeg</url>
      <title>DEV Community: JohnX4321</title>
      <link>https://dev.to/johnx4321</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/johnx4321"/>
    <language>en</language>
    <item>
      <title>MLH Hack At Home 2020: Hearth</title>
      <dc:creator>JohnX4321</dc:creator>
      <pubDate>Tue, 29 Sep 2026 00:09:41 +0000</pubDate>
      <link>https://dev.to/johnx4321/mlh-hack-at-home-2020-hearth-64f</link>
      <guid>https://dev.to/johnx4321/mlh-hack-at-home-2020-hearth-64f</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/mlh-hackathon"&gt;MLH x DEV Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Hearth&lt;/strong&gt; is a voice-controlled smart home agent built for the moment we were all in: stuck at home, working from the same room we slept in, and slowly losing track of what day it was.&lt;/p&gt;

&lt;p&gt;The theme for Hack at Home was "help folks stay happy at home." In May 2020, the problem in my apartment wasn't a lack of smart devices. It was that home had turned into office, gym, classroom, and bedroom at once, with nothing separating them. So Hearth does three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Voice control that knows &lt;em&gt;your&lt;/em&gt; devices.&lt;/strong&gt; "Turn off the desk lamp" works because Hearth syncs the real device names from Home Assistant into its language model, instead of relying on generic "light" commands.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modes for a life that happens in one room.&lt;/strong&gt; "Work mode" brightens the desk light, sets the room to 71°F, and turns on an "on a call" LED outside the door. "Done for the day" shuts the work lights off, switches to warm lighting, and reminds you to step outside.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pattern suggestions from sensor history.&lt;/strong&gt; A small Python job looks at a week of Home Assistant state history and suggests automations you keep doing by hand, like &lt;em&gt;"You turn on the kitchen light around 7:40 AM every weekday. Want me to do that for you?"&lt;/em&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Wake word:&lt;/strong&gt; Picovoice Porcupine runs on a Raspberry Pi 4 with a USB mic. It's fully offline, and nothing is sent to the cloud until the wake word fires.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speech-to-text:&lt;/strong&gt; Google Cloud Speech-to-Text (streaming) transcribes the command after the wake word.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intent understanding:&lt;/strong&gt; Dialogflow ES maps the transcript to intents like &lt;code&gt;device.set&lt;/code&gt;, &lt;code&gt;mode.activate&lt;/code&gt;, and &lt;code&gt;history.ask&lt;/code&gt;. Device names come from a &lt;strong&gt;custom entity type that we sync from Home Assistant's entity registry&lt;/strong&gt; through the Dialogflow API. When a light is renamed in HA, Hearth picks up the new name within a minute.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fulfillment:&lt;/strong&gt; A Python Flask webhook on Google Cloud Run turns intents into Home Assistant REST API calls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety:&lt;/strong&gt; Locks and the garage never actuate from voice alone. The webhook sends a Firebase Cloud Messaging push to the Android app, and nothing happens until someone taps Approve.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pattern mining:&lt;/strong&gt; A nightly job pulls history from Home Assistant's recorder, buckets it into 15-minute windows with pandas, and finds repeated manual actions. It also runs scikit-learn's Isolation Forest to flag oddities, like the garage being open at 2 AM.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Android app:&lt;/strong&gt; Kotlin, XML layouts, ViewModel + LiveData, and coroutines for the network calls. It has three screens: devices, pending approvals, and suggested automations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Domain:&lt;/strong&gt; The dashboard lives at &lt;strong&gt;[hearth-home].tech&lt;/strong&gt;, registered through Domain.com during the weekend.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What I learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Generic intents break on real houses.&lt;/strong&gt; Our first Dialogflow agent used the built-in "device" concepts and had no idea what "the Ikea lamp" was. Syncing Home Assistant's real friendly names into a custom entity type, with synonyms, was the single biggest accuracy improvement of the weekend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan for your dependencies disappearing.&lt;/strong&gt; We originally wanted Snips for fully on-device voice, until we found out Sonos had shut down the Snips console after acquiring it. Porcupine for the wake word plus cloud STT was the realistic fallback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety has to live in the code.&lt;/strong&gt; "Always confirm locks" as a design rule is only real if the webhook physically can't call the lock service without an approval token. That took 30 minutes to build and we never worried about it again.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency is the whole experience.&lt;/strong&gt; Wake word → cloud STT → Dialogflow → webhook → Home Assistant came in around 2.5 seconds at first. Switching to streaming recognition and keeping the Cloud Run instance warm got it to about 1.8 seconds.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Links: I have lost access to that github account and repositories and don't know where the stuff exists. Oops. Sorry!!&lt;/p&gt;

&lt;p&gt;This is a text walkthrough of what I demoed. The setup: a Raspberry Pi 4 running Porcupine and Home Assistant 0.109 (a mix of real smart plugs and bulbs plus HA's demo integrations), the webhook on Cloud Run, and the Android app on a Xiaomi Redmi Note 3.&lt;/p&gt;

&lt;h4&gt;
  
  
  Disclaimer: This part has been generated with AI assistance to make it look proper for Markdown
&lt;/h4&gt;

&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; 🎤 USB mic ──► Porcupine (wake word, on the Pi)
                        │
                        ▼
          Google Cloud Speech-to-Text (streaming)
                        │
                        ▼
                  Dialogflow ES ◄──── custom entity type synced
                        │             from Home Assistant registry
                        ▼
         Flask webhook on Cloud Run ──────► Firebase Cloud Messaging
                        │                          │
                        ▼                          ▼
           Home Assistant REST API        📱 Android app (approvals,
           (lights, plugs, thermostat,       suggestions, devices)
            lock, garage)
                        │
                        ▼
           Nightly pattern job (pandas + scikit-learn)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 1: Work mode
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;🗣️ &lt;strong&gt;"Hey Hearth, start work mode."&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[dialogflow] intent=mode.activate  mode=work  confidence=0.94
[webhook]    → light.turn_on  light.desk_lamp  brightness_pct=100
             → climate.set_temperature  climate.bedroom  71
             → switch.turn_on  switch.door_on_call_led
[webhook]    3/3 succeeded
[response]   "Work mode is on. Good luck out there."
[latency]    1.8s wake-to-response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The LED outside the door turns red. That's for the roommate who kept walking in during Zoom lectures.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Device names that actually work
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;🗣️ &lt;strong&gt;"Turn off the Ikea lamp."&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[dialogflow] intent=device.set  device=@ha_device:"Ikea lamp" → light.living_lamp_2
[webhook]    → light.turn_off  light.living_lamp_2
[response]   "Done."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;"Ikea lamp" is a synonym we added in Home Assistant. It showed up in Dialogflow on the next sync, and no retraining was needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: The safety gate
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;🗣️ &lt;strong&gt;"Unlock the front door."&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[dialogflow] intent=device.set  device=lock.front_door  action=unlock
[webhook]    lock.* requires approval → FCM push sent, request held
[response]   "I've sent a confirmation to your phone."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The phone shows: &lt;strong&gt;"Unlock Front Door? Voice request, 8:42 PM"&lt;/strong&gt; with Approve / Deny. The lock only opens after Approve.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Asking what happened
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;🗣️ &lt;strong&gt;"When was the garage last opened?"&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[dialogflow] intent=history.ask  device=cover.garage_door
[webhook]    → GET /api/history/period  cover.garage_door  (last 24h)
[response]   "The garage opened at 6:12 PM and closed at 6:15 PM."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5: Suggested automations
&lt;/h3&gt;

&lt;p&gt;The Suggestions screen in the Android app shows what the nightly job found in a week of history:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Suggestion&lt;/th&gt;
&lt;th&gt;Pattern found&lt;/th&gt;
&lt;th&gt;Confidence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Kitchen light on at 7:40 AM on weekdays&lt;/td&gt;
&lt;td&gt;Manually turned on 7:30–7:50, 5 of 5 weekdays&lt;/td&gt;
&lt;td&gt;0.88&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Warm lighting at 6:00 PM ("done for the day")&lt;/td&gt;
&lt;td&gt;Desk lamp off + living lamp on within 15 min, 4 of 5 days&lt;/td&gt;
&lt;td&gt;0.74&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alert if the garage is open after 11 PM&lt;/td&gt;
&lt;td&gt;Isolation Forest flagged 2 late-night opens&lt;/td&gt;
&lt;td&gt;0.69&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Tapping a suggestion shows the Home Assistant automation it would create:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;alias&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hearth:&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Weekday&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;kitchen&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;light"&lt;/span&gt;
&lt;span class="na"&gt;trigger&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;platform&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;time&lt;/span&gt;
    &lt;span class="na"&gt;at&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;07:40:00"&lt;/span&gt;
&lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;time&lt;/span&gt;
    &lt;span class="na"&gt;weekday&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;mon&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;tue&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;wed&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;thu&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;fri&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;light.turn_on&lt;/span&gt;
    &lt;span class="na"&gt;entity_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;light.kitchen&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Accept sends it to Home Assistant, and Reject teaches the job to stop suggesting that pattern.&lt;/p&gt;

&lt;h3&gt;
  
  
  What didn't make it
&lt;/h3&gt;

&lt;p&gt;Voice recognition struggled with the fan running in the room, so some of our testing used typed input in the Dialogflow console. The pattern miner also needs a real week of history. For the demo, we replayed a week of logged data from my apartment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Partner Technologies
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Google Cloud
&lt;/h3&gt;

&lt;p&gt;Most of Hearth runs on Google Cloud:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Speech-to-Text:&lt;/strong&gt; We used streaming recognition with &lt;code&gt;phrase_hints&lt;/code&gt; populated from our device names, which noticeably helped with odd names like "the Ikea lamp." The biggest gotcha was a silent stream timing out and ending recognition. The fix was to only open a stream &lt;em&gt;after&lt;/em&gt; Porcupine fires.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dialogflow ES:&lt;/strong&gt; We built intents for devices, modes, and history questions. Custom entity types synced from Home Assistant through the Dialogflow &lt;code&gt;EntityTypes&lt;/code&gt; API were the key trick. The console's training-phrase interface made it easy to iterate on phrasing at 3 AM.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Run:&lt;/strong&gt; Hosts the Flask fulfillment webhook. Deploying a container in a couple of minutes suited a hackathon well. Cold starts added about a second at first, so we set up a cheap scheduled ping to keep it warm during the demo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Firebase Cloud Messaging:&lt;/strong&gt; Carries the approval pushes to the Android app. We used data messages rather than notification messages, so the app controls exactly how the approval card appears.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Domain.com
&lt;/h3&gt;

&lt;p&gt;We used default domains for the project dashboard provided by the Cloud Run service. &lt;/p&gt;

&lt;h2&gt;
  
  
  Hackathon Experience
&lt;/h2&gt;

&lt;p&gt;I attended &lt;strong&gt;Hack at Home&lt;/strong&gt;, the first MLH Summer League hackathon, held online the weekend of May 2, 2020. Like everyone else that spring, I hacked from home.&lt;/p&gt;

&lt;p&gt;I was following up the events page and checking the updates constantly while making sure project meets the guidelines.&lt;/p&gt;

&lt;p&gt;I teamed up with my College Friends to build this project, who had experience in API architecture and any Synthesis, Data tasks and Hardware, while I took care of System Design and Android side.&lt;/p&gt;

&lt;p&gt;We enjoyed building the project and learnt a lot going through the documentations and performance while doing the same. This provided a way to experience the moment during the pandemic outside and work on upskilling our skills, during the time and be distracted for a while.&lt;/p&gt;

&lt;p&gt;What I'll remember most: It was my first MLH hackathon experience and although virtual, I had a wonderful experience and although my memory may have faded on the specifics, I still remember it as a valuable experience.&lt;/p&gt;

&lt;p&gt;Thanks to MLH and everyone was part of organizing it. &lt;/p&gt;

</description>
      <category>mlhacks</category>
      <category>devchallenge</category>
      <category>hackathon</category>
    </item>
    <item>
      <title>GameJam Cipher</title>
      <dc:creator>JohnX4321</dc:creator>
      <pubDate>Fri, 19 Jun 2026 00:30:05 +0000</pubDate>
      <link>https://dev.to/johnx4321/gamejam-cipher-163e</link>
      <guid>https://dev.to/johnx4321/gamejam-cipher-163e</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/june-game-jam-2026-06-03"&gt;June Solstice Game Jam&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built a simple cipher game with 6 levels to decrypt the cipher text based on frequency of words and hints to obtain the plaintext version.&lt;/p&gt;

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

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

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/samarthsubramanya" rel="noopener noreferrer"&gt;
        samarthsubramanya
      &lt;/a&gt; / &lt;a href="https://github.com/samarthsubramanya/JuneSolstice_GameJam_2026" rel="noopener noreferrer"&gt;
        JuneSolstice_GameJam_2026
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;☀ Solstice Cipher&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A code-breaking puzzle game built for the &lt;strong&gt;June Solstice Game Jam&lt;/strong&gt; — and a small ode to &lt;strong&gt;Alan Turing&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Six encrypted messages stand between you and the longest day of the year. Each one is a &lt;strong&gt;substitution cipher&lt;/strong&gt; hiding a message about a June celebration — International Sushi Day, the World Cup, Pride, Juneteenth, Turing himself, and the solstice. Crack each cipher using &lt;strong&gt;frequency analysis&lt;/strong&gt; (the same statistical reasoning Turing's team used at Bletchley Park) and the sun climbs a little higher with every solve. Break all six and you bring the light all the way back.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Theme&lt;/h2&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;The June solstice is a global moment of transition — the longest day in the north, the shortest in the south.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The game makes that literal: &lt;strong&gt;decoding is the act of bringing back the light.&lt;/strong&gt; A night sky brightens into dawn as your accuracy rises, a Pride rainbow…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/samarthsubramanya/JuneSolstice_GameJam_2026" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://june-solstice-game-jam-2026.vercel.app" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;june-solstice-game-jam-2026.vercel.app&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;I built it using ReactJS and hosted on vercel. I implemented a simple frontend with no backend dependency session-specific experience for simplistic approach Using hardcoded values and configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Category
&lt;/h2&gt;

&lt;p&gt;Generated with Assistance from Google AI through Antigravity.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gamechallenge</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>Google I/O 2026 - Android XR and AI-Studio Android Development</title>
      <dc:creator>JohnX4321</dc:creator>
      <pubDate>Sat, 23 May 2026 20:17:54 +0000</pubDate>
      <link>https://dev.to/johnx4321/google-io-2026-android-xr-and-ai-studio-android-development-50el</link>
      <guid>https://dev.to/johnx4321/google-io-2026-android-xr-and-ai-studio-android-development-50el</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/google-io-writing-2026-05-19"&gt;Google I/O Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There were two Google I/O 2026 announcements that excited me the most. The renewed emphasis on Android XR and the ability to create Android Applications using Google AI Studio. As a Mobile Applications Developer having worked on AR,VR,Wearables and even Electric Vehicles, this stood out to me the most as they impact the interaction of development with software platforms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Android XR and Ambient Computing
&lt;/h2&gt;

&lt;p&gt;Google showcased their smart glasses and integrated XR experiences, now powered by Gemini which provides contextual assistance, navigation, messaging and visual understanding. AI is becoming an always-available layer instead of standalone features.&lt;br&gt;
The interaction model has moved away from traditional keyboards, touchscreen and apps to multimodal interaction like voice, vision and spatial awareness. It feels like a natural interaction with environment.&lt;br&gt;
Multiple engineering areas have been integrated into a common ecosystem including on-device AI inference, low-latency systems, wearable hardware, CV and AI agents.. The smartglasses also look professional and consumer preferred than experimental designs. &lt;br&gt;
This announcement pushes the tech environment to a new computing paradigm.&lt;/p&gt;
&lt;h2&gt;
  
  
  Building Android Apps with Google AI Studio
&lt;/h2&gt;

&lt;p&gt;The other announcement was the ability to build android apps using Google AI studio with few prompts, sync to Github and Publish to App Store from a single screen. Here's a voice recorder I tried implementing with the studio&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/johnx4321" rel="noopener noreferrer"&gt;
        johnx4321
      &lt;/a&gt; / &lt;a href="https://github.com/johnx4321/NeoAudioRecorder-AiStudio" rel="noopener noreferrer"&gt;
        NeoAudioRecorder-AiStudio
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Neomorphic Audio Recorder for Android built using Google AI Studio entirely
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/86bcf8eed3617be69c1d9c85006886e151bb77c49fe9e80ae334ebeaef6d098a/68747470733a2f2f61692e676f6f676c652e6465762f7374617469632f736974652d6173736574732f696d616765732f73686172652d6169732d3531333331353331382e706e67"&gt;&lt;img width="1200" height="475" alt="GHBanner" src="https://camo.githubusercontent.com/86bcf8eed3617be69c1d9c85006886e151bb77c49fe9e80ae334ebeaef6d098a/68747470733a2f2f61692e676f6f676c652e6465762f7374617469632f736974652d6173736574732f696d616765732f73686172652d6169732d3531333331353331382e706e67" class="js-gh-image-fallback"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Run and deploy your AI Studio app&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;This contains everything you need to run your app locally.&lt;/p&gt;
&lt;p&gt;View your app in AI Studio: &lt;a href="https://ai.studio/apps/6a9dda79-ec82-4106-b8f4-353c3d3df7a2" rel="nofollow noopener noreferrer"&gt;https://ai.studio/apps/6a9dda79-ec82-4106-b8f4-353c3d3df7a2&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run Locally&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt;  &lt;a href="https://developer.android.com/studio" rel="nofollow noopener noreferrer"&gt;Android Studio&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open Android Studio&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Open&lt;/strong&gt; and choose the directory containing this project&lt;/li&gt;
&lt;li&gt;Allow Android Studio to fix any incompatibilities as it imports the project.&lt;/li&gt;
&lt;li&gt;Create a file named &lt;code&gt;.env&lt;/code&gt; in the project directory and set &lt;code&gt;GEMINI_API_KEY&lt;/code&gt; in that file to your Gemini API key (see &lt;code&gt;.env.example&lt;/code&gt; for an example)&lt;/li&gt;
&lt;li&gt;Remove this line from the app's &lt;code&gt;build.gradle.kts&lt;/code&gt; file: &lt;code&gt;signingConfig = signingConfigs.getByName("debugConfig")&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Run the app on an emulator or physical device&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/johnx4321/NeoAudioRecorder-AiStudio" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;You can also preview the app and view the studio prompts from the link in README of the github repo.&lt;/p&gt;

&lt;p&gt;This is not a simple AI autocomplete and for students, indie developers and small teams who are working on initial POCs, this significantly accelerates development speed. There are few hiccups in initial design to final implementation where things may not turn out visually as expected, but that's where the experienced developers come into picture. Developers can also learn iteratively, without memorizing all the API's.&lt;/p&gt;

&lt;p&gt;Overall Takeaways&lt;/p&gt;

&lt;p&gt;AI is integrated more by Ecosystem developers into their tools. How users interact and how developers build is also changing.  The barrier to entry for development is also being lowered with such integration of AI.&lt;/p&gt;

&lt;p&gt;The future provides endless opportunities for people who use it appropriately.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>googleiochallenge</category>
    </item>
    <item>
      <title>FieldFix - AI Diagnosis</title>
      <dc:creator>JohnX4321</dc:creator>
      <pubDate>Sat, 23 May 2026 19:28:47 +0000</pubDate>
      <link>https://dev.to/johnx4321/fieldfix-ai-diagnosis-45ff</link>
      <guid>https://dev.to/johnx4321/fieldfix-ai-diagnosis-45ff</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/google-gemma-2026-05-06"&gt;Gemma 4 Challenge: Build with Gemma 4&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;This system allows Field Technicians to enter relevant problem statements to the system which the AI System performs diagnosis on using Gemma4 to output resolution plan and likely cause.&lt;/p&gt;

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

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

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/johnx4321" rel="noopener noreferrer"&gt;
        johnx4321
      &lt;/a&gt; / &lt;a href="https://github.com/johnx4321/gemma4-fieldfix" rel="noopener noreferrer"&gt;
        gemma4-fieldfix
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;FieldFix Gemma&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;FieldFix Gemma is an offline-first repair copilot for field technicians. It combines local retrieval over equipment manuals with Gemma 4 reasoning to turn rough field notes, readings, and optional photos into a safe diagnostic checklist and dispatch-ready work order.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why Gemma 4 4B&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;This project intentionally targets the small Gemma 4 model class, especially the 4B model.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Field technicians often work with weak connectivity.&lt;/li&gt;
&lt;li&gt;Repair notes, measurements, and manuals are private operational data.&lt;/li&gt;
&lt;li&gt;The task is narrow enough for a small local model when paired with retrieval.&lt;/li&gt;
&lt;li&gt;Low latency matters more than open-ended general intelligence at the point of repair.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The app keeps retrieval cheap and local, then asks Gemma 4 to do the real judgment: rank causes, apply safety constraints, decide the first checks, and produce structured work-order JSON.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Architecture&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;server.js&lt;/code&gt;: static app server and &lt;code&gt;/api/diagnose&lt;/code&gt; endpoint.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/diagnosisEngine.js&lt;/code&gt;: local manual retrieval, prompt construction, validation, and…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/johnx4321/gemma4-fieldfix" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  How I Used Gemma 4
&lt;/h2&gt;

&lt;p&gt;I used Gemma4 4b latest model. The Frontend prompts the model with relevant data which ingests the data and the symptoms and performs relevant analysis and throws back to the UI to indicate the resolution and fix. This can speed up resolution of complex scenarios and assist technicians to cover more repairs per day or be determinate in their solution.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gemmachallenge</category>
      <category>gemma</category>
    </item>
    <item>
      <title>AI Blog Writer</title>
      <dc:creator>JohnX4321</dc:creator>
      <pubDate>Fri, 15 May 2026 01:03:59 +0000</pubDate>
      <link>https://dev.to/johnx4321/ai-blog-writer-2n9j</link>
      <guid>https://dev.to/johnx4321/ai-blog-writer-2n9j</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is my submission for &lt;a href="https://dev.to/deved/build-multi-agent-systems"&gt;DEV Education Track: Build Multi-Agent Systems with ADK&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built an AI Blog Writer which accepts a title and style/prose of writing and generates textual content in that style for the blog. &lt;/p&gt;

&lt;h2&gt;
  
  
  Cloud Run Embed
&lt;/h2&gt;


&lt;div class="ltag__cloud-run"&gt;
  &lt;iframe height="600px" src="https://blog-writer-frontend-1038476036978.us-central1.run.app/"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Your Agents
&lt;/h2&gt;

&lt;p&gt;There are 4 Agents + 1 Orchestrator to coordinate between the agents&lt;br&gt;
i) Researcher&lt;br&gt;
This receives the user input topic/title. It produces a structured brief covering key concepts, trends. It doesn't write in prose and just gathers foundation for other agents' working.&lt;/p&gt;

&lt;p&gt;ii) Outliner&lt;br&gt;
This agent receives the topic and research brief from previous agent. It is a content strategist which determines the structure : titles, sections, conclusion. It writes only the skeleton&lt;br&gt;
iii) Writer&lt;br&gt;
This agent receives the data from previous agent and produces long form prose sentences and writes the complete draft.&lt;/p&gt;

&lt;p&gt;iv) Editor&lt;br&gt;
This agent receives the draft and validates it. Hook Strength, Clarity, Flow, Grammar, Tonal Consistency. It outputs final polished blog post.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Learnings
&lt;/h2&gt;

&lt;p&gt;The capability of the agents to stick to their specific role was insightful. The technical depth of the blog and transformation of the prose was also a reflection of the capability.&lt;br&gt;
One of the challenging part was to get all of it together and deploy due to IAM issues on Cloud. But was able to resolve all, and successfully deploy. &lt;/p&gt;

</description>
      <category>agents</category>
      <category>buildmultiagents</category>
      <category>gemini</category>
      <category>adk</category>
    </item>
    <item>
      <title>Teapot - Brew Tea from AI</title>
      <dc:creator>JohnX4321</dc:creator>
      <pubDate>Sat, 11 Apr 2026 22:29:34 +0000</pubDate>
      <link>https://dev.to/johnx4321/teapot-brew-tea-from-ai-1854</link>
      <guid>https://dev.to/johnx4321/teapot-brew-tea-from-ai-1854</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/aprilfools-2026"&gt;DEV April Fools Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;TeaPot.cloud - An enterprise-grade, AI-powered, cloud-native tea brewing infrastructure platform that is constitutionally, fundamentally incapable of brewing drink. You can go in and experience how making tea with AI looks like but you won't be able to drink one though :'). Equally Expensive as well.&lt;/p&gt;

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


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://devchallenge-aprilfools-2026-t9w8.vercel.app/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;devchallenge-aprilfools-2026-t9w8.vercel.app&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/samarthsubramanya" rel="noopener noreferrer"&gt;
        samarthsubramanya
      &lt;/a&gt; / &lt;a href="https://github.com/samarthsubramanya/devchallenge-aprilfools-2026" rel="noopener noreferrer"&gt;
        devchallenge-aprilfools-2026
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;Built with NextJS and Lucide-React components majorly&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Category
&lt;/h2&gt;

&lt;p&gt;Honestly, I would like to be considered for Google AI Usage and Community Favorite if possible.&lt;/p&gt;

&lt;p&gt;Supporting Teammate: Claude&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>418challenge</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Logo Generation from prompts</title>
      <dc:creator>JohnX4321</dc:creator>
      <pubDate>Sun, 15 Mar 2026 02:42:51 +0000</pubDate>
      <link>https://dev.to/johnx4321/logo-generation-from-prompts-1jld</link>
      <guid>https://dev.to/johnx4321/logo-generation-from-prompts-1jld</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is my submission for &lt;a href="https://dev.to/deved/build-apps-with-google-ai-studio"&gt;DEV Education Track: Build Apps with Google AI Studio&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I wanted to build a Business Logo Generator based on prompt about the business and it's description. &lt;br&gt;
The prompt I used was:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;You are a professional software engineer. Can you create an application which takes word prompts about a business and generate an icon for the same ?&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The rest of the prompts was to fix certain UI issues which I observed.&lt;/p&gt;

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

&lt;p&gt;Applet Link: &lt;a href="https://ai.studio/apps/70865850-95ce-44e3-ad5d-08955c29e137" rel="noopener noreferrer"&gt;https://ai.studio/apps/70865850-95ce-44e3-ad5d-08955c29e137&lt;/a&gt;&lt;br&gt;
Screenshots:&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%2Fnkom6nadgnbwqpnsbloj.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%2Fnkom6nadgnbwqpnsbloj.png" alt=" " width="800" height="361"&gt;&lt;/a&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%2F0t6f19k1j5hmv6vqmjml.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%2F0t6f19k1j5hmv6vqmjml.png" alt=" " width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience
&lt;/h2&gt;

&lt;p&gt;AI studio allows creation of Technical ideas quickly and efficiently. it also allows immediate deployment through Google Cloud Run and anyone can get their ideas running quickly in a short while than developing from scratch. Human intervention or validation is also necessary because the products generated are not up to the mark always.&lt;/p&gt;

</description>
      <category>deved</category>
      <category>learngoogleaistudio</category>
      <category>ai</category>
      <category>gemini</category>
    </item>
    <item>
      <title>Notes App</title>
      <dc:creator>JohnX4321</dc:creator>
      <pubDate>Tue, 10 Feb 2026 02:01:19 +0000</pubDate>
      <link>https://dev.to/johnx4321/notes-app-bnn</link>
      <guid>https://dev.to/johnx4321/notes-app-bnn</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built a simple note taking application with a priority level set. The Copilot model struggled to achieve functionality with other ideas, I thought to implement. Hence, settled for this.&lt;/p&gt;

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

&lt;p&gt;Github Link: &lt;a href="https://github.com/JohnX4321/CopilotChallengeNotesApp?tab=readme-ov-file" rel="noopener noreferrer"&gt;https://github.com/JohnX4321/CopilotChallengeNotesApp?tab=readme-ov-file&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;I used the github copilot to generate the template and test the functionality. It sped up the development time and also to debug issues.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>CSS Art 2024 Submission, Earth Day Edition Frontend Challenge</title>
      <dc:creator>JohnX4321</dc:creator>
      <pubDate>Sat, 20 Apr 2024 11:52:13 +0000</pubDate>
      <link>https://dev.to/johnx4321/css-art-2024-submission-earth-day-edition-frontend-challenge-26g6</link>
      <guid>https://dev.to/johnx4321/css-art-2024-submission-earth-day-edition-frontend-challenge-26g6</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/devteam/join-us-for-the-next-frontend-challenge-earth-day-edition-52e4"&gt;Frontend Challenge v24.04.17&lt;/a&gt;, CSS Art: Earth Day.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspiration
&lt;/h2&gt;

&lt;p&gt;The CSS art represents planet earth with its flora in the form of a tree. The Wind animation indicates the presence of Air required for both float and fauna to survive.&lt;/p&gt;

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

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/johnx4321/embed/jORQZeM?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;I have kept the content simple. Will work on enhancing my skills to create more complex representations for the next challenges.&lt;/p&gt;

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>css</category>
    </item>
    <item>
      <title>#GithubHack23: Grocery List App using Expo</title>
      <dc:creator>JohnX4321</dc:creator>
      <pubDate>Wed, 10 May 2023 13:54:51 +0000</pubDate>
      <link>https://dev.to/johnx4321/githubhack23-grocery-list-app-using-expo-31e0</link>
      <guid>https://dev.to/johnx4321/githubhack23-grocery-list-app-using-expo-31e0</guid>
      <description>&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;I have built a simple Grocery List Application which you can utilize while shopping. It has a simple and minimalistic design without extensive customization and does get the job done&lt;/p&gt;

&lt;h3&gt;
  
  
  Category Submission:
&lt;/h3&gt;

&lt;p&gt;Phone Friendly&lt;/p&gt;

&lt;h3&gt;
  
  
  App Link
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/JohnX4321/GroceryList/releases/tag/1.0" rel="noopener noreferrer"&gt;https://github.com/JohnX4321/GroceryList/releases/tag/1.0&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

&lt;p&gt;Android &amp;amp; iOS&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FJohnX4321%2FGroceryList%2Fblob%2Fmain%2Fss%2FScreenshot_20230507_135949_Expo%2520Go.png%3Fraw%3Dtrue" 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%2Fgithub.com%2FJohnX4321%2FGroceryList%2Fblob%2Fmain%2Fss%2FScreenshot_20230507_135949_Expo%2520Go.png%3Fraw%3Dtrue" alt="Screenshot 1" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FJohnX4321%2FGroceryList%2Fblob%2Fmain%2Fss%2FScreenshot_20230507_135956_Expo%2520Go.png%3Fraw%3Dtrue" 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%2Fgithub.com%2FJohnX4321%2FGroceryList%2Fblob%2Fmain%2Fss%2FScreenshot_20230507_135956_Expo%2520Go.png%3Fraw%3Dtrue" alt="Screenshot 2" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FJohnX4321%2FGroceryList%2Fblob%2Fmain%2Fss%2FScreenshot_20230507_140039_Expo%2520Go.png%3Fraw%3Dtrue" 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%2Fgithub.com%2FJohnX4321%2FGroceryList%2Fblob%2Fmain%2Fss%2FScreenshot_20230507_140039_Expo%2520Go.png%3Fraw%3Dtrue" alt="Screenshot 3" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FJohnX4321%2FGroceryList%2Fblob%2Fmain%2Fss%2FScreenshot_20230507_140046_Expo%2520Go.png%3Fraw%3Dtrue" 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%2Fgithub.com%2FJohnX4321%2FGroceryList%2Fblob%2Fmain%2Fss%2FScreenshot_20230507_140046_Expo%2520Go.png%3Fraw%3Dtrue" alt="Screenshot 4" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Description
&lt;/h3&gt;

&lt;p&gt;A simple Application to list out items for shopping at the supermarket (not specific to groceries). You can check the item to move it to completed section and revisit at the end to cross check if it has been picked or not. In the end you can clear the items to begin the cycle freshly again. Built using Expo , React Native , Redux &amp;amp; React Native paper.&lt;/p&gt;

&lt;h3&gt;
  
  
  Link to Source Code
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/JohnX4321/GroceryList" rel="noopener noreferrer"&gt;https://github.com/JohnX4321/GroceryList&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Permissive License
&lt;/h3&gt;

&lt;p&gt;MIT License&lt;/p&gt;

&lt;h2&gt;
  
  
  Background (What made you decide to build this particular app? What inspired you?)
&lt;/h2&gt;

&lt;p&gt;I wanted to build a simplistic app which would come in handy in every day use without additional feature or complexity. There is no Online Sync , Login or integration with other services. &lt;br&gt;
I find it handy to list out items needed to buy before heading out to the grocery mart. I have been inspired by simple Dark/Light theme and determination to use Redux functionality in the app.&lt;/p&gt;

&lt;h3&gt;
  
  
  How I built it (How did you utilize GitHub Actions or GitHub Codespaces? Did you learn something new along the way? Pick up a new skill?)
&lt;/h3&gt;

&lt;p&gt;Utilized Github codespaces to develop the application along with expo tunnelling on the codespace server to debug and test the application. I learned automation and remote development skills along the way.&lt;/p&gt;

</description>
      <category>githubhack23</category>
    </item>
  </channel>
</rss>
