<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Advertising on ICE-ICE-BEAR-BLOG</title><link>https://ice-ice-bear.github.io/tags/advertising/</link><description>Recent content in Advertising on ICE-ICE-BEAR-BLOG</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Tue, 07 Apr 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://ice-ice-bear.github.io/tags/advertising/index.xml" rel="self" type="application/rss+xml"/><item><title>Creative Agent Studio #1 — The Mockup Era, and Why It Wore the Creative Warmth Theme</title><link>https://ice-ice-bear.github.io/posts/2026-04-07-creative-agent-studio-dev1/</link><pubDate>Tue, 07 Apr 2026 00:00:00 +0900</pubDate><guid>https://ice-ice-bear.github.io/posts/2026-04-07-creative-agent-studio-dev1/</guid><description>&lt;img src="https://ice-ice-bear.github.io/" alt="Featured image of post Creative Agent Studio #1 — The Mockup Era, and Why It Wore the Creative Warmth Theme" /&gt;&lt;h2 id="overview"&gt;Overview
&lt;/h2&gt;&lt;p&gt;This is the first dev log for &lt;strong&gt;Creative Agent Studio&lt;/strong&gt; — a Korean-language multi-agent system for advertising creative work. A single user message enters a chat-first pipeline that walks four presentation stages — &lt;strong&gt;research → copy → scenario → storyboard&lt;/strong&gt; — gated by explicit human approval between stages.&lt;/p&gt;
&lt;p&gt;April was the mockup era. Twelve commits over two days produced a static HTML/JS prototype of the canvas, a runtime-flow spec, a &amp;ldquo;Creative Warmth&amp;rdquo; design theme that would survive the eventual React rewrite, and a deployment shape to put it on Vercel. The code thrown away later was not the point — the decisions written down in &lt;code&gt;interaction-model.md&lt;/code&gt; and the design tokens baked into the mockup were.&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;graph TD
 Idea["Brief from user (chat)"] --&gt; Research["Research stage &amp;lt;br/&amp;gt; 리서치 에이전트"]
 Research --&gt; Gate1["GATE 1 &amp;lt;br/&amp;gt; key concept selection"]
 Gate1 --&gt; Copy["Copy stage &amp;lt;br/&amp;gt; 4 draft workers"]
 Copy --&gt; Gate2["GATE 2 &amp;lt;br/&amp;gt; copy approval"]
 Gate2 --&gt; Scenario["Scenario stage &amp;lt;br/&amp;gt; 3 specialists"]
 Scenario --&gt; Gate3["GATE 3-4 &amp;lt;br/&amp;gt; scenario approval"]
 Gate3 --&gt; Storyboard["Storyboard stage &amp;lt;br/&amp;gt; image generation"]
 Storyboard --&gt; Gate5["GATE 5 &amp;lt;br/&amp;gt; final approval"]&lt;/pre&gt;&lt;p&gt;Twelve commits, one running theme — &lt;strong&gt;lock in the principles before any of the implementation rusts.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-three-decisions-that-would-outlast-the-mockup"&gt;The Three Decisions That Would Outlast the Mockup
