From 1949b6e55c5a2660301f5ef9dcd2d06948d16db8 Mon Sep 17 00:00:00 2001 From: Samgu Lee Date: Sat, 13 Jun 2026 06:39:04 +0900 Subject: [PATCH] style: website UI/UX Renewal and Style Optimization --- src/assets/hero-background.jpg | Bin 0 -> 59211 bytes src/components/Criteria.astro | 36 ++ src/components/DocBadgeGrid.astro | 19 + src/components/DocLink.astro | 30 ++ src/components/DocumentFlow.astro | 42 ++ src/components/Hero.astro | 153 ++++++ src/components/InOut.astro | 76 +++ src/components/MemoryGrid.astro | 69 +++ src/components/MissionBox.astro | 37 ++ src/components/OperationLoop.astro | 66 +++ src/components/QuestionGrid.astro | 24 + src/components/RelationFlow.astro | 47 ++ src/components/ReviewGrid.astro | 33 ++ src/components/SpecGrid.astro | 20 + src/components/SpecList.astro | 45 ++ src/components/Terminal.astro | 35 ++ src/components/TerminalGrid.astro | 21 + src/components/ValueFlow.astro | 51 ++ src/components/VerticalPipeline.astro | 55 ++ src/components/Workflow.astro | 33 ++ src/content/documents/index.mdx | 70 +-- src/content/prompts/index.mdx | 70 +-- src/content/showcase/index.mdx | 20 +- src/content/tools/index.mdx | 69 ++- src/content/workflow/index.mdx | 264 +++------- src/layouts/HomeLayout.astro | 21 + src/pages/index.astro | 695 ++++++++++++-------------- 27 files changed, 1413 insertions(+), 688 deletions(-) create mode 100644 src/assets/hero-background.jpg create mode 100644 src/components/Criteria.astro create mode 100644 src/components/DocBadgeGrid.astro create mode 100644 src/components/DocLink.astro create mode 100644 src/components/DocumentFlow.astro create mode 100644 src/components/Hero.astro create mode 100644 src/components/InOut.astro create mode 100644 src/components/MemoryGrid.astro create mode 100644 src/components/MissionBox.astro create mode 100644 src/components/OperationLoop.astro create mode 100644 src/components/QuestionGrid.astro create mode 100644 src/components/RelationFlow.astro create mode 100644 src/components/ReviewGrid.astro create mode 100644 src/components/SpecGrid.astro create mode 100644 src/components/SpecList.astro create mode 100644 src/components/Terminal.astro create mode 100644 src/components/TerminalGrid.astro create mode 100644 src/components/ValueFlow.astro create mode 100644 src/components/VerticalPipeline.astro create mode 100644 src/components/Workflow.astro create mode 100644 src/layouts/HomeLayout.astro diff --git a/src/assets/hero-background.jpg b/src/assets/hero-background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..86cd35f57b1d1af11dfb3803f9cb7c84e957d9c6 GIT binary patch literal 59211 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 + {/* 항목들을 모바일에서도 한 줄에 예쁘게 칩(Chip) 형태로 가로 배치 */} +
+ { + items.map((item) => ( +
+ {/* 성공/패스를 의미하는 초록색 체크 아이콘 */} + + + + {item} +
+ )) + } +
+ diff --git a/src/components/DocBadgeGrid.astro b/src/components/DocBadgeGrid.astro new file mode 100644 index 0000000..060a30d --- /dev/null +++ b/src/components/DocBadgeGrid.astro @@ -0,0 +1,19 @@ +--- +// src/components/DocBadgeGrid.astro +interface Props { + docs: string[]; +} +const { docs } = Astro.props; +--- + +
+ { + docs.map((doc) => ( + + {doc} + + )) + } +
diff --git a/src/components/DocLink.astro b/src/components/DocLink.astro new file mode 100644 index 0000000..b429228 --- /dev/null +++ b/src/components/DocLink.astro @@ -0,0 +1,30 @@ +--- +// src/components/DocLink.astro +interface Props { + href: string; + text?: string; +} +const { href, text = 'View Document Standard' } = Astro.props; +--- + + diff --git a/src/components/DocumentFlow.astro b/src/components/DocumentFlow.astro new file mode 100644 index 0000000..8dd4b22 --- /dev/null +++ b/src/components/DocumentFlow.astro @@ -0,0 +1,42 @@ +--- +// src/components/DocumentFlow.astro +interface Props { + documents: string[]; +} +const { documents } = Astro.props; +--- + +
+ {/* 모바일 화면에서도 자연스럽게 흐르도록 flex-wrap 처리 */} +
+ { + documents.map((doc, idx) => ( +
+ {/* .md 파일명에 맞춰 시그니처 폰트 스타일(Mono)과 묵직한 다크 배지 적용 */} + + {doc} + + + {/* 마지막 문서 뒤에는 화살표를 표시하지 않음 */} + {idx < documents.length - 1 && ( + + + + )} +
+ )) + } +
+
diff --git a/src/components/Hero.astro b/src/components/Hero.astro new file mode 100644 index 0000000..31b1ede --- /dev/null +++ b/src/components/Hero.astro @@ -0,0 +1,153 @@ +
+
+ + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+ {/* 탑 라벨 서브타이틀 */} + + + AI-CENTRIC PRODUCT DEVELOPMENT FRAMEWORK + + + {/* 메인 카피라인 */} +

