<?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: wendygostudio</title>
    <description>The latest articles on DEV Community by wendygostudio (@wendygostudio).</description>
    <link>https://dev.to/wendygostudio</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%2F4003595%2Fd0c466cf-949b-4064-8a21-89632a36cf16.png</url>
      <title>DEV Community: wendygostudio</title>
      <link>https://dev.to/wendygostudio</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wendygostudio"/>
    <language>en</language>
    <item>
      <title>X Profile Picture and Header Size: A Crop-Safe Guide</title>
      <dc:creator>wendygostudio</dc:creator>
      <pubDate>Mon, 24 Aug 2026 22:10:49 +0000</pubDate>
      <link>https://dev.to/wendygostudio/x-profile-picture-and-header-size-a-crop-safe-guide-2g99</link>
      <guid>https://dev.to/wendygostudio/x-profile-picture-and-header-size-a-crop-safe-guide-2g99</guid>
      <description>&lt;p&gt;X has two profile images that are easy to confuse: the profile picture next to your posts, and the header/banner across the top of your profile. They need different canvases and different crop decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The official dimensions
&lt;/h2&gt;

&lt;p&gt;X recommends:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Profile picture:&lt;/strong&gt; 400×400 pixels, with a maximum file size of 2 MB.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Header/banner:&lt;/strong&gt; 1500×500 pixels.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;X also warns that about 60 pixels at the top and bottom of a header can be cropped depending on the screen and browser. Keep faces, logos and essential text in the middle of the canvas. The official help pages list JPEG, GIF and PNG for profile photos.&lt;/p&gt;

&lt;p&gt;The most reliable workflow is to start with the right canvas rather than resize a finished crop. Keep the profile image square even when the source is a portrait. For the header, use the full 3:1 canvas and treat the outer edges as expendable.&lt;/p&gt;

&lt;h2&gt;
  
  
  A local crop workflow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Choose 400×400 or 1500×500 before opening the source.&lt;/li&gt;
&lt;li&gt;Set the focal point manually instead of accepting a blind center crop.&lt;/li&gt;
&lt;li&gt;Keep text and faces away from the header's top and bottom edges.&lt;/li&gt;
&lt;li&gt;Export, then inspect the file at its final size on both a wide and narrow viewport.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;FrameForge can do this locally in Chrome, which is useful when you need several versions without sending the source image to a resizing service. The same principle applies to any image tool: verify its current permissions and privacy disclosure before installing it.&lt;/p&gt;

&lt;p&gt;Profile images are not post images. X's current help says a single photo with a standard aspect ratio between 2:1 and 3:4 can display in full. If you need a repeatable wide 16:9 post export, use a separate canvas and check the live composer; 1200×675 is a practical preset, not a universal guarantee for every client.&lt;/p&gt;

&lt;p&gt;For the full dimensions, crop-safe composition and accessibility notes, see the &lt;a href="https://wendygostudio.com/blog/x-twitter-profile-header-image-size/" rel="noopener noreferrer"&gt;X profile picture and header size guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Official references: &lt;a href="https://help.x.com/en/managing-your-account/common-issues-when-uploading-profile-photo" rel="noopener noreferrer"&gt;profile photo and header upload help&lt;/a&gt;, &lt;a href="https://help.x.com/en/managing-your-account/how-to-customize-your-profile" rel="noopener noreferrer"&gt;customize your X profile&lt;/a&gt;, and &lt;a href="https://help.x.com/en/using-x/picture-descriptions" rel="noopener noreferrer"&gt;X image descriptions&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>design</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>privacy</category>
    </item>
    <item>
      <title>Does Forest Work on Chrome? What the Browser Extension Does</title>
      <dc:creator>wendygostudio</dc:creator>
      <pubDate>Sun, 23 Aug 2026 13:46:08 +0000</pubDate>
      <link>https://dev.to/wendygostudio/does-forest-work-on-chrome-what-the-browser-extension-does-561</link>
      <guid>https://dev.to/wendygostudio/does-forest-work-on-chrome-what-the-browser-extension-does-561</guid>
      <description>&lt;p&gt;If you search for a Forest Chrome extension, first separate the official Forest focus product from the many unrelated Chrome themes and productivity add-ons that use “Forest” in their name.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start from the official source
