<?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: Gavin Rose</title>
    <description>The latest articles on DEV Community by Gavin Rose (@gavin_rose).</description>
    <link>https://dev.to/gavin_rose</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%2F1552594%2F9e23f0d7-6a72-4d7c-9916-47952f3e2088.png</url>
      <title>DEV Community: Gavin Rose</title>
      <link>https://dev.to/gavin_rose</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gavin_rose"/>
    <language>en</language>
    <item>
      <title>Atlas</title>
      <dc:creator>Gavin Rose</dc:creator>
      <pubDate>Sun, 19 Apr 2026 19:25:20 +0000</pubDate>
      <link>https://dev.to/gavin_rose/atlas-learn-about-the-earth-cio</link>
      <guid>https://dev.to/gavin_rose/atlas-learn-about-the-earth-cio</guid>
      <description>&lt;h1&gt;
  
  
  Explore Earth, One Swipe at a Time
&lt;/h1&gt;

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

&lt;p&gt;Some of us spend hours every day scrolling. The format is compelling, and the habit is already formed. The question we asked ourselves was what if that scroll actually taught you something?&lt;/p&gt;

&lt;p&gt;Atlas takes the interaction pattern everyone already knows and fills it with things worth knowing about the planet we live on... things like geology, ecology, ocean science, extreme weather, wildlife, and geography. No headlines, no opinions. Just Earth facts, beautifully presented.&lt;/p&gt;

&lt;h2&gt;
  
  
  What It Does
&lt;/h2&gt;

&lt;p&gt;Atlas is a vertical swipe feed of Earth fact cards, built and deployed as a Flutter web app.  Beyond the content, Atlas has a full progression system aimed to keep people engaged as they learn about the Earth.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;XP and levels&lt;/strong&gt;: you earn XP for every new card you read, every quiz you reveal, and every card you save. The XP system has eight explorer levels from Seedling to World Wonder, and each level unlocks a new ambient visual theme (Ocean, Forest, Dusk, Aurora, Glacier, Desert, Volcanic).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Achievements&lt;/strong&gt;: ten unlockable achievements tied to meaningful milestones; exploring five nature cards, saving five cards, revealing five quizzes, exploring all categories, and more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily streak&lt;/strong&gt;: the app tracks consecutive days of use and surfaces your streak in the HUD once it hits day two.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic content&lt;/strong&gt;: the feed mixes 60+ curated cards with live data pulled from four public APIs, refreshed every 24 hours: NASA APOD (astronomy images), USGS Significant Earthquakes (real-time seismic events), Wikipedia article summaries (25 curated Earth topics, four chosen at random per session), and Open Trivia DB (science and geography questions turned into Real or Fake cards).&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The entire app is written in Flutter, hosted on Firebase Hosting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stack/Packages&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flutter/Dart&lt;/li&gt;
&lt;li&gt;Provider for state management&lt;/li&gt;
&lt;li&gt;SharedPreferences for local persistence&lt;/li&gt;
&lt;li&gt;http for API calls&lt;/li&gt;
&lt;li&gt;flutter_animate for card entry animations and toast transitions&lt;/li&gt;
&lt;li&gt;share_plus for native share sheet&lt;/li&gt;
&lt;li&gt;Firebase Hosting&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Challenges We Ran Into
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Swipe-one-card-at-a-time.&lt;/strong&gt; Flutter's PageView will happily let you queue multiple &lt;code&gt;animateToPage&lt;/code&gt; calls, which causes the view to snap to the wrong card when the user swipes quickly. The fix was disabling the PageView's built-in gesture handling entirely and replacing it with a manual drag detector and an animation lock.&lt;/p&gt;