+ AI는 바뀝니다.
+ + 프로젝트는 계속되어야 합니다. + +

+ + {/* 코어 설명 */} +

+ REPL Works는 일회성 Chat 에이전트가 아닙니다. 프로젝트의 본질적인 의도, + 설계 구조, 아키텍처 결정을 규칙화하여 Git에 영구 자산으로 남기는 AI 중심 개발 프레임워크입니다. +

+ + {/* 핵심 가치 배지 보드 */} +
+ WHAT WE PROVIDE +
+ + ✨ 특정 AI 의존성 탈피 + + + ⏳ 프로젝트 지속성 + + + ⚡ AI 입력 비용 최적화 + + + 🌱 온보딩 비용 절감 + + + 📦 Git 기반 워크플로 + +
+
+ + {/* 액션 버튼 */} + +
+
+
diff --git a/src/components/InOut.astro b/src/components/InOut.astro new file mode 100644 index 0000000..d1e6d2e --- /dev/null +++ b/src/components/InOut.astro @@ -0,0 +1,76 @@ +--- +// src/components/InOut.astro +interface Props { + type: 'input' | 'output'; + items: string[]; +} + +const { type, items } = Astro.props; + +// 입력과 출력에 따른 스타일 정의 +const isInput = type === 'input'; +const bgColor = isInput ? 'bg-slate-50' : 'bg-blue-50/50'; +const borderColor = isInput ? 'border-slate-200' : 'border-blue-200'; +const labelColor = isInput ? 'bg-slate-900' : 'bg-blue-600'; +const iconColor = isInput ? 'text-slate-400' : 'text-blue-500'; +--- + +
+ {/* 상단 라벨 */} +
+ + {type} + +
+
+
+ + {/* 아이템 리스트 (가로로 예쁘게 배치) */} +
+ { + items.map((item) => ( +
+ {/* 아이콘: 입력은 화살표 인, 출력은 체크박스 */} + {isInput ? ( + + + + ) : ( + + + + )} + {item} +
+ )) + } +
+
diff --git a/src/components/MemoryGrid.astro b/src/components/MemoryGrid.astro new file mode 100644 index 0000000..3f24993 --- /dev/null +++ b/src/components/MemoryGrid.astro @@ -0,0 +1,69 @@ +--- +// src/components/MemoryGrid.astro +--- + +
+ {/* 1. Session Memory Card */} +
+
+ +

+ Session Memory +

+
+

+ 현재 세션이 끝나면 사라질 수 있는 휘발성 컨텍스트입니다. +

+ +
+ { + ['현재 채팅', '현재 Context Window', '현재 Agent Runtime'].map( + (item) => ( + + {item} + + ) + ) + } +
+
+ + {/* 2. Project Memory Card */} +
+
+ +

+ Project Memory +

+
+

+ Git과 마크다운 문서로 영구히 보존되는 프로젝트의 핵심 기억입니다. +

+ +
+ { + [ + 'Git', + 'PRODUCT_SPEC.md', + 'ARCHITECTURE.md', + 'TASKS.md', + 'AGENTS.md', + ].map((item) => ( + + {item} + + )) + } +
+
+
diff --git a/src/components/MissionBox.astro b/src/components/MissionBox.astro new file mode 100644 index 0000000..2f56bf6 --- /dev/null +++ b/src/components/MissionBox.astro @@ -0,0 +1,37 @@ +--- +// src/components/MissionBox.astro +interface Props { + text: string; +} +const { text } = Astro.props; +--- + +
+
+ {/* 나침반/방향을 상징하는 아이콘 */} +
+ + + +
+ + {/* 이타릭체와 두꺼운 폰트로 미션 느낌 강조 */} +

+ "{text}" +

