공개: KoTalk 최신 기준선

This commit is contained in:
Ian 2026-04-16 09:24:26 +09:00
commit debf62f76e
572 changed files with 41689 additions and 0 deletions

View file

@ -0,0 +1,14 @@
# Latest Screenshots
이 디렉터리는 원격 저장소에서도 바로 확인할 수 있는 `최신 기준 제품 스크린샷`을 보관합니다.
규칙:
- README는 이 경로의 이미지를 직접 참조합니다.
- 새 릴리즈나 큰 UI 변경이 있으면 이 폴더의 스크린샷도 함께 갱신합니다.
- 릴리즈 번들용 스크린샷과 별개로, 저장소 안의 최신 기준 화면을 유지합니다.
- 모바일 웹 스크린샷은 `scripts/ci/capture-vstalk-web-screenshots.cjs`로 다시 생성할 수 있습니다.
- 현재 포함:
- Windows 데스크톱 셸
- Windows 온보딩/대화 화면
- `vstalk` 모바일 웹 온보딩/목록/검색/보관/대화 화면

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View file

@ -0,0 +1,19 @@
<svg width="1200" height="320" viewBox="0 0 1200 320" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="1200" height="320" fill="#F7F8FA"/>
<rect x="40" y="44" width="1120" height="232" rx="28" fill="white" stroke="#E5E7EB" stroke-width="2"/>
<text x="84" y="102" fill="#111827" font-family="Segoe UI, Arial, sans-serif" font-size="32" font-weight="700">Contribution Path</text>
<text x="84" y="134" fill="#6B7280" font-family="Segoe UI, Arial, sans-serif" font-size="18">처음 방문자도 어디서 시작해야 하는지 바로 읽히도록, 기여 동선을 짧게 유지합니다.</text>
<rect x="84" y="176" width="220" height="64" rx="18" fill="#FFFFFF" stroke="#E5E7EB" stroke-width="2"/>
<text x="114" y="216" fill="#111827" font-family="Segoe UI, Arial, sans-serif" font-size="20" font-weight="700">1. Read Status</text>
<rect x="336" y="176" width="220" height="64" rx="18" fill="#FFFFFF" stroke="#E5E7EB" stroke-width="2"/>
<text x="366" y="216" fill="#111827" font-family="Segoe UI, Arial, sans-serif" font-size="20" font-weight="700">2. Pick A Surface</text>
<rect x="588" y="176" width="220" height="64" rx="18" fill="#FFFFFF" stroke="#E5E7EB" stroke-width="2"/>
<text x="618" y="216" fill="#111827" font-family="Segoe UI, Arial, sans-serif" font-size="20" font-weight="700">3. Open Issue / PR</text>
<rect x="840" y="176" width="236" height="64" rx="18" fill="#111827"/>
<text x="870" y="216" fill="white" font-family="Segoe UI, Arial, sans-serif" font-size="20" font-weight="700">4. Update Docs + Proof</text>
<path d="M304 208H336" stroke="#9CA3AF" stroke-width="2"/>
<path d="M556 208H588" stroke="#9CA3AF" stroke-width="2"/>
<path d="M808 208H840" stroke="#9CA3AF" stroke-width="2"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View file

@ -0,0 +1,21 @@
<svg width="1200" height="340" viewBox="0 0 1200 340" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="1200" height="340" rx="28" fill="#F8F8F7"/>
<rect x="32" y="32" width="1136" height="276" rx="24" fill="white" stroke="#E5E7EB"/>
<text x="64" y="88" fill="#111827" font-family="Arial, sans-serif" font-size="32" font-weight="700">Evaluation Paths</text>
<text x="64" y="120" fill="#6B7280" font-family="Arial, sans-serif" font-size="16">방문자, 기여자, 운영자가 각자 가장 빨리 들어오는 길</text>
<rect x="64" y="156" width="328" height="116" rx="20" fill="#FAFAFA" stroke="#E5E7EB"/>
<text x="88" y="192" fill="#111827" font-family="Arial, sans-serif" font-size="22" font-weight="700">Visitor</text>
<text x="88" y="222" fill="#6B7280" font-family="Arial, sans-serif" font-size="15">README → Project Status → Showcase</text>
<text x="88" y="244" fill="#6B7280" font-family="Arial, sans-serif" font-size="15">Live Web / Releases / Screenshots</text>
<rect x="436" y="156" width="328" height="116" rx="20" fill="#FAFAFA" stroke="#E5E7EB"/>
<text x="460" y="192" fill="#111827" font-family="Arial, sans-serif" font-size="22" font-weight="700">Contributor</text>
<text x="460" y="222" fill="#6B7280" font-family="Arial, sans-serif" font-size="15">First Contribution → Community</text>
<text x="460" y="244" fill="#6B7280" font-family="Arial, sans-serif" font-size="15">Contributing / UX Atlas / Roadmap</text>
<rect x="808" y="156" width="320" height="116" rx="20" fill="#FAFAFA" stroke="#E5E7EB"/>
<text x="832" y="192" fill="#111827" font-family="Arial, sans-serif" font-size="22" font-weight="700">Operator</text>
<text x="832" y="222" fill="#6B7280" font-family="Arial, sans-serif" font-size="15">Releasing → Deploy → Release Assets</text>
<text x="832" y="244" fill="#6B7280" font-family="Arial, sans-serif" font-size="15">Download Host / Forge Releases</text>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View file

