<?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: McKittrick</title>
    <description>The latest articles on Forem by McKittrick (@pepperpark).</description>
    <link>https://forem.com/pepperpark</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%2F3796869%2F1db4bab6-2859-4820-8d56-9de5c7bd5bab.png</url>
      <title>Forem: McKittrick</title>
      <link>https://forem.com/pepperpark</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/pepperpark"/>
    <language>en</language>
    <item>
      <title>Stop Running a Staging Server Just to Show a Client Your Work</title>
      <dc:creator>McKittrick</dc:creator>
      <pubDate>Thu, 19 Mar 2026 09:58:57 +0000</pubDate>
      <link>https://forem.com/pepperpark/stop-running-a-staging-server-just-to-show-a-client-your-work-1jl7</link>
      <guid>https://forem.com/pepperpark/stop-running-a-staging-server-just-to-show-a-client-your-work-1jl7</guid>
      <description>&lt;p&gt;Let me paint a picture you might recognize.&lt;/p&gt;

&lt;p&gt;You're a freelancer or agency dev. You've built something locally. It looks good. You want your client to see it – not a screenshot but an actual live thing they can click around in and add comments or approve it.&lt;/p&gt;

&lt;p&gt;So what do you do?&lt;/p&gt;

&lt;p&gt;If you're lucky, there's a staging server already running. Someone set it up. Someone maintains it. Someone pays for the hardware. There's a deployment process, probably some SSH config, maybe a Jenkins job or a half-documented script that only works on Dave's machine. You push your code, wait, debug why it didn't deploy, fix it, wait again.&lt;/p&gt;

&lt;p&gt;If you're unlucky – which is most of the time – you're the one who has to set all of that up first.&lt;/p&gt;




&lt;h2&gt;
  
  
  The hidden cost of on-premise staging
&lt;/h2&gt;

&lt;p&gt;On-prem staging sounds boring, but the real cost is brutal when you add it up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hardware – servers that run 24/7, mostly idle&lt;/li&gt;
&lt;li&gt;Maintenance – OS updates, security patches, "why is nginx down again"&lt;/li&gt;
&lt;li&gt;People – Ops, DevOps, or the dev who gets pulled off actual work to keep it running&lt;/li&gt;
&lt;li&gt;Complexity – every new project means new config, new setup, new potential for something to break&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For larger teams this gets absorbed somewhere in the org. For freelancers, solo devs, and smaller agencies it's just pain. You either over-invest in infrastructure that feels absurd for the actual use case, or you cobble something together that barely works.&lt;/p&gt;

&lt;p&gt;And all of this just to show a client a feature that took two hours to build.&lt;/p&gt;




&lt;h3&gt;
  
  
  The actual use case is stupidly simple
&lt;/h3&gt;

&lt;p&gt;Think about what you actually need in 90% of cases:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I have something running locally. I want a URL I can send to a client right now."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's it. Not a permanent environment. Not a CI/CD pipeline. Not a Kubernetes cluster. Just a live, shareable URL for the thing currently on your machine.&lt;/p&gt;




&lt;h3&gt;
  
  
  30 seconds. One command.
&lt;/h3&gt;

&lt;p&gt;I've been using prev.sh for this and it genuinely changed how I handle client reviews.&lt;/p&gt;

&lt;p&gt;From your project folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bash&lt;span class="nv"&gt;$ &lt;/span&gt;prev deploy &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Under 30 seconds later you have a live URL you can send to anyone. They open it in a browser, click around, give feedback. When you're done, the environment gets cleaned up automatically.&lt;/p&gt;

&lt;p&gt;No server to maintain. No SSH config. No deployment pipeline to babysit. No Dave.&lt;/p&gt;




&lt;h3&gt;
  
  
  Who this actually makes sense for
&lt;/h3&gt;

&lt;p&gt;If you're at a large company with a dedicated DevOps team – fine, you probably have this solved already.&lt;/p&gt;

&lt;p&gt;But if you're:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A freelancer who needs clients to review work before billing&lt;/li&gt;
&lt;li&gt;A small agency where every hour of overhead directly hits your margin&lt;/li&gt;
&lt;li&gt;A solo dev who just wants to show something without spinning up infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;...then spending time and money on a staging server for this use case is genuinely hard to justify when the alternative is a one-liner.&lt;/p&gt;




&lt;h3&gt;
  
  
  But there's more than just a URL
&lt;/h3&gt;

&lt;p&gt;Once you're past the one-liner, prev actually has a proper dashboard behind it – and it's genuinely useful, not just a vanity feature.&lt;/p&gt;

&lt;p&gt;What you get:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Environments view&lt;/strong&gt; – all your running previews at a glance: status, region, TTL, expiry countdown. Extend the TTL with one click if a client review runs long.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Feedback Inbox&lt;/strong&gt; – this one surprised me. Clients can leave feedback directly on the preview page, flagged as Approved or Changes Requested. No more chasing feedback through email threads or Slack messages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Container Logs&lt;/strong&gt; – stdout and stderr, live, right in the browser. Useful when something behaves differently in the preview than locally.&lt;br&gt;
Deployment History – every past environment is archived and can be redeployed with one click. Handy when a client comes back two weeks later asking to see an old version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Managed Databases&lt;/strong&gt; – spin up a PostgreSQL, MariaDB or MongoDB instance and attach it to your preview via --db. For projects that need more than a static frontend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Webhooks &amp;amp; Notifications&lt;/strong&gt; – get notified on Slack, Discord, Teams or via email when a preview is deployed or when feedback comes in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deployment Templates&lt;/strong&gt; – save your usual config (region, TTL, auth, database) as a named template and reuse it with --template name. No more typing the same flags every time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built-in Support Chat&lt;/strong&gt; – got a question while you're setting things up? There's an AI support chat directly in the dashboard. No docs-diving required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Feature Requests&lt;/strong&gt; – missing something? There's a built-in feature request form. No UserVoice account, no GitHub issue template – just type and submit.&lt;/p&gt;




&lt;p&gt;Curious whether this fits your workflow – drop a comment if you've been dealing with the same staging headaches, or if you're solving it differently. Always interested in how other devs handle client reviews.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://prev.sh" rel="noopener noreferrer"&gt;https://prev.sh&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>devops</category>
      <category>tooling</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
