feat(release): prepare 1.1.0 candidate
57
docs/v3/play/assets/feature-graphic/README.md
Normal 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` |
|
||||
BIN
docs/v3/play/assets/feature-graphic/candidate-a-signal-grid.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
|
|
@ -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 |
BIN
docs/v3/play/assets/feature-graphic/candidate-b-voice-orbit.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
|
|
@ -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 |
|
After Width: | Height: | Size: 14 KiB |
|
|
@ -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 |
BIN
docs/v3/play/assets/feature-graphic/candidate-d-monolith.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
15
docs/v3/play/assets/feature-graphic/candidate-d-monolith.svg
Normal 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 |
57
docs/v3/play/assets/feature-graphic/manifest.json
Normal 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"
|
||||
}
|
||||
]
|
||||
}
|
||||