<?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>Forem: Swati</title>
    <description>The latest articles on Forem by Swati (@salswa).</description>
    <link>https://forem.com/salswa</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%2F3378523%2F920451d6-4868-416f-89b6-9c355b68632b.png</url>
      <title>Forem: Swati</title>
      <link>https://forem.com/salswa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/salswa"/>
    <language>en</language>
    <item>
      <title>PhotoSo — Sort Your Photos Fast, Privately, In Browser, Without Leaving Any Window</title>
      <dc:creator>Swati</dc:creator>
      <pubDate>Mon, 02 Mar 2026 06:52:28 +0000</pubDate>
      <link>https://forem.com/salswa/photoso-sort-your-photos-fast-privately-in-browser-without-leaving-any-window-gaf</link>
      <guid>https://forem.com/salswa/photoso-sort-your-photos-fast-privately-in-browser-without-leaving-any-window-gaf</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/weekend-2026-02-28"&gt;DEV Weekend Challenge: Community&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Community
&lt;/h2&gt;

&lt;p&gt;I watched my sister sort her wedding photos the hard way.&lt;br&gt;
Open photo in the photo viewer. Like it? Drag it to a folder in another window. Don't like it?  Open next. Drag again. Repeat 800 times. The constant window-switching, the hovering over folders, the accidental drops — it was exhausting just to watch.&lt;br&gt;
This is how most people do it. Not just wedding photographers — event shooters, travel photographers, content creators, online influencers, even people who just came back from a trip and want to pick their best shots. Anyone who has ever needed to sort a folder of photos has done some version of this painful process.&lt;br&gt;
There are professional tools for this, but they're expensive, require accounts, or upload your photos to a server. Nobody wants their personal or client photos going anywhere they didn't choose.&lt;br&gt;
&lt;strong&gt;PhotoSo solves exactly this — one screen, photos never leave your machine, no account needed, can work offline, works for anyone technical or not.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftvkvuhrer26wwqtql956.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%2Ftvkvuhrer26wwqtql956.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;PhotoSo — a photo sorter app that runs in the browser using the File System Access API. Pick three folders (source, accepted, rejected), sort with click or keyboard controls, navigate freely with ← →. Files move on disk in real time.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change any decision by navigating back — files move to the correct folder automatically&lt;/li&gt;
&lt;li&gt;Four states: Pending, Decide Later, Accepted, Rejected&lt;/li&gt;
&lt;li&gt;Filter timeline by state for a focused second-pass review&lt;/li&gt;
&lt;li&gt;Session resume — reopen with the same folders, picks up where you left off&lt;/li&gt;
&lt;li&gt;Works offline, installable as a desktop PWA&lt;/li&gt;
&lt;li&gt;Desktop only (Chrome / Edge) — File System Access API not supported on all mobiles yet&lt;/li&gt;
&lt;/ul&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%2Fs8v3vpkj40yd1zs8xum2.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%2Fs8v3vpkj40yd1zs8xum2.png" alt=" " width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;App URL:: &lt;a href="https://photoso.pages.dev/" rel="noopener noreferrer"&gt;https://photoso.pages.dev/&lt;/a&gt; &lt;/p&gt;

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

&lt;p&gt;Github Repo URL :: &lt;a href="https://github.com/salswa/photoso" rel="noopener noreferrer"&gt;https://github.com/salswa/photoso&lt;/a&gt; &lt;/p&gt;

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

&lt;p&gt;When I decided to build a photo sorter app, two things were non-negotiable: no friction to use and no compromise on privacy. No login, no uploading photos to a server — people should be able to open the app and just use it. And they should never have to wonder where their photos are going. Wedding memories, client shoots — that's personal. So everything stays on the user's device, nothing goes out, and it works offline too if needed.&lt;br&gt;
That single constraint shaped the entire stack. The whole app is &lt;strong&gt;vanilla JavaScript&lt;/strong&gt; with ES modules.&lt;br&gt;
The core of PhotoSo is the &lt;strong&gt;File System Access API&lt;/strong&gt;, a browser API that lets web apps read and write directly to folders on your machine. It's what makes this feel like a native app.&lt;br&gt;
&lt;strong&gt;Session state is just a single sorted array&lt;/strong&gt; — each entry tracks a photo's name, current state, and which folder it lives in. Navigation is a pointer moving through that array. The same model handles session resume: scan all three folders on startup, merge into one timeline, done. No database. No local storage. The folders are the source of truth.&lt;br&gt;
Finally, used &lt;strong&gt;service worker and manifest&lt;/strong&gt; to build — installable as a desktop app and fully offline-capable. The service worker uses a network-first strategy: when online it fetches fresh files and silently updates the cache; when offline it falls back to what's cached. You always get the latest version on refresh, and it still works with no connection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Language&lt;/strong&gt;   --&amp;gt; Vanilla JavaScript (ES Modules) &lt;br&gt;
&lt;strong&gt;UI&lt;/strong&gt;          --&amp;gt; HTML + CSS, no framework &lt;br&gt;
&lt;strong&gt;File Access&lt;/strong&gt; --&amp;gt; File System Access API &lt;br&gt;
&lt;strong&gt;Offline&lt;/strong&gt;     --&amp;gt; PWA + Service Worker (network-first)&lt;br&gt;
&lt;strong&gt;Hosting&lt;/strong&gt;    --&amp;gt;  Cloudflare Pages&lt;/p&gt;

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

&lt;p&gt;Two things I'm working on next:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Thumbnail View : a scrollable strip at the bottom of the triage screen showing all photos in the timeline with color-coded state indicators. Click any thumbnail to jump directly to that photo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mobile friendly UI on supported devices.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading! If you've ever lost an afternoon to sorting photos the painful way, give PhotoSo a try — it's free, just open and sort. Would love to hear what you think.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>showdev</category>
      <category>photoso</category>
    </item>
    <item>
      <title>Angular CLI: Local vs Global Install</title>
      <dc:creator>Swati</dc:creator>
      <pubDate>Tue, 22 Jul 2025 12:04:47 +0000</pubDate>
      <link>https://forem.com/salswa/angular-cli-local-vs-global-install-3ebb</link>
      <guid>https://forem.com/salswa/angular-cli-local-vs-global-install-3ebb</guid>
      <description>&lt;h2&gt;
  
  
  Global Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g @angular/cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A global install allows you to run Angular CLI commands from anywhere on your system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Local Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @angular/cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This installs the CLI only within your project directory. This ensures &lt;em&gt;all team members use the same CLI version, preventing version mismatch issues&lt;/em&gt; during development or deployment.&lt;/p&gt;

&lt;p&gt;To install specific version of Angular CLI locally, use following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @angular/cli@19.2.15
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check version of installed cli using,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ng version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>angular</category>
      <category>angularcli</category>
      <category>javascript</category>
      <category>cli</category>
    </item>
  </channel>
</rss>
