<?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: minjungsung1994</title>
    <description>The latest articles on DEV Community by minjungsung1994 (@unsweetened).</description>
    <link>https://dev.to/unsweetened</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%2F737129%2F58fcb9fd-a7f4-4157-960d-e7ec14a3bec5.jpeg</url>
      <title>DEV Community: minjungsung1994</title>
      <link>https://dev.to/unsweetened</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/unsweetened"/>
    <language>en</language>
    <item>
      <title>Violet Night: a charcoal and purple Chrome theme</title>
      <dc:creator>minjungsung1994</dc:creator>
      <pubDate>Mon, 26 Oct 2026 09:14:14 +0000</pubDate>
      <link>https://dev.to/unsweetened/violet-night-a-charcoal-and-purple-chrome-theme-1de</link>
      <guid>https://dev.to/unsweetened/violet-night-a-charcoal-and-purple-chrome-theme-1de</guid>
      <description>&lt;p&gt;If you prefer a dark browser with violet accents, I built Violet Night for Chrome.&lt;/p&gt;

&lt;p&gt;It changes the browser frame, toolbar, address bar, tab text and New Tab background with charcoal surfaces and light text. It does not change website content or replace the New Tab page.&lt;/p&gt;

&lt;p&gt;The theme has no executable scripts, requested permissions, ads or analytics. Inspired by the Dracula palette, independently created and not affiliated with the official Dracula project.&lt;/p&gt;

&lt;p&gt;Install: &lt;a href="https://chromewebstore.google.com/detail/ghjbjlpinpdjiccmbppedaldpaionlhl" rel="noopener noreferrer"&gt;https://chromewebstore.google.com/detail/ghjbjlpinpdjiccmbppedaldpaionlhl&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am the developer. Feedback on your experience and confusing steps is welcome.&lt;/p&gt;

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

&lt;p&gt;Violet Night is a Chrome theme rather than a script-based extension. Its theme manifest and static assets style the browser frame, toolbar, address bar, tab text and New Tab background.&lt;/p&gt;

&lt;p&gt;That distinction keeps the scope small: no executable scripts, requested permissions, analytics or remote services. It does not change page content or replace the New Tab page. Exact rendering varies with Chrome and the operating system.&lt;/p&gt;

&lt;p&gt;The palette draws inspiration from Dracula, but the theme is independently created and is not affiliated with the official Dracula project. To remove it, use Chrome Settings → Appearance → Reset to default.&lt;/p&gt;

</description>
      <category>design</category>
      <category>showdev</category>
      <category>tools</category>
    </item>
    <item>
      <title>FocusPet: a small focus session with a virtual companion</title>
      <dc:creator>minjungsung1994</dc:creator>
      <pubDate>Mon, 26 Oct 2026 09:13:30 +0000</pubDate>
      <link>https://dev.to/unsweetened/focuspet-a-small-focus-session-with-a-virtual-companion-3mgf</link>
      <guid>https://dev.to/unsweetened/focuspet-a-small-focus-session-with-a-virtual-companion-3mgf</guid>
      <description>&lt;p&gt;Sometimes starting a short focus session is easier than setting up a whole productivity system.&lt;/p&gt;

&lt;p&gt;I built FocusPet: start with a cat and a 25-minute timer, or choose 5 or 15 minutes. Pause, resume, earn visible accessories for completed sessions, and start a short break when you finish.&lt;/p&gt;

&lt;p&gt;State stays on your device across popup closure and browser restarts. No account or browsing-history access. It is a visual focus aid, not a website blocker.&lt;/p&gt;

&lt;p&gt;Install: &lt;a href="https://chromewebstore.google.com/detail/cbfjjbjnoogmgpggefjgphhdfdpciclk" rel="noopener noreferrer"&gt;https://chromewebstore.google.com/detail/cbfjjbjnoogmgpggefjgphhdfdpciclk&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am the developer. Feedback on your experience and confusing steps is welcome.&lt;/p&gt;

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

&lt;p&gt;A popup’s lifetime is shorter than a focus session. FocusPet therefore stores timer state using absolute deadlines rather than relying on a countdown that exists only while the popup is open. State persists across popup closure and browser restarts.&lt;/p&gt;