@ -0,0 +1,41 @@
<svg width="1200" height="520" viewBox="0 0 1200 520" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="1200" height="520" fill="#F7F8FA"/>
<rect x="48" y="48" width="1104" height="424" rx="28" fill="white" stroke="#E5E7EB" stroke-width="2"/>
<text x="88" y="110" fill="#111827" font-family="Segoe UI, Arial, sans-serif" font-size="36" font-weight="700">Open Source Surface</text>
<text x="88" y="144" fill="#6B7280" font-family="Segoe UI, Arial, sans-serif" font-size="18">코드만이 아니라 상태, 문서, 릴리즈, 라이브 채널까지 한 화면에서 읽히는 저장소를 목표로 합니다.</text>
<rect x="88" y="188" width="196" height="216" rx="22" fill="#FFFFFF" stroke="#E5E7EB" stroke-width="2"/>
<text x="112" y="232" fill="#111827" font-family="Segoe UI, Arial, sans-serif" font-size="24" font-weight="700">Code</text>
<text x="112" y="268" fill="#6B7280" font-family="Segoe UI, Arial, sans-serif" font-size="16">Desktop</text>
<text x="112" y="294" fill="#6B7280" font-family="Segoe UI, Arial, sans-serif" font-size="16">Mobile Web</text>
<text x="112" y="320" fill="#6B7280" font-family="Segoe UI, Arial, sans-serif" font-size="16">API</text>
<text x="112" y="368" fill="#111827" font-family="Segoe UI, Arial, sans-serif" font-size="16" font-weight="600">실제 구현의 중심</text>
<rect x="304" y="188" width="196" height="216" rx="22" fill="#FFFFFF" stroke="#E5E7EB" stroke-width="2"/>
<text x="328" y="232" fill="#111827" font-family="Segoe UI, Arial, sans-serif" font-size="24" font-weight="700">Docs</text>
<text x="328" y="268" fill="#6B7280" font-family="Segoe UI, Arial, sans-serif" font-size="16">README</text>
<text x="328" y="294" fill="#6B7280" font-family="Segoe UI, Arial, sans-serif" font-size="16">Status</text>
<text x="328" y="320" fill="#6B7280" font-family="Segoe UI, Arial, sans-serif" font-size="16">Master Plan</text>
<text x="328" y="368" fill="#111827" font-family="Segoe UI, Arial, sans-serif" font-size="16" font-weight="600">방향과 현실의 정합성</text>
<rect x="520" y="188" width="196" height="216" rx="22" fill="#FFFFFF" stroke="#E5E7EB" stroke-width="2"/>
<text x="544" y="232" fill="#111827" font-family="Segoe UI, Arial, sans-serif" font-size="24" font-weight="700">Releases</text>
<text x="544" y="268" fill="#6B7280" font-family="Segoe UI, Arial, sans-serif" font-size="16">Forge Releases</text>
<text x="544" y="294" fill="#6B7280" font-family="Segoe UI, Arial, sans-serif" font-size="16">Download Host</text>
<text x="544" y="320" fill="#6B7280" font-family="Segoe UI, Arial, sans-serif" font-size="16">Checksums</text>
<text x="544" y="368" fill="#111827" font-family="Segoe UI, Arial, sans-serif" font-size="16" font-weight="600">받아볼 수 있는 결과물</text>
<rect x="736" y="188" width="196" height="216" rx="22" fill="#FFFFFF" stroke="#E5E7EB" stroke-width="2"/>
<text x="760" y="232" fill="#111827" font-family="Segoe UI, Arial, sans-serif" font-size="24" font-weight="700">Live</text>
<text x="760" y="268" fill="#6B7280" font-family="Segoe UI, Arial, sans-serif" font-size="16">vstalk.phy.kr</text>
<text x="760" y="294" fill="#6B7280" font-family="Segoe UI, Arial, sans-serif" font-size="16">Health</text>
<text x="760" y="320" fill="#6B7280" font-family="Segoe UI, Arial, sans-serif" font-size="16">Screenshots</text>
<text x="760" y="368" fill="#111827" font-family="Segoe UI, Arial, sans-serif" font-size="16" font-weight="600">지금 직접 확인 가능한 표면</text>
<rect x="952" y="188" width="152" height="216" rx="22" fill="#FFFFFF" stroke="#E5E7EB" stroke-width="2"/>
<text x="976" y="232" fill="#111827" font-family="Segoe UI, Arial, sans-serif" font-size="24" font-weight="700">People</text>
<text x="976" y="268" fill="#6B7280" font-family="Segoe UI, Arial, sans-serif" font-size="16">Issues</text>
<text x="976" y="294" fill="#6B7280" font-family="Segoe UI, Arial, sans-serif" font-size="16">PRs</text>
<text x="976" y="320" fill="#6B7280" font-family="Segoe UI, Arial, sans-serif" font-size="16">Maintainers</text>
<text x="976" y="368" fill="#111827" font-family="Segoe UI, Arial, sans-serif" font-size="16" font-weight="600">기여와 운영의 접점</text>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

