Skip to main content

🏷️ ブランド管理

ブランド横断マトリクス

ブランドフロント構成モバイル構成brand識別子特徴注意点
🐱 猫アプリWeb: neko-web (Next.js)iOS/Android: neko-mobile (Expo)neko写真アップロード型サービスアップロード量が多い。Expo側の大容量処理に注意
🐶 犬アプリWeb: dog-web (Next.js)iOS/Android: dog-mobile (Expo予定)dog猫と同構成(犬向け商品カタログ)brand分離を厳格にしないと履歴混在リスク
🎨 日本画アプリWeb: nihonga (Next.js)モバイルなしnihonga作品選択型サービス(オンデマンド印刷)作品の権利管理・額シミュレーション処理が必須
🛠 管理画面Web: admin (Next.js)モバイルなしadmin社内専用コンソール(注文/工場/監査)Cloudflare Access + Firebase admin claims 必須

ブランド一覧

ブランドIDサービス名ドメインフォルダ構成ステータス
nekoNekomata (ネコマタ)neko.contents-print.jpapps/brands/neko/🚀 開発中
tokinoe時の絵(TOKINOE)tokinoe.contents-print.jpapps/brands/tokinoe/📋 計画中
dog犬写真アプリ(未定)未定未定🤔 検討中

詳細設定

🐱 猫又商店(neko)

ブランドID: neko
サービス名: 猫又商店(仮名)
ドメイン: neko.contents-print.jp
フォルダ構成:
- apps/brands/neko/web/ # Next.js Webアプリ
- apps/brands/neko/mobile/ # Expo モバイルアプリ
商品: 猫写真89mm正方形プリント
配送期間: 3営業日以内

🎨 時の絵(tokinoe)

ブランドID: tokinoe
サービス名: 時の絵(TOKINOE)
ドメイン: tokinoe.contents-print.jp
フォルダ構成:
- apps/brands/tokinoe/web/ # Next.js Webアプリ
- apps/brands/tokinoe/mobile/ # 将来対応
商品: 日本画・アート作品オンデマンド印刷
配送期間: 7営業日以内(制作工程含む)

🐶 犬写真アプリ(dog)

ブランドID: dog
サービス名: 未定(検討中)
ドメイン: 未定
フォルダ構成: 未定
商品: 未定
配送期間: 未定
ステータス: 開発検討中

データ管理・システム連携

Shopifyメタフィールド設定

注文レベルメタフィールド

# 基本ブランド識別
order.metafields.nekomata.brand:
type: "single_line_text_field"
value: "neko" | "tokinoe" | "dog"
description: "注文元ブランドの識別"

# 注文元ドメイン
order.metafields.nekomata.source_domain:
type: "single_line_text_field"
value: "neko.contents-print.jp" | "tokinoe.contents-print.jp"
description: "注文発生元ドメイン"

# 配送期間設定
order.metafields.nekomata.delivery_days:
type: "number_integer"
value: 3 | 7
description: "ブランド別配送期間(営業日)"

商品レベルメタフィールド

# 商品カテゴリ
product.metafields.nekomata.category:
type: "single_line_text_field"
value: "photo_print" | "art_print"
description: "商品カテゴリ分類"

# ブランド制限
product.metafields.nekomata.allowed_brands:
type: "list.single_line_text_field"
value: ["neko"] | ["tokinoe"] | ["neko", "tokinoe"]
description: "販売可能ブランド制限"

BFF(Backend for Frontend)API設計

ブランド判定エンドポイント

// GET /api/brand/detect
interface BrandDetectionRequest {
domain?: string;
subdomain?: string;
userAgent?: string;
}

interface BrandDetectionResponse {
brandId: "neko" | "tokinoe" | "dog";
brandName: string;
config: BrandConfig;
features: string[];
}

ブランド設定API

// GET /api/brand/config/{brandId}
interface BrandConfig {
brandId: string;
name: string;
description: string;
domain: string;
deliveryDays: number;
supportEmail: string;
// UI設定
theme: {
primaryColor: string;
secondaryColor: string;
logo: string;
favicon: string;
};
// 機能設定
features: {
mobileApp: boolean;
customSizes: boolean;
bulkUpload: boolean;
artworkTemplates: boolean;
};
// 商品設定
products: {
allowedCategories: string[];
defaultSize: string;
priceModifier: number;
};
}

アプリケーション設定