&lt;p&gt;Chrome storage keeps session and companion progress, alarms schedule completion, and notifications display a generic completion message. Completion can still be delayed when the browser is closed, the machine is asleep, or operating-system settings block notifications.&lt;/p&gt;

&lt;p&gt;The companion grows through completed focus sessions. It does not measure attention, monitor browsing history or block websites. That keeps the product’s promise aligned with the data it actually observes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try the workflow
&lt;/h2&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%2Fbbwmrad5mluloqn1hjlq.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%2Fbbwmrad5mluloqn1hjlq.gif" alt="Guided extension walkthrough" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The walkthrough uses fictional data. FocusPet’s completion demonstration is accelerated; the LeetHub demonstration simulates upload responses and does not perform a live GitHub write.&lt;/p&gt;

&lt;p&gt;Source and setup: &lt;a href="https://github.com/minjungsung/chrome-extension-focuspet" rel="noopener noreferrer"&gt;https://github.com/minjungsung/chrome-extension-focuspet&lt;/a&gt;&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>productivity</category>
      <category>showdev</category>
      <category>webdev</category>
    </item>
    <item>
      <title>LinkLoom: preview and copy a cleaner URL</title>
      <dc:creator>minjungsung1994</dc:creator>
      <pubDate>Mon, 26 Oct 2026 09:12:48 +0000</pubDate>
      <link>https://dev.to/unsweetened/linkloom-preview-and-copy-a-cleaner-url-2fcn</link>
      <guid>https://dev.to/unsweetened/linkloom-preview-and-copy-a-cleaner-url-2fcn</guid>
      <description>&lt;p&gt;Sharing a useful page should not require manually deleting a long trail of tracking parameters.&lt;/p&gt;

&lt;p&gt;I built LinkLoom to preview the active tab URL and remove recognized trackers before you copy it. Functional query values and fragments are retained; detected signed or tokenized links are preserved. Batch cleanup and text or Markdown export are also available.&lt;/p&gt;

&lt;p&gt;No account, analytics or persistent URL storage. It does not visit destinations or guarantee removal of every tracker.&lt;/p&gt;

&lt;p&gt;Install: &lt;a href="https://chromewebstore.google.com/detail/pkodiocfdnhpbpmjdjlidbhedfkdjnnh" rel="noopener noreferrer"&gt;https://chromewebstore.google.com/detail/pkodiocfdnhpbpmjdjlidbhedfkdjnnh&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am the developer. Feedback on your experience and confusing steps is welcome.&lt;/p&gt;

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

&lt;p&gt;The cleanup boundary is conservative. Recognized tracking parameters can be removed, while unrelated query values and URL fragments are preserved. Detected signed or tokenized links remain unchanged, because deleting part of such a URL can break access or validation.&lt;/p&gt;

&lt;p&gt;LinkLoom prepares a preview from the active tab URL when the popup opens. Copying happens only when the user presses the button. URL data stays in popup memory rather than persistent storage; batch cleanup supports up to 100 links.&lt;/p&gt;

&lt;p&gt;This is not a destination crawler. It does not expand short URLs or fetch pages, and cannot promise that every tracker is removed. Reviewing the result before sharing important links remains part of the workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try the workflow
&lt;/h2&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%2Fe9zh04l9p5genul3ygqp.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%2Fe9zh04l9p5genul3ygqp.gif" alt="Guided extension walkthrough" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The walkthrough uses fictional data. FocusPet’s completion demonstration is accelerated; the LeetHub demonstration simulates upload responses and does not perform a live GitHub write.&lt;/p&gt;

&lt;p&gt;Source and setup: &lt;a href="https://github.com/minjungsung/chrome-extension-linkloom" rel="noopener noreferrer"&gt;https://github.com/minjungsung/chrome-extension-linkloom&lt;/a&gt;&lt;/p&gt;

