Tudo o que o Fóir faz

Uma API de conteúdo é a menor parte do que uma aplicação precisa. Este é o resto.

Conteúdo

Como as suas informações são estruturadas.

Modelos e campos

Defina o formato dos seus dados a partir de dezesseis tipos de campo nativos, incluindo rich text, decimais exatos, mídia, referências e geopontos, no console ou em código.

Relações

Aponte um modelo para outro com um campo de referência e leia através dele em uma só consulta, com tipos de relacionamento que decidem se o acesso e as exclusões acompanham a referência.

Prosa e modelos inline

Rich text que guarda os seus próprios modelos entre os parágrafos, em qualquer ordem, modelos inline que você define uma vez e reutiliza como tipos de campo, e listas tipadas.

Hierarquias

Declare um campo de referência como a hierarquia de um modelo e os registros dele formam uma árvore, com toda leitura devolvendo o caminho do registro e seus ancestrais.

Locales

Traduza campos de texto e de prosa por locale, com uma cadeia de fallback percorrida campo a campo e um modo estrito que informa quais campos ficaram sem tradução.

Personalização

O servidor escolhe a versão de um registro que uma requisição recebe, a partir do contexto que a leitura envia e dos segmentos em que o usuário logado está. Inclui um exemplo prático.

Variantes

Varie um registro inteiro, um único campo ou uma única entrada de prosa por público, com a variante selecionada no servidor a partir de regras de segmentação reutilizáveis e priorizadas.

Públicos e segmentos

Monte públicos a partir de dimensões de contexto como dispositivo, plataforma, locale e status de login, e de segmentos baseados em regras que o servidor avalia a cada requisição.

Chaves naturais e lookups

Identifique um registro por uma chave legível e declare chaves de lookup únicas extras em um modelo, para que um handle ou um SKU o encontre em uma única consulta tipada.

Design tokens

Cor, tipografia e espaçamento guardados como tokens no projeto e servidos pela API, para que um app que os lê em tempo de execução mostre uma mudança de marca assim que ela for publicada.

Publicação

Colocar no ar e poder voltar atrás.

Rascunhos

Em um modelo com publicação ativada, cada salvamento grava um rascunho enquanto a API continua servindo a versão publicada. O console mostra o rascunho como a API o serviria.

Histórico de versões

Em modelos versionados, cada salvamento é uma versão numerada, mantida por uma janela definida pelo seu plano. Restaurar adiciona uma nova versão, e uma execução de teste informa o efeito antes.

Publicação agendada

Defina um horário de publicação em uma versão de registro e um horário de despublicação se o conteúdo deve sair do ar de novo. Um agendamento pode ser alterado ou cancelado até disparar.

Rollouts

Um rollout publica um lote nomeado de versões de registros em um único momento agendado. Um item que falha é ignorado e pode ser tentado de novo, e o lote pode ser revertido.

Releases

Mudanças em modelos e na configuração são preparadas como rascunhos e liberadas juntas, agora ou em um horário definido, com um diff de breaking changes e uma reversão.

Comportamento por modelo

Versionamento, publicação e variantes são ativados por modelo e vêm desativados por padrão, de modo que cada modelo assume só o fluxo de trabalho de que os seus registros precisam.

Entrega

Como chega à sua aplicação.

GraphQL tipado

O Fóir gera um schema GraphQL a partir dos seus modelos. A produção serve o schema publicado, e uma verificação da CLI faz o seu build falhar quando os tipos commitados ficam para trás em relação ao projeto.

Resolvido na leitura

Uma leitura envia um locale, um contexto e uma flag de preview. O servidor aplica o fallback de locale, escolhe a variante e seleciona a versão em rascunho ou publicada.

Atualizações ao vivo

Assine por WebSocket para saber quando registros mudam. Os eventos trazem o id do que mudou, e o módulo live do SDK os aplica ao seu cache de consultas.

Chaves de API

Cada chave é pública ou secreta e pertence a um projeto. Ela guarda os escopos que você der e pode ser restringida a modelos e operações escolhidos ou a uma organização.

Cache de respostas

A API GraphQL faz cache das respostas resolvidas por 60 segundos por padrão e as descarta quando um registro que elas contêm é gravado. Um comando da CLI faz purge manualmente.

SDK e CLI

Um cliente tipado que escreve o GraphQL da sua aplicação, com tipos gerados por chave, e uma CLI para conteúdo, schema, publicação e configuração, com saída JSON para scripts.