&lt;/h2&gt;&lt;p&gt;The most important file added in April wasn&amp;rsquo;t code — it was &lt;code&gt;interaction-model.md&lt;/code&gt;, which crystallized three product decisions into a single load-bearing document:&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;결정 1. 인터랙션 모델 — 채팅 우선 (Chat-first).&lt;/strong&gt; The user&amp;rsquo;s primary input is free-form chat. Clicking buttons to advance stages is forbidden. The orchestrator interprets what they typed and dispatches agents accordingly.&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;결정 2. 에이전트 투명성 — 한 줄 상태 표시 (One-line status).&lt;/strong&gt; When an agent is running, the feed shows a single one-line status message. No full dashboards, no real-time logs.&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;결정 3. 게이트 기반 자동 실행 (Gate-based auto-run).&lt;/strong&gt; After each stage completes, the pipeline pauses and waits for explicit human approval before running the next stage automatically.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;Every UI commit that followed — through April and across the May rewrite — would be checked against these three rules. The first commit of the mockup (&lt;code&gt;b67eb98 Add Diffs creative agent studio mockup&lt;/code&gt;) already had them encoded as DOM structure: no &amp;ldquo;next stage&amp;rdquo; button, agents appeared as bullet lists rather than a dashboard, and the composer was the only entry point.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="creative-warmth--the-design-theme"&gt;&amp;ldquo;Creative Warmth&amp;rdquo; — The Design Theme
&lt;/h2&gt;&lt;p&gt;The third commit (&lt;code&gt;72e0fdc&lt;/code&gt;) was the visual baseline that would survive everything: &lt;strong&gt;&amp;ldquo;Redesign: Apply Creative Warmth theme (warm white, DM Serif Display, Caveat).&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Three tokens, three reasons:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Token&lt;/th&gt;
 &lt;th&gt;Value&lt;/th&gt;
 &lt;th&gt;Why&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Background&lt;/td&gt;
 &lt;td&gt;Warm white (#FAF7F2)&lt;/td&gt;
 &lt;td&gt;Pure white reads as software. Warm tints read as workshop.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Body type&lt;/td&gt;
 &lt;td&gt;DM Serif Display&lt;/td&gt;
 &lt;td&gt;A creative tool should feel literary, not productivity-coded.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Handwritten labels&lt;/td&gt;
 &lt;td&gt;Caveat&lt;/td&gt;
 &lt;td&gt;Specialist agent names get a handwritten badge — a small humanizing touch on what is otherwise a dense work surface.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The rule was negative: &lt;strong&gt;no pure black, no pure white, anywhere.&lt;/strong&gt; A subsequent commit (&lt;code&gt;640c755&lt;/code&gt;) had to fix the logo visibility because the original SVG was dark-on-dark — the fix was a &lt;code&gt;filter: brightness(0)&lt;/code&gt; CSS hack to invert it for the warm background rather than re-exporting the asset. Pragmatic, but the underlying constraint stayed: the design system would not bend to accommodate an asset that fought it.&lt;/p&gt;
&lt;p&gt;These tokens would migrate verbatim into &lt;code&gt;web/tailwind.config.ts&lt;/code&gt; six weeks later as the first feat(web) commit on the React side — proof that the design decisions were the right load-bearing layer.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="three-ui-cleanups-that-made-the-mockup-honest"&gt;Three UI Cleanups That Made the Mockup Honest
&lt;/h2&gt;&lt;p&gt;Three commits in succession (&lt;code&gt;3c225c9&lt;/code&gt;, &lt;code&gt;1be5253&lt;/code&gt;, &lt;code&gt;d37b4c9&lt;/code&gt;) attacked things that violated the three decisions:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-diff" data-lang="diff"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;- &amp;lt;p class=&amp;#34;eyebrow&amp;#34;&amp;gt;Project Management&amp;lt;/p&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;- &amp;lt;ul class=&amp;#34;agents&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;- &amp;lt;li&amp;gt;&amp;lt;span class=&amp;#34;dot dot-1&amp;#34;&amp;gt;&amp;lt;/span&amp;gt;Agent 1&amp;lt;/li&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;- &amp;lt;li&amp;gt;&amp;lt;span class=&amp;#34;dot dot-2&amp;#34;&amp;gt;&amp;lt;/span&amp;gt;Agent 2&amp;lt;/li&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;- &amp;lt;/ul&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gi"&gt;+ &amp;lt;ul class=&amp;#34;agents&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gi"&gt;+ &amp;lt;li&amp;gt;리서치 에이전트&amp;lt;/li&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gi"&gt;+ &amp;lt;li&amp;gt;Copy Draft Workers&amp;lt;/li&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gi"&gt;+ &amp;lt;/ul&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;3c225c9&lt;/code&gt; — Removed the &amp;ldquo;Project Management&amp;rdquo; eyebrow that framed the whole thing as a PM tool. Showed agent names as bullets instead of color-coded chips because the chips implied a dashboard.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;1be5253&lt;/code&gt; — Removed the &amp;ldquo;Background Agents&amp;rdquo; section from the status rail entirely. It violated decision 2 (one-line status, no full dashboard).&lt;/p&gt;
&lt;p&gt;&lt;code&gt;d37b4c9&lt;/code&gt; — &lt;strong&gt;Composer overhaul.&lt;/strong&gt; Moved the model selector into the input bar itself, added a file-attach icon, updated the model list. Why this matters: the composer is decision 1&amp;rsquo;s entire surface area. If the composer doesn&amp;rsquo;t feel like the right place to type &amp;ldquo;더 도전적으로&amp;rdquo; or &amp;ldquo;이 두 개 합쳐줘&amp;rdquo;, the chat-first principle fails by accident.&lt;/p&gt;
&lt;p&gt;These weren&amp;rsquo;t features — they were &lt;em&gt;deletions&lt;/em&gt; enforcing the spec.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="runtime-flow-refinement--the-bones-underneath-the-mockup"&gt;Runtime Flow Refinement — The Bones Underneath the Mockup
&lt;/h2&gt;&lt;p&gt;Three docs and one feat commit on 2026-04-07 laid the runtime groundwork:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ecac2e5 docs: add production poc state and routing spec&lt;/code&gt; — defined what state the runtime would carry across the four stages.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;7e26c12 docs: add runtime state cleanup spec&lt;/code&gt; — defined how state would be retired between runs (relevant later when the React app needed to isolate per-session state).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;97df876 feat: refine workspace runtime flow&lt;/code&gt; — refined the actual flow code.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;21f0ebc chore: add deployment and design reference files&lt;/code&gt; — committed the deployment shape and a design-reference folder.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &amp;ldquo;deployment reference&amp;rdquo; was a Vercel buildCommand pointing at the mockup directory. That deployment target would survive the rewrite — when the React frontend shipped in May, the only change to &lt;code&gt;vercel.json&lt;/code&gt; was &lt;code&gt;outputDirectory: &amp;quot;web/dist&amp;quot;&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="commit-log"&gt;Commit Log
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Date&lt;/th&gt;
 &lt;th&gt;Message&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;2026-04-06&lt;/td&gt;
 &lt;td&gt;Add Diffs creative agent studio mockup&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2026-04-06&lt;/td&gt;
 &lt;td&gt;Fix logo path for Vercel deployment&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2026-04-06&lt;/td&gt;
 &lt;td&gt;Redesign: Apply Creative Warmth theme (warm white, DM Serif Display, Caveat)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2026-04-06&lt;/td&gt;
 &lt;td&gt;Fix logo visibility: apply brightness(0) filter for dark logo on light bg&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2026-04-06&lt;/td&gt;
 &lt;td&gt;UI: Remove &amp;lsquo;Project Management&amp;rsquo; eyebrow, show agent names as bullets, add LLM dropdown&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2026-04-06&lt;/td&gt;
 &lt;td&gt;Remove Background Agents section from status rail&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2026-04-06&lt;/td&gt;
 &lt;td&gt;Composer: move model selector into input bar, add file attach icon, update models&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2026-04-07&lt;/td&gt;
 &lt;td&gt;docs: add production poc state and routing spec&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2026-04-07&lt;/td&gt;
 &lt;td&gt;docs: add runtime state cleanup spec&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2026-04-07&lt;/td&gt;
 &lt;td&gt;feat: refine workspace runtime flow&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2026-04-07&lt;/td&gt;
 &lt;td&gt;chore: ignore local workspace artifacts&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2026-04-07&lt;/td&gt;
 &lt;td&gt;chore: add deployment and design reference files&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="insights"&gt;Insights
&lt;/h2&gt;&lt;p&gt;April produced one piece of software (a static mockup) and three pieces of writing (&lt;code&gt;interaction-model.md&lt;/code&gt;, the routing spec, the runtime cleanup spec). The mockup would be deleted six weeks later — commit &lt;code&gt;chore: remove legacy mockup/ vanilla-JS SPA&lt;/code&gt; lands in the megapush — but every paragraph of the writing would still be load-bearing.&lt;/p&gt;
&lt;p&gt;The lesson worth keeping: &lt;strong&gt;product principles outlive implementation.&lt;/strong&gt; Writing down &amp;ldquo;chat-first, one-line status, gate-based auto-run&amp;rdquo; as decisions — not as features, not as UI requirements, but as decisions with a &lt;code&gt;결정&lt;/code&gt; heading and a &lt;code&gt;이유&lt;/code&gt; heading — meant that every subsequent UI commit had a tribunal to pass through. When the React rewrite started in May, those three decisions were copy-pasted directly into the new &lt;code&gt;web/&lt;/code&gt; tree&amp;rsquo;s principles. The mockup was throwaway; the principles weren&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;Next: bitbucket migration, production-readying the runtime, and starting the React+Vite+TypeScript rewrite that would replace the entire mockup in one weekend.&lt;/p&gt;</description></item></channel></rss>