A lightweight “stay-in-touch” assistant. KeepUp helps you set connection goals, organize contacts into circles with cadences (daily/weekly/biweekly/monthly), and get AI-generated, natural-language nudges via local notifications.
This README tells you how to clone, configure, build, run, and test the app on both iOS and Android.
-
Flutter: 3.22+ (
flutter --version) -
Dart: 3.x (bundled with Flutter)
-
Xcode: 15+ (for iOS); CocoaPods:
gem install cocoapods -
Android Studio: latest; Android SDK + platform tools
-
A physical device or simulator/emulator
-
Developer accounts/signing:
- iOS: Apple Developer Program (for device runs & notifications)
- Android: No account needed for local builds
Tip: run
flutter doctor -vand resolve any red items before continuing.
git clone [email protected]:codevardhan/keep_up_application.git
cd keep_up_application
flutter pub getThe app uses dotenv to load non-checked-in keys and flags.
Create the file: assets/env/.env (and keep it untracked).
# assets/env/.env
# Anthropic API key (if using AI for notifications/messages)
ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxxxxxDevice Setup
- Enable USB debugging (Developer Options).
- Start an emulator or connect a device:
adb devices.
Open iOS project once to install pods and set signing:
cd ios
pod install
cd ..Capabilities & Info.plist In Xcode (Runner target):
- Signing & Capabilities → add your Team.
- Background Modes: not required for basic local notifications, but fine to keep off.
- Info.plist: add usage descriptions:
<key>NSContactsUsageDescription</key>
<string>KeepUp uses your contacts so you can quickly pick people to stay in touch with.</string>
<key>NSUserNotificationUsageDescription</key>
<string>KeepUp sends gentle reminders when it's time to check in.</string>Run on a device once to trust the developer profile if needed.
flutter pub get
flutter run -d emulator-5554 # or the ID from `flutter devices`
# or simply:
flutter runflutter pub get
cd ios && pod install && cd ..
open ios/Runner.xcworkspace # set Signing Team if first time
# then from terminal:
flutter run -d <iOS_DEVICE_ID>If you see a signing error, open Xcode → Runner → set Team and Bundle Identifier, then Product > Run.
- Onboarding: first launch only; requests Notifications and Contacts permissions (cannot be skipped once enforced).
- Circles & Cadence: Manage circles and per-contact cadence overrides.
- AI Suggestions: Goal-aware text (Anthropic)
- Local Notifications: BigText layout so the full message is visible. Title is “Check in” and body contains the full AI text.
- Go to Settings.
- Tap “Send demo suggestion notification”.
- It selects a contact in your circles and pushes a BigText notification with the AI text. Tap the notification to open the Compose screen with the text prefilled.
-
Notifications don’t appear
- Android 13+: ensure runtime permission granted.
- iOS: check Settings > Notifications for the app; ensure allowed.
- Make sure
NotificationService.init()is called before scheduling.
-
Notification text truncates
- We use
NotificationLayout.BigTextand set body to the full message. - Title is the short “Check in”; body contains the long text so it’s fully visible when expanded.
- We use
-
Contacts empty
- Ensure permission granted and device has contacts.
- Simulators may not have contacts; test on real devices or import dummy contacts.
-
Anthropic 400 “Unexpected role system”
- We fixed the API usage to use top-level
system(not as a message role) and split the API client intoai_client.dart. - Ensure
ANTHROPIC_API_KEYis set if using remote AI.
- We fixed the API usage to use top-level
-
“Don’t use BuildContext across async gaps”
- We captured
Navigator/ScaffoldMessengerbeforeawaitand usemountedguards. Make sure your local changes follow the same pattern.
- We captured
- Contacts syncing is one-shot; re-sync available via Settings.
- AI depends on Anthropic if key present
- Background exact alarms not required; we JIT schedule evening BigText nudges.
