<?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: GhostlyInc</title>
    <description>The latest articles on Forem by GhostlyInc (@ghostlyinc).</description>
    <link>https://forem.com/ghostlyinc</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%2F3731557%2F2dd58f1d-7dd0-414a-bb6b-3360715e5479.png</url>
      <title>Forem: GhostlyInc</title>
      <link>https://forem.com/ghostlyinc</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ghostlyinc"/>
    <language>en</language>
    <item>
      <title>I built a menu-driven hosting tool for Blazor Server on Ubuntu</title>
      <dc:creator>GhostlyInc</dc:creator>
      <pubDate>Fri, 10 Apr 2026 22:01:42 +0000</pubDate>
      <link>https://forem.com/ghostlyinc/i-built-a-menu-driven-hosting-tool-for-blazor-server-on-ubuntu-2a49</link>
      <guid>https://forem.com/ghostlyinc/i-built-a-menu-driven-hosting-tool-for-blazor-server-on-ubuntu-2a49</guid>
      <description>&lt;p&gt;Self-hosting a Blazor Server app sounds simple…&lt;br&gt;
until you actually do it.&lt;/p&gt;

&lt;p&gt;Nginx, systemd, SSL, firewall, Cloudflare —&lt;br&gt;
it quickly turns into a lot of manual setup.&lt;/p&gt;

&lt;p&gt;So I built GhostlyHosting.&lt;/p&gt;

&lt;p&gt;A small, menu-driven CLI that prepares a fresh Ubuntu VPS and deploys your .NET app step by step.&lt;/p&gt;

&lt;p&gt;⚙️ What it does&lt;/p&gt;

&lt;p&gt;Instead of setting everything up manually, you just run:&lt;/p&gt;

&lt;p&gt;ghostly-hosting&lt;/p&gt;

&lt;p&gt;And follow the menu.&lt;/p&gt;

&lt;p&gt;It helps you:&lt;/p&gt;

&lt;p&gt;deploy apps directly from GitHub&lt;br&gt;
configure nginx as reverse proxy&lt;br&gt;
create and manage systemd services&lt;br&gt;
setup Let's Encrypt SSL&lt;br&gt;
integrate Cloudflare (DNS + proxy)&lt;br&gt;
configure firewall + Fail2Ban&lt;br&gt;
host multiple apps on a single server&lt;br&gt;
🧠 The idea&lt;/p&gt;

&lt;p&gt;I didn’t want:&lt;/p&gt;

&lt;p&gt;complex CI/CD pipelines&lt;br&gt;
Docker setups for simple apps&lt;br&gt;
hours of server configuration&lt;/p&gt;

&lt;p&gt;I wanted:&lt;/p&gt;

&lt;p&gt;👉 a simple, repeatable workflow&lt;br&gt;
👉 that works on any Ubuntu VPS&lt;br&gt;
👉 without hiding what’s happening&lt;/p&gt;

&lt;p&gt;🚀 Typical workflow&lt;br&gt;
Fresh Ubuntu VPS&lt;br&gt;
Install GhostlyHosting&lt;br&gt;
Run the tool&lt;br&gt;
Add your app&lt;br&gt;
Done&lt;/p&gt;

&lt;p&gt;Behind the scenes it:&lt;/p&gt;

&lt;p&gt;clones your repo&lt;br&gt;
builds your .NET app&lt;br&gt;
configures nginx&lt;br&gt;
creates a systemd service&lt;br&gt;
sets up SSL&lt;br&gt;
💸 Cheap hosting is enough&lt;/p&gt;

&lt;p&gt;You don’t need an expensive server.&lt;/p&gt;

&lt;p&gt;You can run multiple apps on a ~3€ VPS without problems,&lt;br&gt;
as long as your apps are lightweight (which most Blazor Server apps are).&lt;/p&gt;

&lt;p&gt;🔁 Reroll instead of fixing&lt;/p&gt;

&lt;p&gt;One thing I really like:&lt;/p&gt;

&lt;p&gt;If something breaks or gets messy, you don’t debug for hours.&lt;/p&gt;

&lt;p&gt;You just:&lt;/p&gt;

