/foːɾʲ/Irish, verbto help
エージェントが構築する先のバックエンド。
構造化コンテンツとアプリケーションデータを、まとめて管理します。モデルを定義すれば、API、編集ツール、顧客のサインイン、テナントの分離はFóirが提供します。
構築
バックエンドは、1つの設定ファイルから始まります。
自分で書いても、コーディングエージェントに頼んでも構いません。モデル、そのフィールド、顧客のサインイン方法を記述します。
そこからFóirがAPIを生成します。
モデル、フィールド、ルックアップ、顧客のサインインは、設定の数行です。1回のプッシュでGraphQL APIになります。
コンソール
モデルから作られたコンソールで、チームが一緒に編集する。
すべてのモデルに、型付きフィールド、バージョン、プレビューを備えたエディターが用意されます。複数人が同じレコードで同時に作業でき、互いのカーソルが見えます。
Ask Fóir
データについて、Ask Fóirに質問する。
コンソール内のアシスタントが、レコードを横断して集計し、ステップを比較して、分かったことを、使った数値とともに伝えます。
そのうえで、作業も任せる。
自分と同じツールで、レコードの検索、書き込み、変更を行い、自分のロールにできないことはできません。書き込んだ内容は下書きとして待機します。
サインインとロール
サインインは組み込み済みです。
チームとユーザーに共通の、1つのホスト型ログイン。パスキー、2段階認証、Google、Apple、Shopify、または任意のOIDCプロバイダーでのサインインに対応します。
1組のユーザーを、プールとロールで管理します。
プールには、プロジェクトまたは1つの組織にサインインできる人が入ります。メンバーシップによってユーザーにロールが付与され、すべてのロールは同じ権限のリストから構成されます。
レコード
アプリは、公開用キーで読み取ります。
自分のホスティング上で動き、誰でも見られる商品をAPIに問い合わせます。
顧客がサインインし、レコードを1人の顧客のものにできます。
サインインはFóirがホストします。モデルで、各レコードを所有する顧客だけに非公開にできます。
書き込みは、2回送っても安全です。
接続が弱いと、アプリは注文をもう一度送信します。同じ冪等キーが付いているので、Fóirは最初の結果を返し、何も変更しません。
ほかの誰も読めません。
2人目の顧客が同じクエリを送っても、何も返りません。ルールはデータベースで適用されるので、チェックを忘れても行が漏れることはありません。
公開
コンテンツは、どこからでも編集できます。
編集者がスマートフォンから画像を追加します。下書きとして保存されるので、アプリには公開済みのページが表示されたままです。
公開すれば、アプリに反映されます。
コンテンツはリクエストごとに解決されるので、次の読み取りで新しいバージョンが返ります。再ビルドも再デプロイも不要です。
パーソナライズ
どのバージョンを各訪問者に返すかを、Fóirが決めます。
ウェブサイト、アプリ、エージェントが、同じ読み取りを送ります。どのルールにも一致しない訪問者には、デフォルトが返されます。
誰がリクエストしているかを割り出します。
所在地はリクエストから、セグメントは顧客のプロフィールから、サーバー上で判断されます。この訪問者はこれまでに£1,000を超えて購入しているため、VIPのエントリーが返されます。
ルールは組み合わさり、優先順位で決まります。
この訪問者はパリにいて、以前にランニングシューズを購入しています。3つのエントリーが一致し、そのうち最初のものが返されます。
バリアントは、1つのフィールドだけを変え、ほかはそのままにできます。
レコード全体を置き換えることも、1つのフィールドや1つの段落だけを上書きすることもできます。編集者は同じエディターで各バージョンを書き、対象のオーディエンスとしてプレビューできます。
訪問者は、別の誰かになりすませません。
所在地とセグメントは、呼び出し元から受け取ることはありません。リクエストを編集しても何も変わらず、デフォルトが返ります。
ロールアウト
キャンペーンを予約し、ひとまとめで出荷する。
ロールアウトは、選んだ時刻にレコードのまとまりを一緒に公開します。一時停止、失敗した分のリトライ、全体のロールバックができます。
キー
各キーには、付与されたAPIだけが見える。
キーが実行できないミューテーションは、そのキーに渡されるスキーマに存在しないので、漏えいしたキーが見つけられるものはありません。
組織
作ったアプリを、SaaSにする。
2社目の顧客が、1社目のために作ったものを求めています。組織として追加します。同じモデルと同じコードで、データ、メンバー、サインインはその顧客のものです。
どの顧客も、ほかの顧客のデータを読めない。
クエリが行に届く前に、認証情報が境界を決め、ルールはデータベースの行レベルセキュリティとして実行されます。チェックを忘れても、漏れることはありません。
ペイウォール
アプリにペイウォールを追加する。
オペレーションに、ユーザーごとまたは組織ごとのクォータを設定します。上限に達した人は、WebではStripe、スマートフォンではアプリストアを通じて支払うことができ、そのサブスクリプションで上限が引き上げられます。代金は自分のアカウントにそのまま入ります。
オペレーション
ロジックは、自分が所有するコードで動く。
必要なことを説明すると、Fóirがコントラクトの下書きを作り、コーディングエージェント向けのプロンプトを渡します。エージェントがそれを書き、自分のホスティングにデプロイします。Fóirがコードを保持することはありません。
すべての呼び出しは、署名とスコープ付きで届く。
Fóirは、誰が呼び出しているか、オペレーションが何に触れてよいかを判断し、それを呼び出しとともに送ります。型付きクライアントは、付与された範囲外のものをコンパイルエラーにします。各実行は記録され、リトライには同じ冪等キーが付くので、同じことが2度起きることはありません。
シークレット
シークレットはボールトの中に。
コードが持つのは参照だけで、キーそのものではありません。Fóirは関数を呼び出すときに、その呼び出しが属するプロジェクトに対してだけ値を埋め込み、すべての読み取りをログに記録します。
エージェントがキーを必要とするときは、人に頼みます。
エージェントはWorkにタスクを登録して待ちます。誰かがスマートフォンからキーを追加すると、キーはそのままボールトに入り、エージェントは、使える参照を手に作業を再開します。値そのものは見ることがありません。
フック
何かが起きたら反応する。
フックは、レコードが作成、変更、公開されたとき、または別のオペレーションが終了したときに、オペレーションを実行します。配信は少なくとも1回行われ、どの配信も再送できます。
通知
何かが変わった瞬間に、顧客に知らせる。
通知はプッシュとして送られ、アプリ自身の受信トレイにも入ります。顧客は受け取るカテゴリーを選び、Fóirはその選択を尊重します。
メール
データを読み込むメール。
テンプレートは、送信の時点でレコードから内容が埋め込まれます。1つのレコードに関するメールとして、またはセグメント全体に、スケジュールで送信でき、同意が適用され、開封も追跡されます。
メディア
画像は一度アップロードするだけ。画面ごとに最適な1枚を。
画像フィールドは、画面が求めるサイズでWebPとAVIFを返し、画像の読み込み中に表示するblurhashも付きます。
検索
意味で検索する。呼び出し元が読み取れる範囲の中で。
レコードは書き込まれる時点で埋め込みが作られます。質問すると最も近いものが見つかり、非公開のレコードがほかの人に表示されることはありません。
周辺
近くにあるものを探す。
ジオポイントフィールドにより、レコードを距離で検索できるので、アプリは、誰かのいる場所から2キロメートル以内に何があるかを問い合わせられます。
仕事
公開中のサイトに残したノートが、タスクになります。
許可した人なら誰でも、ページにノートを残せます。ノートはページの背後にあるレコードに紐づくので、適切な対象が付いた状態でWorkに届きます。
何を出荷するかを、人とエージェントが1か所で決める。
タスクをチームメイトに割り当てるか、Fóirに任せます。エージェントは下書きを自由に書きますが、人が公開を承認するまで何も公開されません。
エージェント
エージェントに常設の仕事を任せる。
長時間稼働するエージェントが状況を見守り、MCPを通じてコンテンツを最新に保ちます。キーが変更できる範囲を限定するので、エージェントはその範囲内で自律的に動きます。
コンソール内のあなたのアプリ
アプリ独自の管理画面を、コンソールの中に。
アプリは、ページと、動作に使う正確な権限を宣言します。コンソールはナビゲーションにそれを表示し、トークンを渡すので、パスワードもCookieも受け渡されません。
インテグレーション
すでに使っているシステムとつなぐ。
連携アプリが、別のシステムのフィールドを自分のモデルに対応付け、レコードを同期し続けます。向こうでの変更は、こちらの同じレコードに反映されます。
エクスポート
データは持ち出せます。
1つのコマンドで、すべてのレコードを自分が所有するPostgresデータベースにエクスポートします。
スタート
プロジェクトを作成し、モデルを定義するだけ。
残りは最初から揃っています。