</description>
      <category>browser</category>
      <category>showdev</category>
      <category>tools</category>
      <category>webdev</category>
    </item>
    <item>
      <title>QuoteHarbor: keep the quote and its source</title>
      <dc:creator>minjungsung1994</dc:creator>
      <pubDate>Mon, 26 Oct 2026 09:10:02 +0000</pubDate>
      <link>https://dev.to/unsweetened/quoteharbor-keep-the-quote-and-its-source-2f73</link>
      <guid>https://dev.to/unsweetened/quoteharbor-keep-the-quote-and-its-source-2f73</guid>
      <description>&lt;p&gt;Found a sentence you want to remember, but lose the source when you copy it?&lt;/p&gt;

&lt;p&gt;I built QuoteHarbor to preview your selected passage and save it with the page title and URL. Search and edit your local library later, add optional notes and tags, or export Markdown and JSON backups.&lt;/p&gt;

&lt;p&gt;No account, ads or analytics. It saves only after you click Save and does not create verified academic citations or cloud sync.&lt;/p&gt;

&lt;p&gt;Install: &lt;a href="https://chromewebstore.google.com/detail/kaflppcnmmcejmdhcnicjhoaogagjgbd" rel="noopener noreferrer"&gt;https://chromewebstore.google.com/detail/kaflppcnmmcejmdhcnicjhoaogagjgbd&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am the developer. Feedback on your experience and confusing steps is welcome.&lt;/p&gt;

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

&lt;p&gt;Capture happens when the user invokes the extension. The activeTab permission grants temporary access to the current page, while scripting reads the selected text in the top frame for a preview. Saving requires an explicit click; there is no background scanning.&lt;/p&gt;

&lt;p&gt;The local library contains the quote, optional notes and tags, source title and URL, and timestamps. Search, editing, Markdown export and JSON backups make the saved material reusable without a cloud account.&lt;/p&gt;

&lt;p&gt;Browser restrictions still matter. Some pages, embedded frames and PDF viewers do not allow capture; manual paste is the fallback. Attaching a source URL helps preserve provenance, but it does not produce a verified academic citation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try the workflow
&lt;/h2&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%2Fdfe3uk1ob7xv91pk9ehc.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%2Fdfe3uk1ob7xv91pk9ehc.gif" alt="Guided extension walkthrough" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The walkthrough uses fictional data. FocusPet’s completion demonstration is accelerated; the LeetHub demonstration simulates upload responses and does not perform a live GitHub write.&lt;/p&gt;

&lt;p&gt;Source and setup: &lt;a href="https://github.com/minjungsung/chrome-extension-quoteharbor" rel="noopener noreferrer"&gt;https://github.com/minjungsung/chrome-extension-quoteharbor&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>showdev</category>
      <category>tools</category>
    </item>
    <item>
      <title>TabBunny: save today’s tabs and resume tomorrow</title>
      <dc:creator>minjungsung1994</dc:creator>
      <pubDate>Mon, 26 Oct 2026 09:08:03 +0000</pubDate>
      <link>https://dev.to/unsweetened/tabbunny-save-todays-tabs-and-resume-tomorrow-omn</link>
      <guid>https://dev.to/unsweetened/tabbunny-save-todays-tabs-and-resume-tomorrow-omn</guid>
      <description>&lt;p&gt;Finishing a research session with too many tabs open?&lt;/p&gt;

&lt;p&gt;I built TabBunny so one click saves the web links in your current window with an automatic date label. Resume them later in a new window, or organize selected tabs into named projects and export a backup.&lt;/p&gt;

&lt;p&gt;Your current tabs stay open. Collections are stored locally, with no account or analytics. Saved links do not preserve form edits or login state.&lt;/p&gt;

&lt;p&gt;Install: &lt;a href="https://chromewebstore.google.com/detail/gmggibbkhagclmcdlcgimijalmedhmhj" rel="noopener noreferrer"&gt;https://chromewebstore.google.com/detail/gmggibbkhagclmcdlcgimijalmedhmhj&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am the developer. Feedback on your experience and confusing steps is welcome.&lt;/p&gt;

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

&lt;p&gt;A saved session is a collection of links, not a copy of browser state. Each collection keeps names, URLs, titles, pinned flags and timestamps on the device. This boundary is intentional: it can reopen pages, but cannot recover unsaved forms, cookies, scroll positions or login state.&lt;/p&gt;

