Ponder

Ponder Documentation

Complete technical documentation for the Ponder Flutter and Appwrite application.

What Is Ponder?

Ponder is a cross-platform Flutter app for intentional reading. It combines a personalized article feed, source-backed fact checking, saved reading with private notes, social discovery through friends and article shares, direct 1:1 messaging, and profile/onboarding flows backed by Appwrite TablesDB, Storage, Auth, and Functions.

Tech Stack

| Layer | Technology | Version | | — | — | — | | App runtime | Flutter | >=3.10.0 | | Language runtime | Dart SDK | >=3.0.0 <4.0.0 | | State management | flutter_riverpod | ^2.5.1 | | Navigation | go_router | ^13.2.0 | | Backend SDK | appwrite Flutter SDK | ^13.0.0 | | Backend platform | Appwrite TablesDB, Auth, Storage, Functions | Project 69c8743a00300a26f831 | | Function runtime | Node.js | node-22 in appwrite.json | | Monitoring | sentry_flutter, newrelic_mobile, @sentry/node for news_refresh | Sentry ^8.0.0, New Relic 1.0.0 | | Local persistence | shared_preferences | ^2.2.3 | | Environment loading | flutter_dotenv | ^5.1.0 |

Local Setup

  1. Install Flutter with a Dart SDK that satisfies >=3.0.0 <4.0.0.
  2. From the repository root, run flutter pub get.
  3. Create or update .env with APPWRITE_ENDPOINT and APPWRITE_PROJECT_ID; these are required by AppwriteConfig.
  4. Run the app with flutter run on the target platform.
  5. Run tests with flutter test.
  6. Optional: pass SENTRY_DSN and ENVIRONMENT as Dart defines if you need runtime Sentry configuration different from the defaults in lib/main.dart.
  7. Optional: set NEW_RELIC_IOS_TOKEN and/or NEW_RELIC_ANDROID_TOKEN in .env, or pass them as Dart defines, to enable New Relic Mobile instrumentation on iOS and Android builds.

Appwrite Setup

  1. Use project ID 69c8743a00300a26f831 and database ID ponder_db.
  2. Apply the backend contract from appwrite.json; it declares TablesDB, Auth settings, Functions, and the profile_images bucket.
  3. Ensure .env points the Flutter app at the same Appwrite endpoint and project ID.
  4. Deploy the four functions in functions/: news_refresh, fact_check, chat_write, and like_sync.
  5. Configure function environment variables used by the code: APPWRITE_ENDPOINT, APPWRITE_PROJECT_ID, APPWRITE_API_KEY; additionally NEWS_API_KEY or NEWSAPIKEY for news_refresh, optional GUARDIANKEY, optional SENTRY_DSN, and PERPLEXITY_API_KEY for fact_check.
  6. Keep the TablesDB schema and function IDs aligned with lib/core/constants/appwrite_config.dart.

Directory Structure

Ponder/
├── appwrite.json
├── pubspec.yaml
├── assets/
│   ├── icons/
│   └── images/
├── docs/
├── functions/
│   ├── _shared/
│   ├── chat_write/
│   ├── fact_check/
│   ├── like_sync/
│   └── news_refresh/
├── lib/
│   ├── app.dart
│   ├── main.dart
│   ├── core/
│   ├── features/
│   ├── shared/
│   └── utils/
└── test/
    ├── core/
    ├── features/
    ├── services/
    └── shared/