View file

@ -0,0 +1,49 @@
<svg width="1200" height="620" viewBox="0 0 1200 620" fill="none" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="bg" x1="40" y1="20" x2="1160" y2="600" gradientUnits="userSpaceOnUse">
<stop stop-color="#0B1220"/>
<stop offset="1" stop-color="#111827"/>
</linearGradient>
<linearGradient id="lineA" x1="0" y1="0" x2="1" y2="1">
<stop stop-color="#38BDF8"/>
<stop offset="1" stop-color="#22C55E"/>
</linearGradient>
<linearGradient id="lineB" x1="0" y1="0" x2="1" y2="1">
<stop stop-color="#F59E0B"/>
<stop offset="1" stop-color="#FB7185"/>
</linearGradient>
</defs>
<rect x="20" y="20" width="1160" height="580" rx="28" fill="url(#bg)" stroke="#1F2937"/>
<text x="64" y="86" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="34" font-weight="700">Platform Journey</text>
<text x="64" y="122" fill="#94A3B8" font-family="Arial, sans-serif" font-size="18">Three product surfaces, one release story: live entrypoint, desktop focus, Android parallel rollout.</text>
<rect x="64" y="188" width="320" height="156" rx="24" fill="#0E1828" stroke="#233246"/>
<text x="96" y="234" fill="#E2E8F0" font-family="Arial, sans-serif" font-size="18" font-weight="700">Mobile Web</text>
<text x="96" y="270" fill="#86EFAC" font-family="Arial, sans-serif" font-size="30" font-weight="700">vstalk.phy.kr</text>
<text x="96" y="310" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">Lowest friction entrypoint.</text>
<text x="96" y="336" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">Quick signup, short reply, fast re-entry.</text>
<rect x="440" y="188" width="320" height="156" rx="24" fill="#0E1828" stroke="#233246"/>
<text x="472" y="234" fill="#E2E8F0" font-family="Arial, sans-serif" font-size="18" font-weight="700">Windows Desktop</text>
<text x="472" y="270" fill="#93C5FD" font-family="Arial, sans-serif" font-size="30" font-weight="700">Primary productivity client</text>
<text x="472" y="310" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">Compact shell, list, chat, send, buildable zip.</text>
<text x="472" y="336" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">Targeting search, focus, and multiwindow flow.</text>
<rect x="816" y="188" width="320" height="156" rx="24" fill="#0E1828" stroke="#233246"/>
<text x="848" y="234" fill="#E2E8F0" font-family="Arial, sans-serif" font-size="18" font-weight="700">Android APK</text>
<text x="848" y="270" fill="#FCD34D" font-family="Arial, sans-serif" font-size="30" font-weight="700">Parallel next channel</text>
<text x="848" y="310" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">Push, repeat use, attachment flow,</text>
<text x="848" y="336" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">and release parity with desktop assets.</text>
<path d="M384 266H440" stroke="url(#lineA)" stroke-width="4" stroke-linecap="round"/>
<path d="M760 266H816" stroke="url(#lineB)" stroke-width="4" stroke-linecap="round" stroke-dasharray="10 10"/>
<circle cx="440" cy="266" r="7" fill="#38BDF8"/>
<circle cx="816" cy="266" r="7" fill="#F59E0B"/>
<rect x="64" y="410" width="1072" height="130" rx="24" fill="#0E1828" stroke="#233246"/>
<text x="96" y="454" fill="#E2E8F0" font-family="Arial, sans-serif" font-size="20" font-weight="700">Public release path</text>
<text x="96" y="492" fill="#94A3B8" font-family="Arial, sans-serif" font-size="17">Repository docs and screenshots -> Forge Releases -> download-vstalk.phy.kr mirror -> latest links by OS</text>
<text x="96" y="520" fill="#94A3B8" font-family="Arial, sans-serif" font-size="17">The project treats release notes, screenshots, and downloadable artifacts as one continuous public surface.</text>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