&lt;p&gt;spin up a fresh server&lt;br&gt;
run GhostlyHosting again&lt;br&gt;
redeploy your apps&lt;/p&gt;

&lt;p&gt;Clean, fast, predictable.&lt;/p&gt;

&lt;p&gt;🎯 Who it's for&lt;br&gt;
solo developers&lt;br&gt;
side projects&lt;br&gt;
MVPs&lt;br&gt;
people who want full control over their VPS&lt;br&gt;
🔗 Links&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/Nix1983/Ghostly-Hosting" rel="noopener noreferrer"&gt;https://github.com/Nix1983/Ghostly-Hosting&lt;/a&gt;&lt;br&gt;
Website: &lt;a href="https://ghostlyinc.com/en-us/tools/ghostly-hosting/" rel="noopener noreferrer"&gt;https://ghostlyinc.com/en-us/tools/ghostly-hosting/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💬 Final thought&lt;/p&gt;

&lt;p&gt;For many projects, simple beats complex.&lt;/p&gt;

&lt;p&gt;You don’t need a DevOps stack.&lt;/p&gt;

&lt;p&gt;You just need a server that works.&lt;/p&gt;

&lt;p&gt;What are you using for self-hosting your .NET apps?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>dotnet</category>
      <category>programming</category>
      <category>devops</category>
    </item>
    <item>
      <title>Why Most JSON-LD Implementations Are Useless (Even When They’re “Correct”)</title>
      <dc:creator>GhostlyInc</dc:creator>
      <pubDate>Mon, 30 Mar 2026 20:56:10 +0000</pubDate>
      <link>https://forem.com/ghostlyinc/why-most-json-ld-implementations-are-useless-even-when-theyre-correct-4hkj</link>
      <guid>https://forem.com/ghostlyinc/why-most-json-ld-implementations-are-useless-even-when-theyre-correct-4hkj</guid>
      <description>&lt;p&gt;Most developers think their JSON-LD is fine.&lt;/p&gt;

&lt;p&gt;It validates.&lt;br&gt;
No errors.&lt;br&gt;
Google accepts it.&lt;/p&gt;

&lt;p&gt;So it must be working… right?&lt;/p&gt;

&lt;p&gt;Wrong.&lt;/p&gt;

&lt;p&gt;Most JSON-LD implementations are technically correct —&lt;br&gt;
but structurally useless.&lt;/p&gt;

&lt;p&gt;What usually happens over time:&lt;/p&gt;

&lt;p&gt;duplicated Organization schema everywhere&lt;br&gt;
random &lt;a class="mentioned-user" href="https://dev.to/id"&gt;@id&lt;/a&gt; values with no consistency&lt;br&gt;
mixed schema types with no clear relationships&lt;br&gt;
FAQ markup that doesn’t reflect the actual page&lt;/p&gt;

&lt;p&gt;The result?&lt;/p&gt;

&lt;p&gt;👉 search engines get weak signals&lt;br&gt;
👉 rich results don’t show up&lt;br&gt;
👉 your content gets ignored&lt;/p&gt;

&lt;p&gt;JSON-LD isn’t about validation.&lt;/p&gt;

&lt;p&gt;It’s about meaning.&lt;/p&gt;

&lt;p&gt;Search engines (and AI) don’t “read” your site.&lt;/p&gt;

&lt;p&gt;They build a graph.&lt;/p&gt;

&lt;p&gt;If your data isn’t connected properly,&lt;br&gt;
you don’t exist in that graph.&lt;/p&gt;

&lt;p&gt;That’s the real shift:&lt;/p&gt;

&lt;p&gt;Stop asking:&lt;br&gt;
“Where do I add schema?”&lt;/p&gt;

&lt;p&gt;Start asking:&lt;br&gt;
“What entities am I building?”&lt;/p&gt;

&lt;p&gt;A solid structure looks like this:&lt;/p&gt;

&lt;p&gt;Site: WebSite, Organization, Person&lt;br&gt;
Page: WebPage + BlogPosting / Service&lt;br&gt;
Optional: FAQPage, BreadcrumbList&lt;/p&gt;

&lt;p&gt;Everything connected.&lt;br&gt;
Consistent &lt;a class="mentioned-user" href="https://dev.to/ids"&gt;@ids&lt;/a&gt;.&lt;br&gt;
One coherent graph.&lt;/p&gt;

