Jamorham
Nightscout용 xDrip+ 버전
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Frontend do projeto Nutriz, construído com React + TypeScript + Vite. A rota /artigos exibe a leitura dos artigos da seção "Artigos para te apoiar em cada fase" da landing page — é acessível tanto deslogada (publicRouter) quanto logada (routerPrivate, vinda da Central de Conteúdos), por isso está registrada nos dois roteadores. O artigo ativo é definido pelo query param a (ex.: /artigos?a=2), e o botão "Voltar" muda de destino conforme o contexto (landing para visitante, Central de Conteúdos para usuária logada).README 전문 보기 ↗
Frontend do projeto Nutriz, construído com React + TypeScript + Vite.
src/
├── assets/ # Imagens, ícones e outros arquivos estáticos
├── components/
│ ├── full/ # Componentes completos/compostos da aplicação
│ ├── layout/ # Componentes de layout (Header, Footer, etc.)
│ └── ui/ # Componentes de UI reutilizáveis (shadcn/radix)
├── config/ # Configurações gerais da aplicação
├── context/ # Contextos React (estado global)
├── hooks/ # Custom hooks
├── lib/ # Funções utilitárias e helpers
├── pages/
│ ├── private/ # Páginas que exigem autenticação (ex: home)
│ └── public/ # Páginas públicas (ex: landing-page, login)
├── router/ # Configuração de rotas
└── services/
└── types/ # Tipagens usadas nos serviços/API
A rota /artigos exibe a leitura dos artigos da seção "Artigos para te apoiar em cada fase" da landing page — é acessível tanto deslogada (publicRouter) quanto logada (routerPrivate, vinda da Central de Conteúdos), por isso está registrada nos dois roteadores. O artigo ativo é definido pelo query param a (ex.: /artigos?a=2), e o botão "Voltar" muda de destino conforme o contexto (landing para visitante, Central de Conteúdos para usuária logada).
src/pages/public/articles/data.ts. Landing, Central de Conteúdos e a tela de artigo individual importam direto desse módulo.prefers-reduced-motion.src/assets/artigos/). O vídeo usa Article.videoUrl quando definido (embed real); sem URL, mostra a capa com o selo "Vídeo em breve" em vez de simular um player.Page (título/descrição/botão de voltar); não há mais busca nem função de compartilhar.A rota privada /conteudo-educativo (src/pages/private/content-hub/) é a home de artigos da área logada, acessível pelo menu hambúrguer. Destaques, grid "Mais conteúdos", vídeos em destaque, dicas rápidas e um accordion de dúvidas frequentes — todos os cards/vídeos abrem a mesma tela de leitura de artigos acima.
A EVA é a assistente de IA que atende nutrizes 24/7. Ela é um widget flutuante
global (FAB no canto inferior direito → modal de chat), disponível em qualquer
página permitida. Consome o microserviço nutriz-ia-service (FastAPI, porta
8000) via WebSocket com streaming.
src/pages/private/eva/widget/ (eva-widget.tsx,
eva-chat-panel.tsx, eva-welcome-panel.tsx, use-eva-access.ts).src/App.tsx, ao lado do RouterProvider.src/pages/private/eva/components/. Hook de streaming: hooks/use-eva-chat.ts.O gate fica em use-eva-access.ts, construído sobre useAuth() + EnumUserType:
common).adm e nurse — o FAB nem é montado (checagem no topo da árvore,
não via CSS). O backend também recusa esses papéis no /ws/chat.common): conecta em /ws/chat com auth.token.POST /session/anonymous → token efêmero → /ws/chat-public.
Rate limit, detecção de PII e anti-jailbreak são aplicados no backend; close
codes 4029 (rate limit) e 4008 (jailbreak) encerram com aviso amigável.eva:welcome-seen:<id_user>).conversation/message) para auditoria; a listagem visual virá numa fase
futura consumindo o GET /conversations já existente no IA service.
Em .env.development:
VITE_EVA_API_URL=http://localhost:8000
VITE_EVA_DEV_TOKEN=
VITE_EVA_API_URL: única URL necessária — a base HTTP do IA service (usada
no POST /session/anonymous). A URL do WebSocket (/ws/chat e
/ws/chat-public) é derivada dela no código (http→ws, https→wss),
então em produção basta https://...onrender.com. Barra final é normalizada
(com ou sem / no fim funciona — foi o bug do //session/anonymous → 404).VITE_EVA_WS_URL (opcional, retrocompatível): sobrepõe a URL do WebSocket.
Só defina se o WS ficar em host/porta diferente do HTTP; caso contrário não é
necessária (fica derivada de VITE_EVA_API_URL).VITE_EVA_DEV_TOKEN: somente desenvolvimento. Quando preenchido, substitui o
token da sessão logada na conexão do chat. Deixe vazio em qualquer outro cenário.# no repositório nutriz-ia-service
docker compose up -d
Sobe a API na porta 8000 e o banco pgvector com migrations. O IA service já
aceita a origin do Vite (http://localhost:5173) via CORS.
http://localhost:5173/ (deslogado), clique no FAB, aceite o
aviso LGPD e converse. Recarregar descarta o histórico.localStorage.setItem("data", JSON.stringify({ token: "<TOKEN>", id_user: "<UUID_DA_USUARIA>", name: "Usuaria Teste", type: "common", addresses: [] }));
location.reload();
O FAB aparece; o chat conecta em /ws/chat. Para confirmar o gate, repita com
type: "nurse" e verifique que o FAB não aparece.
Close codes 4001 (sessão) e 4003 (consentimento) bloqueiam o input com aviso;
quedas de conexão disparam reconexão com backoff (1s → 2s → 4s).
pnpm install
.env.development e preencha VITE_API_URL com o link que será enviado no privado.pnpm dev
pnpm build # Gera o build de produção
pnpm preview # Faz o preview do build de produção
pnpm lint # Verifica lint (biome)
pnpm lint:fix # Corrige problemas de lint automaticamente
pnpm format # Formata o código