MCP HubMCP Hub
SKILL·A42ACD

vertical-fintech-mobile

avelikiy
更新日 1 month ago
5 閲覧
103
13
103
GitHubで表示
メタaidesign

について

このスキルは、ウォレットや決済システムなどの安全なモバイル金融アプリを構築するために必要なドメイン知識を提供します。トランザクションのライフサイクル、鍵管理、べき等性、KYC/AMLといった重要な概念を網羅し、一般的な設計上の落とし穴を防ぎます。資金を扱うモバイル製品を設計または実装する際に活用することで、堅牢で安全な金融操作を実現できます。

クイックインストール

Claude Code

推奨
メイン
npx skills add avelikiy/great_cto -a claude-code
プラグインコマンド代替
/plugin add https://github.com/avelikiy/great_cto
Git クローン代替
git clone https://github.com/avelikiy/great_cto.git ~/.claude/skills/vertical-fintech-mobile

このコマンドをClaude Codeにコピー&ペーストしてスキルをインストールします

ドキュメント

Money on a phone — spec it like the network will fail mid-transfer

A field app that loses a photo is annoying. A money app that loses — or duplicates — a transfer is a loss, a support case, and sometimes a regulator. Everything in the generic mobile contract still applies (offline queue, idempotency, permissions); this pack is the part that is different because it is money, and it is the part community skill sets do not carry, because it is domain knowledge rather than framework knowledge.

The through-line: the phone is not the ledger. It is a client with an opinion, and every screen must be honest about how strong that opinion is.

1. A balance has three states, never two

confirmed · pending · unknown. A number rendered without which of the three it is, is a lie the user will act on.

  • confirmed — the server said so, and the app has heard from the server recently enough to say when.
  • pending — the app has applied its own optimistic change on top. It is a display, not a fact, and it is labelled.
  • unknown — the app has not reached the server. This is NOT the last confirmed number rendered as though it were current. A stale balance shown as live is the defect this whole pack exists to prevent.

Every balance carries as of when. "£1,240.55" is not an answer; "£1,240.55, as of 14:02" is.

2. The idempotency key must outlive the process

The generic rule is "client-generated id so a re-sync never duplicates". For money that is not enough, because the process dies.

  • Mint the key before the intent leaves the screen, and persist it with the intent in the same durable write. A key held in memory is a key that a crash turns into a second payment.
  • The key belongs to the user's intent, not to the attempt. Ten retries of one "send £50" share one key. A second tap of the button is a new intent — or it is a double-send, and the UI decides which by disabling or by asking.
  • The server contract must state how long it honours a key. An idempotency window shorter than the app's retry backoff is the same as no idempotency.

3. Keys never enter JavaScript memory

For any product that signs — custody, non-custodial wallets, hardware-backed auth:

  • Signing happens in the platform's secure hardware (Keychain/Secure Enclave, Keystore/StrongBox). The app asks for a signature; it never holds the key.
  • A seed phrase or private key in a JS variable is in the crash dump, the debugger, the redux devtools, and the error reporter. Assume all four.
  • Non-custodial means non-recoverable. If the product cannot restore a lost key, the onboarding must say so before the key exists, not in a support article afterwards.
  • The signing confirmation shows what is actually being signed, decoded. A hex blob the user cannot read is consent theatre.

4. A transaction is a state machine, and it is written down

Not "sent/failed". At minimum:

drafted → submitted → accepted → settled
                   ↘ rejected
                   ↘ unknown ──(reconcile)──→ settled | rejected
  • unknown is a real state, and the one that matters. The request left and no answer came back. The app may not guess, may not retry blindly (see §2), and may not show it as failed — a payment shown as failed that actually settled is how a user sends it twice.
  • Every non-terminal state has a timeout and an owner: what checks it, how often, and what it does when the answer never comes.
  • Terminal states are terminal. A settled transaction is not re-driven by a retry queue that woke up late.

5. The device clock may not order financial events

A phone with a wrong clock silently wins every last-write-wins conflict.

  • Ordering comes from the server, or from a logical clock the server issues.
  • Device time may be recorded as observed metadata — never as the ordering key, never as the audit timestamp.
  • The same applies to "which offline edit is newer" for anything money-adjacent.

6. Reconciliation is a feature, not an error path

When the app reconnects after an offline stretch:

  • The server's view of money wins, always.
  • The difference is surfaced, never silently overwritten. A user who saw a balance and then sees a different one, with no explanation, files a fraud report.
  • Reconciliation is idempotent and resumable: it runs on a flaky connection, so it must survive being interrupted halfway.
  • Pending local intents that the server never received are re-offered to the user, not auto-sent. Auto-sending an hour-old payment intent is a surprise the user did not consent to.

7. A blocked account is a designed state