// ブランド設定マスタ
const BRAND_CONFIG: Record<string, BrandConfig> = {
neko: {
brandId: "neko",
name: "猫又商店",
description: "猫写真プリントサービス",
domain: "neko.contents-print.jp",
deliveryDays: 3,
supportEmail: "support@contents-print.jp",
theme: {
primaryColor: "#FF6B35", // 猫らしいオレンジ
secondaryColor: "#2D3748",
logo: "/brands/neko/logo.svg",
favicon: "/brands/neko/favicon.ico"
},
features: {
mobileApp: true,
customSizes: false,
bulkUpload: true,
artworkTemplates: false
},
products: {
allowedCategories: ["photo_print"],
defaultSize: "89mm_square",
priceModifier: 1.0
}
},
tokinoe: {
brandId: "tokinoe",
name: "時の絵(TOKINOE)",
description: "日本画・アート作品オンデマンド印刷",
domain: "tokinoe.contents-print.jp",
deliveryDays: 7,
supportEmail: "support@contents-print.jp",
theme: {
primaryColor: "#8B4513", // 日本画らしい茶色
secondaryColor: "#2F4F4F",
logo: "/brands/tokinoe/logo.svg",
favicon: "/brands/tokinoe/favicon.ico"
},
features: {
mobileApp: false,
customSizes: true,
bulkUpload: false,
artworkTemplates: true
},
products: {
allowedCategories: ["art_print"],
defaultSize: "A4",
priceModifier: 1.5
}
},
dog: {
brandId: "dog",
name: "未定",
description: "開発検討中",
domain: "未定",
deliveryDays: 0,
supportEmail: "support@contents-print.jp",
theme: {
primaryColor: "#000000",
secondaryColor: "#000000",
logo: "",
favicon: ""
},
features: {
mobileApp: false,
customSizes: false,
bulkUpload: false,
artworkTemplates: false
},
products: {
allowedCategories: [],
defaultSize: "",
priceModifier: 1.0
}
}
};

ブランド別設定

配送期間

  • 猫又商店: 通常3営業日以内
  • 犬写真アプリ: 未定(検討中)
  • 時の絵(TOKINOE): 通常7営業日以内(制作工程のため)

商品カテゴリ

  • 猫又商店: 写真プリント(89mm正方形)
  • 犬写真アプリ: 未定(検討中)
  • 時の絵(TOKINOE): アート作品印刷(複数サイズ対応)

UI・UX差別化

  • 猫又商店: 猫・和風テイストのデザイン・コピー
  • 犬写真アプリ: 未定(検討中)
  • 時の絵(TOKINOE): 日本画・アート志向の上品なデザイン

システム連携フロー

注文処理フロー

sequenceDiagram
participant F as Frontend
participant B as BFF API
participant S as Shopify
participant E as Electron App

F->>B: ドメインベースブランド判定
B->>F: ブランド設定・UI config
F->>S: 注文作成 + brand metafield
S->>E: Webhook + brand情報
E->>E: ブランド別印刷処理
E->>S: 出荷完了 + tracking
S->>F: ブランド別通知メール

API認証・制限

// ブランドベースAPI制限
interface ApiLimitations {
rateLimit: {
neko: "100req/min",
tokinoe: "50req/min", // アート系は低頻度想定
dog: "10req/min" // 開発中のため制限
};
features: {
bulkUpload: ["neko"], // 猫のみ一括アップロード可能
customSizes: ["tokinoe"], // アート系のみカスタムサイズ
artworkTemplates: ["tokinoe"] // アート系のみテンプレート
};
}

新ブランド追加手順

1. データ設定

# 新ブランド設定登録
brand_id: "example"
brand_name: "サンプルブランド"
domain: "example.contents-print.jp"
delivery_days: 5

2. Shopify設定更新

  • メタフィールド定義にブランドID追加
  • 商品のallowed_brands設定
  • 通知テンプレートのcase文追加

3. BFF API更新

  • BRAND_CONFIGにエントリ追加
  • ドメイン判定ロジック更新
  • API制限設定追加

4. UI・UX準備

  • ブランドテーマ設定(色・ロゴ)
  • 専用コピーライティング
  • 商品カタログ・制限設定

5. インフラ設定

  • ドメイン・DNS設定
  • Cloudflare Pages設定
  • 分析・トラッキング設定

ブランド間の共通要素

統一項目

  • サポート窓口: support@contents-print.jp
  • 決済システム: Shopify統合
  • 工場システム: 同一のElectron App
  • 基本技術スタック: Next.js + Cloudflare

差別化項目

  • デザイン・UI: ブランド個別
  • 商品カタログ: ブランド特化
  • 配送期間: サービス特性に応じて
  • マーケティングメッセージ: ターゲット別

管理の利点

運営効率

  • 統一インフラ: 共通システムでコスト削減
  • 一元管理: サポート・決済の統合
  • 拡張性: 新ブランド追加の容易さ

ユーザー体験

  • 専門性: 各ブランドに特化した体験
  • 一貫性: 品質・サポートレベルの統一
  • 安心感: 統一サポート窓口による信頼性

開発効率

  • コード共有: 共通機能の再利用
  • 保守性: 変更時の影響範囲の明確化
  • テスト: 共通テストスイートの活用

関連ドキュメント: メール関連設定 | システム設計