アーキテクチャドキュメント · C4 + デプロイ

Everythink Studio
グローバルシステムアーキテクチャ

組織——企業、政府、コミュニティ——を生きた地理空間ネットワークに変えるノーコードAIオペレーティングシステム。地図上のコミュニティとルーム、回答・販売・人と人をつなぐAIアシスタントを、独自ブランドでウェブ・iOS・Androidに提供。2016年より本番稼働中。

Rust 2026 · ワークスペース17クレート Postgres + Timescale + pgvector Dragonfly (Redis) Next.js 16 · pnpm モノレポ HAIエンジン · 13の質問タイプ
初版 · プログレッシブダウンロード 本ドキュメントはアーキテクチャの初版であり、完全なアーキテクチャを含むものではありません。この不完全性は想定どおりであり、設計によるものです。アーキテクチャはプログレッシブにダウンロードされます。そのソースが aap-human-agent テンプレート——ヒューマンエージェント相互作用パターン群(エスカレーション、デリゲーション、プロキシエージェント、権限境界)——です。ダウンロードを実行するのはエージェントであり、権限は人間が保持します。

CONFIDENTIAL — Carlos Matias Baglieri 2026 · 2016年より本番稼働中

アジェンダ

6つのセクション、ひとつのシステム

製品ビジョンから実際の実装まで:Rustバックエンド、Next.jsフロントエンド、デプロイ、ロードマップ。

1 · 製品とビジョン

トポロジ · HAIエンジン · ガバナンス

空間がルータであること、13の質問タイプ、隔離・フェデレーション・エージェント的・プロアクティブ。

2 · バックエンド

Rust 2026 · 17クレート · ヘキサゴナル

ゼロI/Oドメイン、ポート & アダプター、3つの認証レジーム、単一Postgres、リアルタイム。

3 · フロントエンド

Next.js 16 · FSD + MVVM

4アプリ、13パッケージ、SDKファサード、RBAC can()、シングルサインイン、デザインシステム。

4 · デプロイ / CI

docker-compose · 2段CI

7サービス、ALBでのTLS、preprod直接デプロイ、mainへの整合性ゲート。

5 · ロードマップ

BYOK · アンカリング · セルフホスト · DAO

v2の方向性、明示的に未実装。

6 · クロージング

正直な会計

何が本番で、何が設計で、何が予測か。

ビジョン · トポロジ

空間がルータである

すべての人は自分の個人組織を持ち、n個の組織を購読します。すべての組織——企業 · 政府 · 組合 · コミュニティ——はn個のネットワークを含み、各ネットワークはn個のコミュニティを含み、各コミュニティはn個のルームを含みます。すべてのノードは固有のマルチポリゴンを持ちます:包含は内側へ向かう(ネットワークのポリゴン内部の細分化されたコミュニティ)か、外側へ向かう(ポリゴン外部のコミュニティ)かのいずれかです。トポロジは数学的な意味でフラクタルです:各レベルは前のレベルの自己相似コピーであり——S = ⋃ fᵢ(S)、Hutchinson演算子のアトラクタ(バナッハの不動点定理)。ネットワーク同士は相互運用します(フェデレーション):あるネットワークは公開情報のみを共有して別のネットワークに接続します。人が組織に参加すると、そのn個のコミュニティとn個のルームへのアクセスを得ます。組織で行う仕事は組織内で追跡され、個人組織へミラーされます:それは人ごとのレピュテーションを生み出し、解決済みの問題へと蒸留され、それらは本人の個人ネットワークにコピーされ、そこで追跡されます。蓄積された回答から、HAIはユーザーごとのコンテキストレイヤを構築します。

ズーム: 100%
トポロジ:ネットワーク → コミュニティ → ルーム → ペルソナ
個人組織 / 組織ネットワークコミュニティルーム
ビジョン · オントロジ

プラットフォームの4つのレイヤ

各上位レイヤは、型付きインターフェースを介して下位レイヤの保証を合成します。製品(v1モジュール):HAI、マッチメイキング、チャット、カレンダー、マーケット、ソーシャル。4つのレイヤの上に、10のセクター実装。

ズーム: 100%
オントロジ:4レイヤ + 10のセクター実装
ビジョン · 原則

アーキテクチャを支配する3つの原則

各原則は意図表明ではなく、検証可能な保証です。3つ合わせて、合成則(エンドツーエンド)、セクター倍増則(修正なしの継承)、正直則(実装かつ測定済み = 保証)を確立します。

