<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://krosct.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://krosct.github.io/" rel="alternate" type="text/html" /><updated>2026-11-01T20:55:07+00:00</updated><id>https://krosct.github.io/feed.xml</id><title type="html">Gabriel Monteiro Silva</title><subtitle>Este é um resumo de Gabriel e será atualizado periodicamente assim que possível.</subtitle><entry><title type="html">I Want To Remember</title><link href="https://krosct.github.io/project-i-want-to-remember/" rel="alternate" type="text/html" title="I Want To Remember" /><published>2026-10-18T00:00:00+00:00</published><updated>2026-10-18T00:00:00+00:00</updated><id>https://krosct.github.io/project-i-want-to-remember</id><content type="html" xml:base="https://krosct.github.io/project-i-want-to-remember/"><![CDATA[<div align="center">

  <img src="https://krosct.github.io/assets/img/projects/i_want_to_remember/iwtr-logo.png" alt="I Want To Remember" width="150" />

  <p align="center">
    <strong>Nunca mais esqueça o que importa.</strong>
    <br />
    Guarde em segundos. O app traz de volta na hora certa, até ficar na sua cabeça para sempre.
  </p>
</div>

<hr />

<h2 id="-a-ideia">💡 A ideia</h2>

<p>Você lê algo incrível, aprende uma palavra nova, ouve um nome e promete que nunca vai esquecer. Uma semana depois, sumiu. Estudou horas e só lembra que estudou.</p>

<p>Não é culpa sua. A memória apaga o que ninguém relembra no momento certo.</p>

<p><strong>O I Want To Remember é esse lembrete.</strong> Você coloca ali o que importa, e ele traz de volta no momento exato, até aquilo virar parte de você.</p>

<h2 id="-como-é-usar">✨ Como é usar</h2>

<p><strong>Abra o app.</strong> Os cartões do dia estão esperando, um de cada vez. Alguns fazem uma pergunta com alternativas, outros pedem para você digitar a resposta, outros só mostram algo para ler de novo. Imagem, áudio e vídeo também valem.</p>

<p><strong>Responda e vire.</strong> O app diz como você foi:</p>

<ul>
  <li><strong>✅ Certo:</strong> acertou em cheio.</li>
  <li><strong>⚠️ Atenção:</strong> acertou, mas cuidado com a escrita (errinhos de digitação são perdoados).</li>
  <li><strong>❌ Errado:</strong> não foi dessa vez. Você vê a resposta certa e o porquê, para fixar da próxima.</li>
</ul>

<p>Escuro, calmo e silencioso, feito tanto para o celular quanto para a tela grande.</p>

<h2 id="-segundos-para-guardar-uma-ideia">⚡ Segundos para guardar uma ideia</h2>

<ul>
  <li><strong>✍️ Escreva:</strong> uma frase basta. A IA transforma em um cartão completo, com pergunta, resposta e explicação.</li>
  <li><strong>🎙️ Fale:</strong> toque no microfone e diga <em>“faz 10 cartões sobre os planetas”</em>. Pronto, 10 cartões.</li>
  <li><strong>📄 A partir de arquivos:</strong> um PDF, a foto do seu caderno, um texto. Sai um baralho inteiro.</li>
  <li><strong>🎨 Ou monte do seu jeito</strong>, com imagens, áudio ou vídeo.</li>
</ul>

<p>Cada cartão ganha suas etiquetas sozinho, então sua biblioteca fica sempre organizada.</p>

<h2 id="-ele-lembra-quando-você-deve-lembrar">🧠 Ele lembra quando você deve lembrar</h2>

<p>Você não planeja nada. Nos primeiros dias, o cartão volta <strong>todo dia</strong>. Depois, <strong>toda semana</strong>. Depois, <strong>todo mês</strong>, para sempre. E o ritmo é seu: dá para ajustar como quiser.</p>

<p>Errou um cartão? Ele volta <strong>amanhã</strong>. Perdeu um dia? Os cartões atrasados vêm primeiro. E um <strong>lembrete diário</strong> chega no celular ou no computador quando tem cartão esperando, mesmo com o app fechado.</p>

<h2 id="-veja-você-ficando-mais-afiado">📈 Veja você ficando mais afiado</h2>

<p>Sequência de dias, taxa de acerto, os cartões mais difíceis, o desempenho por assunto e todas as respostas que você já deu. A prova de que está funcionando.</p>

<h2 id="-só-seu">🔒 Só seu</h2>

<p>Cada conta tem seus próprios cartões, estatísticas e configurações. Entre com senha ou com sua conta Google. Sem anúncios, sem rastreamento. Quer sair? Apague a conta e tudo vai junto.</p>

<h2 id="-do-zero-à-produção">🚀 Do zero à produção</h2>

<p>Um projeto individual, ponta a ponta: do aplicativo instalável no celular à inteligência artificial que cria os cartões, do login seguro ao deploy em servidor próprio. E quem quiser rodar na própria máquina instala tudo com um único comando.</p>

<p align="center">
  <strong>Feito com</strong> Python · TypeScript · IA generativa · PWA
</p>

<hr />

<div align="center">
  Desenvolvido por <code>Gabriel Monteiro</code> | Estudante de Ciência da Computação @ <a href="https://portal.cin.ufpe.br/">CIn - UFPE</a>
