<?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: Muhammad Adamu Aliyu</title>
    <description>The latest articles on DEV Community by Muhammad Adamu Aliyu (@_sudo).</description>
    <link>https://dev.to/_sudo</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%2F2680841%2F4149463b-34bb-45f7-bedc-3e92812dcdb6.png</url>
      <title>DEV Community: Muhammad Adamu Aliyu</title>
      <link>https://dev.to/_sudo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/_sudo"/>
    <language>en</language>
    <item>
      <title>Clearport: Giving the Ghost a Machine — Local AI on Android (#hf26challenge)</title>
      <dc:creator>Muhammad Adamu Aliyu</dc:creator>
      <pubDate>Sat, 31 Oct 2026 04:00:23 +0000</pubDate>
      <link>https://dev.to/_sudo/clearport-giving-the-ghost-a-machine-local-ai-on-android-hf26challenge-1793</link>
      <guid>https://dev.to/_sudo/clearport-giving-the-ghost-a-machine-local-ai-on-android-hf26challenge-1793</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Clearport is a chat client for an AI model that runs on the phone in your hand.&lt;/p&gt;

&lt;p&gt;Two pieces, one loopback socket:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Android app&lt;/strong&gt; (Flutter): streaming replies, conversations saved on device, a live status dot that polls &lt;code&gt;/models&lt;/code&gt;, a dynamic model picker fed by that list, and settings for the server URL, model ID, API key, system prompt, and temperature.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Termux CLI&lt;/strong&gt; (&lt;code&gt;clearport&lt;/code&gt;): starts &lt;code&gt;llama-server&lt;/code&gt; on &lt;code&gt;127.0.0.1:8080&lt;/code&gt;, takes an Android wake lock so the system does not kill background inference, and provides interactive terminal chat if you never open the Flutter app at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Neither piece bundles weights, and neither requires an account. The only HTTP request the app ever makes is to the address you specify in Settings, and the default is loopback (&lt;code&gt;127.0.0.1:8080&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;I read "Ghost in the Machine" literally first: the ghost is the model, a disembodied voice answering prompts. For almost everyone in 2026, that voice lives in an offshore datacenter behind a closed API, running on rented GPUs that can be gated behind a pricing change or killed with a service deprecation.&lt;/p&gt;

&lt;p&gt;Then I read it the other way, and that is what I built. Move the ghost inside the machine, and it stops being a haunting—it becomes a resident. Put the phone in aeroplane mode, cut all radios, and it still answers. The spooky part of AI is not that it talks to you; it is that it talks to you &lt;em&gt;from somewhere else&lt;/em&gt;. Clearport makes it talk to you from right here.&lt;/p&gt;

&lt;p&gt;So I gave the ghost a home. Clearport ships seven tailored themes, each a full semantic palette: &lt;strong&gt;Haunted&lt;/strong&gt;, &lt;strong&gt;Clean&lt;/strong&gt;, &lt;strong&gt;Dark&lt;/strong&gt;, &lt;strong&gt;AMOLED&lt;/strong&gt;, &lt;strong&gt;Midwinter&lt;/strong&gt;, &lt;strong&gt;Ofrenda&lt;/strong&gt;, and &lt;strong&gt;System&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhnm4w3fvaopt8751fv7f.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhnm4w3fvaopt8751fv7f.png" alt="Clearport in the Haunted theme" width="800" height="874"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Haunted&lt;/strong&gt; is the theme crafted for this challenge. It is pure &lt;code&gt;#000000&lt;/code&gt;—true OLED black. The accent is pumpkin orange. Cobwebs cling to the top corners, and a spider drops from the ceiling on silk. The empty state features a carved glowing jack-o'-lantern with slanted eyes and an atmospheric prompt: &lt;em&gt;"Something is listening on 127.0.0.1."&lt;/em&gt; Because something truly is.&lt;/p&gt;

&lt;p&gt;The artwork is vector-drawn in code: &lt;code&gt;PumpkinPainter&lt;/code&gt;, &lt;code&gt;SnowflakePainter&lt;/code&gt;, &lt;code&gt;MarigoldPainter&lt;/code&gt;, and &lt;code&gt;SpiderWebPainter&lt;/code&gt; are Flutter &lt;code&gt;CustomPainter&lt;/code&gt;s. Crisp at every screen density, recolouring dynamically with the palette, and adding zero bloated image assets to the binary.&lt;/p&gt;

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

&lt;p&gt;Aeroplane mode is the demo. Wi-Fi off, mobile data off, bluetooth off, no hotspot, no laptop tether. Send a prompt and watch tokens stream one by one from a model running in Termux on the same device over loopback:&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://github.com/Adams-404/clearport/releases/download/v1.0.4/clearport-demo.mp4" rel="noopener noreferrer"&gt;
    &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FAdams-404%2Fclearport%2Fmain%2Fdocs%2Fmedia%2Fclearport-streaming.gif" alt="Clearport Aeroplane Mode Live Streaming Demo" width="360" height="800"&gt;&lt;br&gt;
    🎬 &lt;b&gt;Watch Full 1080p Walkthrough Video (clearport-demo.mp4)&lt;/b&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%2Fraw.githubusercontent.com%2FAdams-404%2Fclearport%2Fmain%2Fdocs%2Fscreenshots%2Fhaunted.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%2Fraw.githubusercontent.com%2FAdams-404%2Fclearport%2Fmain%2Fdocs%2Fscreenshots%2Fhaunted.png" width="800" alt="Clearport in Haunted theme" height="874"&gt;&lt;/a&gt;
  &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FAdams-404%2Fclearport%2Fmain%2Fdocs%2Fscreenshots%2Faeroplane-mode.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%2Fraw.githubusercontent.com%2FAdams-404%2Fclearport%2Fmain%2Fdocs%2Fscreenshots%2Faeroplane-mode.png" width="800" alt="Aeroplane mode streaming tokens" height="1778"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;The CLI flow runs with equal simplicity in Termux:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;clearport pull gemma-tiny   &lt;span class="c"&gt;# 292 MB Gemma 3 270M, SHA-256 verified&lt;/span&gt;
clearport start             &lt;span class="c"&gt;# starts llama-server on 127.0.0.1:8080 with wake-lock&lt;/span&gt;
clearport chat              &lt;span class="c"&gt;# instant terminal chat session&lt;/span&gt;
clearport haunt             &lt;span class="c"&gt;# the local model inspects your recent bash history&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Android App:&lt;/strong&gt; &lt;a href="https://github.com/Adams-404/clearport" rel="noopener noreferrer"&gt;github.com/Adams-404/clearport&lt;/a&gt; (MIT, Flutter)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Companion CLI:&lt;/strong&gt; &lt;a href="https://github.com/Adams-404/clearport-cli" rel="noopener noreferrer"&gt;github.com/Adams-404/clearport-cli&lt;/a&gt; (MIT, Bash)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Testing Instructions for Judges:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;No login required.&lt;/strong&gt; No API keys, no signups, no cloud credentials. You can install the release APK directly from GitHub Releases (&lt;a href="https://github.com/Adams-404/clearport/releases/tag/v1.0.4" rel="noopener noreferrer"&gt;v1.0.4&lt;/a&gt;) or run the one-line Termux installer on an Android device.&lt;/p&gt;
&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Open weights and inference:&lt;/strong&gt; &lt;code&gt;llama.cpp&lt;/code&gt; powers local inference. Gemma 3 is the primary benchmark: &lt;code&gt;clearport pull gemma&lt;/code&gt; downloads the 1B Q4_K_M weights (806 MB), while &lt;code&gt;clearport pull gemma-tiny&lt;/code&gt; fetches the 270M Q8_0 weights (292 MB) for memory-constrained phones. Downloads support resume and verify byte sizes and SHA-256 hashes against Google's published specifications before use. Any OpenAI-compatible GGUF server also works seamlessly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Design system:&lt;/strong&gt; Themes are built on Flutter's &lt;code&gt;ThemeExtension&lt;/code&gt; rather than switch statements. Surfaces, text styles, code blocks, borders, and custom painters derive from an &lt;code&gt;AppPalette&lt;/code&gt; accessed via &lt;code&gt;context.palette&lt;/code&gt;. Switching themes recalculates one inherited value and cleanly repaints the entire tree, including the frosted liquid-glass history modal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Streaming SSE reliability:&lt;/strong&gt; Building robust mobile streaming over loopback required solving three tricky edge cases:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;TCP chunk boundary splits:&lt;/strong&gt; SSE &lt;code&gt;data:&lt;/code&gt; payloads frequently arrive split across TCP packets. The parser buffers until complete event delimiters arrive and safely flushes remaining tokens on close.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Android lifecycle suspensions:&lt;/strong&gt; Android suspends activities when backgrounded. Clearport maintains read buffers across transitions rather than dropping active requests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atomic persistence:&lt;/strong&gt; Conversations are stored in the app's sandboxed document store using atomic writes (writing to a temporary file before renaming) to eliminate corruption from sudden process death.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Written lifecycle contract:&lt;/strong&gt; &lt;a href="https://github.com/Adams-404/clearport/blob/main/docs/lifecycle.md" rel="noopener noreferrer"&gt;&lt;code&gt;docs/lifecycle.md&lt;/code&gt;&lt;/a&gt; documents exact recovery guarantees across backgrounding, low-memory kills, and restart states.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;flutter analyze&lt;/code&gt; is completely clean and &lt;strong&gt;72 automated tests pass&lt;/strong&gt;, verifying the stream parser, URL normalizer, secure settings, history search, theme system, model discovery picker, and lifecycle contracts. GitHub Actions automates APK packaging, test suites, and cryptographic signing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent collaboration:&lt;/strong&gt; Clearport was developed iteratively using an AI coding agent pair-programming setup. Every phase was tracked as an explicit GitHub milestone issue with formal acceptance criteria, verified through test runs, committed, and closed upon push.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Every core capability in Clearport relies directly on open innovation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Works with the lights (and internet) off:&lt;/strong&gt; No external server dependency. If a storm hits or you are at 35,000 feet, inference never halts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your prompts never leave your pocket:&lt;/strong&gt; Android's network security configuration is restricted to cleartext HTTP on &lt;code&gt;127.0.0.1&lt;/code&gt; and &lt;code&gt;localhost&lt;/code&gt;; remote endpoints enforce HTTPS. Your thoughts, logs, and questions never reach an external telemetry aggregator.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol neutrality:&lt;/strong&gt; The parser natively understands OpenAI delta streams, Ollama JSON envelopes (&lt;code&gt;{"message":...}&lt;/code&gt; / &lt;code&gt;{"response":...}&lt;/code&gt;), NDJSON, and raw text lines. You are never locked into a single server vendor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Readable and auditable:&lt;/strong&gt; Clearport avoids bloated state frameworks in favour of clean &lt;code&gt;ChangeNotifier&lt;/code&gt; and &lt;code&gt;InheritedWidget&lt;/code&gt; patterns across concise Dart files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory that outlives vendors:&lt;/strong&gt; Chat histories belong to you. When hosted AI platforms sunset models or alter account terms, user conversations vanish. On Clearport, conversations are local JSON files under your control.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;


&lt;div class="ltag-agent-session"&gt;
  &lt;div class="agent-session-header"&gt;
    
    &lt;span class="agent-session-tool-icon-badge" title="OpenCode"&gt;
&lt;/span&gt;
    &lt;span class="agent-session-title"&gt;Building Clearport — Hacktoberfest Week 4: Ghost in the Machine&lt;/span&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-scroll"&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Building Clearport: Local Android AI client with Gemma &amp;amp; Termux for Hacktoberfest Week 4&lt;/p&gt;

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

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Planning and executing phases: theme system (Haunted theme), Termux loopback integration, SSE stream robustness, and Gemma open-weights support.&lt;/p&gt;

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

  &lt;div class="agent-session-footer"&gt;
    &lt;span class="agent-session-meta"&gt;
        2 of 2 messages
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Interactive session transcript: &lt;a href="https://dev.to/agent_sessions/building-clearport-hacktoberfest-week-4-ghost-in-the-machine-swooav"&gt;Building Clearport — Hacktoberfest Week 4: Ghost in the Machine&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The build followed a structured phase plan tracked across GitHub issues (#45 through #51): scoping the themes, drawing painters, handling lifecycle states, validating Gemma downloads, producing demo media, and automating releases. Working with a pair-programming agent with clear acceptance criteria ensured that architecture decisions remained disciplined and every feature shipped with test coverage.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Spirit of It
&lt;/h2&gt;

&lt;p&gt;The moment this project clicked was in a dark room with a black screen: the Haunted theme active, two painted cobwebs in the corners, a spider suspended on thread, a pumpkin grinning in the centre, and the phrase: &lt;em&gt;"Something is listening on 127.0.0.1."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The second moment was &lt;code&gt;clearport haunt&lt;/code&gt;: pointing the local model at the phone's recent shell history, having an offline Gemma model analyze the last few commands typed into Termux, and offering dry, eerie commentary.&lt;/p&gt;

&lt;p&gt;There is also a Día de los Muertos connection in the &lt;strong&gt;Ofrenda&lt;/strong&gt; theme (marigolds, deep plum, and candlelight). Conversations and thoughts are personal history. Keeping them on hardware you own is how you ensure they are never lost.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Best Use of Gemma
&lt;/h3&gt;

&lt;p&gt;Clearport natively supports Google's &lt;strong&gt;Gemma 3&lt;/strong&gt; open-weight models as its primary recommendation for mobile on-device inference:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;clearport pull gemma&lt;/code&gt;: Downloads Gemma 3 1B (Q4_K_M, 806 MB), ideal for devices with 4GB+ RAM.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;clearport pull gemma-tiny&lt;/code&gt;: Downloads Gemma 3 270M (Q8_0, 292 MB), purpose-fit for ultra-lightweight, battery-efficient inference on low-spec phones.&lt;/li&gt;
&lt;li&gt;All downloads are checksum-validated against Google's published SHA-256 signatures and configured automatically for Termux &lt;code&gt;llama-server&lt;/code&gt; execution.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>gemma</category>
      <category>flutter</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Muhammad Adamu Aliyu</dc:creator>
      <pubDate>Mon, 26 Jan 2026 05:37:00 +0000</pubDate>
      <link>https://dev.to/_sudo/-568o</link>
      <guid>https://dev.to/_sudo/-568o</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/devteam/join-the-new-year-new-you-portfolio-challenge-3000-in-prizes-feedback-from-google-ai-team-4e7g" class="crayons-story__hidden-navigation-link"&gt;Join the New Year, New You Portfolio Challenge: $3,000 in Prizes + Feedback from Google AI Team (For Winners and Runner Ups!)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/devteam"&gt;
            &lt;img alt="The DEV Team logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1%2Fd908a186-5651-4a5a-9f76-15200bc6801f.jpg" class="crayons-logo__image" width="800" height="800"&gt;
          &lt;/a&gt;

          &lt;a href="/jess" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F264%2Fb75f6edf-df7b-406e-a56b-43facafb352c.jpg" alt="jess profile" class="crayons-avatar__image" width="400" height="400"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/jess" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Jess Lee
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Jess Lee
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png" width="166" height="102"&gt;&lt;/a&gt;
                &lt;img alt="Community Curator" class="community-leader-icon" src="https://assets.dev.to/assets/community-leader-icon-b72c9e74eff54916e5c46c962f47ba40c9f611a71f8b157511f9613f69c0001b.svg" width="20" height="20"&gt;
              
              &lt;div id="story-author-preview-content-3109851" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/jess" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F264%2Fb75f6edf-df7b-406e-a56b-43facafb352c.jpg" class="crayons-avatar__image" alt="" width="400" height="400"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Jess Lee&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/devteam" class="crayons-story__secondary fw-medium"&gt;The DEV Team&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/devteam/join-the-new-year-new-you-portfolio-challenge-3000-in-prizes-feedback-from-google-ai-team-4e7g" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jan 1&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/devteam/join-the-new-year-new-you-portfolio-challenge-3000-in-prizes-feedback-from-google-ai-team-4e7g" id="article-link-3109851"&gt;
          Join the New Year, New You Portfolio Challenge: $3,000 in Prizes + Feedback from Google AI Team (For Winners and Runner Ups!)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/googleaichallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;googleaichallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/career"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;career&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/gemini"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;gemini&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/devteam/join-the-new-year-new-you-portfolio-challenge-3000-in-prizes-feedback-from-google-ai-team-4e7g" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;330&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/devteam/join-the-new-year-new-you-portfolio-challenge-3000-in-prizes-feedback-from-google-ai-team-4e7g#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              108&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>devchallenge</category>
      <category>googleaichallenge</category>
      <category>career</category>
      <category>gemini</category>
    </item>
  </channel>
</rss>