&lt;/h2&gt;

&lt;p&gt;Forest’s current site says the product works on iPhone, iPad, Android, and as a browser extension for Chrome and Firefox. Use the Chrome Web Store link from the official site, then verify that the listing points back to &lt;code&gt;forestapp.cc&lt;/code&gt; and that the publisher details match.&lt;/p&gt;

&lt;p&gt;The listing for “Forest: stay focused, be present” is not the same as every result with a forest-themed name. Treat the publisher link, permissions, and privacy disclosure as part of the installation decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the browser workflow is good at
&lt;/h2&gt;

&lt;p&gt;Forest turns a focus session into a commitment loop: start a session, let a tree grow, and avoid abandoning the block. Forest describes Deep Focus and a browser timer for desktop work. That is a good fit when your task already lives in browser tabs and the main interruption is leaving the session.&lt;/p&gt;

&lt;p&gt;It is not automatically a replacement for phone-level controls, every website blocker, or notification management. Check the current version’s controls before assuming that a specific blocklist or restriction behaves exactly as you expect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Forest is not the same thing as Pomodoro
&lt;/h2&gt;

&lt;p&gt;Forest includes a timer, but its distinctive feedback is the growing tree. Pomodoro is a work-and-break cadence that many different tools can implement. Choose the Forest loop when the visible commitment helps you stay with one block; choose a simpler Pomodoro extension when interval flexibility and minimal setup matter more.&lt;/p&gt;

&lt;p&gt;Run a small comparison instead of choosing from feature lists:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use Forest for three comparable sessions.&lt;/li&gt;
&lt;li&gt;Record sessions started, sessions completed, and time lost before starting.&lt;/li&gt;
&lt;li&gt;Note whether leaving the browser was the real distraction.&lt;/li&gt;
&lt;li&gt;Compare the result with your current timer or a local-first alternative.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The useful tool is the one that makes the next start easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Read privacy statements precisely
&lt;/h2&gt;

&lt;p&gt;The Chrome Web Store listing includes the developer’s data-use declarations. Forest’s own site also describes how focus data and account sync work. These disclosures are useful evidence, but they are not an independent privacy audit. For sensitive work, review permissions and decide whether account sync is necessary or whether a local timer better fits the requirement.&lt;/p&gt;

