{"id":51861632,"url":"https://github.com/juninmd/diocese-franca-app","last_synced_at":"2026-07-24T08:02:13.538Z","repository":{"id":338151304,"uuid":"1155543184","full_name":"juninmd/diocese-franca-app","owner":"juninmd","description":null,"archived":false,"fork":false,"pushed_at":"2026-07-22T02:32:46.000Z","size":388,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-07-23T10:18:11.058Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/juninmd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-11T16:21:36.000Z","updated_at":"2026-07-22T02:32:51.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/juninmd/diocese-franca-app","commit_stats":null,"previous_names":["juninmd/diocese-franca-app"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/juninmd/diocese-franca-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juninmd%2Fdiocese-franca-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juninmd%2Fdiocese-franca-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juninmd%2Fdiocese-franca-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juninmd%2Fdiocese-franca-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/juninmd","download_url":"https://codeload.github.com/juninmd/diocese-franca-app/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juninmd%2Fdiocese-franca-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35832970,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-24T02:00:07.870Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-24T08:02:12.822Z","updated_at":"2026-07-24T08:02:13.533Z","avatar_url":"https://github.com/juninmd.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Diocese de Franca - App\n\nAplicativo completo para a Diocese de Franca com backend API REST e app React Native.\n\n\u003e **Status: 100% Funcional e em Produção** - Tests: 19/19 passing\n\n## Funcionalidades\n\n### Backend API\n- REST API com Express.js 5.x\n- Compressão gzip e headers de segurança (Helmet)\n- Health check endpoint para monitoramento\n- Middleware de validação e tratamento de erros\n- Respostas padronizadas com sucesso/erro\n- **19 testes automatizados** cobrindo todos os endpoints\n\n### Mobile App\n- Interface moderna com design profissional\n- **Pull-to-refresh** em todas as listas\n- **Skeleton loaders** durante carregamento\n- **Sistema de favoritos** persistente (AsyncStorage)\n- **Toast notifications** para feedback de ações\n- **Indicador de rede** offline/online\n- Busca em tempo real com filtros\n- Compartilhamento via Share API\n- Estados de loading e erro tratados\n\n## Novidades Implementadas\n\n### Mobile\n- Notificações locais agendadas para missas via `expo-notifications`\n- Aprimoramentos de UI/UX (Mensagem \"Bem-vindo, Fiel!\")\n- Correção de duplicação de variáveis na renderização do banner offline\n- Skeleton loaders com animação shimmer\n- Pull-to-refresh com feedback visual\n- Favoritos salvos localmente (persistem)\n- Toast notifications animadas (success/error/info)\n- Indicador de conexão em tempo real\n- Filtro \"Todos\" vs \"Favoritos\" em Igrejas e Padres\n- Botão de limpar filtros\n- Seção de acesso rápido na home\n- Badges de estatísticas clicáveis\n- Deploy web pronto com configuração do Netlify (`netlify.toml`)\n- Testes E2E com Playwright para verificação no ambiente web\n\n### Backend\n- Scraper autônomo da Diocese (`backend/scraper.js`) usando `axios` e `cheerio`\n- Endpoint de health check `/api/health`\n- Compressão gzip automática\n- Helmet.js para headers de segurança\n- Middleware de validação de ID e dia\n- Logs de requisição com timestamp\n- Tratamento centralizado de erros 404/500\n- Respostas com wrapper `{ success, count, data }`\n\n## Tecnologias\n\n### Backend\n- Node.js + Express.js 5.x\n- CORS, Compression, Helmet\n- Jest (19 testes)\n\n### Mobile\n- React Native (Expo SDK 54)\n- React Navigation 7\n- AsyncStorage (favoritos persistentes)\n- @expo/vector-icons (Ionicons)\n- Axios\n\n## Estrutura do Projeto\n\n```\ndiocese-franca-app/\n├── backend/\n│   ├── data/                    # Dados JSON\n│   │   ├── churches.json\n│   │   ├── priests.json\n│   │   └── masses.json\n│   ├── routes/                 # Rotas da API\n│   │   ├── churches.js\n│   │   ├── priests.js\n│   │   └── masses.js\n│   ├── middleware/             # Middleware Express\n│   │   └── validation.js\n│   ├── tests/                  # Testes automatizados\n│   │   └── api.test.js\n│   ├── index.js                # Entry point\n│   └── package.json\n│\n└── mobile/\n    ├── src/\n    │   ├── components/          # Componentes reutilizáveis\n    │   │   ├── NetworkStatus.js\n    │   │   └── Skeleton.js\n    │   ├── context/            # Contextos React\n    │   │   ├── DataCacheContext.js\n    │   │   └── ToastContext.js\n    │   ├── navigation/         # Navegação\n    │   │   └── index.js\n    │   ├── screens/            # Telas do app\n    │   │   ├── HomeScreen.js\n    │   │   ├── ChurchesScreen.js\n    │   │   ├── ChurchDetailScreen.js\n    │   │   ├── PriestsScreen.js\n    │   │   ├── PriestDetailScreen.js\n    │   │   └── MassesScreen.js\n    │   └── services/           # Serviços\n    │       ├── api.js\n    │       └── FavoritesService.js\n    ├── App.js\n    └── package.json\n```\n\n## Instalação e Execução\n\n### Backend\n\n```bash\ncd backend\npnpm install\npnpm start\n# Servidor: http://localhost:3000\n```\n\n### Mobile\n\n```bash\ncd mobile\npnpm install\npnpm start\n```\n\n### Executar Testes\n\n```bash\ncd backend\npnpm test\n# Resultado: 19 testes passando\n```\n\n## Endpoints da API\n\n| Método | Endpoint | Descrição |\n|--------|----------|-----------|\n| GET | `/` | Raiz da API |\n| GET | `/api/health` | Health check |\n| GET | `/api/churches` | Lista todas as igrejas |\n| GET | `/api/churches/:id` | Detalhes de uma igreja |\n| GET | `/api/priests` | Lista todos os padres |\n| GET | `/api/priests/:id` | Detalhes de um padre |\n| GET | `/api/masses` | Lista todos os horários |\n| GET | `/api/masses/by-church/:id` | Missas por igreja |\n| GET | `/api/masses/by-day/:dia` | Missas por dia |\n\n## Funcionalidades do App Detalhadas\n\n### Tela Início\n- Dashboard com estatísticas (paróquias, padres, missas)\n- Cards clicáveis para navegação rápida\n- Seção de acesso rápido (missa domingo, mapa, ligar, email)\n- Pull-to-refresh para atualizar dados\n- Informações de contato da diocese\n\n### Igrejas\n- Lista com busca em tempo real\n- Filtro: Todos / Favoritos\n- Avatar com ícone da igreja\n- Botões de ação: favoritar, compartilhar\n- Pull-to-refresh\n- Skeleton loader durante carregamento\n\n### Detalhes da Igreja\n- Informações completas (endereço, telefone, descrição)\n- Pároco responsável com contato\n- Lista de horários de missa\n- Botão para abrir no mapa\n\n### Padres\n- Lista com busca por nome/título\n- Filtro: Todos / Favoritos\n- Avatar com iniciais do nome\n- Badge com título (Pároco, Bispo)\n- Pull-to-refresh\n\n### Detalhes do Padre\n- Perfil com biografia\n- Contato (email, telefone)\n- Paróquia com navegação\n\n### Horários de Missa\n- Filtros por dia da semana\n- Filtros por tipo (Dominical/Semanal)\n- Botão limpar filtros\n- Lista organizada por dia\n- Badge com contador de missas\n- Pull-to-refresh\n\n## Dados\n\n| Entidade | Quantidade |\n|----------|------------|\n| Paróquias | 4 |\n| Padres | 5 |\n| Missas/semana | 22 |\n\n## Testes\n\nO backend possui **19 testes automatizados** cobrindo:\n\n- Validação de ID inválido (400)\n- Busca de igreja/padre inexistente (404)\n- Listagem com wrapper de sucesso\n- Verificação de campos obrigatórios\n- Filtro por dia da semana\n- Case insensitive para dias\n- Arrays vazios para dias sem missa\n\n## Pré-requisitos\n\n- Node.js 18+\n- pnpm (gerenciador de pacotes)\n\n```bash\nnpm install -g pnpm\n```\n\n## Screenshots\n\nO app possui interface moderna com:\n- Cores consistentes (#2c3e50 como primária)\n- Cards com elevation e sombras suaves\n- Ícones Ionicons em todas as ações\n- Feedback visual em todas as interações\n- Estados de loading com skeleton\n- Toasts animados para feedback\n\n### Screenshot (Web Output E2E Test)\n![Home Screen](mobile/screenshots/home_full.png)\n\n## Licença\n\nISC","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuninmd%2Fdiocese-franca-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuninmd%2Fdiocese-franca-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuninmd%2Fdiocese-franca-app/lists"}