/foːɾʲ/Irish, verbto help
에이전트가 기반으로 삼는 백엔드.
구조화된 콘텐츠와 애플리케이션 데이터를 함께 관리합니다. 모델을 정의하면 Fóir가 API, 편집 도구, 고객 로그인, 테넌트 격리를 제공합니다.
빌드
백엔드는 하나의 설정 파일에서 시작합니다.
직접 작성하거나 코딩 에이전트에게 요청하세요. 모델, 필드, 고객이 로그인하는 방식을 지정합니다.
Fóir가 이를 바탕으로 API를 생성합니다.
모델, 필드, 룩업, 고객 로그인은 설정의 몇 줄입니다. 푸시 한 번으로 GraphQL API가 됩니다.
콘솔
모델로 만든 콘솔에서 팀이 함께 편집합니다.
모든 모델에 타입 지정 필드, 버전, 미리보기가 있는 편집기가 제공됩니다. 여러 사람이 같은 레코드에서 동시에 작업하며 서로의 커서를 볼 수 있습니다.
Ask Fóir
데이터에 대해 Ask Fóir에 질문하세요.
콘솔의 어시스턴트는 레코드 전반을 집계하고, 단계를 비교하며, 사용한 수치와 함께 찾은 내용을 알려 줍니다.
그런 다음 작업을 시키세요.
사용자와 같은 도구로 검색하고, 작성하고, 레코드를 변경하며, 사용자의 역할이 할 수 없는 일은 하지 못합니다. 작성한 내용은 초안으로 대기합니다.
로그인과 역할
로그인이 기본 제공됩니다.
팀과 사용자를 위한 호스팅 로그인 하나로, 패스키, 2단계 인증, Google, Apple, Shopify 또는 모든 OIDC 공급자로의 로그인을 지원합니다.
하나의 사용자 집합을 풀과 역할로 관리합니다.
풀은 프로젝트 또는 하나의 조직에 로그인할 수 있는 사람들을 담습니다. 멤버십이 사용자에게 역할을 부여하고, 모든 역할은 같은 권한 목록으로 구성됩니다.
레코드
앱은 공개 키로 읽습니다.
앱은 사용자의 호스팅에서 실행되며, 누구나 볼 수 있는 제품을 API에 요청합니다.
고객이 로그인하며, 레코드는 한 고객에게 속할 수 있습니다.
로그인은 Fóir가 호스팅합니다. 모델은 각 레코드를 소유한 고객에게만 비공개로 만들 수 있습니다.
쓰기 요청은 두 번 보내도 안전합니다.
연결이 불안정하면 앱이 주문을 다시 보냅니다. 같은 멱등성 키가 포함되므로 Fóir는 첫 번째 결과로 응답하고 아무것도 바꾸지 않습니다.
다른 누구도 읽을 수 없습니다.
두 번째 고객이 같은 쿼리를 보내면 아무것도 받지 못합니다. 규칙이 데이터베이스에서 강제 적용되므로, 빠뜨린 검사가 있어도 행이 유출되지 않습니다.
게시
어디서든 콘텐츠를 편집합니다.
편집자가 휴대폰에서 이미지를 추가합니다. 초안으로 저장되므로 앱은 계속 게시된 페이지를 보여 줍니다.
게시하면 앱에 반영됩니다.
콘텐츠는 요청마다 결정되므로 다음 읽기에서 새 버전이 반환됩니다. 다시 빌드하거나 재배포할 필요가 없습니다.
개인화
Fóir가 방문자마다 어떤 버전을 받을지 결정합니다.
웹사이트, 앱, 에이전트가 같은 읽기 요청을 보냅니다. 어떤 규칙에도 맞지 않는 방문자는 기본값을 받습니다.
누가 요청하는지 파악합니다.
위치는 요청에서, 세그먼트는 서버에 있는 고객 프로필에서 가져옵니다. 이 고객은 £1,000를 넘게 사용했으므로 VIP 항목이 제공됩니다.
규칙은 결합되고, 우선순위가 결정합니다.
이 방문자는 파리에 있으며 이전에 러닝화를 구매한 적이 있습니다. 세 항목이 일치하고, 그중 첫 번째가 제공됩니다.
변형은 필드 하나만 바꾸고 나머지는 그대로 둘 수 있습니다.
레코드 전체를 대체하거나 필드 하나 또는 단락 하나만 덮어쓸 수 있습니다. 편집자는 같은 편집기에서 각 버전을 작성하고, 대상 오디언스의 입장에서 미리 볼 수 있습니다.
방문자는 다른 사람이라고 주장할 수 없습니다.
위치와 세그먼트는 호출자에게서 가져오지 않습니다. 요청을 수정해도 달라지는 것은 없으며 기본값이 돌아옵니다.
롤아웃
캠페인을 예약하고 한 번에 공개하세요.
롤아웃은 선택한 시각에 레코드 묶음을 함께 게시합니다. 일시 중지하고, 실패한 항목을 재시도하거나, 전체를 롤백할 수 있습니다.
키
각 키는 부여받은 API만 볼 수 있습니다.
키가 실행할 수 없는 뮤테이션은 해당 키에 주어지는 스키마에서 빠져 있으므로, 유출된 키가 발견할 것이 없습니다.
조직
만든 앱을 SaaS로 바꾸세요.
두 번째 고객이 첫 번째 고객을 위해 만든 것을 원합니다. 조직으로 추가하면 같은 모델과 같은 코드에, 고유한 데이터, 구성원, 로그인이 따라옵니다.
어떤 고객도 다른 고객의 데이터를 읽을 수 없습니다.
쿼리가 행에 닿기 전에 자격 증명이 경계를 정하며, 규칙은 데이터베이스의 행 수준 보안으로 실행됩니다. 빠뜨린 검사가 있어도 유출되지 않습니다.
페이월
앱에 페이월을 추가하세요.
오퍼레이션에 사용자별 또는 조직별 할당량을 둡니다. 할당량에 도달한 사람은 웹에서는 Stripe로, 휴대폰에서는 앱 스토어로 결제할 수 있고, 구독하면 한도가 올라갑니다. 대금은 사용자 본인 계정으로 바로 들어갑니다.
오퍼레이션
로직은 소유한 코드에서 실행됩니다.
필요한 것을 설명하면 Fóir가 계약을 초안으로 작성하고, 코딩 에이전트에 프롬프트를 전달합니다. 에이전트가 코드를 작성해 호스팅에 배포합니다. Fóir는 코드를 보유하지 않습니다.
모든 호출은 서명되고 스코프가 지정되어 도착합니다.
Fóir는 누가 호출하는지와 오퍼레이션이 접근할 수 있는 범위를 결정하여 호출과 함께 보냅니다. 타입 지정 클라이언트는 부여 범위를 벗어나는 것을 컴파일 오류로 바꿉니다. 실행은 모두 기록되며, 재시도에는 같은 멱등성 키가 포함되어 같은 일이 두 번 일어나지 않습니다.
시크릿
시크릿은 볼트에 남습니다.
코드는 키가 아닌 참조만 보유합니다. Fóir는 함수를 호출할 때 해당 호출이 속한 프로젝트에 대해서만 값을 채우고, 모든 읽기를 기록합니다.
에이전트에게 키가 필요하면 사람에게 요청합니다.
에이전트는 Work에 작업을 등록하고 기다립니다. 누군가 휴대폰에서 키를 추가하면 곧바로 볼트에 들어가고, 에이전트는 사용할 수 있는 참조를 가지고 계속 진행하며 값은 보지 못합니다.
훅
일이 일어나면 반응하세요.
훅은 레코드가 생성, 변경, 게시될 때나 다른 오퍼레이션이 끝날 때 오퍼레이션을 실행합니다. 전송은 최소 한 번 이루어지며, 어떤 전송이든 다시 보낼 수 있습니다.
알림
변경되는 즉시 고객에게 알리세요.
알림은 푸시로 나가고 앱 자체 받은 편지함에도 들어갑니다. 고객은 받아볼 카테고리를 직접 선택하며, Fóir는 그 선택을 따릅니다.
이메일
데이터를 읽는 이메일.
템플릿은 발송 시점에 레코드로부터 채워집니다. 하나의 레코드에 관해, 또는 세그먼트 전체에게, 스케줄에 따라 보낼 수 있으며, 동의가 적용되고 열람이 추적됩니다.
미디어
이미지를 한 번 업로드하세요. 모든 화면이 자기 크기를 받습니다.
이미지 필드는 화면이 요청하는 크기로 WebP와 AVIF를 반환하며, 사진이 로드되는 동안 보여 줄 blurhash도 함께 제공합니다.
검색
호출자가 읽을 수 있는 범위 안에서 의미로 검색하세요.
레코드는 기록될 때 임베딩됩니다. 질문을 하면 가장 가까운 항목을 찾고, 비공개 레코드는 다른 사람에게 나타나지 않습니다.
주변
근처에 있는 것을 찾으세요.
지오포인트 필드로 레코드를 거리 기준으로 검색할 수 있으므로, 앱은 누군가가 서 있는 곳에서 2킬로미터 이내에 무엇이 있는지 물을 수 있습니다.
업무
라이브 사이트의 노트가 작업이 됩니다.
허용한 누구나 페이지에 노트를 남길 수 있습니다. 노트는 페이지 뒤의 레코드에 고정되므로, 올바른 대상이 첨부된 채 Work에 도착합니다.
무엇이 공개될지는 사람과 에이전트가 한곳에서 정합니다.
작업을 팀원에게 할당하거나 Fóir에 맡깁니다. 에이전트는 초안을 자유롭게 작성하지만, 사람이 게시를 승인하기 전에는 아무것도 공개되지 않습니다.
에이전트
에이전트에게 상시 업무를 맡기세요.
장기 실행 에이전트가 상황을 지켜보며 MCP를 통해 콘텐츠를 최신 상태로 유지합니다. 에이전트의 키가 변경할 수 있는 범위를 제한하므로, 그 한도 안에서 스스로 작동합니다.
콘솔 속 내 앱
앱 전용 관리자 화면을 콘솔 안에.
앱은 페이지와 그 앱이 사용하는 정확한 권한을 선언합니다. 콘솔은 이를 탐색 메뉴에 표시하고 토큰을 전달하므로, 비밀번호나 쿠키는 넘어가지 않습니다.
연동
이미 운영 중인 시스템을 연결하세요.
통합 앱이 다른 시스템의 필드를 모델에 매핑하고 레코드를 동기화합니다. 그쪽의 변경은 여기의 같은 레코드를 업데이트합니다.
내보내기
데이터는 가져갈 수 있습니다.
명령 하나로 모든 레코드를 소유한 Postgres 데이터베이스로 내보냅니다.
시작
프로젝트를 만들고 모델을 정의하세요.
나머지는 이미 준비되어 있습니다.