Limites aplicados por nós

As taxas de requisição são definidas por chave pelo seu plano, e a profundidade da consulta, o número de campos e os aliases têm teto antes de uma consulta rodar. As respostas informam os limites nos cabeçalhos.

Identidade e acesso

Quem pode ver e fazer o quê.

Login hospedado

Uma página de login que o Fóir hospeda para os seus usuários em um domínio de login que você verifica, com o nome, o logo e a cor do seu projeto, com login por senha, por código enviado por e-mail e por provedor.

Login com OpenID Connect

Seus usuários entram por qualquer provedor de identidade que publique um documento de discovery do OpenID Connect. Você informa a URL de discovery e as suas credenciais de cliente, e o Fóir executa a troca.

Verificação adicional

Exija uma passkey ou um código de aplicativo autenticador como segunda etapa depois da senha, antes de uma operação sensível ou em todo login em um app.

Papéis

Um papel é um conjunto de permissões que você compõe, concedido em um workspace inteiro ou em um projeto. Os papéis dos seus usuários são declarados por projeto na configuração ou na CLI.

Acesso por registro

Um modelo declara quem é dono dos seus registros, e cada registro é privado ou público. Um registro privado pode ser compartilhado com uma pessoa específica por uma concessão que você pode revogar.

Acesso por campo

Um campo pode indicar quais tipos de chamador podem lê-lo e quais podem gravá-lo. Há cinco tipos, definidos pela credencial que a requisição traz.

Controle de sessão

O console lista as sessões que os seus usuários mantêm em um domínio de login personalizado, por aplicação de login, e revoga qualquer uma. Os outros logins terminam por revogação do token ou por expiração.

Trilha de auditoria

Quem fez o quê e quando, registrado junto com a mudança e legível no console pelos membros da equipe que têm a permissão. As entradas são mantidas por 90 dias.

Segurança

Como os seus dados ficam separados dos de todos os outros.

Imposto no banco de dados

As regras de acesso são compiladas em row-level security do Postgres, de modo que o banco de dados filtra o que uma requisição pode ler e uma verificação esquecida no código da aplicação não expõe uma linha.

Isolamento de workspace

Um workspace é a sua conta. Toda linha governada carrega o id dele, e a política da tabela compara esse id com a sessão do chamador antes de qualquer outra coisa ser considerada.

Isolamento de projeto

Cada projeto tem o seu próprio conteúdo, usuários, arquivos, chaves, segredos e domínios de login. Uma chave de API pertence a exatamente um projeto e não pode ser apontada para outro.

Isolamento de organização

Quando o seu produto tem tenants próprios, cada um é uma organização. O banco de dados marca toda linha com a sua organização e filtra toda leitura por ela.

Acesso de suporte por aprovação

Quando a equipe do Fóir precisa olhar dentro de um workspace para ajudar, um dos administradores dele aprova a solicitação com um código de uso único. A visita dura uma hora e fica registrada.

Demesne

O mecanismo que compila as regras é open source, então você pode ler como as políticas são escritas e executar os testes dele por conta própria.

Projetos e organizações

Para agências e para produtos com tenants próprios.

Um projeto por cliente

Cada cliente recebe um projeto com o seu próprio conteúdo, chaves, usuários e login. Um workspace administra todos eles, e um cliente que você convida alcança apenas o próprio projeto.

Organizações

Dê ao seu produto tenants próprios. Cada cliente seu é uma organização dentro do seu projeto, com os próprios membros, usuários, dados e limites.

Árvores de organizações

As organizações se aninham em qualquer profundidade. Uma organização pai lê tudo o que está abaixo dela e altera apenas as próprias linhas, e modelos e configurações são herdados descendo pela árvore.

Provisionamento de organizações

Uma chamada cria uma organização com a sua marca, as suas configurações, o primeiro membro e uma chave restrita a ela. Execute duas vezes e você continua com uma só organização.

Staging e produção

Um arquivo de configuração declara staging e produção como projetos nomeados, e a CLI faz push para um por execução. Eles permanecem idênticos, exceto pelos destinos declarados, e o drift é informado.

Domínios personalizados

Um projeto pode servir a sua API a partir de um domínio que você verifica, e uma aplicação de login pode servir a página de login hospedada a partir de um. Ambos são opcionais, com TLS emitido automaticamente.

Mídia

Arquivos e o que você faz com eles.