原則 1 · レイヤ合成エンドツーエンド合成則。各レイヤ L₁…L₄ がその保証を確立し、レイヤ間のすべてのインターフェースが型付きで検証済みの値だけを通す(境界でのZod、DTO → ドメインマッパー)ならば、エンドツーエンドの性質が成り立ちます:健全に引き出す(レイヤ3、P-A3)→ 有界で終了的なエンベロープ内で実行する(レイヤ3、P-A4)→ 正しい宛先へルーティングする(レイヤ1、トポロジ)→ ちょうど1回配信する(レイヤ2、P-A7)→ 有界で監査可能、テナント隔離された権限の中で(レイヤ4、P-A6/P-A8)。
原則 2 · セクター実装無緊張の倍増則。レイヤ1〜4を修正せずにインスタンス化するセクターデプロイ(P-C1…P-C10)は、それらの保証を継承し、セクター固有の性質のみを追加します。プラットフォームはひとつの製品であり、セクターは同じコアに対するビューです。セクターごとのフォークは存在せず——安定したインターフェース上の型付き合成があるだけです。
原則 3 · 正直な会計正直則。宣言された保証は、実装され測定されたメカニズムが含意する性質と正確に一致します。設計/予測された能力は、そのメカニズムが実装されるまで保証として数えられません。不変条件:メトリクスなしに保証なし。保証があるなら、ダッシュボードがある。
レイヤ 1 · トポロジ & エンジン

HAIエンジン — 13の質問タイプ

2016年より本番稼働中。意図的に狭くした合成可能な前提:相互作用とは型付き質問のワークフローであり、あらゆる回答が明確に定義されたコンテキストに届くよう、プラットフォームは地理的位置付きのトポロジです。v2ではエンジンは2つの推論レイヤで動作します:学習済みネットワーク(決定論的、LLMなし)と、存在しないノードを埋めてネットワークを崩縮させるA2A推論。

ズーム: 100%
HAIエンジン:型付き質問 → ルーティング → コンテキスト
製品 · v1 → v2モジュール

カレンダー — サービスを販売し、カレンダーを管理

販売者が価格・カテゴリ・空き状況付きのサービス(type_event)を提供し、顧客が参加者・日付・場所付きで予約(event)します。ホワイトラベルモードでは、同じネットワーク内のすべての販売者が可視かつ注文可能です——「他者が私のネットワークで売る」。支払いはネットワーク内にマーチャントを作成し、product_keyで製品を検索します。

ズーム: 100%
カレンダー:ネットワーク内でサービスを販売
販売者 · 個人組織ネットワーク = 可視性の境界支払い · ネットワーク内のマーチャント
製品 · v1 → v2モジュール

マーケット — 製品を販売し、他者に私のネットワークで販売させる

販売者がマーチャント・提供者・価格付きの製品(market_product)を出品し、オファー/クーポンを添付します。顧客はカート(market_item)を組み、ネットワークキーをjson_dataに刻印してチェックアウト(merchant_tx)します。両側に紛争と評価があります。マーチャントは merchant.network でネットワークに紐づきます——「他者が私のネットワークで売る」。

ズーム: 100%
マーケット:ネットワーク内で製品を販売
販売者 · マーチャント取引に刻印されたネットワークキー紛争 + 評価
製品 · v1 → v2モジュール

HAI + マッチメイキング + チャット — 各ユーザーの個人ネットワーク

HAIは、ユーザーが何を探しているかを理解することで各ユーザーの個人ネットワークを埋めます:ネットワークは事業/政府/コミュニティ/組合のウェブサイトまたはドキュメントから自動的に構築され、質問フローが生成され、異なるルーム(同じまたは異なるコミュニティ)のマッチング間のクロスリンクも生成されます。マッチメイキングはプロセスを自動化します:1つのユーザー意図 → コミュニティのディスパッチチャネルへの発注書、対象ルームにジオロケーション。socket + FCM上のリアルタイムチャット。フローは横断的(ルームをまたぐ)であり、2つの推論レイヤで動作します:学習済みネットワーク + 埋めて崩縮させるA2A。

ズーム: 100%
HAI + マッチメイキング + チャット:個人ネットワーク
HAI · 13の質問タイプルーム · キッチン · ディスパッチリアルタイムチャットコミュニティ横断
製品 · v1 → v2モジュール

ソーシャル — ネットワークのプロモーションとユーザー相互作用

ネットワークは自らの空間でプロモーションを実行し、ユーザーはソーシャルモジュールで相互作用します:いいねとコメント付きのニュース/ストーリー、カテゴリは管理者が設定します。ソーシャルフィードはトポロジの中に存在します——ネットワークが発行し、コミュニティが細分化し、ルームが受け取ります。

ズーム: 100%
ソーシャル:プロモーションと相互作用
ネットワーク · 発行とプロモーションニュース/ストーリー · いいね · コメント
製品 · v1 → v2モジュール

2つの推論レイヤ — 崩縮するニューラルネットワーク

すべてのモジュールはネットワークのルームに存在し、横断的です:プリセールスを行うゲストルームからのデータフロー(HAI)は、テクニカルサポートを持つ顧客からのデータフローに接続します。v1(静的グラフ)とは異なり、ここにはニューラルネットワークがあります:後続のノードが存在しなければ、A2Aが次のステップを決定して保存し、ネットワークは崩縮します。スコープは有限です——あるユーザーがネットワークで尋ねたものは全員のために保存されます——そしてA2A経由のLLM消費は時間とともに減少し、決して増えません。