KYC/AML is not an error dialog.

  • The states are real product states with real screens: unverified, pending review, verified, limited, frozen. Each says what the user can still do and what happens next.
  • The app must be able to stop. A limit or a freeze arriving mid-session has to be honoured on the next action, not at next launch.
  • Never explain a freeze in terms the user can use to evade it. "Under review" is the whole message; the reason belongs in the case file, not the UI.
  • Re-verification prompts must survive an app reinstall — the state lives on the server.

8. The screenshot the OS takes without asking

Both platforms snapshot the app when it backgrounds, and that image goes to disk.

  • Balances, account numbers, and anything key-shaped are masked on background.
  • Screen-recording and screenshot detection where the platform offers it, at least for seed-phrase and full-PAN screens.
  • The clipboard is shared and, on some platforms, synced across devices. An address or code copied to it is not private; expire it.

9. What to model (or the spec is naive)

EntityNon-obvious part
IntentDistinct from the transaction. Carries the idempotency key, persisted before send.
TransactionThe state machine of §4, with unknown and per-state timeouts.
Balance snapshotValue + state + as of. Never a bare number.
Reconciliation runResumable, idempotent, with a record of what differed.
Verification statusThe §7 states, server-owned, survives reinstall.
Key referenceA handle to hardware-held material. Never the material.
LimitPer-period, server-evaluated, honoured mid-session.

10. Where this pack stops

  • Payment scope and PSP mechanics → pci-reviewer.
  • Ledger integrity and double-entry → accounting-reviewer.
  • On-chain oracles, MEV, upgradeability → oracle-reviewer.
  • Store policy for financial apps → mobile-store-reviewer.
  • Framework performance → the mobile performance invariant in agents/mobile-app-builder.md.

This pack is the phone's own share of the problem, and it is the share that gets skipped because it looks like plumbing that the backend already handled.

GitHub リポジトリ

avelikiy/great_cto
パス: skills/vertical-fintech-mobile
0
agentic-codingai-agentsclaude-codeclaude-code-pluginclaude-code-skillsclaude-code-subagents
FAQ

よくある質問

vertical-fintech-mobile Skillとは何ですか?

vertical-fintech-mobile はavelikiy が作成した Claude Skillです。Skillは、Claudeが必要に応じて読み込む指示とリソースをまとめ、追加の指示なしで vertical-fintech-mobile に関連するタスクを実行できるようにします。

vertical-fintech-mobile をインストールするには?

このページのインストールコマンドを使用してください。vertical-fintech-mobile をプラグインとして Claude Code に追加するか、リポジトリを skills ディレクトリにクローンし、Claudeを再起動してSkillを読み込みます。

vertical-fintech-mobile はどのカテゴリに属しますか?

vertical-fintech-mobile は メタ カテゴリに属します。

vertical-fintech-mobile は無料で利用できますか?

はい。vertical-fintech-mobile は AIMCP に掲載されており、無料でインストールできます。

関連スキル

content-collections
メタ

このスキルは、Content Collections(Markdown/MDXファイルを型安全なデータコレクションに変換するTypeScriptファーストのツール)の本番環境でテストされた設定を提供します。Zodバリデーションによる型安全性を実現し、ブログ、ドキュメントサイト、コンテンツ重視のVite + Reactアプリケーション構築時にご利用ください。Viteプラグインの設定、MDXコンパイルから、デプロイ最適化、スキーマバリデーションまで、すべてを網羅しています。

スキルを見る
polymarket
メタ

このスキルは、開発者がPolymarket予測市場プラットフォームを活用したアプリケーション構築を可能にします。API統合による取引や市場データの取得に加え、WebSocketを介したリアルタイムデータストリーミングにより、ライブ取引や市場活動を監視できます。取引戦略の実装や、ライブ市場更新を処理するツールの作成にご利用ください。

スキルを見る
creating-opencode-plugins
メタ

このスキルは、開発者がコマンド、ファイル、LSP操作など25種類以上のイベントタイプにフックするOpenCodeプラグインを作成することを支援します。JavaScript/TypeScriptモジュール向けに、プラグイン構造、イベントAPI仕様、および実装パターンを提供します。カスタムイベント駆動ロジックでOpenCode AIアシスタントのライフサイクルをインターセプト、監視、または拡張する必要がある場合にご利用ください。

スキルを見る
sglang
メタ

SGLangは、高性能なLLMサービングフレームワークであり、RadixAttentionプレフィックスキャッシュを活用したJSON、正規表現、エージェントワークフロー向けの高速で構造化された生成を特長とします。特にプレフィックスが繰り返されるタスクにおいて、大幅に高速な推論を実現し、複雑な構造化出力やマルチターン対話に最適です。制約付きデコードが必要な場合や、広範なプレフィックス共有を伴うアプリケーションを構築する場合は、vLLMなどの代替案ではなくSGLangを選択してください。

スキルを見る