ReKMo is an AI-curated content discovery app built with Flutter. It aggregates articles, Wikipedia entries, Reddit discussions, and RSS feeds, then uses OpenAI to distill each piece into a compelling hook and curated snippet — helping you stumble on ideas worth reading more about.
The name is an acronym: Read to Know More. The app was built with a focus on African and Rwandan heritage topics, though any topic area can be added through settings.
- AI curation — GPT-4o-mini generates a hook line, snippet, category, tags, and relevance score for each item
- Multiple sources — Wikipedia, Reddit (AskHistorians, history, Africa, worldnews, geopolitics), BBC World, Al Jazeera, The Guardian
- Scheduled daily notifications — configurable times (default: 8 AM, 1 PM, 7 PM) with full article payload so tapping opens the article directly
- Background pre-fetch — WorkManager refreshes content 5–25 minutes before each notification so it always shows the latest
- Bookmarks — save discoveries and read them later
- Customisable topics — pick topics and the AI fetches Wikipedia content specifically for them
- Light / Dark / System theme — Material 3 throughout
- In-app notification history — view and re-open past notifications with unread badge
Add screenshots here once the app is running on a device. Suggested shots: Home tab, Discover tab (with category chips), Article detail, Settings page.
| Layer | Technology |
|---|---|
| Framework | Flutter (Dart SDK ^3.10.0) |
| State management | Provider + ChangeNotifier |
| AI | OpenAI GPT-4o-mini |
| Local storage | SharedPreferences |
| Notifications | flutter_local_notifications |
| Background tasks | workmanager ^0.9.0+3 |
| HTTP | http ^1.2.0 |
- Flutter SDK (3.x or later)
- An OpenAI API key — you enter this inside the app; it is stored locally on your device and never sent anywhere except OpenAI
- Android Studio / Xcode for device deployment (or a connected device / emulator)
# 1. Clone the repo
git clone https://github.com/<your-username>/rekmo.git
cd rekmo
# 2. Install dependencies
flutter pub get
# 3. Run on a connected device or emulator
flutter runOn first launch, go to Settings and enter your OpenAI API key. The app will not fetch content until a key is present.
flutter build apk --release
# Output: build/app/outputs/flutter-apk/app-release.apkflutter build ios --release
# Open ios/Runner.xcworkspace in Xcode to archive and distributeNote: Background refresh (WorkManager) is reliable on Android. On iOS,
BGAppRefreshTasktiming is OS-controlled and best-effort.
Content sources (Wikipedia / Reddit / RSS)
│
▼
ContentSourceService ──── parallel fetch + dedup by URL
│
▼
OpenAIApiService.curateContentBatch()
│ GPT-4o-mini generates: hook, snippet, category, tags, score
▼
DiscoveryProvider ──── sorts by score, persists to SharedPreferences
│
├── UI (Home / Discover / Bookmarks tabs)
│
└── RecommendationNotificationService
│ schedules OS notifications with full item JSON as payload
│
└── BackgroundFetchService (WorkManager)
runs every 15 min, pre-fetches content
5–25 min before each scheduled notification
All configuration is done inside the app under Settings:
| Setting | Description |
|---|---|
| OpenAI API key | Required — your own key from platform.openai.com |
| Favourite topics | Drives Wikipedia search queries |
| Notification times | Up to any number of daily times |
| Theme | Light / Dark / System |
lib/
├── main.dart # Entry point, providers, bottom nav (4 tabs)
├── models/
│ └── discovery_item.dart # DiscoveryItem, RawContentItem, enums
├── pages/
│ ├── articles_page.dart # Discover tab — category tabs, search, pull-to-refresh
│ ├── article_detail_page.dart # Full article view, share, bookmark
│ ├── profile_page.dart # Stats, favourite topics, theme toggle
│ ├── settings_page.dart # API key, topics, notification times, theme
│ └── recommendations_page.dart# Bookmarks list
├── providers/
│ ├── discovery_provider.dart # Core state: discoveries, bookmarks, fetch pipeline
│ ├── recommendation_provider.dart # User settings: API key, topics, notification times
│ ├── theme_provider.dart # Light/Dark/System (Material 3)
│ └── notification_provider.dart # In-app notification history & read state
├── services/
│ ├── openai_api_service.dart # OpenAI curation + connection test
│ ├── content_source_service.dart # Aggregates all sources
│ ├── wikipedia_service.dart
│ ├── reddit_service.dart
│ ├── rss_feed_service.dart # BBC, Al Jazeera, Guardian
│ ├── push_notification_service.dart # OS notification + tap navigation
│ ├── recommendation_notification_service.dart # Schedules daily notifications
│ └── background_fetch_service.dart # WorkManager periodic pre-fetch
├── widgets/
│ └── api_key_dialog.dart
└── utils/
└── app_colors.dart