</div>]]></content><author><name></name></author><summary type="html"><![CDATA[App que transforma o que você quer guardar em cartões e traz cada um de volta no momento certo, até ficar na memória de vez]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://krosct.github.io/assets/img/projects/i_want_to_remember/iwtr-logo.png" /><media:content medium="image" url="https://krosct.github.io/assets/img/projects/i_want_to_remember/iwtr-logo.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Servissues</title><link href="https://krosct.github.io/project-servissues/" rel="alternate" type="text/html" title="Servissues" /><published>2026-10-16T00:00:00+00:00</published><updated>2026-10-16T00:00:00+00:00</updated><id>https://krosct.github.io/project-servissues</id><content type="html" xml:base="https://krosct.github.io/project-servissues/"><![CDATA[<div align="center">

  <img src="https://krosct.github.io/assets/img/projects/servissues/servissues-logo.png" alt="Servissues" width="150" />

  <p align="center">
    <strong>Issues resolvidas enquanto você toma café.</strong>
    <br />
    Tudo se resolve em alguns minutos e com um clique seu.
  </p>
</div>

<hr />

<h2 id="-a-ideia">💡 A ideia</h2>

<p>A issue está aberta. Você sabe o que precisa ser feito, mas tem que parar tudo, abrir o projeto, entender o código de novo, corrigir, testar e abrir o pull request. E a lista só cresce.</p>

<p>O <strong>Servissues</strong> faz esse trabalho por você. Abriu uma issue? Um agente de IA pega o problema, escreve a correção, roda os testes do próprio projeto e abre o pull request. Você só recebe o resultado no Telegram e decide.</p>

<p>Ele é o parceiro do <a href="https://krosct.github.io/project-tellissues/">TellIssues</a>: você <strong>fala</strong> o problema, o TellIssues cria a issue e o Servissues <strong>resolve</strong>. Do áudio ao código pronto, sem abrir o computador.</p>

<h2 id="-como-funciona">🎬 Como funciona</h2>

<p><strong>1. Abra a issue.</strong> Pelo TellIssues, com um áudio, ou direto no GitHub. O bot confirma na hora que ela entrou na fila.</p>

<p><strong>2. O agente trabalha.</strong> Ele lê o projeto, entende o problema, faz a correção e testa usando o próprio CI do repositório.</p>

<p><strong>3. Você recebe o relatório.</strong> No Telegram chega um resumo do que foi feito, com o link do pull request e três botões: <strong>Aprovar merge</strong>, <strong>Pedir alteração</strong> ou <strong>Cancelar</strong>.</p>

<p><strong>4. Um clique e pronto.</strong> Aprovou, está na branch principal. Pediu alteração, o agente refaz e manda de novo.</p>

<h2 id="-por-que-é-diferente">✨ Por que é diferente</h2>

<ul>
  <li><strong>☕ Trabalha enquanto você vive:</strong> a fila anda sozinha, uma issue depois da outra.</li>
  <li><strong>👆 Nada entra sem você:</strong> o merge só acontece com o seu clique, e só da versão exata que você viu no relatório.</li>
  <li><strong>📱 Tudo pelo Telegram:</strong> veja a fila, o andamento de cada issue, o histórico, os pull requests abertos e quanto a IA custou no dia e no mês.</li>
  <li><strong>🔁 Conversa até ficar certo:</strong> não gostou? Peça alteração e o agente ajusta na mesma branch.</li>
  <li><strong>🧩 Troque as peças:</strong> o modelo de IA, o canal e o repositório são encaixes, então dá para mudar sem reescrever o resto.</li>
</ul>

<h2 id="-feito-para-confiar">🔒 Feito para confiar</h2>

<p>Deixar uma IA mexer no seu código pede cuidado, e a segurança não depende da boa vontade do agente. Só as <strong>suas</strong> issues viram tarefa. O agente trabalha isolado, sem acesso à internet nem às suas chaves, e tudo o que ele devolve é conferido antes de virar commit. No fim, quem decide é sempre você.</p>

<h2 id="-do-zero-à-produção">🚀 Do zero à produção</h2>

<p>Um projeto individual, ponta a ponta: do agente de IA à integração com o GitHub, do bot do Telegram ao deploy automático em servidor próprio, rodando leve em uma máquina de 1 GB de memória.</p>

<p align="center">
  <strong>Feito com</strong> Python · GitHub App · Telegram · IA generativa
</p>

<hr />

<div align="center">
  Desenvolvido por <code>Gabriel Monteiro</code> | Estudante de Ciência da Computação @ <a href="https://portal.cin.ufpe.br/">CIn - UFPE</a>
</div>]]></content><author><name></name></author><summary type="html"><![CDATA[Agente de IA que resolve as issues do GitHub sozinho e só faz o merge depois do seu clique no Telegram]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://krosct.github.io/assets/img/projects/servissues/servissues-logo.png" /><media:content medium="image" url="https://krosct.github.io/assets/img/projects/servissues/servissues-logo.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Olhos Falantes</title><link href="https://krosct.github.io/project-olhos-falantes/" rel="alternate" type="text/html" title="Olhos Falantes" /><published>2026-10-11T00:00:00+00:00</published><updated>2026-10-11T00:00:00+00:00</updated><id>https://krosct.github.io/project-olhos-falantes</id><content type="html" xml:base="https://krosct.github.io/project-olhos-falantes/"><![CDATA[<div align="center">

  <img src="https://krosct.github.io/assets/img/projects/olhos_falantes/olho_wide.jpg" alt="Broche de um olho roxo e azul com uma boca aberta, como se estivesse falando" width="100%" />

  <p align="center">
    <b>Aponte. Fotografe. Ouça.</b>
    <br />
    Um app que olha por você e conta, em voz alta, o que está na sua frente.
  </p>
</div>

<hr />

<h2 id="-o-que-tem-aqui-na-minha-frente">📖 O que tem aqui na minha frente?</h2>

<p>Uma mesa cheia de coisas. Um cômodo desconhecido. Um papel que chegou pelo correio. Para quem não enxerga, ou enxerga pouco, perguntas simples como essas viram um obstáculo do dia a dia.</p>

<p>Muitos aplicativos até tentam ajudar, mas escondem o botão certo atrás de menus, enchem a tela de anúncios ou respondem com um textão que ninguém tem paciência de ouvir. <strong>O Olhos Falantes responde em segundos, em português claro, e sem precisar enxergar a tela.</strong></p>

<h2 id="-como-funciona">🎬 Como funciona</h2>

<ol>
  <li><strong>Toque em Começar.</strong> Sem cadastro.</li>
  <li><strong>Tire uma foto.</strong> Um botão grande, fácil de achar com o leitor de tela. Ou escolha uma foto que já está no celular.</li>
  <li><strong>Ouça a cena.</strong> Em poucos segundos chega uma descrição curta: o que tem ali, onde as coisas estão e os textos que aparecem. Quer ouvir de novo? É só tocar outra vez.</li>
</ol>

<h2 id="-por-que-você-vai-gostar">✨ Por que você vai gostar</h2>

<ul>
  <li><strong>🦮 Feito para quem não vê a tela:</strong> funciona do começo ao fim com o TalkBack. Botões enormes, alto contraste e cada controle com nome claro. Nada depende de cor, de mouse ou de olhar para a tela.</li>
  <li><strong>🗣️ Nunca te deixa no silêncio:</strong> enquanto a foto é analisada, o app avisa o que está acontecendo: “Analisando…”, “Pronto”.</li>
  <li><strong>✂️ Direto ao ponto:</strong> a descrição fala primeiro do que importa. Quer mais detalhes? Escolha entre <strong>Curta</strong>, <strong>Média</strong>, <strong>Longa</strong> ou <strong>Total</strong>.</li>
  <li><strong>🤔 Honesto quando não tem certeza:</strong> foto escura, tremida ou cortada? Em vez de inventar, ele pede outra foto.</li>
  <li><strong>🎙️ A voz que você preferir:</strong> a voz do próprio celular ou uma das vozes em português do app, com o texto sempre na tela também.</li>
  <li><strong>📱 No celular e no computador:</strong> funciona no Chrome do Android e no navegador do computador, e pode ser instalado como app.</li>
</ul>

<h2 id="-feito-com-respeito-a-você">🔒 Feito com respeito a você</h2>

<ul>
  <li>A câmera só liga quando você toca no botão.</li>
  <li>A foto é usada para a descrição e descartada, e os metadados (como localização) são removidos antes do envio.</li>
  <li>Nunca diz quem é uma pessoa, nem idade, gênero ou emoção. No máximo, conta onde ela está e o que está fazendo, se você permitir.</li>
  <li>Nada de contas, cadastro, anúncios ou histórico na nuvem.</li>
</ul>

<h2 id="️-engenharia">🏗️ Engenharia</h2>

<ul>
  <li><strong>Proxy de visão em FastAPI:</strong> a chave da API fica só no backend. O proxy recebe a foto, remove metadados, aplica limite de requisições e envia a imagem a um modelo de visão-linguagem compatível com a API da OpenAI, com <em>prompt</em> fixo e níveis de detalhe.</li>
  <li><strong>Limiar de confiança:</strong> abaixo de um valor configurável, o app responde “não sei” em vez de inventar.</li>
  <li><strong>Texto para fala em três camadas:</strong> voz do aparelho (Web Speech API), vozes neurais locais com <strong>Piper</strong> geradas no servidor, ou vozes na nuvem, com cache de áudio para as frases fixas.</li>
  <li><strong>Acessibilidade como requisito:</strong> regiões <em>aria-live</em> para anunciar o estado, foco gerenciado e controles grandes pensados para leitores de tela.</li>
  <li><strong>PWA instalável</strong>, com testes automatizados no frontend (Vitest) e no backend (pytest).</li>
</ul>

<h2 id="️-tecnologias-utilizadas">🛠️ Tecnologias Utilizadas</h2>

<ul>
  <li><strong>Frontend:</strong> <a href="https://www.typescriptlang.org/">TypeScript</a>, <a href="https://vitejs.dev/">Vite</a>, <a href="https://vite-pwa-org.netlify.app/">vite-plugin-pwa</a></li>
  <li><strong>Backend:</strong> <a href="https://www.python.org/">Python</a>, <a href="https://fastapi.tiangolo.com/">FastAPI</a>, <a href="https://www.python-httpx.org/">HTTPX</a>, <a href="https://docs.pydantic.dev/">Pydantic</a></li>
  <li><strong>IA:</strong> modelo de visão-linguagem via API compatível com OpenAI, <a href="https://github.com/rhasspy/piper">Piper TTS</a></li>
  <li><strong>Qualidade:</strong> <a href="https://vitest.dev/">Vitest</a>, <a href="https://pytest.org/">pytest</a>, <a href="https://eslint.org/">ESLint</a>, <a href="https://docs.astral.sh/ruff/">Ruff</a></li>
</ul>

<blockquote>
  <p>O Olhos Falantes é uma ajuda para o dia a dia, não substitui a orientação de um profissional. Não use para ler documentos confidenciais, cartões ou dados bancários, nem para decisões de saúde ou segurança.</p>
</blockquote>

<hr />

<div align="center">
  <img src="https://krosct.github.io/assets/img/projects/olhos_falantes/olho_closed.jpg" alt="O olho falante sorrindo, de boca aberta" width="220" />
  <br />
  <b>Aponte a câmera. O Olhos Falantes conta o resto. 👁️🗣️</b>
  <br /><br />
  Desenvolvido por <code>Gabriel Monteiro</code> | Estudante de Ciência da Computação @ <a href="https://portal.cin.ufpe.br/">CIn - UFPE</a>
</div>]]></content><author><name></name></author><summary type="html"><![CDATA[App acessível que fotografa uma cena e descreve em voz alta, em português, o que está na frente de quem não enxerga a tela]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://krosct.github.io/assets/img/projects/olhos_falantes/olho_wide.jpg" /><media:content medium="image" url="https://krosct.github.io/assets/img/projects/olhos_falantes/olho_wide.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Verde de Novo</title><link href="https://krosct.github.io/project-verde-de-novo/" rel="alternate" type="text/html" title="Verde de Novo" /><published>2026-10-11T00:00:00+00:00</published><updated>2026-10-11T00:00:00+00:00</updated><id>https://krosct.github.io/project-verde-de-novo</id><content type="html" xml:base="https://krosct.github.io/project-verde-de-novo/"><![CDATA[<div align="center">

  <img src="https://krosct.github.io/assets/img/projects/verde_de_novo/verde-de-novo.webp" alt="Verde de Novo" width="200" />

  <p align="center">
    <b>Sua planta não fala. Mas ela mostra.</b>
    <br />
    Tire uma foto da planta inteira e descubra quem ela é, o que merece atenção e o que fazer para ela voltar a crescer.
  </p>
</div>

<hr />

<h2 id="-ela-está-triste-e-você-não-sabe-por-quê">📖 Ela está triste e você não sabe por quê</h2>

<p>A folha amarelou. O caule ficou fino e comprido. A terra parece sempre molhada, ou sempre seca. Você pesquisa na internet e encontra dez respostas diferentes, cada uma mais confiante que a outra.</p>

<p>Aí você chuta. Rega mais. Ou rega menos. Muda de lugar. E às vezes piora. <strong>O Verde de Novo olha com calma antes de responder.</strong></p>

<blockquote>
  <p>🚧 <strong>Em construção:</strong> a interface e o fluxo de análise estão prontos, mas o reconhecimento de verdade ainda está sendo conectado. Por enquanto as respostas são de demonstração.</p>
</blockquote>

<h2 id="-como-funciona">🎬 Como funciona</h2>

<ol>
  <li><strong>Fotografe a planta inteira.</strong> Folhas, caule e terra aparecendo, com boa luz. Pela câmera ou pela galeria.</li>
  <li><strong>Ele olha parte por parte.</strong> Primeiro confere se a foto está boa, depois tenta reconhecer a espécie e então observa cada parte visível: folhas, caule, terra e raízes.</li>
  <li><strong>Você recebe o que fazer.</strong> Os pontos de atenção, o que levou a cada um e sugestões simples de cuidado para aquela planta.</li>
</ol>

<h2 id="-por-que-você-vai-gostar">✨ Por que você vai gostar</h2>

<ul>
  <li><strong>🌿 Descobre quem ela é:</strong> costela-de-adão? Jiboia? Espada-de-são-jorge? Ele mostra a espécie mais provável e até duas alternativas.</li>
  <li><strong>🔍 Olha cada parte, não só a folha:</strong> folha manchada conta uma história, terra encharcada conta outra. Juntando as pistas de cada parte, ele chega a respostas mais certeiras.</li>
  <li><strong>🧾 Mostra o porquê:</strong> cada ponto de atenção vem com o que foi visto na foto, para você conferir com os próprios olhos.</li>
  <li><strong>💧 Dicas para ela crescer melhor:</strong> luz, rega e umidade, com sugestões práticas pensadas para a espécie e sem produto nenhum.</li>
  <li><strong>🤝 Honesto quando não sabe:</strong> foto ruim? Ele pede outra. Não reconheceu a espécie com segurança? Ele diz, e dá cuidados gerais.</li>
  <li><strong>📱 No computador e no celular:</strong> funciona no navegador e no Android, e pode ser instalado como app.</li>
</ul>

<h2 id="-feito-com-respeito-à-sua-privacidade">🔒 Feito com respeito à sua privacidade</h2>

<ul>
  <li>A câmera só liga quando você toca no botão, e um aviso de privacidade aparece antes de qualquer envio.</li>
  <li>Nenhuma foto é guardada, nem no aparelho, nem no servidor.</li>
  <li>Metadados da foto, como localização, são apagados antes da análise.</li>
  <li>Sem contas, sem cadastro, sem histórico na nuvem.</li>
</ul>

<h2 id="️-engenharia">🏗️ Engenharia</h2>

<ul>
  <li><strong>Pipeline de análise em etapas:</strong> checagem de qualidade da foto, reconhecimento da espécie e observação de cada parte da planta, cada etapa com seu próprio limiar de confiança. Uma camada de decisão combina as observações em pontos de atenção e cuidados.</li>
  <li><strong>Proxy em FastAPI:</strong> a chave do serviço de visão fica só no backend, que também valida e limita o tamanho das imagens e aplica limite de requisições por cliente.</li>
  <li><strong>Fornecedor de visão plugável:</strong> a interface do fornecedor é isolada, com um <em>stub</em> offline para desenvolvimento e testes enquanto o serviço real é integrado.</li>
  <li><strong>Preparo da imagem no cliente:</strong> a foto é redimensionada e recodificada antes do envio.</li>
  <li><strong>PWA instalável</strong>, com testes automatizados no frontend (Vitest) e no backend (pytest).</li>
</ul>

<h2 id="️-tecnologias-utilizadas">🛠️ Tecnologias Utilizadas</h2>

<ul>
  <li><strong>Frontend:</strong> <a href="https://www.typescriptlang.org/">TypeScript</a>, <a href="https://vitejs.dev/">Vite</a>, <a href="https://vite-pwa-org.netlify.app/">vite-plugin-pwa</a></li>
  <li><strong>Backend:</strong> <a href="https://www.python.org/">Python</a>, <a href="https://fastapi.tiangolo.com/">FastAPI</a>, <a href="https://python-pillow.org/">Pillow</a></li>
  <li><strong>Qualidade:</strong> <a href="https://vitest.dev/">Vitest</a>, <a href="https://pytest.org/">pytest</a>, <a href="https://eslint.org/">ESLint</a>, <a href="https://docs.astral.sh/ruff/">Ruff</a></li>
</ul>

<blockquote>
  <p>O Verde de Novo dá pistas para você observar e cuidar melhor. <strong>Não é diagnóstico.</strong> Ele não indica produtos nem venenos. Se a planta estiver muito mal, procure uma loja de jardinagem ou um especialista.</p>
</blockquote>

<hr />

<div align="center">
  <b>Uma foto. Um olhar atento. Uma planta verde de novo. 🌱</b>
  <br /><br />
  Desenvolvido por <code>Gabriel Monteiro</code> | Estudante de Ciência da Computação @ <a href="https://portal.cin.ufpe.br/">CIn - UFPE</a>
</div>]]></content><author><name></name></author><summary type="html"><![CDATA[App que analisa a foto de uma planta inteira, reconhece a espécie, observa cada parte e sugere cuidados para ela voltar a crescer]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://krosct.github.io/assets/img/projects/verde_de_novo/verde-de-novo.webp" /><media:content medium="image" url="https://krosct.github.io/assets/img/projects/verde_de_novo/verde-de-novo.webp" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Tartaruguinha</title><link href="https://krosct.github.io/project-tartaruguinha/" rel="alternate" type="text/html" title="Tartaruguinha" /><published>2026-10-09T00:00:00+00:00</published><updated>2026-10-09T00:00:00+00:00</updated><id>https://krosct.github.io/project-tartaruguinha</id><content type="html" xml:base="https://krosct.github.io/project-tartaruguinha/"><![CDATA[<div align="center">

  <img src="https://krosct.github.io/assets/img/projects/tartaruguinha/tartaruguinha.jpg" alt="Tartaruguinha fazendo joinha na frente do computador" width="360" />

  <p align="center">
    <b>Sua postura agradece. Seu pescoço também.</b>
    <br />
    Um coach de postura que mora no seu navegador e avisa, na hora, quando você começa a se curvar.
  </p>
</div>

<hr />

<h2 id="-você-só-percebe-quando-já-está-doendo">📖 Você só percebe quando já está doendo</h2>

<p>Você começa o dia sentado direitinho. Três horas e duas reuniões depois, está dobrado sobre o teclado, com a cabeça projetada para a frente e os ombros caídos. Feito uma tartaruguinha.</p>

<p>Ninguém percebe isso sozinho. Quando o pescoço reclama, o estrago do dia já está feito. <strong>A Tartaruguinha percebe por você.</strong></p>

<table>
  <tr>
    <th align="center">😩 Antes 🚫</th>
    <th align="center">😎 Depois ✅</th>
  </tr>
  <tr>
    <td><img src="https://krosct.github.io/assets/img/projects/tartaruguinha/antes.jpg" alt="Tartaruga com o pescoço esticado em direção ao monitor" width="100%" /></td>
    <td><img src="https://krosct.github.io/assets/img/projects/tartaruguinha/depois.jpg" alt="Tartaruga sentada com a coluna reta e a cabeça erguida" width="100%" /></td>
  </tr>
  <tr>
    <td align="center"><em>14h37. Pescoço a meio caminho do monitor. Ninguém avisou.</em></td>
    <td align="center"><em>14h38. Um “ding-dong” depois. Coluna reta, dignidade restaurada.</em></td>
  </tr>
</table>

<h2 id="-como-funciona">🎬 Como funciona</h2>

<ol>
  <li><strong>Ligue a Tartaruguinha</strong> no navegador e clique em <strong>Iniciar</strong>. Não precisa de cadastro.</li>
  <li><strong>Trabalhe normalmente.</strong> A webcam observa sua postura em tempo real, em silêncio.</li>
  <li><strong>Curvou? Ela avisa.</strong> Um toque suave, um brilho na tela e uma notificação. Endireitou? Ela volta a ficar quietinha.</li>
</ol>

<h2 id="-por-que-você-vai-gostar">✨ Por que você vai gostar</h2>

<ul>
  <li><strong>⚡ Feedback na hora:</strong> nada de lembrete de hora em hora. O aviso chega no momento em que você se curva, enquanto ainda é fácil corrigir.</li>
  <li><strong>🔒 Sua imagem nunca sai do computador:</strong> toda a análise acontece no próprio aparelho. Nenhuma foto ou vídeo é enviado, gravado ou guardado.</li>
  <li><strong>👀 Você vê o que ela vê:</strong> um esqueleto desenhado sobre a imagem mostra o que está sendo observado. Verde é postura boa, vermelho é curvado, cinza é tronco fora do quadro e amarelo é incerteza.</li>
  <li><strong>🤫 Gentil, não chata:</strong> depois de um aviso, ela espera um pouco antes de avisar de novo, e um piscar de olhos ou uma sombra não disparam alarme falso.</li>
  <li><strong>🎛️ Do seu jeito:</strong> rigor, volume e frequência dos avisos ajustáveis em segundos, e ela lembra das suas preferências.</li>
  <li><strong>🪟 Continua de olho em segundo plano:</strong> troque de aba ou de programa e ela segue avisando, ou acompanhe por uma janelinha flutuante (<em>Picture-in-Picture</em>).</li>
  <li><strong>⏱️ Sessões e histórico:</strong> cronômetro, contador de alertas, pausar e retomar, e um histórico com o tempo em boa postura e a evolução de cada sessão.</li>
  <li><strong>📱 No computador e no celular:</strong> funciona no navegador e no Android, e pode ser instalada como app.</li>
</ul>

<h2 id="️-engenharia">🏗️ Engenharia</h2>

<ul>
  <li><strong>Visão computacional 100% no cliente:</strong> detecção de pose com <strong>MediaPipe Pose Landmarker</strong> rodando no navegador, sem nenhum servidor envolvido.</li>
  <li><strong>Classificação de postura por regras sobre os pontos do corpo:</strong> pontos com baixa visibilidade são descartados e os avisos têm intervalo mínimo entre si, evitando alarmes falsos.</li>
  <li><strong>PWA instalável</strong> com funcionamento offline e ícones gerados a partir do emoji da tartaruga.</li>
  <li><strong>Privacidade por design:</strong> câmera só liga com ação do usuário, indicador de monitoramento sempre visível e histórico guardado apenas no navegador.</li>
  <li><strong>Qualidade:</strong> testes automatizados com Vitest, lint, checagem de tipos e pull requests com revisão.</li>
</ul>

<h2 id="️-tecnologias-utilizadas">🛠️ Tecnologias Utilizadas</h2>

<ul>
  <li><strong>Linguagem:</strong> <a href="https://www.typescriptlang.org/">TypeScript</a></li>
  <li><strong>Visão computacional:</strong> <a href="https://ai.google.dev/edge/mediapipe/solutions/vision/pose_landmarker">MediaPipe Tasks Vision</a></li>
  <li><strong>Build e PWA:</strong> <a href="https://vitejs.dev/">Vite</a>, <a href="https://vite-pwa-org.netlify.app/">vite-plugin-pwa</a></li>
  <li><strong>Qualidade:</strong> <a href="https://vitest.dev/">Vitest</a>, <a href="https://eslint.org/">ESLint</a></li>
</ul>

<blockquote>
  <p>A Tartaruguinha é uma ajuda para criar um hábito melhor, não um aconselhamento médico. Se você sente dores frequentes, procure um profissional de saúde.</p>
</blockquote>

<hr />

<div align="center">
  <img src="https://krosct.github.io/assets/img/projects/tartaruguinha/perfil.jpg" alt="Tartaruguinha sorrindo e fazendo joinha" width="220" />
  <br />
  <b>Endireita essa coluna. A Tartaruguinha está de olho. 🐢</b>
  <br /><br />
  Desenvolvido por <code>Gabriel Monteiro</code> | Estudante de Ciência da Computação @ <a href="https://portal.cin.ufpe.br/">CIn - UFPE</a>
</div>]]></content><author><name></name></author><summary type="html"><![CDATA[Coach de postura que roda no navegador e avisa, na hora, quando você começa a se curvar em frente à tela]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://krosct.github.io/assets/img/projects/tartaruguinha/tartaruguinha.jpg" /><media:content medium="image" url="https://krosct.github.io/assets/img/projects/tartaruguinha/tartaruguinha.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">TellIssues</title><link href="https://krosct.github.io/project-tellissues/" rel="alternate" type="text/html" title="TellIssues" /><published>2026-10-07T00:00:00+00:00</published><updated>2026-10-07T00:00:00+00:00</updated><id>https://krosct.github.io/project-tellissues</id><content type="html" xml:base="https://krosct.github.io/project-tellissues/"><![CDATA[<div align="center">

  <img src="https://krosct.github.io/assets/img/projects/tellissues/tellissues-logo.png" alt="TellIssues" width="150" />

  <p align="center">
    <strong>Fale e pronto.</strong>
    <br />
    Mande um áudio ou uma mensagem no Telegram e receba uma issue pronta no GitHub.
  </p>
</div>

<hr />

<h2 id="-a-ideia">💡 A ideia</h2>

<p>Sabe quando você acha um bug no meio do dia, longe do computador, e pensa “depois eu anoto” e depois esquece?</p>

<p>O <strong>TellIssues</strong> acaba com isso. Você descreve o problema do jeito que falaria com um colega — por texto ou por áudio — e ele cuida do resto:</p>

<blockquote>
  <p>🎙️ <em>“faz uma issue no meu app de controle de validade relantando que na tela principal, o botão de adicionar produto não está aparencendo quando abro no meu celular”</em></p>
</blockquote>

<p>Segundos depois, a issue está no GitHub: no repositório certo, com título claro, descrição bem escrita e as labels do projeto. Criada na <strong>sua</strong> conta, como se você mesmo tivesse sentado para escrever.</p>

<h2 id="-veja-em-ação">🎬 Veja em ação</h2>

<p><strong>1. Diga oi.</strong> Um <code class="language-plaintext highlighter-rouge">/start</code> e o bot já está pronto, conectado à sua conta do GitHub.</p>

<p align="center">
  <img src="https://krosct.github.io/assets/img/projects/tellissues/start_bot.png" alt="Conversa inicial com o bot no Telegram, mostrando o menu e as configurações" width="600" />
</p>

<p><strong>2. Mande um áudio.</strong> Treze segundos falando do problema. O bot transcreve, encontra o repositório e mostra o que vai criar para você conferir.</p>

<p align="center">
  <img src="https://krosct.github.io/assets/img/projects/tellissues/audio_to_issue.png" alt="Áudio enviado ao bot, transcrito e transformado em um rascunho de issue e depois na issue criada" width="600" />
</p>

<p><strong>3. Pronto.</strong> A issue aparece no GitHub com descrição, passos para reproduzir, comportamento esperado e até uma proposta de solução.</p>

<p align="center">
  <img src="https://krosct.github.io/assets/img/projects/tellissues/issue_created.png" alt="Issue criada no GitHub com descrição, passos para reproduzir, comportamento esperado e proposta" width="700" />
</p>

<h2 id="-por-que-é-diferente">✨ Por que é diferente</h2>

<ul>
  <li><strong>🗣️ Fala natural:</strong> nada de comandos decorados ou formulários. É só contar o que aconteceu.</li>
  <li><strong>🎯 Sabe para onde vai:</strong> entende de qual projeto você está falando, sem você precisar dizer o nome exato.</li>
  <li><strong>✍️ Escreve por você:</strong> transforma um relato solto numa issue organizada e pronta para alguém resolver.</li>
  <li><strong>👀 Você no controle:</strong> antes de publicar, mostra um resumo para você confirmar, trocar o repositório ou corrigir algo com uma mensagem.</li>
  <li><strong>↩️ Mudou de ideia?</strong> Desfaz com um toque.</li>
  <li><strong>💬 Conversa quando precisa:</strong> se faltar alguma informação importante, ele pergunta.</li>
</ul>

<h2 id="-feito-para-confiar">🔒 Feito para confiar</h2>

<p>Cada pessoa usa a própria conta do GitHub e escolhe quanto acesso quer dar — inclusive só a repositórios específicos. As credenciais são protegidas, o conteúdo das suas mensagens não fica guardado e você decide por quanto tempo o bot lembra de você.</p>

<h2 id="-do-zero-à-produção">🚀 Do zero à produção</h2>

<p>Um projeto individual, ponta a ponta: da conversa com o usuário à inteligência artificial, do login seguro ao deploy automático em servidor próprio. Cada mudança é testada e publicada sozinha, sem tirar o bot do ar.</p>

<p align="center">
  <strong>Feito com</strong> Python · Telegram · OpenRouter · GitHub
</p>

<hr />

<div align="center">
  Desenvolvido por <code>Gabriel Monteiro</code> | Estudante de Ciência da Computação @ <a href="https://portal.cin.ufpe.br/">CIn - UFPE</a>
</div>]]></content><author><name></name></author><summary type="html"><![CDATA[Fale o problema no Telegram e receba uma issue pronta no GitHub, em segundos]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://krosct.github.io/assets/img/projects/tellissues/tellissues-logo.png" /><media:content medium="image" url="https://krosct.github.io/assets/img/projects/tellissues/tellissues-logo.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">O Ar Live</title><link href="https://krosct.github.io/project-o-ar-live/" rel="alternate" type="text/html" title="O Ar Live" /><published>2026-10-05T00:00:00+00:00</published><updated>2026-10-05T00:00:00+00:00</updated><id>https://krosct.github.io/project-o-ar-live</id><content type="html" xml:base="https://krosct.github.io/project-o-ar-live/"><![CDATA[<div align="center">

  <img src="https://krosct.github.io/assets/img/projects/o_ar_live/01-abertura.jpg" alt="O Ar Live — Guerra e Conquista" width="100%" />

  <p align="center">
    <b>Um mundo inteiro em guerra, ao vivo. E você comanda pelo chat.</b>
    <br />
    Projeto individual: game design, simulação, renderização 3D e transmissão.
  </p>
</div>

<hr />

<h2 id="-sobre-o-jogo">📖 Sobre o Jogo</h2>

<p>O planeta gira na tela. Oito continentes, 72 territórios e até <strong>9 comandantes</strong> disputando cada pedaço de terra. Cada ordem sai de uma mensagem no chat da live: sem instalar nada, sem baixar nada. Você digita, e o mundo obedece.</p>

<p>Monte sua economia, treine seus soldados, faça aliados (e traia na hora certa), declare guerra e veja seu exército cruzar o globo rumo ao território inimigo. Quem dominar <strong>3 regiões</strong> primeiro vence a rodada. Um minuto depois, um mundo novo nasce e a disputa recomeça.</p>

<blockquote>
  <p>⚔️ <strong>Entre na guerra em 10 segundos:</strong> abra a live e digite <code class="language-plaintext highlighter-rouge">!@entrar seunome</code> no chat. Você recebe <strong>8 territórios espalhados pelo mundo</strong>, cada um com um milhão de pessoas esperando suas ordens, e sua cor aparece no globo na hora.</p>
</blockquote>

<p><img src="https://krosct.github.io/assets/img/projects/o_ar_live/04-globo.jpg" alt="O globo em jogo, com o painel do jogador, o painel do território e o letreiro de eventos" width="100%" /></p>

<h2 id="-do-lobby-à-vitória">🎬 Do lobby à vitória</h2>

<p>Toda partida abre com <strong>1 minuto de espera</strong> para os jogadores entrarem. Vagas que ninguém pegar viram bots, e eles jogam para ganhar.</p>

<p><img src="https://krosct.github.io/assets/img/projects/o_ar_live/02-jogadores.jpg" alt="Jogadores desta partida" width="100%" /></p>

<p><img src="https://krosct.github.io/assets/img/projects/o_ar_live/03-como-jogar.jpg" alt="Tela de como jogar, com ordens, recursos, profissões e construções" width="100%" /></p>

<h2 id="-o-que-você-vai-viver">✨ O que você vai viver</h2>

<ul>
  <li><strong>🌍 Um globo vivo:</strong> a Terra gira de verdade e passeia pelos continentes. Cada território ganha a cor de quem manda nele, e as tropas e caravanas cruzam o mapa em tempo real, como rotas táticas na cor de cada exército.</li>
  <li><strong>⚔️ Guerra de verdade:</strong> ataque vizinhos, ocupe terras vazias e reúna tropas de vários territórios num só golpe. Armas fortalecem o ataque, proteção segura a defesa, e uma defesa preparada pode virar o jogo.</li>
  <li><strong>🤝 Alianças, doações e traições:</strong> peça aliança, mande soldados para salvar um aliado em apuros… ou rompa o pacto quando ele ficar forte demais. Na diplomacia, todo mundo é amigo até deixar de ser.</li>
  <li><strong>💰 Uma economia para dominar:</strong> trabalhadores juntam mantimentos, cozinheiros fazem comida, mecânicos fazem transporte, médicos curam e engenheiros erguem proteção. Faltou comida? Seu povo passa fome. Sobrou? Sua população cresce. E dá para negociar recursos com outros jogadores.</li>
  <li><strong>🏗️ Construa o seu império:</strong> hospitais, quartéis, escolas, restaurantes, oficinas e canteiros de obras, cada um com uma vantagem que cresce junto com a sua população.</li>
  <li><strong>🌋 A natureza não escolhe lado:</strong> terremotos, erupções, pandemias, ciclones e tsunamis podem atingir a região em destaque a qualquer momento. Quem se espalha pelo mundo e guarda estoques sobrevive; quem bobeia perde tudo.</li>
  <li><strong>🤖 Bots que jogam para vencer:</strong> eles cuidam da economia, montam exército, fazem pactos, traem e declaram guerra, com as mesmas ordens e os mesmos limites que você.</li>
  <li><strong>📢 Tudo no letreiro:</strong> ataques, batalhas, alianças, traições, trocas e eliminações. O letreiro conta a história da partida em tempo real, na cor de cada jogador.</li>
</ul>

<h2 id="-momentos-de-glória">🏆 Momentos de glória</h2>

<p>Conquistou um território? Dominou um continente inteiro? Eliminou um rival? Todo mundo vai ver sua glória!</p>

<p><img src="https://krosct.github.io/assets/img/projects/o_ar_live/05-conquista.jpg" alt="Mini-região conquistada" width="100%" /></p>

<p><img src="https://krosct.github.io/assets/img/projects/o_ar_live/06-dominio.jpg" alt="Nova região conquistada" width="100%" /></p>

<p><img src="https://krosct.github.io/assets/img/projects/o_ar_live/07-desastre.jpg" alt="Erupção vulcânica atingindo uma região" width="100%" /></p>

<p><img src="https://krosct.github.io/assets/img/projects/o_ar_live/08-eliminacao.jpg" alt="Jogador eliminado" width="100%" /></p>

<p><img src="https://krosct.github.io/assets/img/projects/o_ar_live/09-vitoria.jpg" alt="Tela de vitória" width="100%" /></p>

<h2 id="-suas-primeiras-ordens">🎮 Suas primeiras ordens</h2>

<table>
  <thead>
    <tr>
      <th>Quero…</th>
      <th>Digite no chat</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Entrar no jogo</td>
      <td><code class="language-plaintext highlighter-rouge">!@entrar ana</code></td>
    </tr>
    <tr>
      <td>Mover gente entre territórios meus</td>
      <td><code class="language-plaintext highlighter-rouge">!@mover 50k AN1 AN3</code></td>
    </tr>
    <tr>
      <td>Atacar um território</td>
      <td><code class="language-plaintext highlighter-rouge">!@atacar E2 AN1:20k</code></td>
    </tr>
    <tr>
      <td>Pedir aliança</td>
      <td><code class="language-plaintext highlighter-rouge">!@aliar beto</code></td>
    </tr>
    <tr>
      <td>Mandar soldados para um aliado</td>
      <td><code class="language-plaintext highlighter-rouge">!@doar 10k AN1 E2</code></td>
    </tr>
    <tr>
      <td>Declarar guerra</td>
      <td><code class="language-plaintext highlighter-rouge">!@guerra beto</code></td>
    </tr>
    <tr>
      <td>Preparar a defesa</td>
      <td><code class="language-plaintext highlighter-rouge">!@defender AN3</code></td>
    </tr>
    <tr>
      <td>Propor uma troca</td>
      <td><code class="language-plaintext highlighter-rouge">!@troca beto 50k mantimentos AN3 por 200k comida</code></td>
    </tr>
  </tbody>
</table>

<h2 id="️-engenharia">🏗️ Engenharia</h2>

<ul>
  <li><strong>Simulação e renderização separadas:</strong> o simulador do mundo e o renderizador rodam em processos diferentes. A cada segundo simulado, o simulador publica um retrato do mundo via <strong>Redis</strong>, e o renderizador só desenha esses retratos, interpolando os movimentos para manter tudo fluido.</li>
  <li><strong>Globo 3D renderizado sem janela (<em>headless</em>)</strong> com <strong>Panda3D</strong> e transmitido ao vivo pelo <strong>FFmpeg</strong>.</li>
  <li><strong>Chat como controle:</strong> ordens lidas do chat da <strong>Twitch</strong> e do <strong>YouTube</strong>, validadas e enfileiradas no Redis até o simulador.</li>
  <li><strong>Modelo populacional agregado:</strong> nada de um objeto por pessoa. Os contadores escalam até bilhões de habitantes sem perder desempenho.</li>
  <li><strong>Vários layouts de transmissão</strong> (roteiro, comando, destaque, cenas e clássico), trocados ao vivo por um <strong>painel de administração</strong> web.</li>
  <li><strong>Qualidade:</strong> testes automatizados com pytest (incluindo testes que garantem a separação entre simulação e renderização), lint, checagem de tipos e CI/CD no GitHub Actions, com <em>Conventional Commits</em> e versionamento semântico.</li>
</ul>

<h2 id="️-tecnologias-utilizadas">🛠️ Tecnologias Utilizadas</h2>

<ul>
  <li><strong>Linguagem:</strong> <a href="https://www.python.org/">Python</a></li>
  <li><strong>Motor 3D:</strong> <a href="https://www.panda3d.org/">Panda3D</a></li>
  <li><strong>Transmissão:</strong> <a href="https://ffmpeg.org/">FFmpeg</a> (RTMP para o YouTube)</li>
  <li><strong>Mensageria:</strong> <a href="https://redis.io/">Redis</a></li>
  <li><strong>Bibliotecas:</strong> <a href="https://numpy.org/">NumPy</a>, <a href="https://python-pillow.org/">Pillow</a>, <a href="https://docs.pydantic.dev/">Pydantic</a>, <a href="https://github.com/taizan-hokuto/pytchat">pytchat</a></li>
  <li><strong>Infraestrutura:</strong> <a href="https://www.docker.com/">Docker</a>, <a href="https://github.com/features/actions">GitHub Actions</a>, <a href="https://docs.astral.sh/uv/">uv</a></li>
  <li><strong>Qualidade:</strong> <a href="https://pytest.org/">pytest</a>, <a href="https://docs.astral.sh/ruff/">Ruff</a>, <a href="https://github.com/microsoft/pyright">Pyright</a></li>
</ul>

<hr />

<div align="center">
  <b>O mundo já está girando. Falta só a sua ordem.</b>
  <br />
  <code>!@entrar seunome</code>
  <br /><br />
  Desenvolvido por <code>Gabriel Monteiro</code> | Estudante de Ciência da Computação @ <a href="https://portal.cin.ufpe.br/">CIn - UFPE</a>
</div>]]></content><author><name></name></author><summary type="html"><![CDATA[Jogo de guerra e conquista transmitido ao vivo, em que até 9 comandantes disputam um globo 3D com ordens digitadas no chat da live]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://krosct.github.io/assets/img/projects/o_ar_live/01-abertura.jpg" /><media:content medium="image" url="https://krosct.github.io/assets/img/projects/o_ar_live/01-abertura.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Rotless</title><link href="https://krosct.github.io/project-rotless/" rel="alternate" type="text/html" title="Rotless" /><published>2026-09-29T00:00:00+00:00</published><updated>2026-09-29T00:00:00+00:00</updated><id>https://krosct.github.io/project-rotless</id><content type="html" xml:base="https://krosct.github.io/project-rotless/"><![CDATA[<div align="center">

  <img src="https://krosct.github.io/assets/img/projects/rotless/rotless-logo.png" alt="Rotless — Smart Pantry, Reduce Waste" width="150" />

  <p align="center">
    Despensa inteligente para reduzir o desperdício de alimentos (<i>"rot less"</i>).
    <br />
    Projeto individual full stack, do banco de dados à publicação em produção.
  </p>
</div>

<hr />

<h2 id="-sobre-o-projeto">📖 Sobre o Projeto</h2>

<p>O <strong>Rotless</strong> é um web app em que os moradores de uma casa registram os alimentos da despensa, com quantidade e data de validade. Todo dia o sistema confere o que está perto de vencer e avisa cada membro pelo <strong>Telegram</strong>, para que o alimento seja consumido antes de estragar.</p>

<p>A aplicação é composta por uma <strong>API REST em Laravel</strong> e uma <strong>SPA em React + TypeScript</strong>, e está em produção com deploy contínuo.</p>

<blockquote>
  <p>🌐 <strong>Acesse em <a href="https://rotless.gms.xyz.br">rotless.gms.xyz.br</a>.</strong> Para explorar sem criar conta, toque três vezes no escudo da tela de login e o app abre o modo demonstração.</p>
</blockquote>

<h2 id="-funcionalidades">✨ Funcionalidades</h2>

<ul>
  <li><strong>Casas compartilhadas:</strong> vários moradores dividem a mesma despensa, com convites e diferentes níveis de permissão.</li>
  <li><strong>Cadastro por código de barras:</strong> o scanner usa a câmera do celular e preenche os dados do produto a partir do <a href="https://world.openfoodfacts.org/">OpenFoodFacts</a>. Também dá para cadastrar produtos manualmente, com foto.</li>
  <li><strong>Dashboard de validade:</strong> os alimentos aparecem ordenados pela data de vencimento, com cores de urgência.</li>
  <li><strong>Alertas pelo Telegram:</strong> avisos diários sobre o que está perto de vencer.</li>
  <li><strong>Histórico da casa:</strong> uma linha do tempo com o que foi adicionado, consumido, descartado ou editado, e por quem.</li>
  <li><strong>Relatórios:</strong> consumo vs. desperdício ao longo do tempo, produtos mais desperdiçados e dicas de onde agir.</li>
  <li><strong>Modo demonstração:</strong> uma casa fictícia com histórico, para conhecer o app sem criar conta.</li>
</ul>

<h2 id="️-engenharia">🏗️ Engenharia</h2>

<ul>
  <li><strong>Processamento assíncrono:</strong> os alertas são enviados por filas e tarefas agendadas.</li>
  <li><strong>Testes automatizados</strong> no backend e no frontend, além de lint e análise estática.</li>
  <li><strong>CI/CD:</strong> cada alteração passa por testes automatizados antes de ser publicada, e a publicação volta sozinha para a versão anterior em caso de falha.</li>
  <li><strong>Processo:</strong> pull requests, <em>Conventional Commits</em>, versionamento semântico e <code class="language-plaintext highlighter-rouge">CHANGELOG</code>.</li>
</ul>

<h2 id="️-tecnologias-utilizadas">🛠️ Tecnologias Utilizadas</h2>

<ul>
  <li><strong>Backend:</strong> <a href="https://www.php.net/">PHP</a>, <a href="https://laravel.com/">Laravel</a></li>
  <li><strong>Frontend:</strong> <a href="https://react.dev/">React</a>, <a href="https://www.typescriptlang.org/">TypeScript</a>, <a href="https://vitejs.dev/">Vite</a>, <a href="https://tailwindcss.com/">Tailwind CSS</a>, <a href="https://tanstack.com/query">TanStack Query</a></li>
  <li><strong>Banco de dados:</strong> <a href="https://www.postgresql.org/">PostgreSQL</a></li>
  <li><strong>Infraestrutura:</strong> <a href="https://www.docker.com/">Docker</a>, <a href="https://github.com/features/actions">GitHub Actions</a></li>
  <li><strong>Testes:</strong> <a href="https://pestphp.com/">Pest</a>, <a href="https://vitest.dev/">Vitest</a></li>
  <li><strong>APIs externas:</strong> <a href="https://world.openfoodfacts.org/data">OpenFoodFacts</a>, <a href="https://core.telegram.org/bots/api">Telegram Bot API</a></li>
</ul>

<hr />

<div align="center">
  Desenvolvido por <code>Gabriel Monteiro</code> | Estudante de Ciência da Computação @ <a href="https://portal.cin.ufpe.br/">CIn - UFPE</a>
</div>]]></content><author><name></name></author><summary type="html"><![CDATA[Web app de despensa inteligente que controla a validade dos alimentos da casa e avisa pelo Telegram antes que estraguem]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://krosct.github.io/assets/img/projects/rotless/rotless-logo.png" /><media:content medium="image" url="https://krosct.github.io/assets/img/projects/rotless/rotless-logo.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">StoryGapBoard</title><link href="https://krosct.github.io/project-storygapboard/" rel="alternate" type="text/html" title="StoryGapBoard" /><published>2026-09-29T00:00:00+00:00</published><updated>2026-09-29T00:00:00+00:00</updated><id>https://krosct.github.io/project-storygapboard</id><content type="html" xml:base="https://krosct.github.io/project-storygapboard/"><![CDATA[<div align="center">

  <img src="https://krosct.github.io/assets/img/projects/storygapboard/home.jpg" alt="Página inicial do StoryGapBoard" width="100%" />

  <p align="center">
    <strong>Da ideia ao storyboard em um clique.</strong>
    <br />
    Escreva a história. O StoryGapBoard desenha cada cena.
  </p>
</div>

<hr />

<h2 id="-a-ideia">💡 A ideia</h2>

<p>A história já está na sua cabeça: o começo, a virada, o final. Mas entre a ideia e o papel existe um vazio. Desenhar cada cena leva horas, e nem todo mundo sabe ou tem tempo para desenhar.</p>

<p><strong>O StoryGapBoard preenche esse vazio.</strong> Você conta a história em poucas linhas e recebe de volta um storyboard pronto: uma imagem só, com todas as cenas lado a lado, na ordem certa.</p>

<p>Serve para roteiro de vídeo, curta, quadrinho, campanha, aula ou só para ver aquela ideia ganhar forma.</p>

<h2 id="-como-funciona">🎬 Como funciona</h2>

<p><strong>1. Escreva a história.</strong> Algumas frases bastam.</p>

<p><strong>2. Escolha o formato.</strong> Quantos quadros e como eles se organizam: 3 em linha, uma grade 2x2, 2x3, 3x2 e outras. Escolha também a proporção e o tamanho da imagem.</p>

<p><strong>3. Dê suas referências (se quiser).</strong> Anexe anotações com detalhes da história ou imagens do personagem, do cenário ou do estilo que você imagina.</p>

<p><strong>4. Gere e baixe.</strong> Em instantes o storyboard aparece e vai direto para o seu computador.</p>

<div align="center">
  <img src="https://krosct.github.io/assets/img/projects/storygapboard/generate.jpg" alt="Tela de geração do StoryGapBoard, com a história, a proporção e o layout dos quadros" width="100%" />
</div>

<h2 id="-por-que-você-vai-gostar">✨ Por que você vai gostar</h2>

<ul>
  <li><strong>🖼️ Uma história, uma imagem:</strong> todas as cenas no mesmo quadro, prontas para mostrar, imprimir ou compartilhar.</li>
  <li><strong>🎨 Do jeito que você imaginou:</strong> mande fotos e desenhos de referência e o storyboard segue o seu estilo, seus personagens e seus lugares.</li>
  <li><strong>📝 Contexto sem limite de criatividade:</strong> anotações em texto ajudam a IA a entender o mundo da sua história.</li>
  <li><strong>🤖 Você escolhe a IA:</strong> use o modelo de imagem que preferir, com a sua própria chave. Sem assinatura, sem intermediário cobrando a mais.</li>
  <li><strong>🎲 Gostou? Repita:</strong> guarde a “semente” de uma geração para refazer o mesmo resultado ou criar variações dele.</li>
  <li><strong>📱 No celular e no computador:</strong> é só abrir o navegador.</li>
</ul>

<h2 id="-sua-história-é-sua">🔒 Sua história é sua</h2>

<ul>
  <li>Sua chave fica só na aba aberta: nunca é guardada nem registrada.</li>
  <li>Textos e imagens enviados são processados na memória e descartados. Nada fica salvo no servidor.</li>
  <li>Fechou a aba, acabou. Sem conta, sem cadastro, sem anúncios.</li>
</ul>

<h2 id="-do-zero-à-produção">🚀 Do zero à produção</h2>

<p>Um projeto individual, ponta a ponta: da interface ao servidor que conversa com os modelos de imagem, com proteção contra abuso, testes e deploy automático em servidor próprio, com volta automática para a versão anterior se algo der errado.</p>

<p align="center">
  <strong>Feito com</strong> Python · TypeScript · React · IA generativa
</p>

<hr />

<div align="center">
  <b>Conte a história. O StoryGapBoard mostra. 🎬</b>
  <br /><br />
  Desenvolvido por <code>Gabriel Monteiro</code> | Estudante de Ciência da Computação @ <a href="https://portal.cin.ufpe.br/">CIn - UFPE</a>
</div>]]></content><author><name></name></author><summary type="html"><![CDATA[App que transforma uma história curta, com suas anotações e imagens de referência, em um storyboard completo, quadro a quadro]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://krosct.github.io/assets/img/projects/storygapboard/home.jpg" /><media:content medium="image" url="https://krosct.github.io/assets/img/projects/storygapboard/home.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Women Go Safe</title><link href="https://krosct.github.io/project-women-go-safe/" rel="alternate" type="text/html" title="Women Go Safe" /><published>2025-12-14T00:00:00+00:00</published><updated>2025-12-14T00:00:00+00:00</updated><id>https://krosct.github.io/project-women-go-safe</id><content type="html" xml:base="https://krosct.github.io/project-women-go-safe/"><![CDATA[<div align="center">
  <div class="badges">
    <img src="https://krosct.github.io/assets/img/projects/women_go_safe/WomenGoSafeLogo.png?v=1" alt="Logo Women Go Safe" class="img img-25" />
    <img src="https://krosct.github.io/assets/img/projects/women_go_safe/WomenGoSafeTitle.png?v=1" alt="Título Women Go Safe" class="img img-50" />
    <h3> Explore o mundo com confiança. Feito por mulheres, para mulheres. </h3> <div class="badges break"></div>
    <img src="https://img.shields.io/badge/React-19.0-61DAFB?style=for-the-badge&amp;logo=react" alt="https://reactjs.org/" />
    <img src="https://img.shields.io/badge/TypeScript-5.0-3178C6?style=for-the-badge&amp;logo=typescript" alt="https://www.typescriptlang.org/" />
    <img src="https://img.shields.io/badge/Vite-6.0-646CFF?style=for-the-badge&amp;logo=vite" alt="https://vitejs.dev/" />
    <img src="https://img.shields.io/badge/Tailwind_CSS-3.0-38B2AC?style=for-the-badge&amp;logo=tailwind-css" alt="https://tailwindcss.com/" />
    <img src="https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge" alt="LICENSE" />
  </div>
</div>

<p><a href="#-sobre-o-projeto">Sobre Nós</a> • <a href="#-funcionalidades">Funcionalidades</a> • <a href="#-tecnologias">Tecnologias</a> • <a href="#-como-rodar-localmente">Instalação</a> • <a href="#-estrutura-do-projeto">Estrutura</a></p>

<hr />

<h2 id="-sobre-o-projeto">🌸 Sobre o Projeto</h2>

<p>O <strong>Women Go Safe</strong> é uma plataforma de agendamento de intercâmbios focada exclusivamente na segurança e empoderamento feminino. Entendemos que viajar sozinha pode ser desafiador, por isso conectamos mulheres a agências e programas rigorosamente verificados.</p>

<p>Este repositório contém o <strong>MVP (Minimum Viable Product)</strong> da aplicação, simulando um ecossistema completo com busca de programas, avaliações de segurança baseadas em geolocalização e um hub de conhecimento.</p>

<h2 id="-funcionalidades">✨ Funcionalidades</h2>

<ul>
  <li><strong>🔍 Busca Inteligente de Programas:</strong> Filtros avançados por destino, tipo de intercâmbio (curso, voluntariado, estágio) e agência.</li>
  <li><strong>🛡️ Selo de Verificação Women Go Safe:</strong> Sistema visual que destaca agências com suporte 24/7, liderança feminina e acomodações seguras.</li>
  <li><strong>🗺️ Mapa Interativo de Segurança:</strong> Utilizando <code class="language-plaintext highlighter-rouge">Leaflet</code>, visualizamos cidades com classificações de segurança (Verde, Amarelo, Vermelho) baseadas em feedbacks reais de usuárias.</li>
  <li><strong>📚 Hub de Conhecimento:</strong> Catálogo de cursos preparatórios e mentorias para auxiliar na adaptação cultural e carreira.</li>
  <li><strong>💬 Sistema de Avaliação e Feedback:</strong> Transparência total com comentários e notas de quem já viajou.</li>
  <li><strong>📢 Canal de Denúncia e Suporte:</strong> Fluxos dedicados para reportar problemas com agências ou solicitar informações.</li>
</ul>

<h2 id="-tecnologias">🚀 Tecnologias</h2>

<p>O projeto foi construído utilizando as melhores práticas de desenvolvimento web moderno:</p>

<table>
  <thead>
    <tr>
      <th style="text-align: left">Tech</th>
      <th style="text-align: left">Descrição</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left"><strong>React 19</strong></td>
      <td style="text-align: left">Biblioteca principal para construção da interface.</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>TypeScript</strong></td>
      <td style="text-align: left">Tipagem estática para maior segurança e manutenibilidade do código.</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>Vite</strong></td>
      <td style="text-align: left">Build tool de próxima geração, garantindo um ambiente de desenvolvimento ultrarrápido.</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>Tailwind CSS</strong></td>
      <td style="text-align: left">Framework de utilitários para estilização ágil e responsiva.</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>Leaflet</strong></td>
      <td style="text-align: left">Biblioteca open-source para mapas interativos.</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>React DOM</strong></td>
      <td style="text-align: left">Gerenciamento da árvore de elementos do navegador.</td>
    </tr>
  </tbody>
</table>

<h2 id="-como-rodar-localmente">📦 Como Rodar Localmente</h2>

<p>Siga os passos abaixo para ter o projeto rodando na sua máquina:</p>

<h3 id="pré-requisitos">Pré-requisitos</h3>

<ul>
  <li>Node.js (Versão 18 ou superior recomendada)</li>
  <li>npm ou yarn</li>
</ul>

<h3 id="instalação">Instalação</h3>

<ol>
  <li><strong>Clone o repositório:</strong>
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git clone <span class="o">[</span>https://github.com/krosct/Projetao-SafeJourney.git]<span class="o">(</span>https://github.com/krosct/Projetao-SafeJourney.git<span class="o">)</span>
<span class="nb">cd </span>Projetao-SafeJourney
</code></pre></div>    </div>
  </li>
  <li><strong>Instale as dependências:</strong>
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npm <span class="nb">install</span>
<span class="c"># ou</span>
yarn <span class="nb">install</span>
</code></pre></div>    </div>
  </li>
  <li><strong>Configure as Variáveis de Ambiente:</strong>
Crie um arquivo <code class="language-plaintext highlighter-rouge">.env</code> na raiz do projeto para configurar chaves de API.
    <pre><code class="language-env">VITE_GEMINI_API_KEY=sua_chave_aqui
</code></pre>
  </li>
  <li><strong>Rode o servidor de desenvolvimento:</strong>
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npm run build
<span class="c"># e</span>
    
npm run dev
<span class="c"># ou</span>
npm run preview
</code></pre></div>    </div>
  </li>
  <li><strong>Acesse o projeto:</strong>
Abra seu navegador em <code class="language-plaintext highlighter-rouge">http://localhost:3000</code> (ou a porta indicada no terminal).</li>
</ol>

<h2 id="-estrutura-do-projeto">📂 Estrutura do Projeto</h2>

<p>A organização de pastas segue um padrão modular para facilitar a escalabilidade:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/
├── components/    # Componentes reutilizáveis (Cards, Modais, Botões)
├── data/          # Mock Data (Dados simulados para o MVP)
├── pages/         # Páginas principais (Home, Map, Programs, etc.)
├── types.ts       # Definições de tipos globais (TypeScript)
├── App.tsx        # Componente raiz e Roteamento
└── main.tsx       # Ponto de entrada da aplicação
</code></pre></div></div>

<h2 id="-contribuição">🤝 Contribuição</h2>

<p>Contribuições são o que fazem a comunidade open source um lugar incrível para aprender, inspirar e criar. Qualquer contribuição que você fizer será <strong>muito apreciada</strong>.</p>

<p>Consulte o arquivo <a href="https://github.com/krosct/Projetao-SafeJourney/blob/main/CONTRIBUTING.md">CONTRIBUTING.md</a> para mais detalhes sobre como colaborar.</p>

<h2 id="-licença">📝 Licença</h2>

<p>Distribuído sob a licença MIT. Veja <code class="language-plaintext highlighter-rouge">LICENSE</code> para mais informações.</p>

<hr />
<div align="center">
  Feito com 💜 pela equipe <b>Women Go Safe</b>
</div>]]></content><author><name></name></author><summary type="html"><![CDATA[Plataforma de agendamento de intercâmbios focada exclusivamente na segurança e empoderamento feminino]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://krosct.github.io/assets/img/projects/women_go_safe/WomenGoSafeLogo.png" /><media:content medium="image" url="https://krosct.github.io/assets/img/projects/women_go_safe/WomenGoSafeLogo.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>