Source Code

<div class="container py-5 d-flex justify-content-center">
  <div class="card bsdeploy-card">
    <div class="card-body p-3">
      <div class="d-flex justify-content-between align-items-center mb-3">
        <h6 class="fw-bold mb-0">Deploy #482</h6>
        <button type="button" class="btn btn-sm btn-outline-secondary" id="bsdeployRestart">Restart demo</button>
      </div>
      <div class="bsdeploy-stages" id="bsdeployStages"></div>
      <p class="small mt-3 mb-0" id="bsdeployStatus">&nbsp;</p>
    </div>
  </div>
</div>

Bootstrap Deployment Status Panel — Free HTML CSS JS Snippet

Bootstrap Deployment Status Panel · Dashboards · Plain HTML, CSS & JS · Live preview

What's included

Features

One stageStatus array is the single source of truth for every stage's dot, color, and icon
The first attempt is guaranteed to fail at a specific stage, so the failure and retry path is always visible
Retry restarts the entire pipeline from the first stage, matching real CI/CD retry behavior
Only one stage is ever shown as actively running, and stages always progress strictly in order
A pulsing animation clearly distinguishes the currently active stage from completed or pending ones

About this UI Snippet

Bootstrap Deployment Status Panel — HTML, CSS & JavaScript

Screenshot of the Bootstrap Deployment Status Panel snippet rendered live

Every stage's status lives in one stageStatus array, one entry per pipeline stage, each holding 'pending', 'active', 'done', or 'failed'render() is the single function mapping that array to markup, so the dots, colors, and checkmarks/x-marks are always a direct reflection of the array's current contents rather than separately toggled classes that could drift.

This demo scripts the first attempt to fail specifically at the Staging stage (FAIL_AT, checked against attempt === 1) so the failure state and its Retry action are actually reachable without needing a lucky outcome, matching the same guaranteed-first-failure technique used in bootstrap-data-table-error-state. Retry calls run(attempt + 1), the exact same function the initial deploy uses, which is what resets every stage back to pending and replays the whole pipeline from Build — a real CI/CD retry rarely resumes from the exact point of failure, it restarts the pipeline.

Only one stage is ever 'active' at a time, and stages complete strictly in order — the interval driving the pipeline only advances to the next stage's index after marking the current one 'done', so there's no way for, say, Staging to show as active while Test still shows pending.

Build with AI

Build, Understand, Optimize, and Extend It With AI

Hand this snippet to an AI coding assistant like Claude and ask it to add a per-stage elapsed-time display that keeps counting up while a stage is active, or to add a "View logs" link per stage that opens a modal showing simulated build/test output for that specific stage.

Prompt to recreate it

Copy this into your AI assistant of choice to build the effect from scratch, or as a jumping-off point for your own variant:

text
Build a Bootstrap 5.3 CI/CD deployment status panel, using the real Bootstrap CDN framework (bootstrap.min.css and bootstrap.bundle.min.js), not custom CSS made to resemble it.

Requirements:
- A vertical list of at least 4 pipeline stages (e.g. Build, Test, Staging, Production), each with a status dot that can show pending, actively running (with a pulsing animation), done (checkmark), or failed (X mark) — all four states driven from one status array, not separately toggled classes.
- Stages must progress strictly in order on a timer, only one ever shown as actively running at a time, each completing before the next one activates.
- The first deployment attempt must be scripted to fail at a specific stage (not the last one), revealing a "Retry deploy" action in a status message below the pipeline.
- Clicking Retry must restart the entire pipeline from the very first stage (not resume from the point of failure), and this time complete successfully through every remaining stage.
- Include a "Restart demo" button that resets the whole scenario back to its initial failing-first-attempt state.

Want to tighten it up first? Run this prompt through the AI Prompt Studio to score it across 8 quality dimensions, catch anti-patterns, and tune the wording for Claude, ChatGPT, or Gemini before you paste it in.

Step by step

How to Use

  1. 1
    Load the snippetThe pipeline starts automatically — Build shows an animated, pulsing amber dot as the active stage.
  2. 2
    Watch it progressBuild and Test complete in order, each turning to a solid green checkmark before the next stage activates.
  3. 3
    Watch it fail at StagingThe Staging dot turns red with an X, and the status line offers a "Retry deploy" action.
  4. 4
    Click "Retry deploy"Every stage resets to pending and the whole pipeline replays from Build — this time completing successfully all the way through Production.
  5. 5
    Click "Restart demo"The pipeline runs again from the very first attempt, failing at Staging exactly as before.

Real-world uses

Common Use Cases

DEV
Internal deployment dashboards and CI/CD tooling
Pairs with bootstrap-feature-flag-toggle-panel for a fuller release-management admin view.
Status pages showing a release rolling out
Give visibility into exactly which stage a deploy is currently in, not just a single spinner.
Team dashboards embedded in Slack or an internal wiki
A compact visual summary of pipeline health worth glancing at without opening the full CI system.

Got questions?

Frequently Asked Questions

So the failure state and Retry button are guaranteed to be visible in this preview, rather than depending on chance; a real implementation should reflect each stage's actual CI/CD job outcome instead of a scripted failure.

It restarts the entire pipeline from Build — this mirrors how most real CI/CD systems handle a retry, since a failed stage often means the environment or artifacts from earlier stages may also need to be regenerated.

No — the interval driving the pipeline only ever marks the next stage active after the current one finishes, so exactly one stage (or zero, once the pipeline finishes or fails) is ever in the active state at a time.

Yes. Keep stageStatus as an array in component state, update it via your framework's state-setting pattern on each interval tick, and derive each stage's dot color/icon from its current value in the render function.