+
+
diff --git a/src/components/OperationLoop.astro b/src/components/OperationLoop.astro new file mode 100644 index 0000000..86e5064 --- /dev/null +++ b/src/components/OperationLoop.astro @@ -0,0 +1,66 @@ +--- +// src/components/OperationLoop.astro +interface Props { + steps: string[]; +} +const { steps } = Astro.props; +--- + +
+ {/* 가로로 부드럽게 정렬되는 루프 컨테이너 */} +
+ { + steps.map((step, idx) => ( +
+ {/* 일반 액션과 .md 파일의 스타일을 구분하여 일관성 유지 */} + + {step} + + + {/* 단계 연결 화살표 */} + {idx < steps.length - 1 ? ( + + + + ) : ( + /* 마지막 단계 뒤에는 처음으로 돌아간다는 순환(Loop) 아이콘 배치 */ +
+ + + + Loop +
+ )} +
+ )) + } +
+
diff --git a/src/components/QuestionGrid.astro b/src/components/QuestionGrid.astro new file mode 100644 index 0000000..879fc25 --- /dev/null +++ b/src/components/QuestionGrid.astro @@ -0,0 +1,24 @@ +--- +// src/components/QuestionGrid.astro +interface Props { + questions: string[]; +} +const { questions } = Astro.props; +--- + +
+ { + questions.map((question, idx) => ( +
+ {/* 1. 번호 배지: flex-shrink-0으로 찌그러짐 방지, 글자 크기와 정렬 고정 */} + + {idx + 1} + + {/* 2. 텍스트: items-center와 leading-snug 조합으로 무조건 숫자 배지와 황금 수평 정렬 */} +

+ {question} +

+
+ )) + } +
diff --git a/src/components/RelationFlow.astro b/src/components/RelationFlow.astro new file mode 100644 index 0000000..99eabe3 --- /dev/null +++ b/src/components/RelationFlow.astro @@ -0,0 +1,47 @@ +--- +// src/components/RelationFlow.astro +interface Props { + items: string[]; +} +const { items } = Astro.props; +--- + +
+ {/* 모바일 가로 폭에 맞춰 유연하게 줄바꿈되는 흐름 레이아웃 */} +
+ { + items.map((item, idx) => ( +
+ {/* 번호가 매겨진 세련된 아키텍처 칩 */} +
+ + 0{idx + 1} + + + {item} + +
+ + {/* 단계 연결 화살표 */} + {idx < items.length - 1 && ( + + + + )} +
+ )) + } +
+
diff --git a/src/components/ReviewGrid.astro b/src/components/ReviewGrid.astro new file mode 100644 index 0000000..66b4d63 --- /dev/null +++ b/src/components/ReviewGrid.astro @@ -0,0 +1,33 @@ +--- +// src/components/ReviewGrid.astro +interface Props { + items: string[]; +} +const { items } = Astro.props; +--- + +
+ { + items.map((item) => ( +
+ {/* Human Review를 상징하는 주황/노란색 돋보기 아이콘 */} + + + + + {item} + +
+ )) + } +
diff --git a/src/components/SpecGrid.astro b/src/components/SpecGrid.astro new file mode 100644 index 0000000..fb4eb76 --- /dev/null +++ b/src/components/SpecGrid.astro @@ -0,0 +1,20 @@ +--- +// src/components/SpecGrid.astro +interface Props { + items: string[]; +} +const { items } = Astro.props; +--- + +
+ { + items.map((item) => ( +
+ {/* 텍스트 크기를 text-base로 키우고, font-bold와 tracking-tight로 가독성 향상 */} +

+ {item} +

+
+ )) + } +
diff --git a/src/components/SpecList.astro b/src/components/SpecList.astro new file mode 100644 index 0000000..5f4bdad --- /dev/null +++ b/src/components/SpecList.astro @@ -0,0 +1,45 @@ +--- +// src/components/SpecList.astro +interface Props { + items: string[]; +} +const { items } = Astro.props; + +// 항목별 매칭할 아이콘 (SVG 고정) +const iconMap: Record = { + Vision: + '', + 'User Journey': + '', + Navigation: + '', + Features: + '', + 'Content Structure': + '', + 'Success Criteria': + '', +}; + +const defaultIcon = + ''; +--- + +
+ { + items.map((item) => ( +
+ {/* 아이콘 배지: text-slate-500으로 은은하게 */} +
+ + {item} + +
+ )) + } +
diff --git a/src/components/Terminal.astro b/src/components/Terminal.astro new file mode 100644 index 0000000..b29f865 --- /dev/null +++ b/src/components/Terminal.astro @@ -0,0 +1,35 @@ +--- +// src/components/Terminal.astro +interface Props { + command: string; +} +const { command } = Astro.props; +--- + +
+ {/* 터미널 상단 바 (맥 스타일 점 3개) */} +
+
+ + + +
+ bash +
+ + {/* 터미널 본문 내용 */} +
+
+ $ + {command} +
+
+
diff --git a/src/components/TerminalGrid.astro b/src/components/TerminalGrid.astro new file mode 100644 index 0000000..f0cac1f --- /dev/null +++ b/src/components/TerminalGrid.astro @@ -0,0 +1,21 @@ +--- +// src/components/TerminalGrid.astro +interface Props { + commands: string[]; +} +const { commands } = Astro.props; +--- + +
+ { + commands.map((cmd) => ( +
+ {/* 프롬프트 기호 */} + $ + {cmd} +
+ )) + } +
diff --git a/src/components/ValueFlow.astro b/src/components/ValueFlow.astro new file mode 100644 index 0000000..b9ccabe --- /dev/null +++ b/src/components/ValueFlow.astro @@ -0,0 +1,51 @@ +--- +// src/components/ValueFlow.astro +interface Props { + from: string; + to: string; +} +const { from, to } = Astro.props; +--- + +
+ {/* 1. From: Manual Idea */} +
+ + {from} + +
+ + {/* 2. Transition Arrow with Text */} +
+ + Auto + + + + +
+ + {/* 3. To: Actionable Issue */} +
+ + {to} + +
+
diff --git a/src/components/VerticalPipeline.astro b/src/components/VerticalPipeline.astro new file mode 100644 index 0000000..2093c5c --- /dev/null +++ b/src/components/VerticalPipeline.astro @@ -0,0 +1,55 @@ +--- +// src/components/VerticalPipeline.astro +const steps = [ + { file: 'IDEAS.md', desc: '아이디어 검증' }, + { file: 'PITCHING_SCRIPT.md', desc: '프로젝트 포지셔닝' }, + { file: 'PRODUCT_SPEC.md', desc: '제품 정의' }, + { file: 'ARCHITECTURE.md', desc: '시스템 설계' }, + { file: 'FRAMEWORK.md', desc: '기술 스택별 구현 규칙' }, + { file: 'TASKS.md', desc: '수행 계획' }, + { file: 'AGENTS.md', desc: 'AI 에이전트 규칙' }, +]; +--- + +
+ { + steps.map((step, idx) => ( +
+ {/* 타임라인 노드 포인트 */} + + + + + {/* 가로로 나란히 매칭되는 파일명과 설명 */} +
+ {/* 파일명 배지 */} + + {step.file} + + + {/* 화살표와 설명 (모바일에서는 생략되거나 자연스럽게 배치) */} +
+ +

+ {step.desc} +

+
+
+
+ )) + } +
diff --git a/src/components/Workflow.astro b/src/components/Workflow.astro new file mode 100644 index 0000000..bfddbd6 --- /dev/null +++ b/src/components/Workflow.astro @@ -0,0 +1,33 @@ +--- +interface Props { + steps: string[]; +} + +const { steps } = Astro.props; +--- + +
+ { + steps.map((step, idx) => ( +
+ {/* 문서(.md)와 일반 단계(AI/Action)의 스타일을 구분해서 세련되게 표현 */} + + {step} + + + {/* 마지막 요소 뒤에는 화살표를 붙이지 않음 */} + {idx < steps.length - 1 && ( + + )} +
+ )) + } +
diff --git a/src/content/documents/index.mdx b/src/content/documents/index.mdx index d0fdbae..68dc252 100644 --- a/src/content/documents/index.mdx +++ b/src/content/documents/index.mdx @@ -5,6 +5,10 @@ description: 'Document standards used by the REPL Works framework.' publishedAt: '2026-06-12T00:00:00Z' --- +import DocumentFlow from '../../components/DocumentFlow.astro'; +import MissionBox from '../../components/MissionBox.astro'; +import DocLink from '../../components/DocLink.astro'; + REPL Works는 문서를 단순한 기록으로 보지 않는다. 문서는 프로젝트 기억(Project Memory)의 일부이다. @@ -25,21 +29,15 @@ REPL Works는 프로젝트 기억을 문서와 Git에 저장한다. # Document Flow -```text -IDEAS.md -↓ -PITCHING_SCRIPT.md -↓ -PRODUCT_SPEC.md -↓ -ARCHITECTURE.md -↓ -FRAMEWORK.md -↓ -TASKS.md -↓ -AGENTS.md -``` + --- @@ -57,9 +55,7 @@ AGENTS.md 목적 -```text -Should we build this? -``` + --- @@ -73,7 +69,7 @@ Should we build this? --- -[View Document Standard](/documents/ideas) + --- @@ -85,9 +81,7 @@ Should we build this? 목적 -```text -Why does this project exist? -``` + --- @@ -100,7 +94,7 @@ Why does this project exist? --- -[View Document Standard](/documents/pitching-script) + --- @@ -112,9 +106,7 @@ Why does this project exist? 목적 -```text -What should be built? -``` + --- @@ -128,7 +120,7 @@ What should be built? --- -[View Document Standard](/documents/product-spec) + --- @@ -140,9 +132,7 @@ What should be built? 목적 -```text -How should it be built? -``` + --- @@ -160,7 +150,7 @@ ARCHITECTURE.md는 프로젝트의 기술적 진실이다. --- -[View Document Standard](/documents/architecture) + --- @@ -172,9 +162,7 @@ ARCHITECTURE.md는 프로젝트의 기술적 진실이다. 목적 -```text -How should this stack be used? -``` + --- @@ -200,7 +188,7 @@ FRAMEWORK.md는 해당 구조를 구현하는 방법을 설명한다. --- -[View Document Standard](/documents/framework) + --- @@ -212,9 +200,7 @@ FRAMEWORK.md는 해당 구조를 구현하는 방법을 설명한다. 목적 -```text -What should be done next? -``` + --- @@ -230,7 +216,7 @@ TASKS.md는 현재 위치를 설명한다. --- -[View Document Standard](/documents/tasks) + --- @@ -242,9 +228,7 @@ AI 작업 규칙을 정의한다. 목적 -```text -How should AI work? -``` + --- @@ -261,7 +245,7 @@ AGENTS.md는 모든 AI의 진입점이다. --- -[View Document Standard](/documents/agents) + --- diff --git a/src/content/prompts/index.mdx b/src/content/prompts/index.mdx index d47311c..1714a29 100644 --- a/src/content/prompts/index.mdx +++ b/src/content/prompts/index.mdx @@ -5,6 +5,11 @@ description: 'Reusable prompt library for REPL Works.' publishedAt: '2026-06-12T00:00:00Z' --- +import SpecGrid from '../../components/SpecGrid.astro'; +import InOut from '../../components/InOut.astro'; +import OperationLoop from '../../components/OperationLoop.astro'; +import Terminal from '../../components/Terminal.astro'; + REPL Works는 Prompt Engineering Framework가 아니다. 하지만 Prompt는 REPL Works의 중요한 구성 요소이다. @@ -27,15 +32,12 @@ Prompt는 그 기억을 활용하는 방법을 정의한다. 대부분의 AI 사용자는 같은 설명을 반복한다. -```text -무엇을 만들고 있는가? - -왜 만드는가? - -어떤 형식으로 답변해야 하는가? - -어떤 문서를 생성해야 하는가? -``` + --- @@ -63,9 +65,7 @@ Prompt는 프로젝트마다 새로 작성하는 것이 아니다. 생성 문서 -```text -IDEAS.md -``` + [Prompt 보기](/prompts/idea-refinement) @@ -79,9 +79,7 @@ IDEAS.md 생성 문서 -```text -PITCHING_SCRIPT.md -``` + [Prompt 보기](/prompts/pitch-creation) @@ -95,9 +93,7 @@ PITCHING_SCRIPT.md 생성 문서 -```text -PRODUCT_SPEC.md -``` + [Prompt 보기](/prompts/product-specification) @@ -111,9 +107,7 @@ PRODUCT_SPEC.md 생성 문서 -```text -ARCHITECTURE.md -``` + [Prompt 보기](/prompts/architecture-design) @@ -127,9 +121,7 @@ ARCHITECTURE.md 생성 문서 -```text -TASKS.md -``` + [Prompt 보기](/prompts/task-generation) @@ -143,13 +135,7 @@ Execution AI가 개발 가능한 상태인지 검증한다. 검증 대상 -```text -PRODUCT_SPEC.md - -ARCHITECTURE.md - -TASKS.md -``` + [Prompt 보기](/prompts/execution-validation) @@ -167,17 +153,13 @@ REPL Works Prompt는 고정된 문서가 아니다. 일반적인 흐름 -```text -Project Usage -↓ -Prompt Improvement -↓ -Better Documents -↓ -Better Execution -↓ -Project Usage -``` + --- @@ -211,9 +193,7 @@ REPL Works는 Prompt를 개인 자산이 아닌 공유 가능한 자산으로 예시 -```text -ai-prompt -``` + --- diff --git a/src/content/showcase/index.mdx b/src/content/showcase/index.mdx index c014e65..26b0064 100644 --- a/src/content/showcase/index.mdx +++ b/src/content/showcase/index.mdx @@ -5,6 +5,8 @@ description: 'ReplWorks 호환(Compatible) 프로젝트 리스트.' publishedAt: '2026-06-12T00:00:00Z' --- +import DocBadgeGrid from '../../components/DocBadgeGrid.astro'; + ReplWorks는 이론이 아니라 실전에서 검증되는 프레임워크다. 이 페이지는 실제로 ReplWorks를 적용하고 있는 프로젝트를 소개한다. @@ -17,17 +19,13 @@ ReplWorks 호환(Compatible) 프로젝트는 ReplWorks 워크플로와 문서 일반적으로 다음 문서를 사용한다. -```text -PRODUCT_SPEC.md - -ARCHITECTURE.md - -FRAMEWORK.md - -TASKS.md - -AGENTS.md -``` + --- diff --git a/src/content/tools/index.mdx b/src/content/tools/index.mdx index a3c0e79..cd8de8e 100644 --- a/src/content/tools/index.mdx +++ b/src/content/tools/index.mdx @@ -5,6 +5,12 @@ description: '도구(Tools)는 ReplWorks framework 를 확장하고 자동화 publishedAt: '2026-06-12T00:00:00Z' --- +import SpecGrid from '../../components/SpecGrid.astro'; +import DocumentFlow from '../../components/DocumentFlow.astro'; +import ValueFlow from '../../components/ValueFlow.astro'; +import TerminalGrid from '../../components/TerminalGrid.astro'; +import RelationFlow from '../../components/RelationFlow.astro'; + REPL Works는 도구를 제품으로 보지 않는다. 도구는 프레임워크를 실행하기 위한 자산(Framework Assets)이다. @@ -21,13 +27,11 @@ Workflow가 반복되면, REPL Works는 다음을 표준화한다. -```text -Workflow - -Prompts - -Documents -``` + --- @@ -39,15 +43,12 @@ Documents 일반적으로 다음 순서로 발전한다. -```text -Manual Process -↓ -Prompt -↓ -Document -↓ -Tool -``` + --- @@ -65,11 +66,7 @@ GitHub Issue를 REPL Works 방식으로 생성하기 위한 도구. 목적 -```text -Idea -↓ -Issue -``` + 전환을 단순화한다. @@ -96,15 +93,12 @@ REPL Works는 실제 사용 경험을 통해 새로운 도구를 추가할 수 예시 -```text -ai-prompt - -ai-sync - -ai-review - -ai-memory -``` + --- @@ -118,15 +112,12 @@ ai-memory ## Relationship -```text -Workflow -↓ -Prompts -↓ -Documents -↓ -Tools -``` + --- diff --git a/src/content/workflow/index.mdx b/src/content/workflow/index.mdx index 22a96d7..b0ada3a 100644 --- a/src/content/workflow/index.mdx +++ b/src/content/workflow/index.mdx @@ -4,6 +4,14 @@ version: 'v1' description: 'REPL Works를 이용한 AI-Native Product Development Workflow' publishedAt: '2026-06-12T00:00:00Z' --- +import Workflow from '../../components/Workflow.astro'; +import QuestionGrid from '../../components/QuestionGrid.astro'; +import SpecList from '../../components/SpecList.astro'; +import SpecGrid from '../../components/SpecGrid.astro'; +import InOut from '../../components/InOut.astro'; +import Criteria from '../../components/Criteria.astro'; +import MemoryGrid from '../../components/MemoryGrid.astro'; +import ReviewGrid from '../../components/ReviewGrid.astro'; 대부분의 AI 프로젝트는 같은 문제를 반복한다. @@ -29,15 +37,13 @@ publishedAt: '2026-06-12T00:00:00Z' 그 순간부터 동일한 설명이 반복된다. -```text -왜 만들고 있지? - -현재 상태가 뭐지? - -왜 이렇게 설계했지? - -다음 작업은 뭐지? -``` + --- @@ -57,31 +63,7 @@ REPL Works는 프로젝트 기억(Project Memory)과 세션 기억(Session Memor --- -Session Memory - -```text -현재 채팅 - -현재 Context Window - -현재 Agent Runtime -``` - ---- - -Project Memory - -```text -Git - -PRODUCT_SPEC.md - -ARCHITECTURE.md - -TASKS.md - -AGENTS.md -``` + --- @@ -101,37 +83,11 @@ AGENTS.md # 전체 흐름 -```text -IDEAS.md -↓ -PITCHING_SCRIPT.md -↓ -PRODUCT_SPEC.md -↓ -ARCHITECTURE.md -↓ -TASKS.md -↓ -AGENTS.md -↓ -Discussion AI -↓ -Issue -↓ -Execution AI -↓ -Pull Request -↓ -Human Review -↓ -Merge -↓ -Operation -↓ -Document Updates -↓ -Next Iteration -``` + --- @@ -159,17 +115,13 @@ Discussion AI와 반복적으로 대화하며 아이디어를 검증한다. 주요 질문 -```text -누구를 위한 제품인가? - -왜 존재해야 하는가? - -사용자가 원하는가? - -지속 가능한가? - -사업적으로 의미가 있는가? -``` + --- @@ -211,19 +163,14 @@ Discussion AI와 반복적으로 대화하며 아이디어를 검증한다. 포함 내용 -```text -Vision - -User Journey - -Navigation - -Features - -Content Structure - -Success Criteria -``` + --- @@ -253,19 +200,14 @@ Execution AI는 PRODUCT_SPEC.md만 읽어도 제품의 목적을 이해할 수 포함 내용 -```text -Project Structure - -Routing - -Content Model - -Data Flow - -Deployment - -Constraints -``` + --- @@ -341,17 +283,13 @@ AI는 항상 AGENTS.md부터 읽는다. 포함 내용 -```text -문서 우선순위 - -구현 규칙 - -테스트 규칙 - -파일 생성 규칙 - -아키텍처 변경 규칙 -``` + --- @@ -365,17 +303,13 @@ Discussion AI는 구현보다 이해에 집중한다. 역할 -```text -요구사항 분석 - -문서 검토 - -Task 검증 - -Issue 작성 - -Architecture 검토 -``` + --- @@ -395,43 +329,21 @@ Execution AI는 승인된 작업을 구현한다. --- -입력 - -```text -PRODUCT_SPEC.md - -ARCHITECTURE.md - -TASKS.md +**입력** -AGENTS.md - -Issue -``` + --- -출력 - -```text -Code - -Tests +**출력** -Pull Request -``` + --- 필수 조건 -```text -Build Success - -Lint Success - -Test Success -``` + --- @@ -449,17 +361,13 @@ Test Success Human Review는 다음을 확인한다. -```text -요구사항 충족 여부 - -제품 방향 일치 여부 - -사용자 경험 - -품질 - -릴리즈 준비 상태 -``` + --- @@ -479,15 +387,12 @@ Human Review는 다음을 확인한다. 운영 과정에서는 새로운 학습이 발생한다. -```text -사용자 피드백 - -버그 - -신규 요구사항 - -제품 개선 -``` + --- @@ -497,19 +402,10 @@ Human Review는 다음을 확인한다. # 운영 루프 -```text -Operate -↓ -Learn -↓ -Update PRODUCT_SPEC.md -↓ -Update ARCHITECTURE.md -↓ -Update TASKS.md -↓ -Next Iteration -``` + --- diff --git a/src/layouts/HomeLayout.astro b/src/layouts/HomeLayout.astro new file mode 100644 index 0000000..83fbeba --- /dev/null +++ b/src/layouts/HomeLayout.astro @@ -0,0 +1,21 @@ +--- +import Layout from './Layout.astro'; +import Header from '../components/Header.astro'; +import Footer from '../components/Footer.astro'; +import Hero from '../components/Hero.astro'; +const { + title = 'REPL Works', + description = 'REPL Works documentation shell.', +} = Astro.props; +--- + + +
+ +
+
+ +
+
+
+ diff --git a/src/pages/index.astro b/src/pages/index.astro index f3eeefd..f29e0ee 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,444 +1,407 @@ --- -import SiteLayout from '../layouts/SiteLayout.astro'; +import HomeLayout from '../layouts/HomeLayout.astro'; +import heroBg from '../assets/hero-background.jpg'; + +// 코어 워크플로 파이프라인 데이터 +const pipelineSteps = [ + { id: '01', file: 'IDEAS.md', desc: '아이디어 검증' }, + { id: '02', file: 'PITCHING_SCRIPT.md', desc: '프로젝트 포지셔닝' }, + { id: '03', file: 'PRODUCT_SPEC.md', desc: '제품 정의' }, + { id: '04', file: 'ARCHITECTURE.md', desc: '시스템 설계' }, + { id: '05', file: 'FRAMEWORK.md', desc: '기술 스택별 구현 규칙' }, + { id: '06', file: 'TASKS.md', desc: '수행 계획' }, + { id: '07', file: 'AGENTS.md', desc: 'AI 에이전트 규칙' }, +]; + +// 다섯 가지 핵심 기반 데이터 +const benefits = [ + { + title: '특정 AI 의존성 탈피', + desc: '특정 AI 모델에 의존하지 않습니다. 프로젝트 기억은 Git과 문서에 저장되므로 새로운 모델도 프로젝트를 이어갈 수 있습니다.', + }, + { + title: '프로젝트 지속성', + desc: '프로젝트는 수개월 또는 수년 동안 유지됩니다. 세션이 종료되어도 프로젝트의 의도와 구조는 온전하게 보존됩니다.', + }, + { + title: 'AI 입력 비용 최적화', + desc: '오래된 채팅 로그를 다시 읽게 하는 대신, 필수 정보만 정제된 영구 문서로 남겨 AI가 최소한의 토큰만 읽고 정확히 작업하도록 돕습니다.', + }, + { + title: '온보딩 비용 절감', + desc: '새로 합류한 팀원과 새로운 AI 에이전트 모두 구조화된 문서를 읽고 지체 없이 프로젝트를 깊이 이해할 수 있습니다.', + }, + { + title: 'Git 기반 워크플로', + desc: '모든 프로젝트 기억은 Git으로 이력 관리됩니다. 현재 상태는 문서가 설명하고, 과거 상태는 Git 커밋이 안전하게 보존합니다.', + }, +]; + +// 쇼케이스 프로젝트 데이터 +const showcases = [ + { + title: 'REPL Works 웹사이트', + desc: 'ReplWorks 웹사이트는 본 프레임워크를 실제로 적용하여 관리 중인 첫 번째 REPL Works 호환 프로덕션 프로젝트입니다.', + tags: ['Website', 'Dogfooding'], + link: '/showcase/repl-works-website', + github: 'https://github.com/replworks/replworks.github.io', + }, + { + title: 'AI 이슈 퍼블리셔', + desc: 'AI 에이전트와의 토론 컨텍스트를 분석하여, 즉시 개발 및 실행 가능한 GitHub Issue 형태로 자동 변환해 주는 호환 도구입니다.', + tags: ['Tooling', 'Issue workflow'], + link: '/showcase/ai-issue', + github: 'https://github.com/replworks/ai-issue', + }, + { + title: '클래이튜브(ClayTube)', + desc: 'ClayTube는 장기간에 걸쳐 지속적으로 기능이 개발되고 확장되는 과정을 검증하는 데 초점을 둔 참조 프로젝트입니다.', + tags: ['CLI', 'Website Generator'], + link: '/showcase/claytube', + github: 'https://github.com/eternops/claytube', + }, + { + title: '와이파이 노트(WIFI Note)', + desc: '구조화된 프로젝트 기억 자산화를 통해 복잡한 비즈니스 로직을 빌드해 나가는 과정을 보여주는 웹 애플리케이션 프로젝트입니다.', + tags: ['Commercial', 'Web App'], + link: '/showcase/wifi-note', + }, +]; --- - -
-
-
-
-