View file

@ -0,0 +1,54 @@
<svg width="1200" height="520" viewBox="0 0 1200 520" fill="none" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="bg" x1="40" y1="20" x2="1160" y2="500" gradientUnits="userSpaceOnUse">
<stop stop-color="#0B1220"/>
<stop offset="1" stop-color="#111827"/>
</linearGradient>
<linearGradient id="accentA" x1="0" y1="0" x2="1" y2="1">
<stop stop-color="#38BDF8"/>
<stop offset="1" stop-color="#22C55E"/>
</linearGradient>
<linearGradient id="accentB" x1="0" y1="0" x2="1" y2="1">
<stop stop-color="#F59E0B"/>
<stop offset="1" stop-color="#FB7185"/>
</linearGradient>
<filter id="shadow" x="-40" y="-40" width="1280" height="600" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feDropShadow dx="0" dy="18" stdDeviation="24" flood-color="#020617" flood-opacity="0.28"/>
</filter>
</defs>
<rect x="20" y="20" width="1160" height="480" rx="28" fill="url(#bg)" stroke="#1F2937"/>
<text x="64" y="86" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="34" font-weight="700">Product Pillars</text>
<text x="64" y="122" fill="#94A3B8" font-family="Arial, sans-serif" font-size="18">A Korean-first messenger project tuned for calm, fast, and transparent communication.</text>
<g filter="url(#shadow)">
<rect x="58" y="176" width="330" height="258" rx="24" fill="#0E1828" stroke="#233246"/>
<rect x="86" y="206" width="134" height="42" rx="14" fill="url(#accentA)"/>
<text x="110" y="233" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="18" font-weight="700">Korean-first UI</text>
<text x="86" y="292" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="28" font-weight="700">Short copy, low friction,</text>
<text x="86" y="326" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="28" font-weight="700">real Korean usage flow.</text>
<text x="86" y="372" fill="#94A3B8" font-family="Arial, sans-serif" font-size="17">Designed around onboarding, read-reply loops,</text>
<text x="86" y="398" fill="#94A3B8" font-family="Arial, sans-serif" font-size="17">and recovery language that feel natural.</text>
</g>
<g filter="url(#shadow)">
<rect x="435" y="176" width="330" height="258" rx="24" fill="#0E1828" stroke="#233246"/>
<rect x="463" y="206" width="152" height="42" rx="14" fill="url(#accentA)"/>
<text x="486" y="233" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="18" font-weight="700">Windows priority</text>
<text x="463" y="292" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="28" font-weight="700">Compact desktop UX with</text>
<text x="463" y="326" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="28" font-weight="700">multiwindow headroom.</text>
<text x="463" y="372" fill="#94A3B8" font-family="Arial, sans-serif" font-size="17">The project bets on search, focus tools,</text>
<text x="463" y="398" fill="#94A3B8" font-family="Arial, sans-serif" font-size="17">and task-oriented message recovery.</text>
</g>
<g filter="url(#shadow)">
<rect x="812" y="176" width="330" height="258" rx="24" fill="#0E1828" stroke="#233246"/>
<rect x="840" y="206" width="170" height="42" rx="14" fill="url(#accentB)"/>
<text x="863" y="233" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="18" font-weight="700">Transparent surface</text>
<text x="840" y="292" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="28" font-weight="700">Docs, screenshots,</text>
<text x="840" y="326" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="28" font-weight="700">releases, and status aligned.</text>
<text x="840" y="372" fill="#94A3B8" font-family="Arial, sans-serif" font-size="17">This repo treats public project surfaces as</text>
<text x="840" y="398" fill="#94A3B8" font-family="Arial, sans-serif" font-size="17">part of the product, not afterthoughts.</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

View file

@ -0,0 +1,26 @@
<svg width="1200" height="360" viewBox="0 0 1200 360" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="1200" height="360" rx="28" fill="#F8F8F7"/>
<rect x="32" y="32" width="1136" height="296" rx="24" fill="white" stroke="#E5E7EB"/>
<text x="64" y="88" fill="#111827" font-family="Arial, sans-serif" font-size="32" font-weight="700">Public Contract</text>
<text x="64" y="120" fill="#6B7280" font-family="Arial, sans-serif" font-size="16">이 저장소가 공개면에서 지키려는 네 가지 약속</text>
<rect x="64" y="152" width="248" height="128" rx="20" fill="#FAFAFA" stroke="#E5E7EB"/>
<text x="88" y="190" fill="#111827" font-family="Arial, sans-serif" font-size="22" font-weight="700">Transparent State</text>
<text x="88" y="220" fill="#6B7280" font-family="Arial, sans-serif" font-size="15">README와 상태표는 실제 구현보다</text>
<text x="88" y="242" fill="#6B7280" font-family="Arial, sans-serif" font-size="15">좋아 보이도록 과장하지 않는다.</text>
<rect x="336" y="152" width="248" height="128" rx="20" fill="#FAFAFA" stroke="#E5E7EB"/>
<text x="360" y="190" fill="#111827" font-family="Arial, sans-serif" font-size="22" font-weight="700">Release Discipline</text>
<text x="360" y="220" fill="#6B7280" font-family="Arial, sans-serif" font-size="15">릴리즈, 스크린샷, 다운로드,</text>
<text x="360" y="242" fill="#6B7280" font-family="Arial, sans-serif" font-size="15">CHANGELOG를 같이 맞춘다.</text>
<rect x="608" y="152" width="248" height="128" rx="20" fill="#FAFAFA" stroke="#E5E7EB"/>
<text x="632" y="190" fill="#111827" font-family="Arial, sans-serif" font-size="22" font-weight="700">Korean-first UX</text>
<text x="632" y="220" fill="#6B7280" font-family="Arial, sans-serif" font-size="15">번역체보다 실제 한국어 흐름과</text>
<text x="632" y="242" fill="#6B7280" font-family="Arial, sans-serif" font-size="15">낮은 피로도의 사용성을 우선한다.</text>
<rect x="880" y="152" width="248" height="128" rx="20" fill="#FAFAFA" stroke="#E5E7EB"/>
<text x="904" y="190" fill="#111827" font-family="Arial, sans-serif" font-size="22" font-weight="700">Open Planning</text>
<text x="904" y="220" fill="#6B7280" font-family="Arial, sans-serif" font-size="15">문서와 비판적 리뷰를 공개해</text>
<text x="904" y="242" fill="#6B7280" font-family="Arial, sans-serif" font-size="15">방향과 한계를 숨기지 않는다.</text>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