ズーム: 100%
2つの推論レイヤ:学習済みネットワーク + A2A、有限の崩縮
ルーム · 横断的なデータフローレイヤ 1 · 学習済みネットワーク · LLMなしレイヤ 2 · A2A · 穴のみ有限スコープ · 消費は減少
レイヤ 2 · プラットフォーム

検証可能なマルチテナント隔離

企業、政府、NGO、コミュニティは2016年から単一のAI基盤を共有し、非公開のものを証明可能なかたちで非公開のまま保っています。リファレンスモニターによる完全な媒介;許される唯一のチャネル = 公開スコープ。

ズーム: 100%
マルチテナント隔離
非公開、決して越えない公開、唯一のチャネル
レイヤ 2 · プラットフォーム

フェデレーションされたネットワークと安定なマッチメイキング

ネットワークは公開射影の上でフェデレーションします。マッチメイキングは近接半径内の公開スコープのみで動作します;繰延受理 → 安定マッチング。

ズーム: 100%
フェデレーション:ネットワーク間の公開射影
レイヤ 3 · 相互作用

型付きエリシテーション — 少数の質問で学習

システムが尋ね、ユーザーが答え、答えがコンテキストになります。エリシテーションは型付き(エンジンは驚きなしで計算する)、忠実、かつ効率的です。レイヤ 1(学習済みネットワーク、決定論的)で動作し、ノードが存在しないときはレイヤ 2(A2A)がステップを決定して永続化し、ネットワークは崩縮します——少数の質問で学習し、新しい質問はすべて全員のために保存されます。

ズーム: 100%
型付きエリシテーション
レイヤ 3 · 相互作用

エージェント的ワークフロー — エンベロープ

一部のノードはオープンエンドな作業を必要とします:正しい型の答えを得るまで、ツール呼び出しと推論を交互に行う(ReActスタイル)LLMエージェントです。これは推論レイヤ 2(A2A)です:後続のノードが学習済みネットワークに存在しないとき、エージェントが次のステップを決定して永続化し、ネットワークは崩縮します——LLM消費は時間とともに減少し、決して増えません。エンベロープは3つの失敗モードを有界化します。

ズーム: 100%
エージェントノード:推論 + 有界なツール

保証されないもの:値の意味論的正しさ。エージェントは完了し、スコープ内に留まり、型付きだが誤った答えを出力することがあります——これはエンベロープではなく、評価と人間のゲートで対処します。

レイヤ 3 · 相互作用

プロアクティブアシスタンス — 情報の価値

リアクティブなチャットボットの逆:待つのではなく、自ら開始します。難しいのは抑制です——行動することの期待純価値が沈黙の価値を超えるときだけ発言します。

ズーム: 100%
プロアクティブループ:観察 → 評価 → 行動
レイヤ 4 · ガバナンス

有界な権限と来歴

行動できるエージェント——お金を使う、第三者に連絡する、データを動かす——は、ユーザーが同意した範囲によって有界化され、与えられた目的のためだけに情報を使い、説明と取り消しを可能にする痕跡を残さなければなりません。

ズーム: 100%
ガバナンススタック:同意 → ケイパビリティ → ログ
レイヤ 4 · ガバナンス

人間のネットワークに奉仕する自律ネットワーク

有界なデリゲーション、コントラクトネット配分(announce → bid → award)、そして調整の正直な限界:活性は部分同期の下でのみ。

ズーム: 100%
人間のネットワークに奉仕する自律ネットワーク
横断

セキュリティとエビデンスプロトコル

セキュリティ

Saltzer–Schroederの原則

完全媒介、メカニズムの簡潔性、フェイルセーフなデフォルト。セキュリティ負債がプラットフォームのいくつかの保証の条件となっています。

エビデンス

デプロイで裏付けられた主張

主張Cがデプロイで裏付けられるのは、(i) 型付きであり、(ii) すべての前提が本番パイプラインから検証済みエビデンスを持ち、(iii) 前提が結論を満たすとき、かつそのときに限ります。そうでなければ、Cは設計主張です。

ズーム: 100%
セキュリティオントロジ
セキュリティオントロジ:境界、信頼、脅威。
ズーム: 100%
エビデンスパイプライン
パイプライン:計装 → 保存 → 検証 → 監査。
セクター

10のセクター実装

各セクターデプロイはレイヤ1〜4を修正せずにインスタンス化し、その保証を継承します

セクター 1

複数拠点の企業

ちょうど1回の配信、リトルの法則、拠点間の非干渉。

セクター 2

政府

平等な取扱い、監査可能性、公平性の不可能性。

セクター 3

人道支援

レキシミントリアージ、最適輸送、脆弱な人々のプライバシー。

セクター 4

コミュニティ

持続的な協力、レピュテーション、オストロムの原則。

セクター 5

ヘルスケア

