コアコンポーネント
フロントエンド
React + Vite。Firebase Authenticationでセッションを管理し、REST APIへBearerトークンを付与。
バックエンドAPI
Express/Node.js(CommonJS)。PostgreSQLとファイルシステムを操作し、AI APIへプロンプトを送信。
AI生成エンジン
Google Gemini 2.5 Flash Lite(テキストマーカー方式)+ Claude Sonnet 4.5(ツール使用 + テンプレートシステム)。
AI_PROVIDER 環境変数で切り替え。ホスティング
Node.jsファイルシステム + Nginx。生成したHTMLを
/var/www/grav-sites/ に書き出し配信。データストア
PostgreSQL(ユーザー/サイト/チャット/サブスクリプション)。スクリーンショットや画像はファイルシステムに保存。
決済 / 認証
Stripe サブスクリプション / Firebase Auth。REST APIのミドルウェアでトークンを検証。
データフロー
生成と永続化
AI(Gemini or Claude)でHTMLを生成 → ファイルシステムに
default.md(frontmatter + HTML)として保存 → PostgreSQLへメタデータを記録。AI生成システム
モジュール構成 (server/ai/)
| ファイル | 役割 |
|---|---|
system-prompts.js | プロンプト構築(edit/create × gemini/claude) |
response-parser.js | Geminiテキストマーカー解析(CREATE_SITE/UPDATE_PAGE等) |
site-operations.js | ファイルシステム操作(サイト/ページCRUD) |
token-tracker.js | DBトークン使用量追跡 |
provider-gemini.js | Gemini APIラッパー |
provider-claude.js | Vercel AI SDK + Claude(ツール使用 + SSEストリーミング) |
provider-router.js | プロバイダー選択 + フォールバック |
tools.js | 6つのAI SDKツール定義 |
テンプレートシステム (server/ai/templates/)
| ファイル | 役割 |
|---|---|
assembler.js | assembleSite/assemblePage メインロジック |
base.js | HTMLラッパー(Tailwind CDN、CSS変数、フォント) |
nav.js / footer.js | 共通コンポーネント |
themes.js | 8業種テーマ定義 |
sections/ | 13セクションテンプレート |
データストア詳細
| ストア | 主な用途 | 備考 |
|---|---|---|
PostgreSQL (hirameki_web) | ユーザー、ワークスペース、サイト、チャット、サブスク、APIキー | users, sites, chat_messages, api_keys など |
ファイルシステム (/var/www/grav-sites/) | 生成されたHTMLページ、メディア、メタデータ | .sitemeta.json にSEO/Analytics設定を保持 |
Screenshots (/var/www/hirameki-web/screenshots) | ダッシュボード用サムネイル | Puppeteerで自動生成 |
ページの保存形式
default.md はfrontmatter + HTMLの形式:
外部サービスとの統合
- Firebase Authentication: トークン検証、Authorized domains
- Google Gemini API:
GEMINI_API_KEYにより生成を実行 - Anthropic Claude: Vercel AI SDK経由 (
@ai-sdk/anthropic) - Stripe:
/api/create-checkout-sessionでサブスクリプションを開始 - Unsplash: 画像検索APIをメディアピッカーに組み込み
運用と監視
pm2でai-web-builderプロセスを常駐- ログ確認:
pm2 logs ai-web-builder - 障害時は
pm2 restart ai-web-builderでリカバリ