@ -0,0 +1,55 @@
<svg width="1200" height="520" viewBox="0 0 1200 520" fill="none" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="bg" x1="40" y1="30" x2="1160" y2="490" gradientUnits="userSpaceOnUse">
<stop stop-color="#0B1220"/>
<stop offset="1" stop-color="#111827"/>
</linearGradient>
<linearGradient id="chip" x1="0" y1="0" x2="1" y2="1">
<stop stop-color="#38BDF8"/>
<stop offset="1" stop-color="#22C55E"/>
</linearGradient>
</defs>
<rect x="20" y="20" width="1160" height="480" rx="28" fill="url(#bg)" stroke="#1F2937"/>
<text x="64" y="86" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="34" font-weight="700">Release Surface</text>
<text x="64" y="120" fill="#94A3B8" font-family="Arial, sans-serif" font-size="18">The repository keeps code, screenshots, release rules, and download surfaces aligned.</text>
<rect x="60" y="190" width="230" height="190" rx="24" fill="#0D1726" stroke="#233246"/>
<text x="90" y="236" fill="#E2E8F0" font-family="Arial, sans-serif" font-size="18" font-weight="700">Build sources</text>
<text x="90" y="274" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="28" font-weight="700">Code + Docs + Screenshots</text>
<text x="90" y="318" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">README</text>
<text x="90" y="344" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">문서/ planning set</text>
<text x="90" y="370" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">latest repo screenshots</text>
<rect x="350" y="190" width="230" height="190" rx="24" fill="#0D1726" stroke="#233246"/>
<text x="380" y="236" fill="#E2E8F0" font-family="Arial, sans-serif" font-size="18" font-weight="700">Packaging</text>
<text x="380" y="274" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="28" font-weight="700">Release assets</text>
<text x="380" y="318" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">portable zip</text>
<text x="380" y="344" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">apk channel next</text>
<text x="380" y="370" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">checksums and metadata</text>
<rect x="640" y="190" width="230" height="190" rx="24" fill="#0D1726" stroke="#233246"/>
<text x="670" y="236" fill="#E2E8F0" font-family="Arial, sans-serif" font-size="18" font-weight="700">Public surfaces</text>
<text x="670" y="274" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="28" font-weight="700">Forge Releases</text>
<text x="670" y="318" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">versioned assets</text>
<text x="670" y="344" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">release notes</text>
<text x="670" y="370" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">source of record</text>
<rect x="930" y="190" width="210" height="190" rx="24" fill="#0D1726" stroke="#233246"/>
<text x="960" y="236" fill="#E2E8F0" font-family="Arial, sans-serif" font-size="18" font-weight="700">Delivery</text>
<text x="960" y="274" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="28" font-weight="700">Download host</text>
<text x="960" y="318" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">windows/latest</text>
<text x="960" y="344" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">android/latest</text>
<text x="960" y="370" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">version.json</text>
<path d="M290 286H350" stroke="url(#chip)" stroke-width="4" stroke-linecap="round"/>
<path d="M580 286H640" stroke="url(#chip)" stroke-width="4" stroke-linecap="round"/>
<path d="M870 286H930" stroke="url(#chip)" stroke-width="4" stroke-linecap="round"/>
<circle cx="350" cy="286" r="6" fill="#38BDF8"/>
<circle cx="640" cy="286" r="6" fill="#22C55E"/>
<circle cx="930" cy="286" r="6" fill="#F59E0B"/>
<rect x="786" y="74" width="304" height="50" rx="16" fill="#101B2C" stroke="#223045"/>
<text x="814" y="106" fill="#E2E8F0" font-family="Arial, sans-serif" font-size="18" font-weight="700">Principle: what ships must match what the repo says.</text>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

View file

