<?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: Shashwat Pratap Singh</title>
    <description>The latest articles on DEV Community by Shashwat Pratap Singh (@shashwat_xd).</description>
    <link>https://dev.to/shashwat_xd</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%2F3962199%2Fb9b4161a-452d-448a-89c8-8da810eaf548.jpg</url>
      <title>DEV Community: Shashwat Pratap Singh</title>
      <link>https://dev.to/shashwat_xd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shashwat_xd"/>
    <language>en</language>
    <item>
      <title>Building the Foundation for Git and Scan Sync in API Dash (GSoC 2026)</title>
      <dc:creator>Shashwat Pratap Singh</dc:creator>
      <pubDate>Mon, 20 Jul 2026 19:25:06 +0000</pubDate>
      <link>https://dev.to/foss42/building-the-foundation-for-git-and-scan-sync-in-api-dash-gsoc-2026-3nk9</link>
      <guid>https://dev.to/foss42/building-the-foundation-for-git-and-scan-sync-in-api-dash-gsoc-2026-3nk9</guid>
      <description>&lt;p&gt;Git was not the most difficult part of my Google Summer of Code project.&lt;/p&gt;

&lt;p&gt;The greater challenge was recognizing that our storage layer could not support the collaboration experience we intended to deliver.&lt;/p&gt;

&lt;p&gt;Git, Scan Sync, and live filesystem updates all followed from addressing that foundation first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where I started
&lt;/h2&gt;

&lt;p&gt;I'm a Google Summer of Code 2026 contributor with &lt;a href="https://github.com/foss42/apidash" rel="noopener noreferrer"&gt;&lt;strong&gt;API Dash&lt;/strong&gt;&lt;/a&gt;, working on &lt;a href="https://github.com/foss42/apidash/discussions/1689" rel="noopener noreferrer"&gt;Git Support, UI Workflow Builder &amp;amp; Collection Dashboard&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The midterm objective was not a single feature. It was a shared architectural spine:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Make collections &lt;strong&gt;real, shareable workspaces&lt;/strong&gt; so desktop teams can use Git, and your phone can stay in the loop without fighting the stack.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In practice, that meant one folder on disk that desktop Git, phone Sync, and the UI could all treat as the same source of truth.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;API Dash previously persisted data in Hive. That approach worked for a single machine, but the data was binary and neither human-readable nor suitable for Git. Introducing a conversion layer on top would have created two sources of truth and ongoing translation overhead.&lt;/p&gt;

&lt;p&gt;In discussion with mentors, we chose a clearer path: &lt;strong&gt;own a filesystem workspace&lt;/strong&gt; instead. See &lt;a href="https://github.com/foss42/apidash/pull/1695" rel="noopener noreferrer"&gt;PR #1695 (storage migration)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A workspace is simply a folder: collections, environments, and workflows as readable JSON. Secrets stay in secure storage on the device, not in those files , so sharing a workspace does not accidentally share keys.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why JSON?
&lt;/h2&gt;

&lt;p&gt;Flutter and API Dash were already oriented around this model. Domain models already exposed &lt;code&gt;toJson&lt;/code&gt; / &lt;code&gt;fromJson&lt;/code&gt;. The architecture already used maps and JSON for requests, imports, and code generation. Writing that same shape to disk was not a new serialization dialect; it was aligning persistence with what the application already trusted.&lt;/p&gt;

&lt;p&gt;The approach was fast to implement, straightforward to diff, and easy for users to inspect. It avoided maintaining a parallel serialization path.&lt;/p&gt;