- AI 중심의 제품 개발 프레임워크 -

-

- AI는 바뀝니다. -
- 프로젝트는 계속되어야 합니다. -

-

- REPL Works는 AI Agent가 아닙니다. AI 중심의 제품 개발 - 프레임워크입니다. -

-
- - -
- -
- +
+ { + /* ========================================================================= + 2. WORKFLOW SECTION + ========================================================================= */ + }

Workflow

REPL Works는 어떻게 작동하는가

+

+ 상위 문서 규격이 명확히 정립되면서 하위 마일스톤 단계로 점진적으로 + 파생·확장되는 연속형 누적 파이프라인 프로세스입니다. +

+
+ {/* 세로 타임라인 트랙 트레일 */}
-
-

- IDEAS.md -

-

아이디어 검증

-
-
-

- PITCHING_SCRIPT.md -

-

프로젝트 포지셔닝

-
-
-

- PRODUCT_SPEC.md -

-

제품 정의

-
-
-

- ARCHITECTURE.md -

-

시스템 설계

-
-
-

- FRAMEWORK.md -

-

기술 스택별 구현 규칙

-
-
-

- TASKS.md -

-

수행 계획

-
-
-

- AGENTS.md -

-

AI 에이젼트 규칙

-
+ { + pipelineSteps.map((step) => ( +
+ {/* 불릿 원 노드 포인트 */} + + + + + {/* 콘텐츠 행 래퍼 (찌그러짐 원천 차단) */} +
+ {/* 정렬용 ID 번호 */} + + {step.id} + + + {/* 파일명 시그니처 칩 */} + + {step.file} + + + {/* 데스크톱 가로 연결 화살표 */} + + + {/* 한글 기능 가이드 설명 */} +

+ + · + + {step.desc} +

+
+
+ )) + }
-