&lt;p&gt;Most sites don’t fail because JSON-LD is hard.&lt;/p&gt;

&lt;p&gt;They fail because there’s no system behind it.&lt;/p&gt;

&lt;p&gt;If you care about SEO in 2026:&lt;/p&gt;

&lt;p&gt;JSON-LD isn’t optional anymore.&lt;/p&gt;

&lt;p&gt;It’s your interface to search engines and AI.&lt;/p&gt;

&lt;p&gt;I broke this down properly (with real examples):&lt;br&gt;
👉 &lt;a href="https://ghostlyinc.com/en-us/json-ld-schema-markup-seo-guide/" rel="noopener noreferrer"&gt;https://ghostlyinc.com/en-us/json-ld-schema-markup-seo-guide/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Curious:&lt;/p&gt;

&lt;p&gt;Are you structuring your data as a graph —&lt;br&gt;
or just making it “validate”?&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>jsonld</category>
      <category>indiedev</category>
    </item>
    <item>
      <title>I got tired of uploading images, so I built my own converter</title>
      <dc:creator>GhostlyInc</dc:creator>
      <pubDate>Sat, 21 Mar 2026 02:11:49 +0000</pubDate>
      <link>https://forem.com/ghostlyinc/i-got-tired-of-uploading-images-so-i-built-my-own-converter-5a1j</link>
      <guid>https://forem.com/ghostlyinc/i-got-tired-of-uploading-images-so-i-built-my-own-converter-5a1j</guid>
      <description>&lt;p&gt;Every time I optimized images for a website, I ended up doing the same annoying loop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;upload images&lt;/li&gt;
&lt;li&gt;wait&lt;/li&gt;
&lt;li&gt;download again&lt;/li&gt;
&lt;li&gt;repeat&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It sounds small, but it completely kills your flow when you're working on real projects.&lt;/p&gt;

&lt;p&gt;Especially when you're dealing with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;batches of images&lt;/li&gt;
&lt;li&gt;WebP / AVIF conversions&lt;/li&gt;
&lt;li&gt;multiple iterations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At some point I just thought:&lt;br&gt;
why am I still uploading files in 2026?&lt;/p&gt;

&lt;p&gt;So I built a small local tool that does exactly what I needed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;drop a folder&lt;/li&gt;
&lt;li&gt;convert everything to WebP / AVIF&lt;/li&gt;
&lt;li&gt;done&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No uploads. No browser tabs. No friction.&lt;/p&gt;

&lt;p&gt;It’s not meant to be another "online converter alternative".&lt;br&gt;
It’s just a faster workflow.&lt;/p&gt;

&lt;p&gt;Curious how others handle this.&lt;/p&gt;

&lt;p&gt;Do you still use online converters or do you have a local setup?&lt;/p&gt;

&lt;p&gt;See the full workflow (real examples, no uploads):&lt;br&gt;
&lt;a href="https://ghostlyinc.com/en-us/web-seo/best-image-converter-for-web/" rel="noopener noreferrer"&gt;Full local workflow (no uploads, batch, WebP &amp;amp; AVIF)&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>buildinpublic</category>
      <category>opensource</category>
    </item>
    <item>
      <title>What’s your workflow for converting images to WebP?</title>
      <dc:creator>GhostlyInc</dc:creator>
      <pubDate>Thu, 19 Mar 2026 21:26:19 +0000</pubDate>
      <link>https://forem.com/ghostlyinc/whats-your-workflow-for-converting-images-to-webp-2bic</link>
      <guid>https://forem.com/ghostlyinc/whats-your-workflow-for-converting-images-to-webp-2bic</guid>
      <description>&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/ghostlyinc/how-to-convert-png-to-webp-on-windows-fast-offline-34c4" class="crayons-story__hidden-navigation-link"&gt;How to convert PNG to WebP on Windows (fast &amp;amp; offline)&lt;/a&gt;
    &lt;div class="crayons-article__cover crayons-article__cover__image__feed"&gt;
      &lt;iframe src="https://www.youtube.com/embed/WJ8zXAe-2YQ" title="How to convert PNG to WebP on Windows (fast &amp;amp; offline)"&gt;&lt;/iframe&gt;
    &lt;/div&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/ghostlyinc" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F3731557%2F2dd58f1d-7dd0-414a-bb6b-3360715e5479.png" alt="ghostlyinc profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/ghostlyinc" class="crayons-story__secondary fw-medium m:hidden"&gt;
              GhostlyInc
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                GhostlyInc
                
              
              &lt;div id="story-author-preview-content-3373641" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/ghostlyinc" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F3731557%2F2dd58f1d-7dd0-414a-bb6b-3360715e5479.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;GhostlyInc&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/ghostlyinc/how-to-convert-png-to-webp-on-windows-fast-offline-34c4" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 19&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/ghostlyinc/how-to-convert-png-to-webp-on-windows-fast-offline-34c4" id="article-link-3373641"&gt;
          How to convert PNG to WebP on Windows (fast &amp;amp; offline)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/seo"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;seo&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/performance"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;performance&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/images"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;images&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/ghostlyinc/how-to-convert-png-to-webp-on-windows-fast-offline-34c4" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/ghostlyinc/how-to-convert-png-to-webp-on-windows-fast-offline-34c4#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              1&lt;span class="hidden s:inline"&gt; comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            1 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




