์ฑ์ memradar.vercel.app์์, ์ฝ๋๋ GitHub์ ์๋ค.
๋ ๋ง์ ๊ธ์ radarlog.kr์์.
๋งค๋ ์ฐ๋ง์ด ๋๋ฉด Cursor๊ฐ "์ฌํด ๋๋ ๋ช ์๊ฐ ์ฝ๋ฉํ๊ณ , ์ด๋ค ์ธ์ด๋ฅผ ์ผ๋ง๋ ์ผ๊ณ " ํ๋ ํ๊ณ ๋ฅผ ๋์ด๋ค. GitHub๋ Year in Review๋ฅผ ๋ธ๋ค. Discord๋ ํ๋กํ์ ์ฐ๊ฐ ํต๊ณ๊ฐ ๋ฌ๋ค.
์ซ์๋ ๋ด ๊ฒ์ธ๋ฐ, ํ์ด์ง๋ฅผ ๋๊ธฐ๋ค ๋ณด๋ฉด "์ ๋ ์ด๋ฌ๊ตฌ๋" ํ๊ณ ์๊ฒ ๋๋ค. ์ด๊ฒ ์ฐ๋ง๊ฒฐ์ฐ์ ํ์ด๋ค. ์ ๋ณด ์ ๋ฌ์ด ์๋๋ผ ํ ์ฅ๋ฉด์ ํ ์ซ์์ฉ ๊บผ๋ด๋๋ ์์์ด๋ค.
๋๋ ๊ทธ๊ฒ ํ์ํ๋ค. Claude Code์ Codex๊ฐ ๋ด ํ ๋๋ ํฐ๋ฆฌ(~/.claude/projects/, ~/.codex/sessions/)์ ๋งค์ผ JSONL ๋ก๊ทธ๋ฅผ ์๋๋ฐ, ์ ์ ๊ทธ ์์ ๋ค์ฌ๋ค๋ณธ ์ ์ด ์๋ค. ๋ด ๋ํ๊ฐ ๋ด ๋์คํฌ์ ์๋๋ฐ, ๋ด๊ฐ ๋ชป ์ฝ๋๋ค.
Memradar๋ ๊ทธ JSONL์ ํ๊ณ ๋ก ๋ฐ๊ฟ์ฃผ๋ ๋ก์ปฌ ํด์ด๋ค. npx memradar ํ ์ค์ด๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ๋จ๊ณ , ๋์๋ณด๋์ ํจ๊ป ํ์คํฌ๋ฆฐ ์ฌ๋ผ์ด๋ ํ๊ณ โ Code Report๊ฐ ๊ฐ์ด ๋ค์ด์๋ค.
์ด ๊ธ์ Memradar๋ฅผ ๋ง๋ค๋ฉด์ ์ง์ํ๊ฒ ๋งค๋ฌ๋ฆฐ ๋ํ ์ผ์ ๋ํ ๊ธฐ๋ก์ด๋ค. ์์ด๋์ด๋ ๋จ์ํ์ง๋ง, ์ฌ๋์ด "์ฌ๋ฐ๋ค"๊ณ ๋๋ผ๊ฒ ๋ง๋๋ ๋ฐ๋ ๊ฒฐ์ ํ๋ํ๋๊ฐ ๋ค ํ์ํ๋ค.
Wrapped๊ฐ ์๋๋ผ Code Report์ฌ์ผ ํ๋ค
์ฒ์ ํ์คํฌ๋ฆฐ ํ๊ณ ๊ธฐ๋ฅ์ ๋ง๋ค๋ฉด์ ๋ด๋ถ์ ์ผ๋ก "Wrapped"๋ผ๊ณ ๋ถ๋ ๋ค. ์ฝ๋ ํด๋ ์ด๋ฆ๋ src/components/wrapped/๋ก ์์ํ๋ค. Spotify Wrapped๊ฐ ๋ ํผ๋ฐ์ค์์ผ๋๊น ์์ฐ์ค๋ฝ๊ฒ ๊ทธ๋ ๊ฒ ๋๋ค.
๊ทผ๋ฐ ์ ํ ์ด๋ฆ์ผ๋ก Wrapped๋ฅผ ๊ทธ๋๋ก ์ฐ๋ฉด ๋ฌธ์ ๊ฐ ์๋ค. ๋จ์ ๋ธ๋๋ ์ฉ์ด๋ฅผ ๋น๋ ค ์ฐ๋ ์ ์ด๋ค. ๋ Wrapped๋ผ๋ ๋ง์ "์ฐ๋ง๊ฒฐ์ฐ"์ด๋ผ๋ ๋ฒ์ฃผ๋ก๋ง ์ฝํ๋ค.
์ด๋ฆ์ ๋ค์ ์ก์ผ๋ฉด์ docs/UI-UX-PRINCIPLES.md์ ์ด๋ฐ ์์น์ ๋ชป ๋ฐ์๋ค.
9. ๋์๋ณด๋์ Code Report๋ ๊ฐ์ ์ ํ์ ๋ค๋ฅธ ๋ฌด๋๋ค
- ๋์๋ณด๋๋ ์ ๋ณด ํ์, Code Report๋ ๊ฐ์ ์ ํ๊ณ ์ ๊ณต์ ๋ฅผ ๋ด๋นํ๋ค.
- Code Report๋ ๋
๋ฆฝ ํ๋ ํธ์ ์ ์ฉ ํ์ดํฌ,
ํ์คํฌ๋ฆฐ ๋ด๋ฌํฐ๋ธ๋ฅผ ์ฌ์ฉํ๋ค.
๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ์ง๋ง, ๋์๋ณด๋๋ "๋ถ์ ํด"์ฒ๋ผ ์นจ์ฐฉํด์ผ ํ๊ณ Code Report๋ "ํ๊ณ ๊ฒฝํ"์ฒ๋ผ ๊ฐ์ ์ ์ ๊ฐํํด๋ ๋๋ค๊ณ ์ ์๋ค. ๋ ํ๋ฉด์ด ๋ฌด๋์์ ์์ด์ง ์๋๋ก ํ๋ ํธ์ ํ์ดํฌ๊ทธ๋ํผ๋ฅผ ๋ถ๋ฆฌํ๋ค.
๊ทธ๋์ ์ด๋ฆ์ด Code Report๊ฐ ๋๋ค. ์ฝ๋(๋ด AI ์ฝ๋ฉ ๋ก๊ทธ)์ ๋ํ ๋ฆฌํฌํธ. ์ฐ๋ง๊ฒฐ์ฐ์ด๋ผ๋ ๊ณ ์ ๋ ์์ ์ด ์๋๋ผ ์ธ์ ์ด์ด๋ ํ๊ณ ๊ฐ ๋๋ ํ๋ฉด์ด๋ผ๋ ๊ฑธ ์ด๋ฆ์ ๋ด๊ณ ์ถ์๋ค. Wrapped๋ 1๋ ์ ํ ๋ฒ์ด์ง๋ง, Code Report๋ ๋ด๊ฐ ํ์ํ ๋๋ง๋ค ์ด ์ ์๋ค.
์ฝ๋์์ ํด๋๋ช
(wrapped/)์ ๊ทธ๋๋ก ๋๋ค. ๋ด๋ถ ๋ณ์๋ช
๊น์ง ๊ฐ์์๋ ๊ฑด ๋ฆฌํฉํฐ๋ง ๋ฆฌ์คํฌ๊ฐ ํฌ๊ณ , ์ธ๋ถ์ ๋
ธ์ถ๋๋ ์ ํ ์ด๋ฆ๋ง Code Report๋ก ๊ณ ์ ํ๋ค. ์ด ๊ตฌ๋ถ ์์ฒด๊ฐ "๊ฐ์ ๊ธฐ๋ฅ์ ์๊ณผ ๋ฐ์ ๋ค๋ฅด๊ฒ ๋ถ๋ฅผ ์ ์๋ค"๋ ์์ ๊ตํ์ด๋ค.
์ ๋์๋ณด๋๋ง์ผ๋ก๋ ๋ถ์กฑํ๋
๋น์ฐํ ๋์๋ณด๋๋ถํฐ ๋ง๋ค์๋ค. ํํธ๋งต, ์๊ฐ๋๋ณ ์ฐจํธ, ์๋ํด๋ผ์ฐ๋, ์ธ์ ๋ธ๋ผ์ฐ์ . ๋ชจ๋ ์งํ๊ฐ ํ ํ๋ฉด์ ๋ค ์๋ค.
์์ฑํ๊ณ ๋ด ๋ก๊ทธ๋ฅผ ๋์๋ดค๋ค. ์ซ์๊ฐ ๋ค ์์๋ค. ๊ทผ๋ฐ ์๋ฌด ๊ฐ์ ๋ ์ ๋ค์๋ค.
์ด๊ฒ ๋์๋ณด๋์ ํ๊ณ๋ค. ์ ๋ณด๋ ๋ง์๋ฐ, ๋ณด๋ ์ฌ๋์ "์ ๊ทธ๋ ๊ตฌ๋" ํ๊ณ ์ฐฝ์ ๋ซ๋๋ค. ๊ฐ์ ๋ฐ์ดํฐ๋ก Cursor ์ฐ๋ง๊ฒฐ์ฐ์ด ์ฌ๋๋ค์ ์๊ฒ ๋ง๋๋ ๊ฑด, ํ ํ๋ฉด์ ํ ์ซ์๋ง ์ฌ๋ผ์์๋ค. ๊ทธ ์ซ์๋ฅผ ๋๋ฌ์ผ ๊ณต๊ฐ์ด ๋ค ๋น์ด์๊ธฐ ๋๋ฌธ์ด๋ค.
Code Report์ ๊ตฌ์ฑ ์์น์ "ํ ์ฅ๋ฉด ํ ๋ฉ์์ง"๋ก ์ก์๋ค. docs/UI-UX-PRINCIPLES.md์ ์ด๋ ๊ฒ ์ ์ด๋๋ค.
- ์ฌ๊ธฐ์๋ "๋์๋ณด๋ ๊ท์น"๋ณด๋ค "ํ ์ฅ๋ฉด ํ ๋ฉ์์ง"๊ฐ ๋ ์ค์ํ๋ค.
- ํ์คํฌ๋ฆฐ, ๊ฐํ ์ฌ๋ฐฑ, ํฐ ํ์ดํฌ,
์ ์ฉ ๋คํฌ ์คํ ๋ฆฌ ํ๋ ํธ๋ฅผ ์ฌ์ฉํ๋ค.
- ๋ง์ง๋ง์ ๊ณต์ ๊ฐ๋ฅ ์ด๋ฏธ์ง๋ก ๋ซ๋๋ค.
์ฆ, ๊ฐ์ ์ ์ ๋์ด ๊ณง ํ๋ ์ ๋์ฌ์ผ ํ๋ค.
์ฌ๋ผ์ด๋๋ ์ฌ๋ ์ฅ์ด๋ค. ์ธํธ๋ก์ ์ฒซ ์ธ์ ๋ ์ง, ๋ค์์ ์ด ํ๋กฌํํธ ์, ์์ฃผ ์ด ๋ชจ๋ธ, ์ฝ๋ฉ ์๊ฐ๋, ์์ฃผ ๋ถ๋ฅธ ํด ์์, ์ฑ๊ฒฉ ์ ํ, ์ฌ์ฉ๋, ๋ง์ง๋ง์ ๊ณต์ ์นด๋.
๊ฐ ์ฌ๋ผ์ด๋์ ์ซ์ ํ๋ ๋๋ ๋ฉ์์ง ํ๋๋ง ์ฌ๋ผ๊ฐ๋ค. "๋ด๊ฐ Claude๋ฅผ 3,200๋ฒ ๋ถ๋ ๋ค"๋ ๊ฑธ ๋์๋ณด๋ ๊ตฌ์์์ ์ซ์๋ก ๋ณด๋ ๊ฒ๊ณผ, ๋น ์ฌ๋ผ์ด๋์ 3,200๊น์ง ์นด์ดํธ์ ์ผ๋ก ์ฌ๋ผ์ค๋ ๊ฑธ ๋ณด๋ ๊ฑด ์์ ํ ๋ค๋ฅด๋ค. ๊ฐ์ ๋ฐ์ดํฐ์ธ๋ฐ.
์ด๊ฒ ์ฒซ ๋ฒ์งธ ์ง์ฐฉ์ด์๋ค. ์ซ์๋ฅผ ์ด๋ป๊ฒ "๋๋ผ๊ฒ" ๋ง๋ค๊น.
์ฑ๊ฒฉ ์ ํ์ 4๊ฐ์์ 8๊ฐ๋ก ๊ฐ์์์ ์ด์
Code Report์ ํ์ด๋ผ์ดํธ๋ ์ฑ๊ฒฉ ์ ํ ์ฌ๋ผ์ด๋๋ค. Architect, Speed Runner, Explorer, Night Sage. ๋ค ๊ฐ๋ก ์์ํ๋ค.
๊ทผ๋ฐ ์ดํ ๋๋ ค๋ณด๋ ์ ๋ถ "์ด ๋ ์ ๊ฑฐ ์๋๋ฐ" ์๋ฆฌ๊ฐ ๋์๋ค. MBTI๊ฐ ์ฌ๋ฐ๋ ๊ฑด ๋ค ์ถ์ด ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๊ณ์ฐ๋๊ธฐ ๋๋ฌธ์ด๋ค. "I์ด๋ฉด์ N์ด๋ฉด์ F์ด๋ฉด์ P"๋ผ์ INFP๊ฐ ๋์จ๋ค. ์ถ์ด ํ๋(4ํ์ ์ค ํ๋)๋ฉด ๊ฑฐ์น ์๋ฐ์ ์๋ค.
๊ทธ๋์ 3์ถ ์์คํ
์ผ๋ก ๋ค์ ์งฐ๋ค.
style ร scope ร rhythm
โ โ โ
๊ผผ๊ผผํจ ๊น์ด ์๋
8 ์กฐํฉ
์ด๋ ๊ฒ ์กฐํฉํ๋ฉด "์ฌํด ์ ์๋ถ", "๋ฒ๊ฐ ํด๊ฒฐ์ฌ", "์นด์ค์ค ํฌ๋ฆฌ์์ดํฐ" ๊ฐ์ ์ด๋ฆ์ด ๋์จ๋ค. ๊ฐ ์ถ์ด ๋ฐ๋ก ๊ณ์ฐ๋๋๊น ๊ฒฐ๊ณผ๊ฐ ๋ ๊ฐ์ธ์ ์ผ๋ก ๋๊ปด์ง๋ค.
์ด๊ฑฐ ์ง๋ ๋ฐ ๋ฐ๋์ ๋ ๋ ธ๋ค. 4ํ์ ์ด ํ๋ฆฐ ๊ฒ ์๋๋ผ, ๊ฒฐ๊ณผ๋ฅผ ์ฝ๋ ์๊ฐ์ ๋๋์ด ์ฝํ๋ค. ์ด๊ฒ Code Report์์ ์ ์ผ ์ค์ํ ์ง์ ์ด๋ค. ์ซ์๊ฐ ๋ง๊ณ ํ๋ฆฌ๊ณ ์ ์, ์ฝ๋ ์ฌ๋์ด "์ค ์ด๊ฑฐ ๋๋ค" ํ๊ณ ์์ด์ผ ํ๋ค.
์ฑ๊ฒฉ ๊ณ์ฐ ๋ก์ง๋ ์ค์ ๋ฐ์ดํฐ๋ก ๊ณ์ ํ๋ํ๋ค. ๋ด ๋ก๊ทธ์ ๋๋ ค๋ดค์ ๋ ๋ํํ ๋ง๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋์ง, ์น๊ตฌ ๋ก๊ทธ์ ๋๋ ธ์ ๋ ์น๊ตฌํํ ๋ง๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋์ง. ์๊ณ๊ฐ ํ๋๋ฅผ ๋ฐ๊พธ๋ฉด ๊ฒฐ๊ณผ๊ฐ ํ๋ค๋ฆฐ๋ค. ์ด๊ฑธ ์์ญ ๋ฒ ๋ง์ท๋ค.
๋ง์ง๋ง ์ฌ๋ผ์ด๋์ 2.5์ด๋ฅผ ๋ฐ์ ์ด์ผ๊ธฐ
์ปค๋ฐ ์ ๋ชฉ: Fix last slide dashboard prompt timing.
๋ฌด์จ ๋ฌธ์ ์๋๋ฉด, ๊ณต์ ์นด๋ ์ฌ๋ผ์ด๋์์ ํ๋ฉด์ ํญํ๋ฉด "๋์๋ณด๋๋ก ๋์ด๊ฐ์๊ฒ ์ต๋๊น?" ๋ชจ๋ฌ์ด ๋จ๊ฒ ํด๋๋ค. ๊ทผ๋ฐ Code Report๋ฅผ ์ญ ๋๊ธฐ๋ ์๊ฐ๋ฝ ๋ฆฌ๋ฌ์ผ๋ก ๋ง์ง๋ง ์ฌ๋ผ์ด๋์์๋ ๋ฌด์ฌ์ฝ ํญํด์, ๊ณต์ ์นด๋๋ฅผ ๋ณด๊ธฐ๋ ์ ์ ๋ชจ๋ฌ์ด ๋ ๋ฒ๋ฆฐ๋ค.
๋๋ถ๋ถ์ "๊ด์ฐฎ์ง ๋ญ" ํ๊ณ ๋์ด๊ฐ ๋ํ
์ผ์ด๋ค. ๊ทผ๋ฐ ํ ๋ฒ ๊ฑธ๋ฆฌ๋๊น ๊ณ์ ์ ๊ฒฝ ์ฐ์๋ค. ๊ทธ๋์ ๊ณ ์ณค๋ค.
useEffect(() => {
setDashboardPromptReady(false)
if (slideIndex !== lastSlideIndex) return
const timer = window.setTimeout(() => {
setDashboardPromptReady(true)
}, 2500)
return () => window.clearTimeout(timer)
}, [lastSlideIndex, slideIndex])
๋ง์ง๋ง ์ฌ๋ผ์ด๋์ ๋ค์ด๊ฐ๋ฉด 2.5์ด ๋์ dashboardPromptReady๊ฐ false๋ค. ๊ทธ๋์ ํญํด๋ ๋ชจ๋ฌ์ ์ ๋ฌ๋ค. ์ฌ์ง์ด ์ปค์๋ default๋ก ๋ฐ๊ฟจ๋ค. "์์ง ๋๋ฅผ ์ ์๋ค"๋ ๊ฑธ ๋ง์ฐ์ค ์ปค์๋ก๋ ์๋ ค์ค๋ค.
์ด๊ฑฐ ์ฐ๋ฉด์ ์ค์ค๋ก๋ ์๊ฐํ๋ค. ์ด๊ฒ ํ์ํ ์ต์ ํ์ผ๊น. ์ฌ์ฉ์๋ ๋์น ๋ชป ์ฑ ๊ฒ ๊ฐ์๋ฐ.
๊ทผ๋ฐ ํ์ํ ๊ฑด ๋ง๋ค. ๊ฒ์์์ ์ปท์ฌ์ด ๋๋ ์งํ ์ ๋ ฅ์ ๋ช ํ๋ ์ ๋ง๋ ๊ฑฐ๋ ๋๊ฐ๋ค. ํ๋ ์ด์ด๊ฐ "์คํต ๋ฒํผ ๋๋ฅด๋ ๋ฆฌ๋ฌ"์ผ๋ก ๋ค์ ์ฅ๋ฉด์์ ๋ญ๊ฐ๋ฅผ ์๋ชป ๋๋ฅด๋ ๊ฑธ ๋ง๋๋ค. ์ด๋ฐ ๊ฑด ๊ฑธ๋ฆฌ๋ฉด ๊ธฐ๋ถ์ด ๋์๊ณ , ๋ง์๋๋ฉด ์๋ฌด๋ ๋ชจ๋ฅธ๋ค. ๊ทผ๋ฐ ๋ชจ๋ฅด๋ ๊ฒ ๋ง๋ค.
ํ ๋ง๊ฐ 20๊ฐ์ธ ์ด์
Memradar์๋ ํ ๋ง๊ฐ 20๊ฐ ์๋ค. ๋ฐฐ๊ฒฝ 4์ข (Dark, AMOLED, Light, Warm), ์ก์ผํธ ์ 5์ข (Indigo, Violet, Teal, Rose, Amber). 4 ร 5 = 20.
์ ์ด๋ ๊ฒ ๋ง๋. ์ด๊ฒ๋ "๋๋"์ ๋ฌธ์ ๋ค.
Code Report๋ฅผ ๋๊ธฐ๋ ๊ฒฝํ์ ์ฌ์ ์ด๋ค. ๋ด ์ฝ๋ฉ ๋ก๊ทธ๋ฅผ ๋ด๊ฐ ๋ณด๋ ๊ฑฐ๋ค. ๋จ์ด ๋ง๋ ๋คํฌ ํ ๋ง๋ฅผ ๊ทธ๋ฅ ์ฐ๋ ๊ฒ ์๋๋ผ, ๋ด ๋ถ์๊ธฐ๋ฅผ ๋ด๊ฐ ๊ณ ๋ฅด๊ณ ์ถ๋ค. Cursor ์ฐ๋ง๊ฒฐ์ฐ์ด ๋ณด๋ผ์ ํ๋๋ก ๊ณ ์ ๋์ด ์๋ ๊ฒ๊ณผ ๋ค๋ฅด๊ฒ, ๋ด๊ฐ ๋ง๋๋ ๊ฑด ๋ด๊ฐ ๊ณ ๋ฅผ ์ ์์ด์ผ ํ๋ค.
๋ฐฐ๊ฒฝ ๋ค ๊ฐ๋ก ๋๋ ๊ฒ๋ ๊ณ์ฐ๋ ๊ฑฐ๋ค. Dark๋ ๊ธฐ๋ณธ, AMOLED๋ OLED ํ๋ฉด์ฉ ์ง์ง ๊ฒ์ , Light๋ ๋ฐ์ ์นดํ์ฉ, Warm์ ์ ๋ ๋ฌด๋. ์ํฉ์ด ๋ค๋ฅด๋ฉด ๊ณ ๋ฅด๋ ๊ฒ ๋ค๋ฅด๋ค.
ํฐํธ๋ Noto Sans KR + Noto Serif KR๋ก ๊ณ ์ ํ๋ค. ํ๊ธ์ด ์์ฒญ ๋ง์ด ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์, ํ๊ธ์ด ์์๊ฒ ๋์ค๋ ๊ฒ ์ฒซ์งธ๋ค. ์์ด ํฐํธ ์ ์ผ๋ค. ๋ด๊ฐ ์ฃผ๋ก ํ๊ตญ์ด๋ก ์ฝ๋ฉํด์ ํ๋กฌํํธ๋ ํ๊ตญ์ด ๋น์ค์ด ๋๊ณ , ๊ทธ๊ฑธ ์ฝ๋ Code Report๋ ํ๊ตญ์ด๊ฐ ์๋ป์ผ ํ๋ค.
localStorage์ ์ ์ฅํด์ ๋ค์๋ฒ์๋ ๊ณ ๋ฅธ ํ ๋ง๊ฐ ์ ์ง๋๋ค. ์ด๊ฑด ๋น์ฐํ๋ฐ, ๋น์ฐํ ๊ฑธ ๋นผ๋จน์ผ๋ฉด ๋ฐ๋ก ํฐ๋๋ค.
ํํธ๋งต ํ ๊ฐ์ ๋ค์ด๊ฐ ๊ฒฐ์ ๋ค
GitHub ์คํ์ผ ์ผ๋ณ ํ๋ ํํธ๋งต. ์ด ์์ ฏ ํ๋์ ๋ค์ด๊ฐ ๊ฒฐ์ ์ด ์ด ์ ๋๋ค.
์ฒซ์งธ, ๋ฐ์ํ ์
ํฌ๊ธฐ. ์ฐฝ ๋๋น์ ๋ฐ๋ผ ์
์ด ์๋์ผ๋ก ์ปค์ง๊ณ ์์์ง๋ค. ResizeObserver๋ก ์ปจํ
์ด๋ ํฌ๊ธฐ๋ฅผ ์ถ์ ํ๋ค๊ฐ, ์
ํฌ๊ธฐ๋ฅผ ๋ค์ ๊ณ์ฐํด์ ๋ฆฌ๋ ๋ํ๋ค. ์ฒ์์ ๊ณ ์ ํฌ๊ธฐ๋ก ๋๋๋ฐ, ํ๋ฉด ์์ ๋
ธํธ๋ถ์์ ํํธ๋งต์ด ์๋ ค์ ๋ค์ ์งฐ๋ค.
๋์งธ, ํด๋ฆญํด์ ๋ ์ง ์ ํ. ์ ์ ํด๋ฆญํ๋ฉด ๊ทธ๋ ์ธ์ ์์ฝ์ด ์ฌ์ด๋์ ๋ฌ๋ค. ์ฒ์์ hover๋ง ์์๋๋ฐ, hover๋ ๋ชจ๋ฐ์ผ์์ ์ ๋๊ณ , ํด๋ฆญํด์ "๊ณ ์ "ํ ๋ฐฉ๋ฒ์ด ์์ผ๋ฉด ๋ ์์ธํ ๋ณผ ์ ์๋ค.
์ ์งธ, streak ์นด์ดํฐ. "์ฐ์ ๋ฉฐ์น ์ฝ๋ฉํ๋์ง." ์ด๊ฑธ ์ด๋์ ๋ฃ์๊น ๊ณ ๋ฏผํ๋ค๊ฐ ํํธ๋งต ์ ์ฌ์ด๋๋ฐ์ ๋ฐ์๋ค. Duolingo์ฒ๋ผ ๊ฒ์ํํ๋ ค๋ ๊ฒ ์๋๋ผ, ํํธ๋งต ๋ณด๋ฉด์ ์์ฐ์ค๋ฝ๊ฒ "์ ๋ ์ด๋ฒ ๋ฌ 15์ผ ์ฐ์์ด๋ค" ํ๊ณ ์๊ฒ ๋๋ ์ ๋.
๋ท์งธ, ์์ผ ํจํด. ์ํ์๋ชฉ๊ธํ ์ผ ์ค ์ด๋ ์์ผ์ ๊ฐ์ฅ ๋ง์ด ์ฝ๋ฉํ๋์ง ์ฌ์ด๋์ ์๊ฒ. ์ด๊ฑด ๋ฃ์๊น ๋ง๊น ๊ณ ๋ฏผํ๋๋ฐ, ๋ด๊ฐ ์ฃผ๋ง์ ์๊ฐ๋ณด๋ค ๋ง์ด ์ฝ๋ฉํ๋ค๋ ๊ฑธ ์ด๊ฑธ ๋ณด๊ณ ์์๋ค. ์ด๋ฐ ๊ฒ Code Report์ ๋ง์ด๋ค. ๋ชฐ๋๋ ๋ด ํจํด์ด ๋ณด์ด๋ ๊ฑฐ.
์์ ฏ ํ๋์ ๊ฒฐ์ ์ด ๋ค ๊ฐ. ํํธ๋งต๋ฟ ์๋๋ผ ์๋ํด๋ผ์ฐ๋, ์๊ฐ๋๋ณ ์ฐจํธ, ํ ํฐ ์ฐจํธ ๋ค ์ด๋ ๊ฒ ๋ง๋ค์ด์ก๋ค.
DropZone wording์ ๋ช ๋ฒ ๋ฐ๊ฟจ๋์ง
๊ฐ์ฅ ์ง์ํ๋ ๊ฑด ๋๋ฉ ํ์ด์ง DropZone์ด๋ค. ์ปค๋ฐ ๋ก๊ทธ์ DropZone wording ์์ ๋ง ๋ค ๋ฒ ์๋ค.
- Replace copy-paste wording with Ctrl+C/V shortcut
- Use Ctrl+C/V/Enter wording consistently in DropZone
- Allow .claude/.codex root folder drop and add install guide link
- Fix DropZone wording: shorten Ctrl+C/V label
ํ๋์ฉ ๋ฏ์ด๋ณด๋ฉด ์ด๋ ๋ค. ์ฒ์์ "๋ณต์ฌํด์ ๋ถ์ฌ๋ฃ๊ธฐ"์๋ค. ๊ทธ๋ฌ๋ค๊ฐ Ctrl+C / Ctrl+V๋ก ๋ฐ๊ฟจ๋ค. ์๋๋ฉด ํ๊ตญ์ด๋ก "๋ณต์ฌํด์ ๋ถ์ฌ๋ฃ๊ธฐ"๋ ๊ธธ๊ณ , ์์ด๋ก "copy and paste"๋ ์ฅํฉํ๋ค. ์์ปท ๋ ๊ฐ ๋๋ํ ๋ณด์ฌ์ฃผ๋ฉด 0.5์ด ๋ง์ "์ ์ ๊ฑฐ"๊ฐ ๊ฝํ๋ค.
๋ ๋ฒ์งธ ๋ณ๊ฒฝ์ "์ผ๊ด์ฑ"์ด์๋ค. ์ด๋ค ๊ณณ์ "Ctrl+C/V" ์๋๋ฐ ๋ค๋ฅธ ๊ณณ์ "๋ณต์ฌ/๋ถ์ฌ๋ฃ๊ธฐ"๊ฐ ๋จ์์์๋ค. ์ฉ์ด๊ฐ ์์ด๋ฉด ๋ถํธํ๋ค.
์ธ ๋ฒ์งธ, .claude ํด๋ ์์ฒด ๋๋กญ ํ์ฉ. ์๋๋ .claude/projects/ ์์ชฝ์ ๋๋กญํด์ผ ํ์ฑ๋๋ค. ๊ทผ๋ฐ ์ฌ์ฉ์ ์
์ฅ์์ .claude๋ฅผ ํ์์ ๋๋๊ทธํ๋ ๊ฒ ์์ฐ์ค๋ฝ๋ค. ๊ทธ๋์ ๋๋กญ ํธ๋ค๋ฌ๊ฐ .claude ์์ projects ์์์ ์๋์ผ๋ก ์ฐพ์ ๋ค์ด๊ฐ๋๋ก ๊ณ ์ณค๋ค.
if (droppedFolder.name === '.claude') {
const projectsDir = findChild(droppedFolder, 'projects')
if (projectsDir) return scanDir(projectsDir)
}
๋ค ๋ฒ์งธ๋ ๋ค์ wording. "Ctrl+C/V" ๋ ์ด๋ธ์ด ๋๋ฌด ๊ธธ์ด์ ์์ ๋ถ์ด์๋ ์ค๋ณต prefix๋ฅผ ๋บ๋ค.
๊ฐ์ ์ปดํฌ๋ํธ์์ ํํ ํ๋ ๊ฐ์ง๊ณ ๋ค ๋ฒ ๊ณ ์ณค๋ค. ๊ณผํ๋ค ์ถ์ง๋ง, DropZone์ ์ฌ์ฉ์๊ฐ ์ ์ผ ๋จผ์ ๋ณด๋ ํ๋ฉด์ด๋ค. ์ฌ๊ธฐ์ 5์ด ์์ ๋ญ ํด์ผ ํ๋์ง๊ฐ ์ ๊ฝํ๋ฉด, ๋๋จธ์ง๊ฐ ์๋ฌด๋ฆฌ ์๋ป๋ ์์ฉ์๋ค.
ํ์ ๋์ ์ง์์ด ์๊ฐ๋ณด๋ค ํฐ ๊ฒฐ์ ์ด์๋ค
i18n (ko/en), theme presets, and hash routing. ํ ์ปค๋ฐ์ ์ธ ๊ฐ์ง๊ฐ ๊ฐ์ด ๋ค์ด๊ฐ๋ค.
ํ์ ๋์ ์ง์์ ๋ฃ์ ๊ฑด ๋ธ๋ก๊ทธ๋ฅผ ํ์ ๋์ ๋ฐํํ๋ ๋ ์์ ์ ์ํด์๋ค. ๊ทผ๋ฐ ๋ ํฐ ์ด์ ๊ฐ ์๋ค. Code Report์ ๋ค์ด๊ฐ๋ ๋ฌธ๊ตฌ๋ ๊ฐ์ ์ ์ด๋ค. "๋๋ Night Owl์ด์ผ", "์ด๋ฒ ๋ฌ์๋ง 3,200๋ฒ ๋ํํ์ด" ๊ฐ์ ๋ฌธ์ฅ๋ค. ์ด๊ฒ ์์ด๋ก๋ง ์์ผ๋ฉด, ํ๊ตญ์ด ์ ์ ๋ "์ฌ๋ฏธ"๊ฐ ๋ฐ๊ฐ๋๋ค.
// src/i18n.tsx
const translations = {
ko: {
'personality.nightSage': '์๋ฒฝ์ ํ์',
'personality.speedRunner': '๋ฒ๊ฐ ํด๊ฒฐ์ฌ',
// ...
},
en: {
'personality.nightSage': 'Night Sage',
'personality.speedRunner': 'Lightning Fixer',
// ...
}
}
Night Sage๋ฅผ "๋ฐค์ ํ์"๊ฐ ์๋๋ผ "์๋ฒฝ์ ํ์"๋ก ๋ฒ์ญํ ๊ฒ๋, "Lightning Fixer"๋ฅผ "๋ฒ๊ฐ ํด๊ฒฐ์ฌ"๋ก ๋ง์ถ ๊ฒ๋, ๊ทธ๋ฅ ์ง์ญ์ด ์๋๋ผ ํ๊ตญ์ด๋ก ์ฝ์์ ๋ ๊ฐ์ ์จ๋๊ฐ ๋๋๋ก ๊ณจ๋๋ค. ์ฑ๊ฒฉ ์ ํ ์ฌ๋ ๊ฐ ์ด๋ฆ์ ํ์ ๊ฐ๊ฐ ๋ค์ ์ฐ๋ ๋ฐ ๋ช ์๊ฐ ๊ฑธ๋ ธ๋ค.
ํด์ ๋ผ์ฐํ
์ ๊ฐ์ด ๋ฃ์ ์ด์ ๋, Code Report ๋งํฌ๋ฅผ ๊ณต์ ํ ์ ์๊ฒ ๋ง๋ค๋ ค๋ฉด URL์ ์ํ๊ฐ ๋ด๊ฒจ์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. #wrapped/5 ๊ฐ์ ์์ผ๋ก ์ฌ๋ผ์ด๋ ๋ฒํธ๊ฐ URL์ ๋ค์ด๊ฐ๋ค. ์๋ก๊ณ ์นจํด๋ ๋์์ฌ ์ ์๋ค.
๋จ์ผ HTML์ ๋ฒ๋ฆฐ ์๊ฐ
๊ธฐ์ ์ ์ธ ๊ฒฐ์ ์ค์ ์ ์ผ ์ปธ๋ ๊ฑด CLI ๊ตฌ์กฐ๋ฅผ ๋จ์ผ HTML์์ ๋ก์ปฌ ์๋ฒ๋ก ๋ฐ๊พผ ๊ฑฐ๋ค.
์๋๋ CLI๊ฐ JSONL์ ๋ค ํ์ฑํด์, JSON์ผ๋ก ์ง๋ ฌํํ๊ณ , <script> ํ๊ทธ์ ๋ฐ์์ ๊ฑฐ๋ํ ๋จ์ผ HTML ํ์ผ์ ๋ง๋ค์๋ค. ์คํ๋ผ์ธ์์๋ ๋๊ณ ์๋ฒ๋ ํ์ ์๊ณ , ๊น๋ํ๋ค.
๊ทผ๋ฐ ๋ด .claude/projects/๊ฐ ์ปค์ง๋ฉด์ ๊ทธ HTML์ด 18MB๋ฅผ ๋๊ฒผ๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ JSON.parse ํ๋ ๋์ 4~5์ด ๋ฉ์ถ๋ค. Code Report ์์ํ๊ธฐ๋ ์ ์ ๋๊ธด๋ค.
๊ทธ๋์ ๋ก์ปฌ ์๋ฒ(http.createServer๋ก 3939 ํฌํธ) + /api/sessions ์คํธ๋ฆฌ๋ฐ์ผ๋ก ๋ค์ง์๋ค. ๋ธ๋ผ์ฐ์ ๋ 0.6MB์ง๋ฆฌ ์ฑ ๋ฒ๋ค๋ง ๋จผ์ ๋ฐ๊ณ , ์ธ์
์ 10๊ฐ์ฉ ์๋ฒ์์ ๋น๊ฒจ์จ๋ค. ์ธ์
๋ณธ๋ฌธ์ ํด๋ฆญํ์ ๋๋ง.
์ด๊ฑด UE5์์ ๋งต ์ ์ฒด ๋ก๋ฉ vs ๋ ๋ฒจ ์คํธ๋ฆฌ๋ฐ์ด๋ ๋๊ฐ๋ค. ์์ ์ ์๋ ์ ์ฒด๋ฅผ RAM์ ์ฌ๋ ธ๋ค. ์ง๊ธ ์คํ์๋๋ ํ๋ ์ด์ด ์ฃผ๋ณ๋ง ์คํธ๋ฆฌ๋ฐ์ผ๋ก ๋ก๋ํ๋ค. ๋์คํฌ์ ๋ค ์๋๋ฐ, ๋ฉ๋ชจ๋ฆฌ์ ํ์ํ ๋งํผ๋ง. ์ ํํ ๊ทธ ์ด๋์ด๋ค.
๋จ์ผ HTML ๋ชจ๋๋ --static ํ๋๊ทธ๋ก ์ด๋ ค๋๋ค. ์ธ์
์ด ๋ช ๊ฐ ์์ ๋ ์ฌ์ ํ ๋จ์ผ HTML์ด ์ ์ผ ๊ฐ๋จํ๋ค. ์ํฉ์ ๋ฐ๋ผ ๊ณ ๋ฅผ ์ ์๊ฒ.
Memradar๋ผ๋ ์ด๋ฆ, ๊ทธ๋ฆฌ๊ณ ํ ์ค
์ฒ์ ์ด๋ฆ์ Promptale์ด์๋ค. ํ๋กฌํํธ + ์ด์ผ๊ธฐ. ๊ฐ์ฑ์ ์ด๊ธด ํ๋ฐ ๋ญ ํ๋ ํด์ธ์ง ์ ์ฝํ๋ค.
Memradar๋ก ๋ฐ๊พธ๊ณ ๋๋ ์๋ฏธ๊ฐ ๋ช ํํด์ก๋ค. Mem(memory) + Radar. ๋ด ๊ธฐ์ต(๋ก๊ทธ)์ ๋ ์ด๋๋ก ํ๋๋ค. ๋ด ๋ธ๋ก๊ทธ(radarlog.kr)์๋ ์ฎ์ฌ์ ๋ธ๋๋๊ฐ ์ด์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์์ Code Report๋ผ๋ ํ๋ฉด์ด ๋ค์ด์๋ค. ์ ํ๋ช ๊ณผ ๊ธฐ๋ฅ๋ช ์ด ๊ฐ์ ์๊ธฐ ์ญํ ์ ํ๋ค.
๋ก์ปฌ์์ ๋๋ ค๋ณด๊ณ ์ถ์ผ๋ฉด ํ ์ค์ด๋ฉด ๋๋ค.
npx memradar
์๋์ผ๋ก ~/.claude/projects/๋ ~/.codex/sessions/๋ฅผ ์ค์บํ๊ณ , ๋ธ๋ผ์ฐ์ ์์ ๋์๋ณด๋๋ฅผ ๋์์ค๋ค. ๊ฑฐ๊ธฐ์ Code Report๋ฅผ ์ด๋ฉด ํ์คํฌ๋ฆฐ ํ๊ณ ๊ฐ ์์๋๋ค. ๋ฐ์ดํฐ๋ ์ ๋ถ ๋ก์ปฌ์์๋ง ์ฒ๋ฆฌ๋๋ค. ์๋ฒ์ ๋ญ ์ ๋ณด๋ธ๋ค.
์น ๋ฒ์ ๋ ์๋ค. memradar.vercel.app์์ .claude ํด๋๋ฅผ ์ง์ ๋๋๊ทธํด๋ ๋๋ค.
๋ด ๋ก๊ทธ๋ฅผ ์ด๊ฑธ๋ก ์ฒ์ ๋ดค์ ๋ ๋ค์๋ ์๊ฐ์, Claudeํํ ์๊ฐ๋ณด๋ค ํจ์ฌ ๋ง์ด ๋งํ๋ค๋ ๊ฑฐ์๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฒฝ์ ํจ์ฌ ์ง์คํ๋ค๋ ๊ฒ๋. ์ซ์๋ก ๋ณด๊ณ ๋์์ผ "์ ๋ด๊ฐ ์ด๋ ๊ฒ ์ด๊ณ ์๊ตฌ๋"๊ฐ ์๋ฟ์๋ค.
์ด๊ฒ Code Report์ ๋ชฉ์ ์ด๋ค. ๋ด๊ฐ ๋จ๊ธด ๋ํ๋ฅผ, ๋ด๊ฐ ํ๊ณ ํ ์ ์๊ฒ.
"๋ด ๋ก๊ทธ๋ ๋ด ๋์คํฌ์ ์์๋ค. ๋ด๊ฐ ์ ๋ดค์ ๋ฟ์ด๋ค."









![Defluffer - reduce token usage ๐ by 45% using this one simple trick! [Earthday challenge]](https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiekbgepcutl4jse0sfs0.png)


