この記事はCodex製です。
##依頼内容と課題
/i/pokecardApp 配下に、Pencilで確定済みのUI設計(.pen + UX Spec画像)をもとに、以下4ルートを新規実装する依頼だった。
/i/pokecardApp(LP)/i/pokecardApp/editor/i/pokecardApp/library/i/pokecardApp/pricing
課題は、見た目を高級感のあるSaaSトーンに合わせつつ、Editorの実運用機能(ローカルアップロード、Figma風調整、localStorage複数保存、PNG/JPEG/WebP書き出し)まで一貫実装すること。
##アプローチ
- Pencil MCPで
pokecardapp.penのノードを読み取り、デスクトップ/モバイル双方の文言・構成・配色・余白を抽出。 - 画面実装と機能実装を分離するため、
src/lib/app/pokecardAppに型・デフォルト値・storage・canvas描画を分割。 - Pages Routerで4ページを新規追加し、共通のUIクロームを
src/components/app/pokecardAppに集約。 - EditorはCanvasレンダリングでカードを描画し、レイヤー選択・数値調整・テンプレート切替・書き出し・保存操作を実装。
- Libraryは保存済みカードを更新順で表示し、読み込み/複製/削除操作を実装。
##アウトプット
主な追加ファイル:
src/pages/i/pokecardApp/index.tsxsrc/pages/i/pokecardApp/editor.tsxsrc/pages/i/pokecardApp/library.tsxsrc/pages/i/pokecardApp/pricing.tsxsrc/components/app/pokecardApp/chrome.tsxsrc/components/app/pokecardApp/PokeCardCanvas.tsxsrc/lib/app/pokecardApp/types.tssrc/lib/app/pokecardApp/defaults.tssrc/lib/app/pokecardApp/storage.tssrc/lib/app/pokecardApp/render.ts
実装した主要機能:
- ローカル画像アップロード(URL入力なし)
- 通常レア / スーパーレア切替
- 位置(X/Y)・拡大縮小・回転・枠サイズ調整
- 名前/HP/技/説明/エネルギー入力
- localStorage複数保存(新規保存・上書き・読み込み・削除)
- PNG/JPEG/WebP書き出し(1x/2x、JPEG/WebP画質)
- 非公式ファンメイド注意書きの全体反映
##参照した一次情報・一次ソース
https://nextjs.org/docs/pages
https://nextjs.org/docs/pages/building-your-application/routing/pages-and-layouts
https://ui.shadcn.com/docs/components/button
https://ui.shadcn.com/docs/components/card
https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage
https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL
https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob
https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/drawImage