Skip to content

julesntare/rekmo

Repository files navigation

ReKMo — Read to Know More

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.


Features

  • 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

Screenshots

Add screenshots here once the app is running on a device. Suggested shots: Home tab, Discover tab (with category chips), Article detail, Settings page.


Tech Stack

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

Prerequisites

  • 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)

Installation

# 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 run

On first launch, go to Settings and enter your OpenAI API key. The app will not fetch content until a key is present.

Android (release APK)

flutter build apk --release
# Output: build/app/outputs/flutter-apk/app-release.apk

iOS

flutter build ios --release
# Open ios/Runner.xcworkspace in Xcode to archive and distribute

Note: Background refresh (WorkManager) is reliable on Android. On iOS, BGAppRefreshTask timing is OS-controlled and best-effort.


How it works

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

Configuration

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

Project Structure

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

License

MIT

About

ReKMo means Read/Know More, intended to help people get a bit of interesting info from an online book or article, and get a chance to read more about it and get used to reading culture.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages