feat(release): prepare 1.1.0 candidate

This commit is contained in:
Yun Chan 2026-08-29 18:33:45 +09:00
parent 5a34f66981
commit 5205dcdfa9
736 changed files with 115667 additions and 12203 deletions

View file

@ -0,0 +1,57 @@
# Google Play feature graphic 후보
기준일: 2026-08-24
Google Play의 1024×500 feature graphic 규격에 맞춘 선택 후보다. 네 후보 모두
저장소의 canonical D3RO microphone motif와 `D3RO VOICE` 표기만 사용하며, 기능이나
성과를 주장하는 문구와 합성 앱 화면은 포함하지 않는다.
## 후보와 권장안
| 후보 | 방향 | PNG SHA-256 |
| ------------------------------ | --------------------------------------- | ------------------------------------------------------------------ |
| A `candidate-a-signal-grid` | dark signal grid, microphone + waveform | `3CFA86A4843339FD9C15781598E301ECE29C2B1522828F7AD1B69D8497775103` |
| B `candidate-b-voice-orbit` | centered voice orbit | `F7FCB26B063762D08AC1211A85CFDDD3C99C14936CD6DE753F5E9F88BC0B0D14` |
| C `candidate-c-blueprint-band` | light/dark blueprint split | `C484AC514966347BF4E7AA526B040B88DDA89F9150AC3677B8C74297A1373C1E` |
| D `candidate-d-monolith` | bold dark monolith | `28FC7B608454E073A29AFE2149414F4186629AE8889B3FE2FA683D786F8C3EA9` |
현재 권장안은 **A**다. 작은 스토어 카드에서도 microphone, 제품명, 파형이 가장
명확하게 분리된다. 다만 최종 자산 확정과 Play Console 업로드는 사용자 선택 및
Console preview 검증 뒤에만 진행한다.
## 원본과 재현
- brand source: `site/public/favicon.svg`
- Play icon source: `docs/v3/play/assets/d3ro-voice-play-icon-source.svg`
- 편집 원본: 각 후보의 `.svg`
- 제출 후보: 같은 basename의 `.png`
- export runtime: ImageMagick `7.1.2-25 Q16-HDRI`
- 출력 조건: 1024×500, PNG, sRGB, 8-bit, TrueColor, 완전 불투명
- machine-readable manifest: `manifest.json`
- verifier: `scripts/ci/verify-play-store-assets.mjs`
저장소 루트의 PowerShell에서 다음 명령으로 다시 내보낸다.
```powershell
Get-ChildItem docs/v3/play/assets/feature-graphic/candidate-*.svg |
ForEach-Object {
$output = [System.IO.Path]::ChangeExtension($_.FullName, '.png')
magick $_.FullName -background none -resize '1024x500!' -alpha off -colorspace sRGB "PNG24:$output"
}
```
환경이나 SVG renderer 버전이 바뀌면 raster hash가 달라질 수 있다. 제출할 PNG는
위 해시, 크기, 불투명 여부를 다시 확인하고 그 파일을 release evidence에 기록한다.
```powershell
npm run release:play:assets
```
## SVG 원본 해시
| 파일 | SHA-256 |
| -------------------------------- | ------------------------------------------------------------------ |
| `candidate-a-signal-grid.svg` | `3A39D0D61F5AE7E182149BD11C9D7F491FBEC0A542999B0516C869AE82E24B1B` |
| `candidate-b-voice-orbit.svg` | `DB7D778394419C6AF8FF43C7490B43C0CD65C61CE012A358FB37E603431082F4` |
| `candidate-c-blueprint-band.svg` | `176BEB99EA418F78BF5F9DC4E4D6A3A3700F5CEADA28697F3750B0C8883E4546` |
| `candidate-d-monolith.svg` | `6560C334C061470959D9BA120E58CCA264B5A1ED41FBC3045F804049117640FF` |

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View file

@ -0,0 +1,17 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 500">
<rect width="1024" height="500" fill="#19191b"/>
<g stroke="#2b2b31" stroke-width="1">
<path d="M0 50H1024M0 100H1024M0 150H1024M0 200H1024M0 250H1024M0 300H1024M0 350H1024M0 400H1024M0 450H1024"/>
<path d="M64 0V500M128 0V500M192 0V500M256 0V500M320 0V500M384 0V500M448 0V500M512 0V500M576 0V500M640 0V500M704 0V500M768 0V500M832 0V500M896 0V500M960 0V500"/>
</g>
<rect x="64" y="54" width="290" height="392" rx="42" fill="#111114" stroke="#3b82f6" stroke-width="2"/>
<g transform="translate(98 62) scale(4.35)" fill="none" stroke="#3b82f6" stroke-linecap="round">
<circle cx="32" cy="28" r="8" stroke-width="3"/>
<rect x="29" y="36" width="6" height="10" rx="3" fill="#3b82f6" stroke="none"/>
<path d="M20 32Q20 44 32 44Q44 44 44 32" stroke-width="2.5"/>
<path d="M32 44V52M26 52H38" stroke-width="2.5"/>
</g>
<text x="430" y="227" fill="#f5f7fb" font-family="Arial, sans-serif" font-size="78" font-weight="700" letter-spacing="7">D3RO</text>
<text x="434" y="288" fill="#3b82f6" font-family="Arial, sans-serif" font-size="40" font-weight="700" letter-spacing="15">VOICE</text>
<path d="M432 352H484L500 326L526 390L548 340L568 362H620L640 312L664 396L690 346L710 366H774L792 333L812 378L834 352H944" fill="none" stroke="#3b82f6" stroke-width="5" stroke-linejoin="round" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View file

@ -0,0 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 500">
<rect width="1024" height="500" fill="#0f1014"/>
<circle cx="512" cy="250" r="205" fill="#19191b" stroke="#292c35" stroke-width="2"/>
<circle cx="512" cy="250" r="166" fill="none" stroke="#3b82f6" stroke-opacity="0.22" stroke-width="28"/>
<circle cx="512" cy="250" r="126" fill="none" stroke="#3b82f6" stroke-opacity="0.45" stroke-width="3" stroke-dasharray="5 17"/>
<g transform="translate(416 106) scale(3)" fill="none" stroke="#3b82f6" stroke-linecap="round">
<circle cx="32" cy="28" r="8" stroke-width="3"/>
<rect x="29" y="36" width="6" height="10" rx="3" fill="#3b82f6" stroke="none"/>
<path d="M20 32Q20 44 32 44Q44 44 44 32" stroke-width="2.5"/>
<path d="M32 44V52M26 52H38" stroke-width="2.5"/>
</g>
<path d="M40 250H250M774 250H984" stroke="#3b82f6" stroke-width="2"/>
<path d="M62 250L92 250L110 220L134 286L158 238L180 260L205 210L228 276L250 250M774 250L802 250L826 208L848 290L872 235L896 270L920 224L944 278L962 250" fill="none" stroke="#3b82f6" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<rect x="401" y="386" width="222" height="46" rx="23" fill="#3b82f6"/>
<text x="512" y="417" text-anchor="middle" fill="#0f1014" font-family="Arial, sans-serif" font-size="22" font-weight="700" letter-spacing="4">D3RO VOICE</text>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View file

@ -0,0 +1,27 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 500">
<rect width="1024" height="500" fill="#f4f6fa"/>
<rect x="0" y="0" width="356" height="500" fill="#19191b"/>
<rect x="356" y="0" width="28" height="500" fill="#3b82f6"/>
<g transform="translate(42 98) scale(4.25)" fill="none" stroke="#3b82f6" stroke-linecap="round">
<circle cx="32" cy="28" r="8" stroke-width="3"/>
<rect x="29" y="36" width="6" height="10" rx="3" fill="#3b82f6" stroke="none"/>
<path d="M20 32Q20 44 32 44Q44 44 44 32" stroke-width="2.5"/>
<path d="M32 44V52M26 52H38" stroke-width="2.5"/>
</g>
<text x="438" y="224" fill="#19191b" font-family="Arial, sans-serif" font-size="82" font-weight="700" letter-spacing="5">D3RO</text>
<text x="443" y="287" fill="#3b82f6" font-family="Arial, sans-serif" font-size="38" font-weight="700" letter-spacing="17">VOICE</text>
<g stroke="#cbd2df" stroke-width="2">
<path d="M444 344H954"/>
<path d="M444 372H954"/>
<path d="M444 400H954"/>
</g>
<g fill="#3b82f6">
<rect x="444" y="366" width="8" height="13" rx="4"/>
<rect x="460" y="349" width="8" height="47" rx="4"/>
<rect x="476" y="333" width="8" height="79" rx="4"/>
<rect x="492" y="357" width="8" height="31" rx="4"/>
<rect x="508" y="341" width="8" height="63" rx="4"/>
<rect x="524" y="362" width="8" height="21" rx="4"/>
<rect x="540" y="352" width="8" height="41" rx="4"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View file