</description>
      <category>webdev</category>
      <category>seo</category>
      <category>performance</category>
      <category>images</category>
    </item>
    <item>
      <title>How to convert PNG to WebP on Windows (fast &amp; offline)</title>
      <dc:creator>GhostlyInc</dc:creator>
      <pubDate>Thu, 19 Mar 2026 21:25:11 +0000</pubDate>
      <link>https://forem.com/ghostlyinc/how-to-convert-png-to-webp-on-windows-fast-offline-34c4</link>
      <guid>https://forem.com/ghostlyinc/how-to-convert-png-to-webp-on-windows-fast-offline-34c4</guid>
      <description>&lt;p&gt;If you want to convert PNG to WebP on Windows, here’s the fastest way:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use Pixel Press, a fast offline image converter for Windows
&lt;/li&gt;
&lt;li&gt;Drag &amp;amp; drop your images
&lt;/li&gt;
&lt;li&gt;Export as WebP
&lt;/li&gt;
&lt;/ol&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%2Fdykslwdb9vyfotacz3c0.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%2Fdykslwdb9vyfotacz3c0.png" alt="Pixel Press, a fast offline image converter for Windows Result" width="800" height="828"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That’s it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why convert PNG to WebP?
&lt;/h2&gt;

&lt;p&gt;WebP images are significantly smaller than PNG while keeping high visual quality.&lt;/p&gt;

&lt;p&gt;Benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smaller file sizes → faster websites
&lt;/li&gt;
&lt;li&gt;Better performance → improved SEO
&lt;/li&gt;
&lt;li&gt;Reduced bandwidth usage
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The problem with online converters
&lt;/h2&gt;

&lt;p&gt;Most PNG to WebP converters are online tools.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need to upload images
&lt;/li&gt;
&lt;li&gt;Slower workflow
&lt;/li&gt;
&lt;li&gt;Potential privacy concerns
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're working with many images, this quickly becomes painful.&lt;/p&gt;

&lt;h2&gt;
  
  
  A better approach (offline)
&lt;/h2&gt;

&lt;p&gt;A better solution is using a local tool.&lt;/p&gt;

&lt;p&gt;For example, Pixel Press is a fast offline image converter for Windows that supports WebP and AVIF.&lt;/p&gt;

&lt;p&gt;It allows you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Convert images instantly
&lt;/li&gt;
&lt;li&gt;Batch process hundreds of files
&lt;/li&gt;
&lt;li&gt;Keep everything local (no uploads)
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example workflow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open Pixel Press
&lt;/li&gt;
&lt;li&gt;Drag your PNG images into the app
&lt;/li&gt;
&lt;li&gt;Select WebP as output format
&lt;/li&gt;
&lt;li&gt;Start conversion
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Done in seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;Converting PNG to WebP is one of the easiest ways to improve website performance.&lt;/p&gt;

&lt;p&gt;Using an offline tool like Pixel Press makes the process fast, simple, and privacy-friendly.&lt;/p&gt;

&lt;p&gt;What’s your current workflow for image conversion?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>seo</category>
      <category>performance</category>
      <category>images</category>
    </item>
    <item>
      <title>I’ve noticed I’m more productive coding away from my desk.

Curious how others feel about this 👇</title>
      <dc:creator>GhostlyInc</dc:creator>
      <pubDate>Thu, 19 Mar 2026 19:52:32 +0000</pubDate>
      <link>https://forem.com/ghostlyinc/ive-noticed-im-more-productive-coding-away-from-my-deskcurious-how-others-feel-about-this-p2j</link>
      <guid>https://forem.com/ghostlyinc/ive-noticed-im-more-productive-coding-away-from-my-deskcurious-how-others-feel-about-this-p2j</guid>
      <description>&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/ghostlyinc/are-you-more-productive-coding-outside-your-desk-9e4" class="crayons-story__hidden-navigation-link"&gt;Are you more productive coding outside your desk?&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/ghostlyinc" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F3731557%2F2dd58f1d-7dd0-414a-bb6b-3360715e5479.png" alt="ghostlyinc profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/ghostlyinc" class="crayons-story__secondary fw-medium m:hidden"&gt;
              GhostlyInc
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                GhostlyInc
                
              
              &lt;div id="story-author-preview-content-3365376" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/ghostlyinc" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F3731557%2F2dd58f1d-7dd0-414a-bb6b-3360715e5479.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;GhostlyInc&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/ghostlyinc/are-you-more-productive-coding-outside-your-desk-9e4" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 18&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/ghostlyinc/are-you-more-productive-coding-outside-your-desk-9e4" id="article-link-3365376"&gt;
          Are you more productive coding outside your desk?
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/discuss"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;discuss&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/beginners"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;beginners&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/ghostlyinc/are-you-more-productive-coding-outside-your-desk-9e4" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;8&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/ghostlyinc/are-you-more-productive-coding-outside-your-desk-9e4#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            1 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




</description>
      <category>programming</category>
      <category>discuss</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Are you more productive coding outside your desk?</title>
      <dc:creator>GhostlyInc</dc:creator>
      <pubDate>Wed, 18 Mar 2026 01:29:17 +0000</pubDate>
      <link>https://forem.com/ghostlyinc/are-you-more-productive-coding-outside-your-desk-9e4</link>
      <guid>https://forem.com/ghostlyinc/are-you-more-productive-coding-outside-your-desk-9e4</guid>
      <description>&lt;p&gt;I’ve noticed something weird:&lt;/p&gt;

&lt;p&gt;I’m actually more productive coding on the couch or in bed with my laptop than at a desk.&lt;/p&gt;

&lt;p&gt;It feels less “formal” and I get into flow faster.&lt;/p&gt;

&lt;p&gt;For complex tasks I still sometimes switch back to a desk, but for many things this setup just works better for me.&lt;/p&gt;

&lt;p&gt;Do you have a “non-standard” coding spot that works better for you?&lt;/p&gt;

&lt;p&gt;Or is the classic desk setup still king?&lt;/p&gt;

</description>
      <category>programming</category>
      <category>discuss</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I Built a Fast Image Converter for Windows (WebP / AVIF)</title>
      <dc:creator>GhostlyInc</dc:creator>
      <pubDate>Sat, 14 Mar 2026 00:28:47 +0000</pubDate>
      <link>https://forem.com/ghostlyinc/i-built-a-fast-image-converter-for-windows-webp-avif-23e5</link>
      <guid>https://forem.com/ghostlyinc/i-built-a-fast-image-converter-for-windows-webp-avif-23e5</guid>
      <description>&lt;h1&gt;
  
  
  I Built a Fast Image Converter for Windows (WebP / AVIF)
&lt;/h1&gt;

&lt;p&gt;Modern websites rely heavily on optimized images. Formats like WebP and AVIF can significantly reduce image size and improve page load times.&lt;/p&gt;

