Pular para o conteúdo
Challenge 18
Live
ARQUITETURAARQUITETURA DO SISTEMA

Pendências Técnicas · Antes de Colocar a Mão no Código

Equipe BlendOps
Cauê Carneiro, Fabrício Tosta, João Paulo, Júlia Clovandi, Matheus Silva
Data
Contexto
FrilaChallenge 18 (Apple Developer Academy)

Extraído dos documentos de arquitetura (T-0024): Diagrama de Classe, Modelagem de Banco de Dados e Diagrama de Arquitetura, em doc-harness/07 - Arquitetura/. Os PDFs correspondentes ficam no repositório do Frila, em Documentos/Diagramas:Documentos/.

Objetivo deste arquivo: listar toda decisão técnica que a equipe precisava fechar antes do backend e do Android começarem. Gerado em 17/09/2026.

Atualizado em 22/09/2026

As treze decisões foram respondidas no quadro 03 de pendências do FigJam, em 21/09/2026, com um ajuste na D8 em 22/09. Este arquivo passa a registrar as respostas; o código de resposta de cada uma (B01, D07…) é o da pergunta no quadro. Também em 22/09, o Cauê respondeu as pendências que ainda faltavam para começar o código (seção “Respondidas em 22/09/2026”, logo abaixo).


✅ Respondidas em 21/09/2026

#DecisãoRespostaPergunta no quadro
D1Turnos sobrepostosAprovada: virou RN21, garantida no banco por EXCLUDE USING gist. O profissional não pode aceitar dois turnos que se cruzamB04
D2Tamanho da leva e intervalo entre levasNão há levas: a notificação sai de uma vez para quem tem a função, está disponível e a até 15 km do local, e a equipe de confiança recebe mesmo além. Teto de uma notificação a cada 30 minutos por profissional, com agrupamento (RN23)D07
D3Prazo até a candidatura expirarA candidatura vale até a vaga fechar. Modo seleção só para vaga que começa em mais de 24 horas; sem escolha até 24 horas antes, a vaga fecha sozinha e os candidatos são liberados (RN24)D05
D4Janela crítica fixa ou por tipo de vagaUm padrão igual para todas — 3 horas antes do início —, que o contratante ajusta ao publicar. O alerta chega ao contratante por notificaçãoB18
D5PostgreSQL com PostGIS, ou backend gerenciadoÉ a mesma decisão da D9: Supabase, que é Postgres com PostGISB06
D6O despacho roda como serviço próprio ou dentro da APIFora da requisição: publicar só grava e responde; um job separado (Edge Function, pg_cron e fila pgmq) faz notificações, agrupamento, teto, lembretes, alertas e fechamentosB15
D7Cache localSwiftData, com iOS 17 como mínimo (RNF04 sobe de iOS 16 para iOS 17)B19
D8Domínio compartilhado entre plataformasNão há pacote de código comum entre Swift e Kotlin. As regras críticas moram no backend, em funções do Supabase, escritas uma vez; cada app tem o próprio domínio para a tela e os testes (ajustada em 22/09)B20
D9BackendSupabase (Postgres + PostGIS, autenticação, Edge Functions, pg_cron, pgmq). Começa no plano gratuito, que atende até 50 mil usuários ativos por mês; a migração é reavaliada a partir de certa rentabilidadeB02
D10PlataformaNativo em cada plataforma: Swift e SwiftUI no iOS, Kotlin no Android. Para a loja em 13/11, o iOS é o mínimo; Android e web são a metaB01, B03
D11ContratoA especificação é escrita antes do backend, pelo menos das rotas centrais (publicar vaga, candidatar-se, confirmar, check-in, avaliar). Com o Supabase, o contrato são as funções RPC documentadas. Escrita em 22/09: Frila/Documentos/API/openapi.yaml (OpenAPI 3.1). Em 23/09 está na 0.2.2; a regra de mudança e o espelho no backend estão em Documentos/API/README.mdB16
D12TestesSwift Testing para a lógica e XCTest só para a interface, com XCUITest. Os dois convivem no mesmo projeto; os 195 testes XCTest da Bancada ficam como estãoB21
D13PushFCM nos dois sistemas; no iOS, o FCM entrega pela APNsB17

✅ Respondidas em 22/09/2026 — para começar o código

