Preview environment

프리뷰 환경

Create a temporary running environment for each change request and remove it on close.

···
html
<div class="stage" data-phase="0"><div class="title">CHANGE REQUEST · PREVIEW LIFECYCLE</div><div class="flow"><div class="panel pr">PR OPEN<br><b>#42</b></div><div class="branch"></div><div class="panel url">PREVIEW URL<br><b>pending</b></div><div class="branch"></div><div class="panel review">REVIEW<br><b>waiting</b></div></div><div class="panel cleanup">temporary environment</div></div>
css
.stage{width:min(94vw,760px);height:min(88vh,330px);padding:clamp(9px,2.6vmin,20px);border:1px solid var(--line);border-radius:14px;background:var(--surface);font:600 clamp(12px,2.5vmin,16px)/1.3 "Pretendard Variable",Pretendard,-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo",sans-serif;display:flex;flex-direction:column;gap:clamp(6px,1.7vmin,12px);overflow:hidden;position:relative}.stage *{min-width:0}.stage .title{color:var(--accent);font-weight:800}.stage .sub{color:var(--muted)}.stage .row{display:flex;align-items:center;gap:clamp(5px,1.6vmin,12px)}.stage .panel{border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:clamp(6px,1.6vmin,12px)}.stage .mono{font-family:ui-monospace,SFMono-Regular,monospace;font-size:clamp(12px,2.5vmin,15px)}.stage .grow{flex:1}.stage .on{color:var(--accent)}.flow{flex:1;display:flex;align-items:center;gap:4px}.flow .panel{flex:1;text-align:center}.flow b{display:block;color:var(--muted);margin-top:6px}.branch{height:2px;width:8%;background:var(--line)}.cleanup{color:var(--muted)}.stage[data-phase="1"] .url,.stage[data-phase="1"] .branch:first-of-type{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,var(--surface))}.stage[data-phase="1"] .url b{font-size:0}.stage[data-phase="1"] .url b:after{content:'ready';font-size:clamp(12px,2.5vmin,16px);color:var(--accent)}.stage[data-phase="2"] .review{border-color:var(--accent)}.stage[data-phase="2"] .review b{font-size:0}.stage[data-phase="2"] .review b:after{content:'approved';font-size:clamp(12px,2.5vmin,16px);color:var(--accent)}.stage[data-phase="3"] .cleanup{border-color:var(--accent-3);color:var(--accent-3)}.stage[data-phase="3"] .cleanup:after{content:' · deleted'}
js
const stage=document.querySelector('.stage');let phase=0;function advance(){phase=(phase+1)%4;stage.dataset.phase=String(phase)}const timer=setInterval(advance,950);stage.addEventListener('pointerdown',()=>{clearInterval(timer);advance()})

A preview environment runs a branch or pull request at an isolated URL so reviewers can try the change before merge. Closing the change should remove the environment and its stale test data.

The demo moves through opening a PR, publishing a URL, review, and cleanup. A preview with different configuration or data is not a complete production check.

When to use

Use it when a UI or API change needs a running review before merge.

Open as page ↗