<?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: zhenqiang</title>
    <description>The latest articles on Forem by zhenqiang (@polunzh).</description>
    <link>https://forem.com/polunzh</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%2F670464%2F0cb0e243-8e72-42c7-876a-d20af59b3789.jpeg</url>
      <title>Forem: zhenqiang</title>
      <link>https://forem.com/polunzh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/polunzh"/>
    <language>en</language>
    <item>
      <title>Agent Skills</title>
      <dc:creator>zhenqiang</dc:creator>
      <pubDate>Tue, 24 Feb 2026 04:58:05 +0000</pubDate>
      <link>https://forem.com/polunzh/-35bb</link>
      <guid>https://forem.com/polunzh/-35bb</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/polunzh" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2F670464%2F0cb0e243-8e72-42c7-876a-d20af59b3789.jpeg" alt="polunzh"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/polunzh/from-folder-to-public-url-with-one-command-31ec" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;From Folder to Public URL with One Command&lt;/h2&gt;
      &lt;h3&gt;zhenqiang ・ Feb 13&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#cli&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tooling&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>cli</category>
      <category>productivity</category>
      <category>tooling</category>
      <category>webdev</category>
    </item>
    <item>
      <title>From Folder to Public URL with One Command</title>
      <dc:creator>zhenqiang</dc:creator>
      <pubDate>Fri, 13 Feb 2026 03:20:22 +0000</pubDate>
      <link>https://forem.com/polunzh/from-folder-to-public-url-with-one-command-31ec</link>
      <guid>https://forem.com/polunzh/from-folder-to-public-url-with-one-command-31ec</guid>
      <description>&lt;p&gt;This is the final post in a short series about shipping small, fast-moving web projects.&lt;/p&gt;

&lt;p&gt;So far we covered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why speed matters in small demo scenarios
&lt;/li&gt;
&lt;li&gt;Why not every project needs a full pipeline
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now here’s the workflow.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Goal
&lt;/h2&gt;

&lt;p&gt;For small, static projects, publishing should:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Require no configuration
&lt;/li&gt;
&lt;li&gt;Produce a public HTTPS URL
&lt;/li&gt;
&lt;li&gt;Take less time than a context switch
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From inside the project folder.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Command
&lt;/h2&gt;

&lt;p&gt;From the project root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/myvibe-publish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What You Get
&lt;/h2&gt;

&lt;p&gt;The command runs locally, packages your static output, uploads it to MyVibe, and returns a public URL.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🚀 Published successfully!
🌍 https://www.myvibe.so/zhenqiang-zhang/devlog-ai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(Actual time varies with project size and network conditions.)&lt;/p&gt;

&lt;p&gt;The point isn’t magic — it’s removing ceremony for static projects.&lt;/p&gt;




&lt;h2&gt;
  
  
  When This Makes Sense
&lt;/h2&gt;

&lt;p&gt;Best fit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hackathon submission pages
&lt;/li&gt;
&lt;li&gt;Temporary demo links
&lt;/li&gt;
&lt;li&gt;Landing pages
&lt;/li&gt;
&lt;li&gt;Static docs
&lt;/li&gt;
&lt;li&gt;Frontend-only experiments
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Assumptions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Static output
&lt;/li&gt;
&lt;li&gt;No server runtime
&lt;/li&gt;
&lt;li&gt;No complex environment requirements
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What It’s Not
&lt;/h2&gt;

&lt;p&gt;Not a replacement for CI/CD.&lt;/p&gt;

&lt;p&gt;Long-lived systems still deserve full pipelines.&lt;/p&gt;

&lt;p&gt;This is for the category where the “deliverable” is simply: &lt;strong&gt;a link&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Series: Shipping Small Projects&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/polunzh/we-built-for-36-hours-publishing-took-one-command-1l88"&gt;We Built for 36 Hours. Publishing Took One Command&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/polunzh/not-every-project-needs-a-deployment-pipeline-38on"&gt;Not Every Project Needs a Deployment Pipeline&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/polunzh/from-folder-to-public-url-with-one-command-31ec/"&gt;From Folder to Public URL with One Command&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cli</category>
      <category>productivity</category>
      <category>tooling</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Not Every Project Needs a Deployment Pipeline</title>
      <dc:creator>zhenqiang</dc:creator>
      <pubDate>Fri, 13 Feb 2026 02:56:15 +0000</pubDate>
      <link>https://forem.com/polunzh/not-every-project-needs-a-deployment-pipeline-38on</link>
      <guid>https://forem.com/polunzh/not-every-project-needs-a-deployment-pipeline-38on</guid>
      <description>&lt;p&gt;This is the second post in a short series about shipping small, fast-moving web projects.&lt;/p&gt;