&lt;p&gt;To make this process easier, I built a small Windows tool called &lt;strong&gt;Pixel Press&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It focuses on fast batch image conversion and simple drag &amp;amp; drop workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Batch image conversion&lt;/li&gt;
&lt;li&gt;WebP and AVIF support&lt;/li&gt;
&lt;li&gt;Drag &amp;amp; drop workflow&lt;/li&gt;
&lt;li&gt;Local processing (no cloud uploads)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was to make image optimization quick and simple for developers and content creators.&lt;/p&gt;

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

&lt;p&gt;I also posted some short demos showing how the tool works:&lt;br&gt;
&lt;a href="https://www.youtube.com/@Info-GhostlyInc" rel="noopener noreferrer"&gt;https://www.youtube.com/@Info-GhostlyInc&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Download
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://ghostlyinc.com/en-us/tools/pixel-press/" rel="noopener noreferrer"&gt;https://ghostlyinc.com/en-us/tools/pixel-press/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I would love to hear feedback or ideas for improvements.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>tooling</category>
      <category>images</category>
    </item>
    <item>
      <title>How to optimize images for websites (WebP, AVIF, responsive images)</title>
      <dc:creator>GhostlyInc</dc:creator>
      <pubDate>Fri, 13 Mar 2026 16:38:30 +0000</pubDate>
      <link>https://forem.com/ghostlyinc/how-to-optimize-images-for-websites-webp-avif-responsive-images-39g8</link>
      <guid>https://forem.com/ghostlyinc/how-to-optimize-images-for-websites-webp-avif-responsive-images-39g8</guid>
      <description>&lt;p&gt;Image optimization is still one of the easiest ways to improve website performance.&lt;/p&gt;

&lt;p&gt;Many websites still serve large JPEG or PNG files even though modern formats like WebP and AVIF can significantly reduce size while keeping good quality.&lt;/p&gt;

&lt;p&gt;In this guide I cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WebP vs AVIF&lt;/li&gt;
&lt;li&gt;responsive images&lt;/li&gt;
&lt;li&gt;hero images and performance&lt;/li&gt;
&lt;li&gt;metadata and SEO impact&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full guide:&lt;br&gt;
&lt;a href="https://ghostlyinc.com/en-us/how-to-optimize-images-for-websites/" rel="noopener noreferrer"&gt;https://ghostlyinc.com/en-us/how-to-optimize-images-for-websites/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>seo</category>
      <category>performance</category>
      <category>images</category>
    </item>
    <item>
      <title>Who decided CSS should fail silently?

One typo and it just pretends nothing happened.

No error.
No warning.
Just silent failure.</title>
      <dc:creator>GhostlyInc</dc:creator>
      <pubDate>Sat, 07 Mar 2026 20:06:30 +0000</pubDate>
      <link>https://forem.com/ghostlyinc/who-decided-css-should-fail-silently-one-typo-and-it-just-pretends-nothing-happened-no-2b66</link>
      <guid>https://forem.com/ghostlyinc/who-decided-css-should-fail-silently-one-typo-and-it-just-pretends-nothing-happened-no-2b66</guid>
      <description></description>
    </item>
    <item>
      <title>Deploying Blazor from Windows to Linux: the friction nobody talks about</title>
      <dc:creator>GhostlyInc</dc:creator>
      <pubDate>Sat, 07 Mar 2026 18:01:21 +0000</pubDate>
      <link>https://forem.com/ghostlyinc/deploying-blazor-from-windows-to-linux-the-friction-nobody-talks-about-b6n</link>
      <guid>https://forem.com/ghostlyinc/deploying-blazor-from-windows-to-linux-the-friction-nobody-talks-about-b6n</guid>
      <description>&lt;p&gt;Everything works perfectly on Windows.&lt;/p&gt;

&lt;p&gt;Then you deploy to Linux… and suddenly something breaks.&lt;/p&gt;

&lt;p&gt;If you build Blazor apps on Windows but run your servers on Linux,&lt;br&gt;
you probably know this pain.&lt;/p&gt;

&lt;p&gt;I ran into the same problem over and over again.&lt;/p&gt;

&lt;p&gt;My development environment was Windows.&lt;br&gt;
My servers were Linux.&lt;/p&gt;