&lt;p&gt;That decision unlocked the rest: Git for desktop team collaboration, Scan Sync for laptop and phone, and disk-to-UI synchronization so folder changes appear in the application - all on the same workspace.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A workspace you can actually open and understand.&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/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiyw6qmsl1ulmxa7oib9c.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiyw6qmsl1ulmxa7oib9c.gif" alt=" " width="719" height="435"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F73zdwbekswz2blq8oub5.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%2F73zdwbekswz2blq8oub5.png" alt=" " width="800" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Git vs Scan Sync
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Git for teams (desktop)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Desktop Git&lt;/strong&gt; is the natural collaboration path: system Git, OS credentials, clone / commit / push / pull, and Visual/Raw diffs in a Collaboration tab. See &lt;a href="https://github.com/foss42/apidash/pull/1734" rel="noopener noreferrer"&gt;PR #1734 (scan sync / collaboration)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The workspace folder is the repo. History and local-only files stay out of Git by design; what you review and push is the same JSON you can open in Finder.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiwku70c5elbxx3c0d6cc.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiwku70c5elbxx3c0d6cc.gif" alt=" " width="800" height="544"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Review before you push or pull. Same diff language everywhere.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Scan Sync for your phone
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Full Git on mobile&lt;/strong&gt; appeared consistent in theory and awkward in practice authentication, SSH, and conflict resolution on a small screen for a job that is usually simply &lt;em&gt;"get this workspace onto my phone."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We therefore built &lt;strong&gt;Scan Sync&lt;/strong&gt;: same Wi‑Fi, QR pairing, a device-to-device link, the same review diffs as Git, then Apply. Under the hood, file hashes (SHA) keep a shared baseline so later syncs can show only what changed—Send or Receive without copying the whole workspace every time.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Git&lt;/strong&gt;: collaborate with a team over a remote&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scan Sync&lt;/strong&gt;: move &lt;em&gt;your&lt;/em&gt; workspace between &lt;em&gt;your&lt;/em&gt; devices, quickly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same files. Right tool for each side.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm8pen71auaopz6b60mp6.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm8pen71auaopz6b60mp6.gif" alt=" " width="720" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Scan Sync: pair on the same Wi‑Fi, review, Apply.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Watching the filesystem
&lt;/h2&gt;

&lt;p&gt;A filesystem-first design only works if the interface remains accurate. We added an event tracker on disk so the desktop app notices when a collection or request is added or removed outside the UI; the catalog updates accordingly. The application's own writes are filtered out so autosave does not conflict with the watcher.&lt;/p&gt;

&lt;p&gt;Whether the change comes from Git pull, Scan Sync Apply, or an edit in Finder, the expectation is the same: &lt;strong&gt;the UI matches the folder.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Delete on disk. The UI follows.&lt;/em&gt;&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Do not paper over the foundation.&lt;/strong&gt; A Hive-to-file bridge would have deferred the real design. Mentors advocated filesystem-first. That was the unlock.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use what the architecture already provides.&lt;/strong&gt; JSON was not a fashion choice. &lt;code&gt;toJson&lt;/code&gt; / &lt;code&gt;fromJson&lt;/code&gt; was already familiar ground for Flutter and API Dash.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The filesystem must be usable for humans&lt;/strong&gt;, not only correct for Git. Folders and names should make sense in Finder so users always know &lt;em&gt;what&lt;/em&gt; they are looking at and &lt;em&gt;where&lt;/em&gt; their data lives. If they cannot tell what a file is, the workspace is incomplete.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One truth, several doors.&lt;/strong&gt; Storage, Git, Scan Sync, and disk-to-UI are connected by design, not bolted on separately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Match the tool to the job.&lt;/strong&gt; Git where teams collaborate. Scan Sync where phone speed matters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reuse the review path.&lt;/strong&gt; One Visual/Raw mental model for pull and for phone Apply.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Land the pull requests, then Workflow Builder and Dashboard on a workspace we can trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking back
&lt;/h2&gt;

&lt;p&gt;In retrospect, Git was not really the project.&lt;/p&gt;

&lt;p&gt;The project was building a &lt;strong&gt;workspace architecture&lt;/strong&gt; that Git, Scan Sync, and future features could all rely on.&lt;/p&gt;

&lt;p&gt;Along the way, my priorities also shifted. I previously optimized primarily for clean, maintainable code. That still matters. I now place greater weight on &lt;strong&gt;user experience&lt;/strong&gt;: Can someone open the folder and understand what they are looking at? Can they sync to their phone without fighting the application? Does the UI remain accurate when the disk changes?&lt;/p&gt;

&lt;p&gt;Maintainable code is how you get there. Usability is why it matters.&lt;/p&gt;

</description>
      <category>git</category>
      <category>opensource</category>
      <category>dart</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
