How worldhealthorganization/app works
This repository is the WHO COVID-19 mobile app and its supporting service. Users complete onboarding, browse health guidance, news and statistics, and can use a symptom checker; the client also manages country settings and notification preferences. The sampled server handles client settings and case-stat queries, maintains notification subscriptions, and refreshes stored statistics from WHO data. The README is brief, so detailed client features are supported by the source tree and content-bundle names rather than sampled Dart implementation; edges for those paths are omitted where call relationships are not shown.
Main entry points: main.dart Flutter app · WhoServiceImpl.java RPC service · NotificationsManager.java Subscription manager · Client.java Client record
Components 24
Mobile app
- Flutter app
client/lib/main.dart - Onboarding
client/lib/pages/onboarding - Home and learn
client/lib/pages/main_pages - Health guidance
client/lib/pages - Symptom checker
client/lib/pages/symptom_checker - Bundled content
client/assets/content_bundles
Client data
- WHO service API
client/lib/api/who_service.dart - Preferences
client/lib/api/user_preferences.dart - Content loading
client/lib/api/content/content_loading.dart - RPC schema
api/who/who.proto
App service
- RPC service
server/appengine/src/main/java/who/WhoServiceImpl.java - Servlet routing
server/appengine/src/main/java/who/WhoServletModule.java - Client identity
server/appengine/src/main/java/who/ClientInterceptor.java - Client record
server/appengine/src/main/java/who/Client.java - Environment config
server/appengine/src/main/java/who/Environment.java
Case statistics
- Stats refresh
server/appengine/src/main/java/who/RefreshCaseStatsServlet.java - WHO data source
- Stats store
server/appengine/src/main/java/who/StoredCaseStats.java - Case stats function
server/functions/src/index.ts
Notifications
- Subscription manager
server/appengine/src/main/java/who/NotificationsManager.java - Topic rules
server/appengine/src/main/java/who/Topics.java - Firebase messaging
- Settings trigger
server/functions/src/index.ts
Other components
- App user
Connections 24
- App user → Flutter app: uses
- Flutter app → Onboarding: offers
- Flutter app → Home and learn: offers
- Flutter app → Health guidance: offers
- Flutter app → Symptom checker: offers
- Health guidance → Bundled content: uses
- WHO service API → RPC schema: implements
- WHO service API → RPC service: calls
- Preferences → WHO service API: updates settings
- Content loading → Bundled content: loads
- Servlet routing → RPC service: routes RPC
server/appengine/src/main/java/who/WhoServletModule.java - Servlet routing → Stats refresh: routes cron
server/appengine/src/main/java/who/WhoServletModule.java - Client identity → Client record: loads or creates
server/appengine/src/main/java/who/ClientInterceptor.java - RPC service → Client record: loads current
server/appengine/src/main/java/who/WhoServiceImpl.java - RPC service → Subscription manager: updates subscriptions
server/appengine/src/main/java/who/WhoServiceImpl.java - Subscription manager → Topic rules: gets topics
server/appengine/src/main/java/who/NotificationsManager.java - Subscription manager → Firebase messaging: subscribes devices
server/appengine/src/main/java/who/NotificationsManager.java - Subscription manager → Client record: saves updates
server/appengine/src/main/java/who/NotificationsManager.java - RPC service → Stats store: loads stats
server/appengine/src/main/java/who/WhoServiceImpl.java - Stats refresh → WHO data source: fetches reports
server/appengine/src/main/java/who/RefreshCaseStatsServlet.java - Stats refresh → Stats store: saves statistics
server/appengine/src/main/java/who/RefreshCaseStatsServlet.java - Case stats function → Case stats function: serves static stats
server/functions/src/index.ts - Settings trigger → Client record: watches writes
server/functions/src/index.ts - Settings trigger → Firebase messaging: planned registration