- REPL Works는 프로젝트 기억 문서에서 시작해 Planning AI, Execution AI, - Human Review로 이어집니다. + +

+ REPL Works 아키텍처는 프로젝트 기억 문서 자산화에서 시작해 Planning + AI, Execution AI를 거쳐 최종 Human Review 파이프라인으로 연결됩니다.

+ - 워크플로 자세히 보기 + 워크플로 구조 문서 상세 보기
-
-
-

- Problem -

-

+ PROBLEM +

+ REPL Works가 해결하는 문제 +

+

+ AI 에이전트는 코드를 정교하게 작성하지만 세션이 끊기면 컨텍스트를 + 망각합니다. 프로젝트 기억은 일회성 채팅방이 아닌 Git 저장소에 영구 + 보존되어야 합니다. +

+ + {/* 2x2 대시보드 그리드 큐브 카드 구조 */} +
+
- REPL Works가 해결하는 문제 - -
-
-

AI는 코드를 잘 작성합니다.

-

하지만 프로젝트를 기억하지는 못합니다.

-

몇 주가 지나면 다시 설명해야 합니다.

-
왜 만드는가?
+          Q1
+          
+

+ 왜 만드는가? +

+

+ 프로젝트의 본질적인 도메인 목적과 비즈니스 동기 +