&lt;p&gt;In the previous post, we used a hackathon-style scenario: a static submission page needed a public link under time pressure.&lt;/p&gt;

&lt;p&gt;The point wasn’t a specific number of seconds.&lt;/p&gt;

&lt;p&gt;It was context.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Default Is “Treat Everything Like Production”
&lt;/h2&gt;

&lt;p&gt;Modern development culture has normalized a default workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Git repository
&lt;/li&gt;
&lt;li&gt;CI configuration
&lt;/li&gt;
&lt;li&gt;Automated deployment
&lt;/li&gt;
&lt;li&gt;Hosting + environment decisions
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even when the “project” is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A temporary landing page
&lt;/li&gt;
&lt;li&gt;A frontend-only demo
&lt;/li&gt;
&lt;li&gt;A hackathon submission
&lt;/li&gt;
&lt;li&gt;A two-day experiment
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That default isn’t wrong.&lt;/p&gt;

&lt;p&gt;It’s just often unexamined.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Simple Lens: Lifespan × Risk
&lt;/h2&gt;

&lt;p&gt;Before reaching for a pipeline, it helps to ask two questions:&lt;/p&gt;

&lt;p&gt;1) &lt;strong&gt;How long will this live?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
2) &lt;strong&gt;How costly is failure?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The goal is proportionality: the smaller the project, the smaller the ceremony.&lt;/p&gt;




&lt;h2&gt;
  
  
  Three Categories of Projects
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1) Long-Lived Systems (High Risk, High ROI)
&lt;/h3&gt;

&lt;p&gt;Production SaaS. Team-owned services. Revenue paths.&lt;/p&gt;

&lt;p&gt;You want CI/CD here because you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repeatable builds
&lt;/li&gt;
&lt;li&gt;Rollbacks
&lt;/li&gt;
&lt;li&gt;Monitoring + alerts
&lt;/li&gt;
&lt;li&gt;Change control
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the world pipelines were built for.&lt;/p&gt;




&lt;h3&gt;
  
  
  2) Medium-Term Projects (Moderate Risk)
&lt;/h3&gt;

&lt;p&gt;Portfolios, docs sites, internal tools.&lt;/p&gt;

&lt;p&gt;Automation helps — but the “pipeline” should stay proportional:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Minimal steps
&lt;/li&gt;
&lt;li&gt;Few moving parts
&lt;/li&gt;
&lt;li&gt;Low maintenance overhead
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  3) Short-Lived, Fast-Moving Static Projects (Low Risk)
&lt;/h3&gt;

&lt;p&gt;Hackathon demos. Temporary pages. Frontend-only prototypes.&lt;/p&gt;

&lt;p&gt;These projects often:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Live for days or weeks
&lt;/li&gt;
&lt;li&gt;Don’t have a backend
&lt;/li&gt;
&lt;li&gt;Don’t need environment variables
&lt;/li&gt;
&lt;li&gt;Mostly need one thing: &lt;strong&gt;a public URL&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example output page:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.myvibe.so/zhenqiang-zhang/devlog-ai" rel="noopener noreferrer"&gt;https://www.myvibe.so/zhenqiang-zhang/devlog-ai&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is what a published static demo page looks like on MyVibe.&lt;/p&gt;

&lt;p&gt;And yet we often deploy them like production systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Hidden Cost: Attention
&lt;/h2&gt;

&lt;p&gt;For small projects, the cost of over-engineering isn’t money.&lt;/p&gt;

&lt;p&gt;It’s attention.&lt;/p&gt;

&lt;p&gt;It’s switching from:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Improve the demo&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Configure the pipeline&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That context switch introduces friction.&lt;/p&gt;

&lt;p&gt;And friction slows iteration.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick Rule of Thumb
&lt;/h2&gt;

&lt;p&gt;If the project has users who depend on it, needs rollbacks, or has secrets/configuration, use CI/CD.&lt;/p&gt;

&lt;p&gt;If it’s a static demo page with no backend and no env vars, optimize for “publish a link” instead.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Category Worth Optimizing
&lt;/h2&gt;