&lt;h2&gt;
  
  
  Accomplishments We're Proud Of
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A scroll experience that feels genuinely close to TikTok or Reels, built entirely in Flutter for web, with no JavaScript.&lt;/li&gt;
&lt;li&gt;A progression system that changes the visual environment of the app as you level up, so the reward is aesthetic and immediate, not just a number going up.&lt;/li&gt;
&lt;li&gt;Live data from four different public APIs, unified into the same card format as the curated content, with graceful offline fallback.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Short form content, especially as text, forces content to be better. Writing 60+ cards where every headline had to land in under 15 words was harder than any of the actual programming or engineering! XD&lt;/p&gt;

&lt;p&gt;We observed that while typically Flutter can be lacking for web development, when developing for designs that are mobile-first, Flutter was still able to shine although it felt like it took a little longer than doing something react-based may have taken.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;User-generated cards&lt;/strong&gt;: a simple submission form where anyone can contribute a fact, queued for moderation before it enters the live feed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More API sources&lt;/strong&gt;: NOAA for weather extremes, iNaturalist for real-time species observations, NASA Earth imagery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personalisation&lt;/strong&gt; — mood-based filtering (Relax / Curious / Mind-Blown tags are already on every card, just not yet surfaced in the UI).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native mobile builds&lt;/strong&gt;: the codebase is already cross-platform; the only web-specific concession is SharedPreferences over localStorage.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Built With
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;flutter&lt;/code&gt; &lt;code&gt;dart&lt;/code&gt; &lt;code&gt;firebase&lt;/code&gt; &lt;code&gt;nasa-api&lt;/code&gt; &lt;code&gt;usgs-api&lt;/code&gt; &lt;code&gt;wikipedia-api&lt;/code&gt; &lt;code&gt;open-trivia-db&lt;/code&gt; &lt;code&gt;provider&lt;/code&gt; &lt;code&gt;shared-preferences&lt;/code&gt; &lt;code&gt;flutter-animate&lt;/code&gt; &lt;code&gt;glassmorphism&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;p&gt;The repo is publicly available &lt;a href="https://github.com/gavin-rose/Atlas" rel="noopener noreferrer"&gt;here&lt;/a&gt; &lt;br&gt;
The build itself can be found &lt;a href="https://atlas-26.web.app/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>weekendchallenge</category>
    </item>
    <item>
      <title>Scarab | Weekend Data</title>
      <dc:creator>Gavin Rose</dc:creator>
      <pubDate>Sat, 18 Apr 2026 12:48:38 +0000</pubDate>
      <link>https://dev.to/gavin_rose/scarab-weekend-data-38i7</link>
      <guid>https://dev.to/gavin_rose/scarab-weekend-data-38i7</guid>
      <description>&lt;p&gt;Scarab can give you a summary on what data is missing from your data with only a few clicks&lt;br&gt;
&lt;a href="https://debugr.gumroad.com/l/scarab" rel="noopener noreferrer"&gt;Download Now&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4b01u06r9ic36k4d33i1.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%2F4b01u06r9ic36k4d33i1.png" alt=" " width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>statistics</category>
      <category>datascience</category>
      <category>data</category>
      <category>rust</category>
    </item>
    <item>
      <title>The new way to explore data</title>
      <dc:creator>Gavin Rose</dc:creator>
      <pubDate>Thu, 16 Apr 2026 17:12:37 +0000</pubDate>
      <link>https://dev.to/gavin_rose/the-new-way-to-explore-data-1i2</link>
      <guid>https://dev.to/gavin_rose/the-new-way-to-explore-data-1i2</guid>
      <description>&lt;p&gt;Scarab was built to allow people with no programming or statistical language experience analyze their data. It produces code snippets for those that want to bring insights into their own program, and can help gain valuable insights from your data as you progress. Free while in the testing phase!&lt;/p&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://debugr.gumroad.com/l/scarab" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;debugr.gumroad.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&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%2Fq7lezp679wovmwj3m6sd.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%2Fq7lezp679wovmwj3m6sd.png" alt="Natural language analysis" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>data</category>
      <category>statistics</category>
      <category>rust</category>
    </item>
  </channel>
</rss>