+
+
-무엇을 만드는가? +
+ Q2 +
+

+ 무엇을 만드는가? +

+

+ 제품의 스펙 사양 정의 및 상세 요구사항 기능 규격 +

+
+
-현재 구조는 무엇인가? +
+ Q3 +
+

+ 현재 구조는 무엇인가? +

+

+ 전체 시스템 엔지니어링 아키텍처 및 기술 스택 구현 규칙 +

+
+
-어떤 결정을 내렸는가?
-

REPL Works는 이러한 정보를 프로젝트 문서에 저장합니다.

-

프로젝트 기억은 세션이 아니라 Git에 남아야 합니다.

+
+ Q4 +
+

+ 어떤 결정을 내렸는가? +

+

+ 지금까지 누적 도출된 테크니컬 마일스톤과 설계 의사결정 이력 +

+
+
+ +

+ REPL Works 프레임워크는 상기 핵심 질문 4가지를 누수 없이 수렴하여 시스템 + 설계 문서로 밀착 압축하고 형상 관리의 자산으로 영속시킵니다. +

+ { + /* ========================================================================= + 4. BENEFITS SECTION + ========================================================================= */ + }

Benefits

프로젝트를 계속할 수 있게 만드는 다섯 가지 기반

-
-
-

- 특정 AI 의존성 탈피 -

