CupThread Flutter SDK

Official Dart + Flutter SDK for cross-platform apps (iOS, Android, macOS, Windows, Linux, Web).

Part of the CupThread.com platform.

Instead of manually editing pubspec.yaml and wiring widgets by hand, install the official CupThread Flutter AI Skill into your workspace with npx skills and let your AI assistant (Claude Code, Cursor, Copilot, Windsurf, Codex, Antigravity) integrate and customize it for you:

npx skills add CupThread/CupThreadAgenticCoding --skill cupthread-flutter-sdk

Once installed, simply copy and paste this prompt to your AI coding agent:

Integrate the CupThread SDK (feedback, roadmap, and changelog screens) into this Flutter app. Scaffold a dedicated configuration helper with a placeholder for the App Key, and at the end, remind me with step-by-step instructions on how to set my App Key safely (e.g. via --dart-define or .env).

CupThread Ecosystem


Visual Showcase

The screenshots below are captured automatically from the Flutter example app using deterministic mock API data, so they stay in sync with the shipped widgets.

Roadmap Board Feature Requests Submit Request
Roadmap Board Feature Requests Submit Request Sheet
Kanban columns, stage chips & vote counts Optimistic voting, search & version filter User feature request compose sheet
What's New / Changelog Changelog Modal Overlay Feedback Composer
What's New Changelog Changelog Overlay Feedback Composer
Markdown release notes & email subscription In-app announcement sheet with custom copy Structured feedback with attachment preview

Manual Installation

Option A: Via Git Dependency (Direct GitHub release)

In your pubspec.yaml:

dependencies:
  cupthread_feedback:
    git:
      url: https://github.com/CupThread/CupThreadFlutterSDK.git
      ref: v0.1.0

Option B: Via pub.dev (Once published)

Add cupthread_feedback to your pubspec.yaml:

dependencies:
  cupthread_feedback: ^0.1.0

Or run:

flutter pub add cupthread_feedback

Quick Start

import 'package:flutter/material.dart';
import 'package:cupthread_feedback/cupthread_feedback.dart';

void main() {
  final client = FeedbackClient(
    FeedbackClientConfig(
      baseUrl: 'https://api.cupthread.com',
      appKey: 'app_xxx', // from your CupThread Developer Console
    ),
  );

  runApp(
    CupThreadTheme(
      client: client,
      // Optional: set custom locale or string overrides (defaults to device locale or English)
      // locale: const Locale('zh', 'CN'),
      // strings: CupThreadStrings.zhHans,
      child: const MaterialApp(
        home: RoadmapBoardScreen(),
      ),
    ),
  );
}

Ready-Made Flutter Widgets & Screens

Wrap your widget hierarchy in CupThreadTheme(client: client) to automatically inherit developer console appearance settings, color palette, localized strings, and anonymous user token.

  • RoadmapBoardScreen(): Kanban roadmap board grouped by public columns with vote counts and stage badges.
  • FeatureRequestsScreen(): Searchable feature requests list with optimistic upvoting, version filter chips, and creation sheet.
  • FeatureRequestComposeSheet.show(context): Dedicated sheet for proposing a new feature request (POST /api/v1/feature-requests).
  • WhatsNewScreen(): Interactive release notes / changelog with Markdown formatting and email subscription.
  • ChangelogOverlay.show(context, onlyIfUnseen: true): In-app modal announcement sheet for the latest release notes with built-in "seen" persistence.
  • FeedbackComposer() / FeedbackComposer.showModal(context, onPickAttachment: ...): Structured feedback form with attachment uploads and host picker support.
  • UserProfileView(userId: ...): Public user/developer profile screen.

Example: Presenting Latest Changelog on Launch (Only If Unseen)

@override
void initState() {
  super.initState();
  WidgetsBinding.instance.addPostFrameCallback((_) {
    // Only shows if the user hasn't seen this release yet, and automatically marks it seen
    ChangelogOverlay.show(context, onlyIfUnseen: true);
  });
}

Example: Providing Attachment Picker to FeedbackComposer

FeedbackComposer.showModal(
  context,
  onPickAttachment: () async {
    // Pick image via image_picker or file_picker, then upload:
    // final bytes = await file.readAsBytes();
    // return await client.uploadAttachment(
    //   bytes: bytes,
    //   filename: file.name,
    //   mimeType: 'image/png',
    // );
    return null;
  },
);

API Client Surface

Method Endpoint Description
submit(draft, userToken?) POST /api/v1/feedback Submit feedback draft with metadata and attachments
uploadAttachment(...) POST /api/v1/uploads/{images,r2} Upload screenshot or log attachment
fetchAppConfig() GET /api/v1/public/config/{appKey} Fetch app branding, appearance, and public settings
fetchColumns() GET /api/v1/public/columns/{appKey} Fetch Kanban board columns for roadmap
fetchVersions() GET /api/v1/public/versions/{appKey} Fetch release versions
fetchFeatureRequests(...) GET /api/v1/feature-requests List and search public feature requests
submitFeatureRequest(draft, userToken) POST /api/v1/feature-requests Propose a new feature request
toggleVote(featureRequestId, userToken) POST /api/v1/feature-requests/{id}/vote Upvote or remove upvote
fetchComments(featureRequestId) GET /api/v1/feature-requests/{id}/comments Fetch discussion comments
postComment(featureRequestId, draft, userToken) POST /api/v1/feature-requests/{id}/comments Post a comment or reply
fetchChangelog() GET /api/v1/public/apps/{appKey}/changelog Fetch published release notes
subscribeToChangelog(email, userToken) POST /api/v1/public/apps/{appKey}/changelog/subscribe Subscribe email to changelog
unsubscribeFromChangelog(email) POST /api/v1/public/apps/{appKey}/changelog/unsubscribe Unsubscribe email from changelog
updateUserAttributes(...) PUT /api/v1/public/apps/{appKey}/user Report user attributes (paying, plan, MRR)
fetchUserProfile(userId) GET /api/v1/users/{userId}/profile Fetch public user profile

Development & Testing

# Fetch dependencies
flutter pub get

# Run analysis
flutter analyze

# Run unit tests
flutter test

# Capture the visual showcase on an iOS Simulator
scripts/capture-screenshots.sh "iPhone 16 Pro"

# Build API documentation (the showcase is copied into the generated site)
scripts/build-docs.sh docs-site

License

MIT

Libraries

cupthread_feedback