PendênciaResposta
Um app ou doisUm app só, com dois perfis, o do profissional e o do contratante, e uma ficha em cada loja
Uma conta pode ter os dois perfisNão. Cada conta tem um perfil, escolhido no cadastro e fixo (RN25). Para o outro lado, a pessoa cria outra conta, com outro e-mail; o telefone pode se repetir
LoginCódigo de uso único enviado ao e-mail, sem senha e sem SMS. O envio embutido do Supabase só serve para teste; antes do piloto entra um provedor de e-mail próprio (SMTP)
TelefoneObrigatório, porque é o contato do turno (RN10), e sem verificação: o app confere só o formato
Duração do "disponível agora"A feature saiu. Vale só a grade semanal de disponibilidade
Onde fica o códigoNo repositório do Frila: supabase/ e ios/ primeiro; android/ e web/ depois
Políticas de acesso (RLS)Escritas na [[07 - Arquitetura/Modelagem de Banco de DadosModelagem de Banco de Dados]], uma por tabela e operação; entram nas migrações quando o código começar
Estimativa da US158 pontos. O MUST do Backlog passa a somar 90
Tecnologia da webEscolhida depois do iOS
Identificador do app (bundle ID)com.frila.org.app, definido ao criar o projeto iOS em 23/09/2026. O App ID está registrado no Apple Developer com Push Notifications, e o mesmo identificador está no app do App Store Connect e nos apps iOS dos projetos Firebase
Wireframes (T-0011)Protótipo clicável, gerado pelo Claude
Estrutura inicial do códigoCriada só quando o Cauê pedir

✅ Continua valendo

  • Domínio isolado: nenhuma seta sai da camada de domínio (Clean Architecture/MVVM). Permite testar em milissegundos, sem tela, rede ou banco, o que o app decide sozinho.
  • Android e web continuam no escopo: para a entrega na loja em 13/11, o iOS é o mínimo, e Android e web entram assim que couberem (B03). O Android segue como prioridade de alcance.
  • Confirmação dupla: tratada como corrida entre requisições. A resposta é 200 (confirmado), 409 (já ocupado por outra corrida) ou 422 (regra de negócio violada). Com o Supabase, é o UPDATE condicional dentro de uma função RPC.

⚙️ Processo — não é decisão técnica, é etapa que falta acontecer

  • ✓Revisão pelos desenvolvedores (Cauê, João Paulo, Matheus) dos quatro documentos técnicos — Classe, Banco de Dados, Arquitetura e Casos de Uso (B05), feita em 22/09.
  • Curadoria e padronização visual pela Júlia Clovandi, conforme T-0012.
  • ✓Escrever a especificação das rotas centrais como funções RPC do Supabase (D11): Frila/Documentos/API/openapi.yaml, 22/09/2026. A 0.2.0 saiu no mesmo dia, com a entrada por e-mail e o perfil por conta; a 0.2.1 acrescentou o aceite dos termos e a chave headers no envelope de erro; a 0.2.2, de 23/09, fechou as divergências com os cartões do Sprint 1 e 2 e trocou alvo_usuario_id por alvo_tipo + alvo_id em bloquear e denunciar.
  • ✓Escolher o provedor de e-mail (SMTP) do código de entrada, antes do piloto: integrado via Edge Function enviar-email no backend e domínio oficial frilabr.com no frontend (20/10/2026).
  • Decidir quem paga a infraestrutura (C09), em debate no time.
  • ✓Atualizar a seção "Arquitetura Técnica · Frila" do FigJam (board Challenge 18): as decisões D1 a D13 passam para a coluna "Decisões Fechadas", com as respostas acima. Feito em 19/10/2026 (importado pelo Cauê).

Onde ler mais

DocumentoOnde
Diagrama de Classedoc-harness/07 - Arquitetura/Diagrama de Classe.md · Documentos/Diagramas:Documentos/classes/Diagrama de Classe.pdf
Modelagem de Banco de Dadosdoc-harness/07 - Arquitetura/Modelagem de Banco de Dados.md · Documentos/Diagramas:Documentos/banco-de-dados/Modelagem de Banco de Dados.pdf
Diagrama de Arquiteturadoc-harness/07 - Arquitetura/Diagrama de Arquitetura.md · Documentos/Diagramas:Documentos/arquitetura/Diagrama de Arquitetura.pdf
Diagrama de Casos de Usodoc-harness/07 - Arquitetura/Diagrama de Casos de Uso.md · Documentos/Diagramas:Documentos/casos-de-uso/Diagrama de Casos de Uso.pdf
Tarefa que originou os documentosdoc-harness/04 - Tarefas/T-0024 - Diagramas de classe, banco de dados e arquitetura.md