@ -0,0 +1,84 @@
<svg width="1200" height="760" viewBox="0 0 1200 760" fill="none" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="bg" x1="80" y1="40" x2="1080" y2="720" gradientUnits="userSpaceOnUse">
<stop stop-color="#0F172A"/>
<stop offset="1" stop-color="#111827"/>
</linearGradient>
<linearGradient id="accentA" x1="0" y1="0" x2="1" y2="1">
<stop stop-color="#22C55E"/>
<stop offset="1" stop-color="#0EA5E9"/>
</linearGradient>
<linearGradient id="accentB" x1="0" y1="0" x2="1" y2="1">
<stop stop-color="#F59E0B"/>
<stop offset="1" stop-color="#FB7185"/>
</linearGradient>
<filter id="shadow" x="-40" y="-40" width="1280" height="840" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feDropShadow dx="0" dy="18" stdDeviation="24" flood-color="#020617" flood-opacity="0.32"/>
</filter>
</defs>
<rect x="24" y="24" width="1152" height="712" rx="32" fill="url(#bg)"/>
<rect x="24" y="24" width="1152" height="712" rx="32" stroke="#1F2937"/>
<text x="70" y="92" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="34" font-weight="700">System Overview</text>
<text x="70" y="128" fill="#94A3B8" font-family="Arial, sans-serif" font-size="18">Windows-first messenger with a live mobile web entrypoint and a transparent release surface.</text>
<g filter="url(#shadow)">
<rect x="72" y="184" width="270" height="148" rx="24" fill="#0B1220" stroke="#243244"/>
<text x="102" y="230" fill="#E2E8F0" font-family="Arial, sans-serif" font-size="18" font-weight="700">Windows Desktop</text>
<text x="102" y="260" fill="#93C5FD" font-family="Arial, sans-serif" font-size="32" font-weight="700">Avalonia 12</text>
<text x="102" y="296" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">Conversation list, chat view, send flow,</text>
<text x="102" y="320" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">portable build channel.</text>
<rect x="72" y="376" width="270" height="148" rx="24" fill="#0B1220" stroke="#243244"/>
<text x="102" y="422" fill="#E2E8F0" font-family="Arial, sans-serif" font-size="18" font-weight="700">Mobile Web</text>
<text x="102" y="452" fill="#86EFAC" font-family="Arial, sans-serif" font-size="32" font-weight="700">vstalk.phy.kr</text>
<text x="102" y="488" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">PWA shell, quick signup, list, chat,</text>
<text x="102" y="512" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">same-origin API and WebSocket flow.</text>
<rect x="72" y="568" width="270" height="112" rx="24" fill="#0B1220" stroke="#243244"/>
<text x="102" y="614" fill="#E2E8F0" font-family="Arial, sans-serif" font-size="18" font-weight="700">Android</text>
<text x="102" y="644" fill="#FCD34D" font-family="Arial, sans-serif" font-size="28" font-weight="700">Next parallel client</text>
</g>
<g filter="url(#shadow)">
<rect x="462" y="246" width="286" height="224" rx="28" fill="#0B1220" stroke="#334155"/>
<rect x="490" y="278" width="230" height="54" rx="16" fill="url(#accentA)"/>
<text x="521" y="313" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="24" font-weight="700">ASP.NET Core 8 API</text>
<text x="492" y="372" fill="#E2E8F0" font-family="Arial, sans-serif" font-size="18" font-weight="700">Protocols</text>
<text x="492" y="402" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">REST bootstrap, conversations, messages</text>
<text x="492" y="428" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">WebSocket realtime events</text>
</g>
<g filter="url(#shadow)">
<rect x="862" y="164" width="270" height="148" rx="24" fill="#0B1220" stroke="#243244"/>
<text x="892" y="210" fill="#E2E8F0" font-family="Arial, sans-serif" font-size="18" font-weight="700">Storage now</text>
<text x="892" y="242" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="30" font-weight="700">SQLite</text>
<text x="892" y="278" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">Alpha storage with simple deployment</text>
<text x="892" y="302" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">and low operational overhead.</text>
<rect x="862" y="356" width="270" height="148" rx="24" fill="#0B1220" stroke="#243244"/>
<text x="892" y="402" fill="#E2E8F0" font-family="Arial, sans-serif" font-size="18" font-weight="700">Operational surface</text>
<text x="892" y="434" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="28" font-weight="700">Caddy + nginx</text>
<text x="892" y="470" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">TLS, same-origin mobile web,</text>
<text x="892" y="494" fill="#94A3B8" font-family="Arial, sans-serif" font-size="16">shared VPS reverse proxy routing.</text>
<rect x="862" y="548" width="270" height="132" rx="24" fill="#0B1220" stroke="#243244"/>
<text x="892" y="594" fill="#E2E8F0" font-family="Arial, sans-serif" font-size="18" font-weight="700">Target stack later</text>
<text x="892" y="626" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="26" font-weight="700">PostgreSQL / Redis / MinIO</text>
</g>
<path d="M342 258H462" stroke="#38BDF8" stroke-width="4" stroke-linecap="round"/>
<path d="M342 450H462" stroke="#38BDF8" stroke-width="4" stroke-linecap="round"/>
<path d="M342 624H462" stroke="#F59E0B" stroke-width="4" stroke-linecap="round" stroke-dasharray="10 10"/>
<path d="M748 358H862" stroke="#34D399" stroke-width="4" stroke-linecap="round"/>
<path d="M748 430H862" stroke="#34D399" stroke-width="4" stroke-linecap="round"/>
<path d="M748 614H862" stroke="#F59E0B" stroke-width="4" stroke-linecap="round" stroke-dasharray="10 10"/>
<circle cx="462" cy="258" r="7" fill="#38BDF8"/>
<circle cx="462" cy="450" r="7" fill="#38BDF8"/>
<circle cx="462" cy="624" r="7" fill="#F59E0B"/>
<circle cx="862" cy="358" r="7" fill="#34D399"/>
<circle cx="862" cy="430" r="7" fill="#34D399"/>
<circle cx="862" cy="614" r="7" fill="#F59E0B"/>
</svg>

After

Width:  |  Height:  |  Size: 6 KiB