@ -0,0 +1,15 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 500">
<rect width="1024" height="500" fill="#19191b"/>
<rect x="52" y="42" width="920" height="416" rx="34" fill="#15161a" stroke="#31343d" stroke-width="2"/>
<text x="90" y="314" fill="#f7f8fb" font-family="Arial, sans-serif" font-size="210" font-weight="700" letter-spacing="-8">D3RO</text>
<rect x="90" y="354" width="378" height="58" rx="29" fill="#3b82f6"/>
<text x="279" y="394" text-anchor="middle" fill="#101115" font-family="Arial, sans-serif" font-size="28" font-weight="700" letter-spacing="11">VOICE</text>
<circle cx="826" cy="250" r="112" fill="#0e0f12" stroke="#3b82f6" stroke-width="2"/>
<g transform="translate(730 106) scale(3)" fill="none" stroke="#3b82f6" stroke-linecap="round">
<circle cx="32" cy="28" r="8" stroke-width="3"/>
<rect x="29" y="36" width="6" height="10" rx="3" fill="#3b82f6" stroke="none"/>
<path d="M20 32Q20 44 32 44Q44 44 44 32" stroke-width="2.5"/>
<path d="M32 44V52M26 52H38" stroke-width="2.5"/>
</g>
<path d="M720 404H932" stroke="#3b82f6" stroke-width="3" stroke-dasharray="3 12" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,57 @@
{
"schemaVersion": 1,
"generatedOn": "2026-08-24",
"selection": {
"recommended": "A",
"status": "pending_user_selection_and_console_preview"
},
"brandSource": "site/public/favicon.svg",
"export": {
"tool": "ImageMagick 7.1.2-25 Q16-HDRI",
"format": "PNG24",
"colorSpace": "sRGB",
"width": 1024,
"height": 500,
"bitDepth": 8,
"pngColorType": 2,
"opaque": true
},
"candidates": [
{
"id": "A",
"source": "candidate-a-signal-grid.svg",
"sourceBytes": 1411,
"sourceSha256": "3A39D0D61F5AE7E182149BD11C9D7F491FBEC0A542999B0516C869AE82E24B1B",
"output": "candidate-a-signal-grid.png",
"outputBytes": 25200,
"outputSha256": "3CFA86A4843339FD9C15781598E301ECE29C2B1522828F7AD1B69D8497775103"
},
{
"id": "B",
"source": "candidate-b-voice-orbit.svg",
"sourceBytes": 1365,
"sourceSha256": "DB7D778394419C6AF8FF43C7490B43C0CD65C61CE012A358FB37E603431082F4",
"output": "candidate-b-voice-orbit.png",
"outputBytes": 44972,
"outputSha256": "F7FCB26B063762D08AC1211A85CFDDD3C99C14936CD6DE753F5E9F88BC0B0D14"
},
{
"id": "C",
"source": "candidate-c-blueprint-band.svg",
"sourceBytes": 1443,
"sourceSha256": "176BEB99EA418F78BF5F9DC4E4D6A3A3700F5CEADA28697F3750B0C8883E4546",
"output": "candidate-c-blueprint-band.png",
"outputBytes": 14337,
"outputSha256": "C484AC514966347BF4E7AA526B040B88DDA89F9150AC3677B8C74297A1373C1E"
},
{
"id": "D",
"source": "candidate-d-monolith.svg",
"sourceBytes": 1151,
"sourceSha256": "6560C334C061470959D9BA120E58CCA264B5A1ED41FBC3045F804049117640FF",
"output": "candidate-d-monolith.png",
"outputBytes": 28737,
"outputSha256": "28FC7B608454E073A29AFE2149414F4186629AE8889B3FE2FA683D786F8C3EA9"
}
]
}