-

- 특정 AI 모델에 의존하지 않습니다. 프로젝트 기억은 Git과 문서에 - 저장되므로 새로운 모델도 프로젝트를 이어갈 수 있습니다. -

-
-
-

프로젝트 지속성

-

- 프로젝트는 수개월 또는 수년 동안 유지됩니다. 세션이 종료되어도 - 프로젝트의 의도와 구조는 유지됩니다. -

-
-
-

- AI 입력 비용 최적화 -

-

- 프로젝트 기억을 문서로 압축합니다. 오래된 채팅을 다시 읽게 하는 - 대신, 필요한 정보만 영구 문서로 남겨 AI가 꼭 필요한 문서만 읽고 - 작업할 수 있습니다. -

-
-
-

온보딩 비용 절감

-

- 새로운 사람과 새로운 AI는 문서를 읽고 빠르게 프로젝트를 이해할 수 - 있습니다. -

-
-
-

- Git 기반 워크플로 -

-

- 모든 프로젝트 기억은 Git으로 관리됩니다. 현재 상태는 문서가 - 설명하고, 과거 상태는 Git이 보존합니다. -

-
+ +
+ { + benefits.map((benefit) => ( +
+

+ {benefit.title} +

+

+ {benefit.desc} +

+
+ )) + }
+ { + /* ========================================================================= + 5. SHOWCASE SECTION + ========================================================================= */ + }