&lt;p&gt;Quick saves receive a date label. Repeated identical quick saves refresh the latest snapshot. Optional named projects support selected tabs and backups. HTTP and HTTPS links are supported; internal pages, local files and credential-bearing URLs are skipped.&lt;/p&gt;

&lt;p&gt;The extension uses Chrome’s tabs and storage APIs. There is no runtime dependency or build step: the public repository can be loaded unpacked from its extension directory. This is a useful starting point for studying a small local tab-management workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try the workflow
&lt;/h2&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%2F9v32pzlml2xvhl2w7a7p.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%2F9v32pzlml2xvhl2w7a7p.gif" alt="Guided extension walkthrough" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The walkthrough uses fictional data. FocusPet’s completion demonstration is accelerated; the LeetHub demonstration simulates upload responses and does not perform a live GitHub write.&lt;/p&gt;

&lt;p&gt;Source and setup: &lt;a href="https://github.com/minjungsung/chrome-extension-tabbunny" rel="noopener noreferrer"&gt;https://github.com/minjungsung/chrome-extension-tabbunny&lt;/a&gt;&lt;/p&gt;

</description>
      <category>browser</category>
      <category>productivity</category>
      <category>showdev</category>
      <category>tools</category>
    </item>
    <item>
      <title>LeetHub: keep accepted LeetCode solutions in GitHub</title>
      <dc:creator>minjungsung1994</dc:creator>
      <pubDate>Mon, 26 Oct 2026 09:07:55 +0000</pubDate>
      <link>https://dev.to/unsweetened/leethub-keep-accepted-leetcode-solutions-in-github-2fnf</link>
      <guid>https://dev.to/unsweetened/leethub-keep-accepted-leetcode-solutions-in-github-2fnf</guid>
      <description>&lt;p&gt;Solved a LeetCode problem and want the solution in your GitHub repository?&lt;/p&gt;

&lt;p&gt;I built LeetHub to upload accepted submissions using the actual submitted source and language. It creates the solution file and problem README, skips identical content, and supports manual upload by submission URL or ID.&lt;/p&gt;

&lt;p&gt;Setup requires a GitHub token restricted to the repository you choose. LeetCode is the supported platform; bulk history import is not included.&lt;/p&gt;

&lt;p&gt;Install: &lt;a href="https://chromewebstore.google.com/detail/igcdoidkkmchcpanpfbpcghbfldjfjfo" rel="noopener noreferrer"&gt;https://chromewebstore.google.com/detail/igcdoidkkmchcpanpfbpcghbfldjfjfo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am the developer. Feedback on your experience and confusing steps is welcome.&lt;/p&gt;

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

&lt;p&gt;The key design choice is to fetch the accepted submission detail rather than copy the editor DOM. The source and language belong to the submitted solution, which avoids confusing a currently edited draft with what LeetCode actually accepted.&lt;/p&gt;

&lt;p&gt;On the GitHub side, identical solution and README content is skipped. Updates use the default branch and non-forced branch updates, with conflict retries to avoid replacing concurrent commits. Extraction or repository errors are reported rather than counted as successful uploads.&lt;/p&gt;

&lt;p&gt;The code uses independent popup, content-script and service-worker bundles. The repository documents type checking and Vitest checks for extraction, deduplication, conflicts and setup. For local development, build the extension and load the build directory through Chrome Developer mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try the workflow
&lt;/h2&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%2Fanai97lw4ylnkgrbyahj.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%2Fanai97lw4ylnkgrbyahj.gif" alt="Guided extension walkthrough" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The walkthrough uses fictional data. FocusPet’s completion demonstration is accelerated; the LeetHub demonstration simulates upload responses and does not perform a live GitHub write.&lt;/p&gt;

&lt;p&gt;Source and setup: &lt;a href="https://github.com/minjungsung/chrome-extension-leethub" rel="noopener noreferrer"&gt;https://github.com/minjungsung/chrome-extension-leethub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>programming</category>
      <category>showdev</category>
      <category>tools</category>
    </item>
  </channel>
</rss>