&lt;p&gt;There’s a category of work where publishing should feel lightweight:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Static
&lt;/li&gt;
&lt;li&gt;Self-contained
&lt;/li&gt;
&lt;li&gt;Short-lived
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In that context, the best workflow is often:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;run one command → get a link&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the final post, I’ll walk through the workflow behind that one-command publish — and the constraints that make it possible.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Series: Shipping Small Projects&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/polunzh/we-built-for-36-hours-publishing-took-one-command-1l88"&gt;We Built for 36 Hours. Publishing Took One Command&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/polunzh/not-every-project-needs-a-deployment-pipeline-38on"&gt;Not Every Project Needs a Deployment Pipeline&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;From Folder to Public URL with One Command&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>We Built for 36 Hours. Publishing Took One Command.</title>
      <dc:creator>zhenqiang</dc:creator>
      <pubDate>Thu, 12 Feb 2026 06:51:13 +0000</pubDate>
      <link>https://forem.com/polunzh/we-built-for-36-hours-publishing-took-one-command-1l88</link>
      <guid>https://forem.com/polunzh/we-built-for-36-hours-publishing-took-one-command-1l88</guid>
      <description>&lt;p&gt;This is the first post in a short series about shipping small, fast-moving web projects.&lt;/p&gt;

&lt;p&gt;Over the next two posts, I’ll explore:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why not every project needs a full deployment pipeline
&lt;/li&gt;
&lt;li&gt;And what a lightweight publish workflow can look like in practice
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s start with a simple (hypothetical) scenario.&lt;/p&gt;




&lt;h2&gt;
  
  
  Imagine This
&lt;/h2&gt;

&lt;p&gt;You’re at a hackathon.&lt;/p&gt;

&lt;p&gt;You’ve spent 36 hours building something that works perfectly on your machine.&lt;/p&gt;

&lt;p&gt;There are 15 minutes left before submission.&lt;/p&gt;

&lt;p&gt;And you don’t have a public link.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Project
&lt;/h2&gt;

&lt;p&gt;In this scenario, the project was &lt;strong&gt;DevLog AI&lt;/strong&gt; — a small frontend tool that turns messy Git commit history into clean release notes.&lt;/p&gt;

&lt;p&gt;It was:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Static
&lt;/li&gt;
&lt;li&gt;Self-contained
&lt;/li&gt;
&lt;li&gt;A single &lt;code&gt;index.html&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;No backend
&lt;/li&gt;
&lt;li&gt;No environment variables
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just a submission page and a demo.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Friction
&lt;/h2&gt;

&lt;p&gt;Even for something this small, the typical path to publishing often looks like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Push to GitHub
&lt;/li&gt;
&lt;li&gt;Trigger a build
&lt;/li&gt;
&lt;li&gt;Wait
&lt;/li&gt;
&lt;li&gt;Verify
&lt;/li&gt;
&lt;li&gt;Fix
&lt;/li&gt;
&lt;li&gt;Re-deploy
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nothing dramatic.&lt;/p&gt;

&lt;p&gt;Just overhead.&lt;/p&gt;

&lt;p&gt;And in the final minutes of a hackathon, overhead matters.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Happened Instead
&lt;/h2&gt;

&lt;p&gt;Inside the 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;/myvibe-publish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No configuration.&lt;/p&gt;

&lt;p&gt;No dashboard.&lt;/p&gt;

&lt;p&gt;No pipeline setup.&lt;/p&gt;




&lt;h2&gt;
  
  
  Seconds Later
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🚀 Published successfully!
🌍 https://www.myvibe.so/zhenqiang-zhang/devlog-ai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can see the live demo page here: &lt;a href="https://www.myvibe.so/zhenqiang-zhang/devlog-ai?open=true" rel="noopener noreferrer"&gt;https://www.myvibe.so/zhenqiang-zhang/devlog-ai&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(Actual time varies with project size and network conditions.)&lt;/p&gt;

&lt;p&gt;The link was live.&lt;/p&gt;

&lt;p&gt;Submission done.&lt;/p&gt;

&lt;p&gt;Time saved for improving the demo — not debugging deployment.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Is the Starting Point
&lt;/h2&gt;

&lt;p&gt;The project took:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;36 hours to build.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Publishing took:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;one command.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not because deployment is trivial.&lt;/p&gt;

&lt;p&gt;But because the project was simple — and the workflow matched the context.&lt;/p&gt;

&lt;p&gt;In the next post, we’ll zoom out and ask:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does every project really need a deployment pipeline?&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Series: Shipping Small Projects&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/polunzh/we-built-for-36-hours-publishing-took-one-command-1l88"&gt;We Built for 36 Hours. Publishing Took One Command&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Not Every Project Needs a Deployment Pipeline
&lt;/li&gt;
&lt;li&gt;From Folder to Public URL with One Command
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>claudecode</category>
      <category>skills</category>
      <category>liveweb</category>
    </item>
  </channel>
</rss>