Biblioteca de ativos

Faça upload de um arquivo uma vez e referencie-o por id a partir de qualquer registro, com dimensões e um placeholder lidos das imagens quando o upload é confirmado.

Transformações de imagem

Cada imagem é servida em oito tamanhos nomeados e quatro formatos, renderizada na primeira vez que uma URL é solicitada, com recortes e pontos focais definidos por uso.

Arquivos privados

Um arquivo tem o seu próprio dono e a sua própria visibilidade, com arquivos públicos servidos de uma URL simples e arquivos privados por um link assinado que expira.

Vídeo

Todo vídeo enviado recebe uma miniatura, uma prévia animada curta e a sua duração, e o streaming adaptativo em HLS está incluído em alguns planos.

Automação

Trabalho que acontece sem uma pessoa.

Agendamentos

Um agendamento executa uma das suas operações com uma expressão cron, em um fuso horário que você indica, e pode ser pausado, retomado ou disparado manualmente.

Hooks de ciclo de vida

Um hook executa uma das suas operações quando algo acontece em um projeto, como um registro sendo publicado, e cada entrega é guardada com o seu status.

Operações

Uma operação é um endpoint HTTP que você hospeda e registra no Fóir, que o chama com um payload assinado, faz novas tentativas em caso de falha e registra cada execução.

Cotas de uso

Uma cota limita a frequência com que uma operação pode ser executada em uma janela móvel, por usuário logado ou em um conjunto mais amplo, e devolve uma mensagem que você escreve.

Pré-condições

Uma pré-condição decide se uma operação pode ser executada, pela participação do chamador em um segmento ou por uma regra sobre a entrada, e recusa com uma mensagem que você escreve.

Segredos

Um cofre para as credenciais que as suas operações usam, guardadas criptografadas, endereçadas por referência e rotacionadas sem um novo deploy.

Notificações

Envie e-mails, notificações in-app e notificações push aos seus usuários, diretamente ou a partir de um evento, com preferências que cada usuário define por categoria e canal.

Trabalhando juntos

As pessoas e os agentes.

Notas

Comentários em thread que a sua equipe anexa a um registro, a um arquivo, a um modelo ou a outro assunto, até um único campo ou uma única passagem, com menções e uma caixa de entrada por projeto.

Tarefas

Atribua uma nota a um membro da equipe e ela vira uma tarefa, com data de entrega, subtarefas e uma fila por pessoa. Resolver a nota a marca como concluída.

Ask Fóir

Um assistente no console que trabalha com as permissões da própria pessoa logada. As edições dele chegam como alterações não salvas, como rascunhos ou como solicitações que você aprova.

Passe uma thread ao Fóir

Passe uma thread de notas ao assistente para uma execução curta e sem supervisão. Ele lê o projeto e responde na thread, e não pode editar, publicar nem excluir conteúdo.

Qualquer cliente MCP

Conecte o seu próprio agente ao servidor MCP hospedado do Fóir. Ele trabalha dentro das permissões de quem o conectou, ou dos escopos da chave secreta que recebeu.

Feedback dos seus usuários

Usuários logados podem escrever notas sobre um registro e ler as respostas da sua equipe. Um widget React registra a nota para você, e um projeto pode aceitar feedback de visitantes.

Seu para levar

A saída e as extensões.

Exportação para Postgres

Um comando exporta um projeto como tabelas Postgres tipadas geradas a partir dos seus modelos, com chaves estrangeiras, o seu conteúdo publicado e links de download dos seus arquivos.

Regras de acesso na exportação

O pacote de exportação inclui row-level security do Postgres para as linhas que cada usuário pode ler. Você a aplica por conta própria. Permissões de campo, escopos de API e regras de escrita ficam para trás.

Sua lógica continua sua

O Fóir não hospeda o seu código. Você registra uma função que hospeda como operação, e o Fóir a chama com um token assinado e com escopo, faz novas tentativas em caso de falha e registra cada execução.

Apps

Estenda o console com as suas próprias ferramentas. Um app é uma página web que você hospeda, incorporada como uma página, uma aba de editor, uma barra lateral ou um editor de campo.

Configuração como código

Modelos, chaves de API, hooks, provedores de login e o resto da configuração de um projeto em um único arquivo que você commita. Um push prepara um rascunho e uma release o publica.

Comece com um modelo

Crie um projeto, defina um modelo e leia-o de volta pela API.