臨床プライバシー付きのケアトポロジ。

セクター 6

教育

トポロジ上の学習パス。

セクター 7

金融

スクリーニングパイプラインとパワーカーブ。

セクター 8

物流

財の移動、価格の公平性。

セクター 9

防衛

明示的な民事防衛スコープ。

セクター 10

コミュニティクレジット

コモンズ上のレピュテーションとガバナンス。

正直な会計

本番 / 設計 / 予測

予測状態
予測状態マップ — 自己評価であり、外部監査ではありません。
2016年より本番

トポロジ · エンジン · プラットフォーム · エリシテーション · ガバナンス

コアメカニズムは2016年からデプロイされています。

2026年設計

エージェント的 · プロアクティブ · フェデレーション · 自律

能力の大部分は2026年時点の設計;自律はその全スコープにわたり設計です。

予測

すべての定量評価

すべての定量数値は予測であり、稼働中のプラットフォームでの測定を待っています。

バックエンド · Rust 2026

17クレート、ヘキサゴナル、単一Postgres

合成ルート(api)→ ユースケース ×10 → アダプター(ledger、a2a、courier)→ ドメイン(core、ゼロI/O)。すべてを担う単一のPostgres(Timescale pg17 + pgvector):台帳、イベント、エンベディング、ジョブ/whisperジオキャッシュ。SQLはコンパイル時に検証(.sqlx/オフラインキャッシュ、107クエリ)。

ズーム: 100%
バックエンド:api → ユースケース → アダプター → core → Postgres
api · 合成ルートユースケース ×10アダプターcore · ゼロI/OPostgres · Timescale pg17 + pgvector.sqlx/ · 107クエリ オフライン
バックエンド · ヘキサゴナル

ポート & アダプター — 中心にドメイン

ドメイン(everythink-core)はI/Oを知りません。アダプターはDB、メール、A2Aのポートを実装します。ユースケースがオーケストレーションを行います。合成ルート(everythink-api)がすべてを配線します。

ズーム: 100%
ヘキサゴナル:中心にドメイン
ドメイン(ゼロI/O)アダプター(sqlx、Brevo、A2A)ユースケース
バックエンド · 17クレート

なぜこれほど多くのクレートか — クレートごとに1つの明示的な役割

各クレートには役割があります:合成ルート(api)、クライアント(sdk、cli)、ユースケース ×10、インフラアダプター(a2a、courier)、ポート + 永続化(ledger)、ドメイン(core)。

ズーム: 100%
クレート役割タクソノミ
バックエンド · ワークスペース

17クレートはcoreに流れ込む

everythink-apiがハブであり、すべてがcore(ゼロI/O)に依存します。SDKはcoreに結合しているため、ワークスペース内(backend/crates/everythink-sdk)に存在します。

ズーム: 100%
依存グラフ:17クレート → core

注:libs/ には他言語のSDKが置かれます(ベンダーリファレンス、外部コード)。

バックエンド · リクエストフロー

認証から永続化まで — 1つの完全なリクエスト

クライアント → api(認証 + レート制限 + 検証)→ loom(実行)→ ledger(リポジトリtrait経由でプロファイル解決)→ sisters(ファンアウト)→ oracle(マージ → 正規化Ensemble)→ ledger(永続化)→ 200 OK。

ズーム: 100%
リクエストライフサイクル
バックエンド · ユースケース

6つのユースケース:オーケストレーション、認証、データ

loom — オーケストレーション:LoomStoreポート / LoomPersistenceアダプター経由で永続化。ingest — シグナルパイプライン:受信シグナルを処理。scry — センチメント:リファレンスポート SentimentReader / PgSentimentReader。eval — リグレッションハーネス:継続的評価。warden — 認証:JWTアクセス/リフレッシュ、Google OAuth、IPバインディング。whisper — HMAC署名付きウェブフック、ちょうど1回の配信。

ズーム: 100%
ユースケース:loom · ingest · scry · eval · warden · whisper
バックエンド · セキュリティ

ミドルウェアチェーン — trace → timeout → CORS → ルーティング

受信リクエスト → Trace + request_id → Timeout 60秒 → 408 → CORS + 圧縮 → 5分岐のルートサブツリー。

ズーム: 100%
ミドルウェアチェーン
バックエンド · セキュリティ

1つのルーターに3つの認証レジームが共存

パブリック(プローブ/登録/ログイン/リフレッシュ)· Eye-Key(HMAC、60秒スライディングのレート制限)· ユーザーJWT(warden、Console)· Atlas WS(自己認証、ユーザーごとの上限)。

ズーム: 100%
3つの認証レジーム
バックエンド · セキュリティ

継承なしのRBAC — 1つの関数、明示的なマトリクス

can(role, action) をconst fnとして:Owner → true;Profile Read/Write Self → true;(role, action) の明示的マッチ;残り → Ownerのみ。ハンドラー内でAUTHORIZE → 拒否時に403。

