Controle diário de consumo de fenilalanina (PKU)
Translation pending
HealthTypeScript · JavaScriptGitHub @lucasmm96OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
MeuFenil é um web app para controle diário da ingestão de fenilalanina em pacientes com fenilcetonúria (PKU). Permite registrar alimentos, acompanhar limites, histórico, estatísticas, exames de PKU.
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
MeuFenil é uma aplicação open source criada para controle pessoal da ingestão diária de fenilalanina, com foco em apoio a pacientes com Fenilcetonúria (PKU). O projeto tem como objetivo facilitar a administração da dieta extremamente restritiva exigida pela condição, oferecendo organização, clareza e autonomia ao paciente e a seus cuidadores. ⚠️ Aviso importante: este aplicativo não substitui, em nenhuma hipótese, o acompanhamento médico ou nutricional. Ele deve ser utilizado exclusivamente como ferramenta de apoio. Olá! Meu nome é Lucas e sou marido de uma paciente com fenilcetonúria.Read the full README ↗
MeuFenil é uma aplicação open source criada para controle pessoal da ingestão diária de fenilalanina, com foco em apoio a pacientes com Fenilcetonúria (PKU).
O projeto tem como objetivo facilitar a administração da dieta extremamente restritiva exigida pela condição, oferecendo organização, clareza e autonomia ao paciente e a seus cuidadores.
⚠️ Aviso importante: este aplicativo não substitui, em nenhuma hipótese, o acompanhamento médico ou nutricional. Ele deve ser utilizado exclusivamente como ferramenta de apoio.
Olá! Meu nome é Lucas e sou marido de uma paciente com fenilcetonúria.
Antes de conhecê-la, essa condição era completamente desconhecida para mim. A convivência me mostrou o quanto ainda faltam recursos no Brasil para pacientes com PKU — como fórmulas mais palatáveis, acesso ao Dicloridrato de Sapropterina (Kuvan®), produtos de baixa proteína e, principalmente, informações nutricionais claras sobre a quantidade de fenilalanina nos alimentos.
Manter uma dieta tão restritiva, com pouca informação disponível, é um grande desafio. Por isso, decidi unir meu conhecimento em tecnologia à vontade de melhorar a rotina da minha esposa e de outras pessoas na mesma condição.
Este aplicativo foi criado para ajudar no controle diário da ingestão de alimentos e da fenilalanina. Os dados iniciais têm como base tabelas públicas disponibilizadas pela ANVISA, e o usuário também pode cadastrar seus próprios alimentos caso não os encontre na lista.
Este é um projeto totalmente sem fins lucrativos, criado com o único objetivo de contribuir — mesmo que um pouco — para uma melhor qualidade de vida das pessoas com fenilcetonúria.
Atualmente, o MeuFenil oferece:
As regras de acesso são aplicadas diretamente no banco de dados via Row Level Security (RLS).
A aplicação utiliza um banco PostgreSQL gerenciado pelo Supabase. De forma resumida, a estrutura contempla:
⚠️ Detalhes internos de segurança, políticas, triggers e regras de acesso são documentados separadamente e não fazem parte deste README.
Crie os arquivos .env.development e .env.production na raiz do projeto com as seguintes variáveis:
VITE_SUPABASE_URL=your_supabase_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
VITE_APP_ENVIRONMENT=dev_or_prod
SUPABASE_PROJECT_ID=your_project_id
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
SUPABASE_DATABASE_URL=your_database_url
Migrations do banco de dados são gerenciadas via Supabase CLI e versionadas em supabase/migrations/.
Para aplicar migrations pendentes:
# Desenvolvimento
./scripts/db/apply-supabase-migrations.sh --env development
# Produção (exige confirmação adicional)
./scripts/db/apply-supabase-migrations.sh --env production
npm install
npm run dev
npm run build
Atualmente, o MeuFenil é 100% gratuito, sem qualquer fim lucrativo.
A aplicação utiliza os planos gratuitos do Supabase e da Vercel, e o consumo de recursos é monitorado manualmente.
Caso o volume de usuários cresça a ponto de exigir planos pagos para manter a aplicação funcionando, a política de gratuidade poderá ser reavaliada, sempre com o único objetivo de cobrir custos de infraestrutura, nunca visando lucro.
Para evitar que o projeto gratuito do Supabase entre em estado de pausa por inatividade, a aplicação expõe uma rota interna em /api/keepalive.
Essa rota é executada automaticamente pelo Vercel Cron uma vez por dia e, em cada execução, faz uma leitura mínima na tabela public.usuarios dos dois bancos:
meufenil)meufenil-dev)Cada execução também persiste um histórico próprio na tabela public.background_job_executions de cada banco acessado, com o mesmo run_id para os dois alvos.
As credenciais vêm de variáveis explícitas no painel da Vercel:
KEEPALIVE_SUPABASE_URL=...
KEEPALIVE_SUPABASE_SERVICE_ROLE_KEY=...
KEEPALIVE_DEV_SUPABASE_URL=...
KEEPALIVE_DEV_SUPABASE_SERVICE_ROLE_KEY=...
O alvo de produção aceita fallback para VITE_SUPABASE_URL/SUPABASE_SERVICE_ROLE_KEY (e SUPABASE_URL). O alvo de dev exige as próprias variáveis KEEPALIVE_DEV_* — sem fallback, para que uma falha de configuração nunca grave registros de "dev" no banco de produção.
Horário do cron:
0 12 * * * UTC, equivalente a 09:00 em America/Sao_Paulo durante o horário normal.A persistência das execuções de jobs fica centralizada na tabela public.background_job_executions de cada ambiente.
Campos principais:
job_key: identifica o job, como keepaliveenvironment: indica o ambiente do registro, como prod ou devrun_id: agrupa os eventos da mesma execuçãostarted_at e finished_at: início e fim da execuçãoduration_ms: duração totalstatus: success, failure ou partialmessage: resumo legível da execuçãodetails: JSON com metadados adicionaisReutilização:
src/shared/background-jobs.tsjobKey, environment, status, tempos, mensagem e detailsRetenção:
Monitoramento no painel administrativo:
Para testar manualmente (cada execução acessa os dois alvos — em execução local, aponte os dois pares de variáveis para o ambiente de teste):
# carregue o arquivo do ambiente e crie aliases temporários para o keepalive
set -a
source .env.development
export KEEPALIVE_SUPABASE_URL="$VITE_SUPABASE_URL"
export KEEPALIVE_SUPABASE_SERVICE_ROLE_KEY="$SUPABASE_SERVICE_ROLE_KEY"
export KEEPALIVE_DEV_SUPABASE_URL="$VITE_SUPABASE_URL"
export KEEPALIVE_DEV_SUPABASE_SERVICE_ROLE_KEY="$SUPABASE_SERVICE_ROLE_KEY"
set +a
vercel dev
curl http://localhost:3000/api/keepalive
Na Vercel (produção), o alvo de produção usa KEEPALIVE_SUPABASE_URL/KEEPALIVE_SUPABASE_SERVICE_ROLE_KEY (ou o fallback para VITE_SUPABASE_URL/SUPABASE_SERVICE_ROLE_KEY) e o alvo de dev usa KEEPALIVE_DEV_SUPABASE_URL/KEEPALIVE_DEV_SUPABASE_SERVICE_ROLE_KEY.
A resposta 200 indica que os dois bancos foram acessados com sucesso. Se algum alvo falhar, a rota retorna 500 e o payload (projects) mostra qual banco apresentou erro — o alvo que funcionou é persistido mesmo assim.
Para consultar o histórico:
select *
from public.background_job_executions
where job_key = 'keepalive'
order by created_at desc;
Se quiser ver só um ambiente:
select *
from public.background_job_executions
where job_key = 'keepalive'
and environment = 'prod'
order by created_at desc;
select *
from public.background_job_executions
where job_key = 'keepalive'
and environment = 'dev'
order by created_at desc;
Contribuições são muito bem-vindas!
Se você é desenvolvedor(a), nutricionista, profissional da saúde ou paciente e deseja ajudar, fique à vontade para:
Este projeto está licenciado sob a licença MIT.
Um agradecimento especial à minha esposa, portadora de fenilcetonúria, cuja força, disciplina e resiliência — especialmente durante a gravidez, quando a dieta precisou ser ainda mais restritiva — foram a principal inspiração para a criação deste projeto.
Este aplicativo existe por ela e por todas as pessoas que convivem diariamente com a PKU.