&lt;p&gt;Every small deployment check meant:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;opening SSH&lt;/li&gt;
&lt;li&gt;switching terminals&lt;/li&gt;
&lt;li&gt;checking logs&lt;/li&gt;
&lt;li&gt;verifying services&lt;/li&gt;
&lt;li&gt;jumping between tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It felt slow and fragmented.&lt;/p&gt;

&lt;p&gt;So I started building a small tool for myself.&lt;/p&gt;

&lt;p&gt;Something simple that lets me:&lt;/p&gt;

&lt;p&gt;• see my servers instantly&lt;br&gt;
• connect via SSH or RDP&lt;br&gt;
• upload files quickly&lt;br&gt;
• verify deployments without opening five different tools&lt;/p&gt;

&lt;p&gt;That tool became &lt;a href="https://ghostlyinc.com/en-us/tools/ghostly-bridge/" rel="noopener noreferrer"&gt;Ghostly Bridge&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ghostly Bridge is a lightweight desktop tray app for managing servers.&lt;/p&gt;

&lt;p&gt;Instead of jumping between browser tabs and terminals,&lt;br&gt;
everything lives in one place.&lt;/p&gt;

&lt;p&gt;Features I use the most:&lt;/p&gt;

&lt;p&gt;• one-click SSH/RDP&lt;br&gt;
• drag-and-drop uploads&lt;br&gt;
• quick server overview&lt;br&gt;
• no telemetry (local-only)&lt;/p&gt;

&lt;p&gt;I'm curious how others handle the Windows → Linux workflow gap.&lt;/p&gt;

&lt;p&gt;Do you just SSH into servers constantly,&lt;br&gt;
or did you build tools to simplify it?&lt;/p&gt;

</description>
      <category>blazor</category>
      <category>dotnet</category>
      <category>webdev</category>
      <category>linux</category>
    </item>
    <item>
      <title>Why I built Ghostly Bridge: Blazor on Windows, servers on Linux — without the pain</title>
      <dc:creator>GhostlyInc</dc:creator>
      <pubDate>Tue, 27 Jan 2026 18:07:31 +0000</pubDate>
      <link>https://forem.com/ghostlyinc/why-i-built-ghostly-bridge-blazor-on-windows-servers-on-linux-without-the-pain-4pkj</link>
      <guid>https://forem.com/ghostlyinc/why-i-built-ghostly-bridge-blazor-on-windows-servers-on-linux-without-the-pain-4pkj</guid>
      <description>&lt;p&gt;You know that feeling when everything works perfectly on Windows…&lt;br&gt;
and the moment you deploy to Linux, something breaks.&lt;/p&gt;

&lt;p&gt;For me, that happened way too often.&lt;/p&gt;

&lt;p&gt;I build Blazor apps on Windows, but my servers run on Linux.&lt;br&gt;
Every time something felt off, I had to stop what I was doing, jump into SSH, resize terminals, double-check configs — just to see if the server was actually fine.&lt;/p&gt;

&lt;p&gt;It got annoying fast.&lt;/p&gt;

&lt;p&gt;So whenever I needed to test something quickly, I’d spin up a fresh server on UpCloud, deploy, and check if everything behaved as expected.&lt;br&gt;
That’s exactly where &lt;strong&gt;Ghostly Bridge&lt;/strong&gt; was born.&lt;/p&gt;

&lt;p&gt;I wanted a fast, calm way to:&lt;/p&gt;

&lt;p&gt;see my servers&lt;/p&gt;

&lt;p&gt;connect instantly&lt;/p&gt;

&lt;p&gt;verify that things actually work on Linux&lt;br&gt;
without friction, noise, or tool overload.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ghostlyinc.com/en-us/tools/ghostly-bridge/" rel="noopener noreferrer"&gt;Ghostly Bridge&lt;/a&gt; is the tool I wish I had years ago. Ghostly Bridge runs local-only, with no telemetry, and gives me instant access to servers without jumping between tools.&lt;/p&gt;

&lt;p&gt;How do you handle the Windows → Linux gap in your workflow?&lt;br&gt;
Do you just live with the friction, or did you build your own tools too?&lt;/p&gt;

</description>
      <category>blazor</category>
      <category>linux</category>
      <category>windows</category>
      <category>devtool</category>
    </item>
  </channel>
</rss>