ズーム: 100%
RBAC can(role, action)
バックエンド · データ

すべてを担う1つのデータストア

timescale/timescaledb-ha:pg17 + pgvector(vector(1024) + HNSW)。1つのプール。6つのデータドメイン:Ledger、Simulations、Users、Embeddings、geo_signals、Jobs。ヘルスチェック:docker-compose内の pg_isready(service_healthy)。

ズーム: 100%
単一のPostgres
バックエンド · データ

ポート経由の永続化、決して具象経由ではない

リポジトリTRAIT · Pg*Repository(すべてのSQLはここにある)· MockRepository(DBなしのテスト)· AppState: Arc<dyn Repository> · ユースケースはTRAITを呼び出します。

ズーム: 100%
trait ↔ アダプターコントラクト
バックエンド · データ

コンパイル時検証SQL、可逆マイグレーション

.up.sql + .down.sql(ペア)を編集 → just sqlx-prepare → .sqlx/*.json(107クエリ)をコミット → SQLX_OFFLINE=true で稼働DBなしにビルド/CI。

ズーム: 100%
sqlxオフラインキャッシュ
バックエンド · デプロイ詳細

ヘルスチェック + SQLXオフライン — 正確なデプロイ

docker-compose:postgres(pg_isready、10s/5s/10)→ dragonfly(redis-cli ping、10s/3s/10)→ api(service_healthy)。app/admin:ヘルスチェック無効(distroless/static)。CI:SQLX_OFFLINE=true、.sqlx/キャッシュをコミット済み。

ズーム: 100%
バックエンドデプロイ:ヘルスチェックチェーン + SQLXワークフロー
postgres · pg_isready · interval 10s / timeout 5s / retries 10dragonfly · redis-cli ping · interval 10s / timeout 3s / retries 10api · depends_on service_healthySQLX_OFFLINE=true · .sqlx/ 107クエリ
バックエンド · リアルタイム

SSE(Tide)+ WebSocket(GeoHub)— タイルごとのファンアウト

TideBroker:複合トピックのSSE、broadcast 256、キープアライブ 15秒、Last-Event-IDによる再接続。GeoHub:WS、DashMap[Tile → broadcast 64]、ビューポートステアリング、gzipオプトイン。

ズーム: 100%
リアルタイム:SSE + WS タイルごと
バックエンド · ユースケース

6つのオーケストレーション/データユースケース

loom

オーケストレーション

LoomStoreポート / LoomPersistenceアダプター経由で永続化します。

ingest

シグナルパイプライン

受信シグナルをシステムに取り込んで処理します。

scry

センチメント

リファレンスポート SentimentReader / PgSentimentReader。

eval

リグレッションハーネス

品質の継続的評価。

warden

ユーザー認証

JWTアクセス/リフレッシュ、Google OAuth、IPバインディング。

whisper

HMACウェブフック

永続的で、ちょうど1回の配信。

バックエンド · ユースケース

everythink-warden — ユーザー認証

warden

JWTアクセス/リフレッシュ

パスワードハッシュ(bcrypt)、ローテーションするJWTアクセス/リフレッシュ、Google OAuth、異常検出のためのIPバインディング付きセッション。

/api/v1/auth/*

register · login · refresh · me · google · sessions

Console + Atlas WS のユーザーJWT境界。/auth で一度サインインすると、トークンは localStorage('everythink:auth') に書き込まれます。

ズーム: 100%
Warden:認証フロー
バックエンド · ユースケース

everythink-whisper — 署名付きウェブフックと永続的配信

whisper

HMAC署名付きウェブフック

WhisperStoreポート / PgWhisperStoreアダプターを持つ配信ワーカー。受信側でのペイロード検証用のHMAC署名。

jobs

Postgres内の永続キュー

指数バックオフでの再試行、ちょうど1回のセマンティクス、永続的失敗向けのデッドレターキュー。

ズーム: 100%
Whisper:ウェブフック配信フロー
バックエンド · アダプター

A2A(プロトコル)と Courier(メール)

everythink-a2a

Google A2Aプロトコル

エージェントタスクエンベロープ、ステータスポーリング、結果取得を伴うHTTP上のJSON-RPC。呼び出し側を変更せずにSisterをプロセス外へ移動できます。

everythink-courier

トランザクションメール

Brevoアダプターまたはロギングno-op。システム通知用のテンプレートレンダリング + 配信追跡。

ズーム: 100%
アダプター:A2A + Courier
バックエンド · クライアント

everythink-cli と everythink-sdk

everythink-cli

運用ツール

new-key は Eye Key をブートストラップ発行します:ローカルのEd25519鍵ペアを生成し、フィンガープリント → Postgres、平文はメモリ上で一度だけ表示、認証にHMAC。

everythink-sdk

ワークスペース内のRust SDK

backend/crates/everythink-sdk:everythink-coreに結合しており、core(ゼロI/O)のみに依存、ドメイン利用者向け。

ズーム: 100%
クライアント:CLI + SDK
バックエンド · 不変条件

決して破られない6つの不変条件

1

正規化された確率

厳密に1か所だけ:everythink-oracle::ensemble。sum(prob) ≈ 1.0、シナリオは降順ソート、エントロピーはナット。

2

Eye-Keyの平文はディスクに触れない

Postgresに行くのはHMAC + フィンガープリントだけ。平文はメモリ上で一度だけ表示されます。

3

Sistersは決してPostgresに書かない

SisterOutputを返し、Loomが永続化します。生成と保存の明確な分離。

4

可逆マイグレーション

すべての .up.sql には対応する .down.sql があります。just migrate-add NAME が両方を作成します。

5

AppStateリポジトリ Arc<dyn Trait>

テストはモックを使います。具象アダプターではなくtraitに依存します。

6

ポート経由の永続化

アダプターの外で具象Pg*を使うことはありません。プライベートテーブルにはスライス所有のポート。

ズーム: 100%
6つの不変条件
フロントエンド · Next.js 16

4アプリ、13パッケージ、単一アイデンティティ

web (:3000) · app (:3001) · admin (:3002) · mobile (Expo)。パッケージ:types、sdk-core + ファサード、domain、ui、auth、api-client、telemetry、config。

ズーム: 100%
フロントエンド:4アプリ + 13パッケージ
apps · Next.js 16 + Expotypes · domain · configsdk-core + ファサードui · auth · api-client · telemetry
フロントエンド · C4レベル 1

4つのサーフェス、1つのバックエンド、3つのアクター

アクター:エンドユーザー(ゲスト → 認証済み)· 開発者(Eye-Key)· 管理者/運用者(スタッフ)。サーフェス:web/app/admin/mobile。バックエンドAPI(/api/v1配下の REST + SSE)。

ズーム: 100%
C4コンテキスト
フロントエンド · C4レベル 2

コンテナ — モノレポ全体

4アプリ + SDKレイヤ(6ファサード)+ サービス(4)+ デザインシステム + ツーリング + types(リーフ)。ズームで探索してください。

ズーム: 100%
C4コンテナ:モノレポ全体
フロントエンド · アプリ

web、app、admin、mobile — オーディエンスごとに1つ

ズーム: 100%
4つのアプリ
フロントエンド · SDK

6つのファサード、1つのコア、コアのエンドポイントはゼロ

sdk-core(HttpClient、consumeSSE、TokenProvider)· sdk-guest · sdk-auth · sdk-atlas · sdk-eye · sdk-admin。

ズーム: 100%
SDKレイヤ:信頼スコープ付きファサード
フロントエンド · パッケージ

アプリケーションサービス、UI、ビルドタイム

domain(マッパー)· telemetry(アウトボックス)· api-client(レガシー)· auth(NextAuth v5 + RBAC)· ui(キット + トークン)· config(eslintプリセット)· types(Zod、リーフ)。

ズーム: 100%
サービス + デザイン + ツーリング
フロントエンド · SDK

sdk-core はHOWを知り、決してWHATを知らない

エンドポイントはファサードにのみ存在します。sdk-coreは @everythink/types に対してZodですべてのレスポンスを検証し、ドリフト時にはContractViolationを持つSdkErrorツリーを投げます。

ズーム: 100%
SDKファサード:エンドポイントはファサードのみ
フロントエンド · FSD + MVVM

Feature-Sliced Design + MVVM — インポートは下向きに流れる

スクリーン(View)→ ビューモデルフック → feature.repository.ts(SDKへの唯一の扉)。ESLintの境界 no-restricted-imports(INV-1)。FSDレイヤ:shared → entities → features → widgets → app。

ズーム: 100%
FSD + MVVMリポジトリ境界
フロントエンド · アイデンティティ

1つのログイン、1つのオリジン、4つのサーフェス

apps/web の /auth(単一オリジン)→ httpOnlyクッキー 'everythink_at' → メモリ内トークン + localStorageシード → EverythinkAuthGuard + resolveMe(GET /api/v1/auth/me)→ ロールベースのゲート。

ズーム: 100%
共有サインイン
フロントエンド · アイデンティティ

can(role, action) — 明示的マトリクス、継承なし

3レイヤ:(1) アプリごとの auth.ts allowedRoles → (2) ミドルウェア → (3) UI + サーバーアクション内の can()。バックエンドの everythink_core::rbac のミラーです。

ズーム: 100%
フロントエンドRBAC
フロントエンド · UI

1つのスタイルシート、セマンティックトークン、Tailwind v4

デザインの唯一の真実のソース::root のCSSトークン、@theme(Tailwind v4)によるセマンティックマッピング、ミラーされたトークンによるモバイルのNativeWind。アプリはセマンティックコンポーネント(bg-accenttext-foregroundfont-display/mono)を消費し、生のhexは決して使いません。Cosmic-purpleパレット:--gold: #d9ab5c--violet: #9d7df5--emerald: #10B981

ズーム: 100%
UI/テーマアーキテクチャ:トークン → Tailwind → コンポーネント
:root · CSSカスタムプロパティ@theme · セマンティック Tailwind v4@everythink/ui · コンポーネントキットモバイル · ミラーされたNativeWind
フロントエンド · 型

ネットワーク境界でのZod — 単一コントラクト

ワイヤ型は @everythink/types にZodで一度だけ定義されます。SDKはすべてのバックエンドレスポンスを検証し(z.parse(response))、不正なペイロードはクラッシュではなく ApiError を投げます。コンポーネントは生のJSONを見ません:*.repository.ts がパースし、@everythink/domain がDTO → モデルをマップし、ビューモデルが型付き状態をViewに公開します。

ズーム: 100%
Zod検証境界:API → SDK → リポジトリ → ドメイン → ビューモデル
バックエンドAPI · JSONsdk-core · Zodで検証*.repository.ts · 唯一の境界ApiError · 型付き、クラッシュしない
フロントエンド · モバイル

apps/mobile — Expo、expo-router、NativeWind

React Native + expo-router(ファイルベースルーティング)+ NativeWind(RN用Tailwind)。テーマシステムはウェブのデザインシステムトークンをミラーします(tailwind.config.js + src/theme/index.ts)。sdk-guestsdk-authsdk-atlasdomaintelemetry を消費します。ウェブCIから除外:--filter=!@everythink/mobile

ズーム: 100%
モバイルアプリ構造:Expo + NativeWind + テーマ
expo-router · ファイルベースルーティングNativeWind · Tailwind RNsrc/theme · ミラーされたトークンCI · ウェブturboから除外
フロントエンド · ルール

機械的に強制される4つのルール

慣習ではなくESLint + TypeScriptで検証可能なルール:(1) INV-1*.repository.ts のみがSDKをインポート(no-restricted-imports);(2) FSDレイヤ:インポートは下向きに流れる(shared → entities → features → widgets → app)、機能横断はパブリックバレル経由のみ;(3) 共有サインイン:web + app が localStorage('everythink:auth') + resolveMe() を共有;(4) 3レイヤRBAC:auth.ts allowedRoles → ミドルウェア → UI + サーバーアクション内の can(role, action)。

ズーム: 100%
FSDレイヤ + INV-1 + サインイン + RBAC
INV-1 · repository.ts のみがSDKをインポートFSD · インポートは下向きサインイン · localStorage + resolveMeRBAC · 3レイヤ、継承なし
デプロイ · docker-compose.prod.yml

7サービス、ALBでのTLS、シークレットは .env

ALB → nginx :80 → api/web/app/admin + postgres + dragonfly。すべてを担う単一のPostgres(TimescaleDB pg17 + pgvector)。Dragonflyはキャッシュ、ジョブ、SSEファンアウト用。

AWS ALBでのTLS preprod直接デプロイ CI/CD 2段
api · 起動時にマイグレーションweb · Next.js standalonepostgres · pg17 + pgvectorapp/admin · 静的distroless
デプロイ · スタック

docker-compose.prod.yml — フルスタック

ALB(TLS)→ nginx :80 → api(:18081、起動時マイグレーション)· web(Next standalone)· app/admin(静的distroless)· postgres(timescale/timescaledb-ha:pg17 + pgvector)· dragonfly(Redis互換)。7サービス:postgres · dragonfly · api · web · app · admin · nginx。

ズーム: 100%
本番スタック · 7サービス
postgres · timescaledb-ha:pg17 + pgvectordragonfly · Redis互換api · 起動時にマイグレーションweb · Next.js standaloneapp/admin · 静的distroless
デプロイ · ネットワーク

単一の入口としてのnginx

nginx :80 が唯一の内部入口です。/api/v1/* → api:18081、/ → web:3000、/app/* → 静的、/admin/* → 静的、とルーティングします。webは EVERYTHINK_API_INTERNAL_URL(http://api:18081)経由でapiと通信します。apiは postgres と dragonfly に condition: service_healthy で依存します。

ズーム: 100%
nginxルーティング図
nginx · 単一入口web → api · INTERNAL_URLヘルスチェック · service_healthy
デプロイ · シークレット

backend/.env — シークレットの唯一の場所

docker-compose.prod.yml は backend/.env を env_file 経由で api と web サービスにマウントします。apiがすべてのシークレットを保持します(JWT_SECRET、EYE_KEY_HMAC_SECRET、GOOGLE_CLIENT_ID、BREVO_API_KEY)。webは NEXT_PUBLIC_* 変数のみを受け取り——BREVO_API_KEY は決して保持しません。app/adminは静的distrolessで、ビルドにシークレットが含まれません。

ズーム: 100%
シークレット境界図
api · すべてのシークレットweb · NEXT_PUBLIC_* のみルール · webはBrevoを保持しない
デプロイ · フロー

preprod直接 vs CI/CDゲート

2つのデプロイ経路:preprodは作業ツリーから直接(mainを経由せず)デプロイし、本番はmainへのマージと整合性ゲートを要求します。このルールは決定的です:deployワークフローをpreprodに使わないでください。mainの :latest をプルして直接デプロイを上書きしてしまうためです。

ズーム: 100%
Preprod vs 本番デプロイフロー
preprod · 作業ツリー → スクリプト本番 · main → :latest → ワークフロールール · preprodにはdeployワークフローを使わない
CI/CD · GitHub Actions

PRではaffected、mainではintegrity

2段パイプライン:PR段は影響のあるものだけを実行(バックエンド:ci-affected-crates.sh;フロントエンド:turbo --affected)、main段は完全な整合性を実行(バックエンド + フロントエンド/モバイル全体 + E2E + セキュリティ)。mainはグリーンでデプロイ可能なまま保たれます。

ズーム: 100%
CI/CD 2段パイプライン
just ci · fmt · lint · check · testpnpm ci · turbo lint · typecheck · buildmain整合性 · 全体 + E2E + セキュリティ
ロードマップ · 🔵 未実装

フェデレーションされたセルフホストノード · BYOK · ネットワークごとのDAO

v2に向けたロードマップの方向性。以下のいずれも既存の能力ではありません。フロー:運用者がローカルのEd25519鍵ペアを生成 → コントローラーに行くのはフィンガープリントのみ(BYOK)→ セルフホストノード → 台帳アンカリング → 公開射影のみでのフェデレーション → ネットワークDAO。

ズーム: 100%
ロードマップv2:セルフホスト · BYOK · DAO
ロードマップ · フェーズ

v2に向けた5つのフェーズ

フェーズ項目依存成果物
1BYOKクレート everythink-byok · テーブル node_keys · Ed25519アイデンティティ + ウェブフック · コントローラーはフィンガープリントのみ保持
2台帳アンカリングフェーズ 1クレート everythink-anchor · テーブル anchor_commitments · 公証ジョブ · チェーン = 運用者の決定
3フェデレーションされたセルフホストノードフェーズ 1–2ノードDockerイメージ(postgres、dragonfly、api、web、app、admin、nginx)· フェデレーションプロトコル
4ネットワークごとのDAOフェーズ 2クレート everythink-dao · network_proposals/network_votes/provenance_log append-only
5ウォレット + ガバナンスクレート everythink-wallet · wallets/network_memberships · 従業員/起業家/自営業のペルソナ

各フェーズ:.up.sql + .down.sqlマイグレーション、オフライン.sqlxキャッシュの更新、TDD(80%以上)、グリーンなjust ci。組織タイプ構造は実装済みです(5値のOrgKind、DB CHECK、7つの法的構造のオンボーディング)。

ロードマップ · アンカリング

候補チェーンのリファレンスアーキテクチャ

Postgres台帳ハッシュコミットメントを公証するためのアーキテクチャリファレンス:Solana v0.8.13(Yakovenko)—— 暗号学的時計としてのPoH、ボンド/スラッシング付きのPoSコンセンサス、ストレージ用のPoRep。チェーン選択は明示的な運用者の決定であり、これは実装ではなくリファレンスです。

ズーム: 100%
候補チェーンエンジン
PoH · 検証可能な時間ステップPoS · ボンド · スラッシング · 3分の2超多数PoRep · ストリーミング · ストレージLeader → Verifiers · 確認 = 投票~710k TPS · 秒未満のファイナリティCAP: 可用性より一貫性
クロージング

Everythink Studio — 完全なアーキテクチャ

ビジョンから実装まで:トポロジとHAIエンジン(2016年より本番)、17のヘキサゴナルクレートを持つRustバックエンド、FSD/MVVMのNext.js 16フロントエンド、Postgres + pgvector、2段CI/CD、デプロイ。境界に関する注記:予測エンジン(sisters/oracle/loom)は同じ作者による別の製品であり、ワークスペース内に存在します。

Rust 2026 · 17クレート Postgres + pgvector · sqlx Next.js 16 · pnpm · FSD 3つの認証レジーム · RBAC can() World Monitor · ジオシグナル CI/CD 2段 · preprod直接
初版 · プログレッシブダウンロード 本ドキュメントはアーキテクチャの初版であり、完全なアーキテクチャを含むものではありません。この不完全性は想定どおりであり、設計によるものです。アーキテクチャはプログレッシブにダウンロードされます。そのソースが aap-human-agent テンプレート——ヒューマンエージェント相互作用パターン群(エスカレーション、デリゲーション、プロキシエージェント、権限境界)——です。ダウンロードを実行するのはエージェントであり、権限は人間が保持します。

Everythink Studio · Carlos Matias Baglieri 2026 · docs/architecture.md · backend/README.md · frontend/README.md · COLLABORATION.md · cto.md

Everythink Studio · アーキテクチャ
1 / 64 ← →