&lt;p&gt;The full guide covers the browser workflow, offline boundaries, privacy checks, and a seven-day test: &lt;a href="https://wendygostudio.com/blog/forest-chrome-extension-guide/" rel="noopener noreferrer"&gt;Does Forest Work on Chrome? What the Browser Extension Does&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>chrome</category>
      <category>privacy</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Decode JWT Payloads Locally: What the Claims Tell You (and Don't)</title>
      <dc:creator>wendygostudio</dc:creator>
      <pubDate>Wed, 19 Aug 2026 07:21:20 +0000</pubDate>
      <link>https://dev.to/wendygostudio/decode-jwt-payloads-locally-what-the-claims-tell-you-and-dont-9ih</link>
      <guid>https://dev.to/wendygostudio/decode-jwt-payloads-locally-what-the-claims-tell-you-and-dont-9ih</guid>
      <description>&lt;p&gt;JWTs are designed to be readable by the client. That is useful for debugging, but it also means a real token can contain user IDs, email addresses, roles, scopes and expiry data that should not be pasted into a random online decoder.&lt;/p&gt;

&lt;p&gt;The practical distinction is simple: decoding a JWT is not decrypting it, and decoding it is not verifying its signature.&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the three sections first
&lt;/h2&gt;

&lt;p&gt;A compact JWT normally looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HEADER.PAYLOAD.SIGNATURE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The header tells you the token type and signing algorithm. The payload contains JSON claims. The signature is evidence that the issuer signed the other two sections; it is not the part you usually need to inspect.&lt;/p&gt;

&lt;p&gt;The header and payload use Base64url encoding. They are encoded, not encrypted. Anyone who has the token can decode those sections, so treat a token copied from production as sensitive even when you do not have the signing secret.&lt;/p&gt;

&lt;h2&gt;
  
  
  A local browser-console check
&lt;/h2&gt;

&lt;p&gt;For a quick inspection, split the token and decode the first two parts in DevTools. Base64url uses &lt;code&gt;-&lt;/code&gt; and &lt;code&gt;_&lt;/code&gt; instead of &lt;code&gt;+&lt;/code&gt; and &lt;code&gt;/&lt;/code&gt;, so normalize those characters and restore padding:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;decodePart&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;part&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;base64&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;part&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/-/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;+&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/_/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;padded&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;padEnd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ceil&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;atob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;padded&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;encodedHeader&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;encodedPayload&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;header&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;decodePart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;encodedHeader&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;decodePart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;encodedPayload&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This runs in your browser and does not need an external request. Use a redacted fixture when possible; the console is local, but screenshots and copied logs can still leak the claims.&lt;/p&gt;

&lt;h2&gt;
  
  
  Claims worth checking
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;exp&lt;/code&gt;: whether the token has expired;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;iat&lt;/code&gt;: when it was issued;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;aud&lt;/code&gt;: which service it is intended for;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;iss&lt;/code&gt;: which issuer claims to have created it;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;sub&lt;/code&gt;: the subject identifier;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;scope&lt;/code&gt; or &lt;code&gt;roles&lt;/code&gt;: what the token may authorize.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Seeing an &lt;code&gt;admin&lt;/code&gt; role in a payload does not prove that the token is valid or that the server will accept it. It only tells you what the token claims. Signature validation, issuer configuration, audience checks and server-side authorization still matter.&lt;/p&gt;

&lt;h2&gt;
  
  
  When a local tool is easier
&lt;/h2&gt;

&lt;p&gt;The console is great for a one-off check. If you inspect tokens repeatedly, a local browser tool can make the workflow more repeatable: paste the payload section, decode it, copy the JSON, then clear the input. TextForge's JWT and Base64 workflow keeps the transformation in the browser rather than sending the token to a third-party decoder.&lt;/p&gt;

&lt;p&gt;The rule is the same in either workflow: decode only what you need, do not confuse readability with authenticity, and never paste production credentials into a public form just because the page says it is convenient.&lt;/p&gt;

&lt;p&gt;Original guide: &lt;a href="https://wendygostudio.com/blog/decode-jwt-online/" rel="noopener noreferrer"&gt;https://wendygostudio.com/blog/decode-jwt-online/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>security</category>
      <category>webdev</category>
      <category>privacy</category>
    </item>
    <item>
      <title>Focus Block vs Pomodoro Timer: Which Unit Fits Deep Work?</title>
      <dc:creator>wendygostudio</dc:creator>
      <pubDate>Wed, 12 Aug 2026 14:29:00 +0000</pubDate>
      <link>https://dev.to/wendygostudio/focus-block-vs-pomodoro-timer-which-unit-fits-deep-work-1ak5</link>
      <guid>https://dev.to/wendygostudio/focus-block-vs-pomodoro-timer-which-unit-fits-deep-work-1ak5</guid>
      <description>&lt;p&gt;A timer measures attention. A focus block measures the work you want to finish.&lt;/p&gt;

&lt;p&gt;Use a Pomodoro when starting is the hard part: choose 15, 25, 45 or 60 minutes and protect the session. Use a focus block when the task is complex: define the observable result first, such as drafting an introduction or reviewing ten log entries.&lt;/p&gt;

&lt;p&gt;The practical routine is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write one concrete outcome.&lt;/li&gt;
&lt;li&gt;Pick a realistic duration.&lt;/li&gt;
&lt;li&gt;Keep the outcome visible while the timer runs.&lt;/li&gt;
&lt;li&gt;Record what moved forward, not only the minutes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;SlimeForge combines both layers in a local-first Chrome workflow. Goals and projects keep the session tied to real work, while the companion and gentle progress feedback make consistency visible. Focus Shield is optional and can warn about or block distracting sites.&lt;/p&gt;

&lt;p&gt;For deep work, the block is usually the work unit and Pomodoro is the attention boundary.&lt;/p&gt;

&lt;p&gt;Read the full guide: &lt;a href="https://wendygostudio.com/blog/focus-block-vs-pomodoro-timer/" rel="noopener noreferrer"&gt;https://wendygostudio.com/blog/focus-block-vs-pomodoro-timer/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>chrome</category>
      <category>focus</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Convert WebP to JPG Locally in Chrome</title>
      <dc:creator>wendygostudio</dc:creator>
      <pubDate>Mon, 10 Aug 2026 17:04:27 +0000</pubDate>
      <link>https://dev.to/wendygostudio/convert-webp-to-jpg-locally-in-chrome-44h0</link>
      <guid>https://dev.to/wendygostudio/convert-webp-to-jpg-locally-in-chrome-44h0</guid>
      <description>&lt;p&gt;WebP is efficient for the web, but some editors and publishing systems still ask for JPG. ConvertForge handles the change locally in Chrome:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Drop in the WebP file.&lt;/li&gt;
&lt;li&gt;Select JPG.&lt;/li&gt;
&lt;li&gt;Set quality deliberately.&lt;/li&gt;
&lt;li&gt;Check dimensions and transparency.&lt;/li&gt;
&lt;li&gt;Compare the downloaded result before replacing the original.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The file stays in the browser during conversion. Full guide: &lt;a href="https://wendygostudio.com/blog/convert-webp-to-jpg-locally-chrome/" rel="noopener noreferrer"&gt;https://wendygostudio.com/blog/convert-webp-to-jpg-locally-chrome/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the complete local workflow, see &lt;a href="https://wendygostudio.com/convertforge/" rel="noopener noreferrer"&gt;ConvertForge&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>chrome</category>
      <category>webdev</category>
      <category>images</category>
    </item>
    <item>
      <title>How to Build a Focus Ritual in Chrome Before a Pomodoro Session</title>
      <dc:creator>wendygostudio</dc:creator>
      <pubDate>Sun, 09 Aug 2026 16:50:41 +0000</pubDate>
      <link>https://dev.to/wendygostudio/how-to-build-a-focus-ritual-in-chrome-before-a-pomodoro-session-25og</link>
      <guid>https://dev.to/wendygostudio/how-to-build-a-focus-ritual-in-chrome-before-a-pomodoro-session-25og</guid>
      <description>&lt;p&gt;Starting is often harder than the work. A focus ritual reduces the choices between opening Chrome and doing the first useful action.&lt;/p&gt;

&lt;p&gt;For the complete local workflow, see &lt;a href="https://wendygostudio.com/slimeforge/" rel="noopener noreferrer"&gt;SlimeForge&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Try this four-step setup:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write one observable outcome.&lt;/li&gt;
&lt;li&gt;Choose a realistic 15 or 25 minute block.&lt;/li&gt;
&lt;li&gt;Keep necessary research open and restrict only the sites that distract you.&lt;/li&gt;
&lt;li&gt;Start the smallest action immediately.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;SlimeForge connects that ritual to the session: goals, projects, the optional Focus Shield and the companion all stay in one local-first workflow. Read the full guide: &lt;a href="https://wendygostudio.com/blog/focus-rituals-pomodoro-chrome/" rel="noopener noreferrer"&gt;https://wendygostudio.com/blog/focus-rituals-pomodoro-chrome/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>chrome</category>
      <category>webdev</category>
      <category>focus</category>
    </item>
    <item>
      <title>Safe Margins for Social Media Images: A Chrome Workflow</title>
      <dc:creator>wendygostudio</dc:creator>
      <pubDate>Sun, 09 Aug 2026 16:49:51 +0000</pubDate>
      <link>https://dev.to/wendygostudio/safe-margins-for-social-media-images-a-chrome-workflow-4jn1</link>
      <guid>https://dev.to/wendygostudio/safe-margins-for-social-media-images-a-chrome-workflow-4jn1</guid>
      <description>&lt;p&gt;Social platforms crop the same image differently. The easiest way to avoid clipped headlines and logos is to treat the final crop as a separate preparation step.&lt;/p&gt;

&lt;p&gt;This short workflow uses FrameForge in Chrome:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start from the finished local image.&lt;/li&gt;
&lt;li&gt;Choose the destination preset before judging the crop.&lt;/li&gt;
&lt;li&gt;Keep the focal point and important text away from the edges.&lt;/li&gt;
&lt;li&gt;Remove tiny edge-dependent details.&lt;/li&gt;
&lt;li&gt;Export a clean copy and check it at the size people will see.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result is a repeatable, private handoff from design to publishing. FrameForge processes the image locally, so the margin check does not require an account or an upload.&lt;/p&gt;

&lt;p&gt;For the complete local workflow, see &lt;a href="https://wendygostudio.com/frameforge/" rel="noopener noreferrer"&gt;FrameForge&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Read the full guide: &lt;a href="https://wendygostudio.com/blog/safe-margins-social-media-images-chrome/" rel="noopener noreferrer"&gt;https://wendygostudio.com/blog/safe-margins-social-media-images-chrome/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>chrome</category>
      <category>webdev</category>
      <category>design</category>
    </item>
    <item>
      <title>Convert a Markdown Table to Plain Text in Chrome</title>
      <dc:creator>wendygostudio</dc:creator>
      <pubDate>Sun, 09 Aug 2026 16:49:50 +0000</pubDate>
      <link>https://dev.to/wendygostudio/convert-a-markdown-table-to-plain-text-in-chrome-55kd</link>
      <guid>https://dev.to/wendygostudio/convert-a-markdown-table-to-plain-text-in-chrome-55kd</guid>
      <description>&lt;p&gt;Markdown tables are useful in a repository but awkward in email, tickets and terminals. A small local cleanup workflow can remove the pipes and alignment row without damaging the values.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Paste the raw table.&lt;/li&gt;
&lt;li&gt;Remove the separator row.&lt;/li&gt;
&lt;li&gt;Normalize spacing and wrapped lines.&lt;/li&gt;
&lt;li&gt;Choose one stable separator.&lt;/li&gt;
&lt;li&gt;Check a sample row before exporting.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;TextForge keeps this cleanup in the browser and does not require an account. Read the full guide: &lt;a href="https://wendygostudio.com/blog/convert-markdown-table-plain-text-chrome/" rel="noopener noreferrer"&gt;https://wendygostudio.com/blog/convert-markdown-table-plain-text-chrome/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the complete local workflow, see &lt;a href="https://wendygostudio.com/textforge/" rel="noopener noreferrer"&gt;TextForge&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>chrome</category>
      <category>webdev</category>
      <category>text</category>
    </item>
    <item>
      <title>Pomodoro Focus Shield for Chrome: Protect the Block, Not the Whole Browser</title>
      <dc:creator>wendygostudio</dc:creator>
      <pubDate>Thu, 06 Aug 2026 14:17:21 +0000</pubDate>
      <link>https://dev.to/wendygostudio/pomodoro-focus-shield-for-chrome-protect-the-block-not-the-whole-browser-187m</link>
      <guid>https://dev.to/wendygostudio/pomodoro-focus-shield-for-chrome-protect-the-block-not-the-whole-browser-187m</guid>
      <description>&lt;h1&gt;
  
  
  A focus shield should protect the block, not your whole browser
&lt;/h1&gt;

&lt;p&gt;Blocking every distracting site sounds productive until the work itself needs research, documentation or a team chat. The useful version of a focus shield is narrower: protect the current Pomodoro block while leaving the context that makes the task possible.&lt;/p&gt;

&lt;p&gt;A practical setup looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Define one observable outcome for the block.&lt;/li&gt;
&lt;li&gt;Choose a duration you are likely to finish.&lt;/li&gt;
&lt;li&gt;Add only the two or three sites that repeatedly pull you away.&lt;/li&gt;
&lt;li&gt;Review the list during the break, not every few minutes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The distinction matters because a shield is a focus aid, not a security boundary. If it blocks legitimate context, you will disable it. If it adds a small amount of friction to the sites you open automatically, it can help the work block win that first decision.&lt;/p&gt;

&lt;p&gt;SlimeForge combines a Pomodoro timer with an optional Focus Shield. Sessions can be 15, 25, 45 or 60 minutes, and a companion grows as completed blocks accumulate. The core experience is local-first and does not require an account. Optional on-device AI depends on browser and device support.&lt;/p&gt;

&lt;p&gt;The best shield is the one you barely notice while working. Keep the list task-specific, leave essential tabs available and use the break to adjust the next block.&lt;/p&gt;

&lt;p&gt;For the complete local workflow, see &lt;a href="https://wendygostudio.com/slimeforge/" rel="noopener noreferrer"&gt;SlimeForge&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Full guide: &lt;a href="https://wendygostudio.com/blog/pomodoro-focus-shield-chrome/" rel="noopener noreferrer"&gt;Pomodoro Focus Shield for Chrome&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>chrome</category>
      <category>focus</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Focus Timer with a Virtual Pet: When Visible Progress Helps</title>
      <dc:creator>wendygostudio</dc:creator>
      <pubDate>Wed, 05 Aug 2026 14:09:37 +0000</pubDate>
      <link>https://dev.to/wendygostudio/focus-timer-with-a-virtual-pet-when-visible-progress-helps-2e3k</link>
      <guid>https://dev.to/wendygostudio/focus-timer-with-a-virtual-pet-when-visible-progress-helps-2e3k</guid>
      <description>&lt;h1&gt;
  
  
  Why a focus block can be more motivating when it leaves a visible trace
&lt;/h1&gt;

&lt;p&gt;Most timers make a completed session disappear. You hear a bell, the counter resets, and tomorrow looks exactly like today. That is fine if the habit is already automatic. It is less helpful when the difficult part is returning to the task.&lt;/p&gt;

&lt;p&gt;A different pattern is to keep the work block as the real unit, then add a small, immediate feedback loop around it. A virtual companion can make the completed block visible without turning focus into a points spreadsheet. The timer still measures attention; the companion simply gives the finished work a place in the story.&lt;/p&gt;

&lt;p&gt;In practice, the routine is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Choose a short block you can actually finish.&lt;/li&gt;
&lt;li&gt;Write one observable outcome before starting.&lt;/li&gt;
&lt;li&gt;Work until the bell instead of checking the reward layer.&lt;/li&gt;
&lt;li&gt;Review progress during the break, then decide whether to repeat.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This distinction matters. Gamification should reduce the friction of starting, not create another dashboard to maintain. If the pet becomes more interesting than the task, move all companion interactions to the break and keep the timer front and centre.&lt;/p&gt;

&lt;p&gt;SlimeForge applies this local-first approach to a Pomodoro timer. Completed sessions help a small animal-slime grow, while missions and gentle streaks make consistency visible. The extension works without an account, and optional on-device AI depends on browser and device support. Focus Shield is a focus aid, not parental-control software.&lt;/p&gt;

&lt;p&gt;The useful test is not whether the reward feels exciting forever. It is whether it helps you complete the next block long enough for the habit to become easier on its own. A plain timer may be the right tool once that happens; a companion is simply one way to bridge the gap.&lt;/p&gt;

&lt;p&gt;Read the full guide: &lt;a href="https://wendygostudio.com/blog/focus-timer-virtual-pet-chrome-extension/" rel="noopener noreferrer"&gt;Focus Timer with a Virtual Pet&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>webdev</category>
      <category>chrome</category>
      <category>focus</category>
    </item>
    <item>
      <title>SlimeForge 1.9.13: Focus Sessions That Grow With You</title>
      <dc:creator>wendygostudio</dc:creator>
      <pubDate>Sun, 02 Aug 2026 23:57:21 +0000</pubDate>
      <link>https://dev.to/wendygostudio/slimeforge-1913-focus-sessions-that-grow-with-you-30m2</link>
      <guid>https://dev.to/wendygostudio/slimeforge-1913-focus-sessions-that-grow-with-you-30m2</guid>
      <description>&lt;p&gt;SlimeForge 1.9.13 makes focus feel like visible progress.&lt;/p&gt;

&lt;p&gt;Every completed Pomodoro helps a tiny animal-slime companion grow. You can choose 15, 25, 45 or 60 minutes, add a goal, and use Focus Shield to gently warn you about distracting sites or block them until the session ends.&lt;/p&gt;

&lt;p&gt;The update also brings a larger world around the timer: daily missions, gentle streaks, minigames, a garden, a wardrobe, Pack Mode for up to three companions, and expeditions with materials and relics to discover.&lt;/p&gt;

&lt;p&gt;Optional on-device AI can help turn a vague goal into a practical next step. The model runs locally when supported by the browser and device.&lt;/p&gt;

&lt;p&gt;SlimeForge requires no account and includes no tracking. The free version includes the complete timer, basic Focus Shield and a weekly expedition.&lt;/p&gt;

&lt;p&gt;Try SlimeForge: &lt;a href="https://wendygostudio.com/slimeforge/" rel="noopener noreferrer"&gt;wendygostudio.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>chrome</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Why a Gamified Pomodoro Timer Can Make Focus Easier to Restart</title>
      <dc:creator>wendygostudio</dc:creator>
      <pubDate>Tue, 28 Jul 2026 15:18:09 +0000</pubDate>
      <link>https://dev.to/wendygostudio/why-a-gamified-pomodoro-timer-can-make-focus-easier-to-restart-50bm</link>
      <guid>https://dev.to/wendygostudio/why-a-gamified-pomodoro-timer-can-make-focus-easier-to-restart-50bm</guid>
      <description>&lt;h1&gt;
  
  
  Why a Gamified Pomodoro Timer Can Make Focus Easier to Restart
&lt;/h1&gt;

&lt;p&gt;Most Pomodoro timers solve the countdown problem. They tell you when to work, when to pause, and when the session is over. That is useful, but it leaves out the part that determines whether you open the timer tomorrow: the feedback loop.&lt;/p&gt;

&lt;p&gt;A gamified Pomodoro timer connects a finished session to visible progress. Instead of resetting to zero after every 25 minutes, your effort becomes something you can see and return to. The reward does not need to be large. It needs to arrive immediately and make the next session feel worth starting.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes when the timer remembers your effort?
&lt;/h2&gt;

&lt;p&gt;A plain timer gives you a sound and a number. A gamified timer can give you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a streak that reflects completed sessions;&lt;/li&gt;
&lt;li&gt;a companion or collection that grows over time;&lt;/li&gt;
&lt;li&gt;small milestones between longer-term goals;&lt;/li&gt;
&lt;li&gt;a reason to come back that is separate from willpower.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That distinction matters during the first weeks of a new routine. Motivation is usually weakest before the behavior becomes automatic. A visible reward makes the result of one session concrete, which lowers the friction of starting the next one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The important design choice: effort, not spending
&lt;/h2&gt;

&lt;p&gt;Gamification only helps if the reward system reinforces the behavior you want. In SlimeForge, focus sessions earn Brasas, the in-extension currency used for progression. Random progression is earned through focus; real-money purchases never buy a random outcome. That keeps the loop tied to the habit instead of turning progress into a spending mechanic.&lt;/p&gt;

&lt;p&gt;The timer remains the main tool. The companion is a motivation layer, not a replacement for the work. If missions or collection screens become distracting, keep them between sessions and return to the countdown.&lt;/p&gt;

&lt;h2&gt;
  
  
  A simple routine to try
&lt;/h2&gt;

&lt;p&gt;Start with 25 minutes, complete the session, and look at the immediate result before deciding whether to continue. After a few days, compare completed sessions rather than total hours. Consistency is easier to maintain when the measure is small enough to repeat.&lt;/p&gt;

&lt;p&gt;The best timer is the one that makes the next focused session easier to begin. A virtual companion will not create discipline by itself, but it can turn an abstract streak into a visible routine.&lt;/p&gt;

&lt;p&gt;Read the full guide with more details on &lt;a href="https://wendygostudio.com/blog/gamified-pomodoro-timer-chrome-extension/" rel="noopener noreferrer"&gt;wendygostudio.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>chrome</category>
      <category>focus</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