Showcase

REPL Works 호환 프로젝트

-
-
-

- REPL Works는 실제 프로젝트에서 사용되고 있습니다. +

+ 실제 엔지니어링 생태계 및 대규모 개발 주기에 REPL Works 프레임워크 + 설계 표준을 도입한 실제 증명 케이스입니다.

-
-
-
- - Website - - - Dogfooding - -
-

- REPL Works 웹사이트 -

-

- ReplWorks 웹사이트는 ReplWorks를 실제로 적용한 첫 번째 ReplWorks - Compatible 프로젝트. -

-

- - 바로가기 - - - Github 가기 - -

-
-
-
- - Tooling - - - Issue workflow - -
-

- AI 이슈 퍼블리셔 -

-

- AI와의 토론을 바로 실행 가능한 Github Issue로 변환해 주는 REPL - Works 호환 도구. -

-

- - 바로가기 - - - Github 가기 - -

-
-
-
- - CLI - - - Website Generator - -
-

- 클래이튜브(ClayTube) -

-

- ClayTube는 장기간에 걸쳐 개발되고 운영되는지 검증하는데 포커스를 - 둔 ReplWorks 호환 프로젝트. -

-

- - 바로가기 - - - Github 가기 - -

-
-
-
- - Commercial - - - Web App - -
-

- 와이파이 노트(WIFI Note) -

-

- 구조화된 프로젝트 기억을 통한 제품 개발을 보여주는 비공개 REPL - Works 호환 프로젝트. -

-

- - 바로가기 - -

-
-
- Showcase 보기 + 전체 쇼케이스 아카이브 보기
+ +
+ { + showcases.map((project) => ( +
+ {/* 프로젝트 유형 테그 그룹 */} +
+ {project.tags.map((tag, idx) => ( + + {tag} + + ))} +
+ +

+ {project.title} +

+

+ {project.desc} +

+ + {/* 실행 링크 버튼 그룹 */} +
+ + 상세 정보 + + {project.github && ( + + GitHub 소스 + + )} +
+
+ )) + } +
+ { + /* ========================================================================= + 6. CORE IDEA FOOTER CARD + ========================================================================= */ + }

Core Idea

-
Models forget.
-
-Projects must not.
+
+

+ Models forget. +

+

+ Projects must not. +

+
-
-
+
+