Visual Bug Reporting & AI Code Fix

SnappySnag Documentation

SnappySnag is an in-app visual bug reporting and AI auto-fix suggestion SDK for Flutter. With a single shake or tap, users capture screenshots, drop itemized numbered pins (1–5), and instantly receive AI-powered code fix suggestions and ready-to-use prompts for any AI coding agent (Cursor, Windsurf, Claude, Copilot, etc.) on your dashboard.

Multi-Point Pins

Normalized vector preservation without destructive stamping. Drop 1–5 pins with separate repro notes.

AI Agent Auto-Fix

Widget hierarchy dumps paired with Gemini AI to generate copy-ready prompts for Cursor, Claude, Windsurf, etc.

3-Tier Roles & Safety

Owner, Developer, and Tester. Testers submit reports without consuming your project AI credits.


Quickstart (3 Simple Steps)

Integrate into your existing Flutter application in under 3 minutes.

1

Add Dependency

flutter pub add snappy_snag
2

Get Your Project API Key

Create a project on the SnappySnag Dashboard (https://snappysnag.com/dashboard) and copy your live API Key (e.g. snag_live_...).

3

Configure main.dart

Call initialize() in main() and set navigatorKey and builder on MaterialApp.

import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';
import 'package:snappy_snag/snappy_snag.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  // 1. SDKの初期化(本番・テスト問わずこの1行で安全に動作)
  SnappySnag().initialize(
    apiKey: 'snag_live_your_api_key_here',
    showTriggerButton: true, // フローティングボタンを表示
  );

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      // 2. SnappySnagのナビゲーターキーを設定
      navigatorKey: SnappySnag.defaultNavigatorKey,

      // 3. builder で SnappySnagOverlay をラップ
      builder: (context, child) => SnappySnagOverlay(
        child: child ?? const SizedBox.shrink(),
      ),

      home: const MyHomePage(),
    );
  }
}

Ecosystem & Tool Category Comparison

SnappySnag operates independently and can be used alongside existing crash reporting systems, bridging the gap between visual bug reports and AI code fixes.

👈 Scroll horizontally to view details
Category / FeatureSnappySnag (AI × Visual)Crash Monitoring SDKsLegacy Feedback SDKs
Primary FocusVisual bugs, UI glitches, design inconsistencies & feature requestsFatal app crashes, unhandled exceptions & stack tracesGeneral user inquiries & basic screenshots
AI Agent IntegrationReady-to-use prompts for Cursor, Claude & Copilot✕ Raw stack traces only△ Basic text summarization only
Pin AnnotationsUp to 5 numbered pins (vector coordinate preservation)✕ None (automatic passive dump)△ Destructive drawing stamps / freeform arrows
Widget Tree Dumper10-layer widget traversal with auto PII redaction✕ None△ Native UIView hierarchy only
Coexistence-○ Works seamlessly together (independent)○ Choose based on your workflow

Multi-Point Pin Annotations

Traditional feedback tools often deface screenshots with rough drawings or require multiple screenshots for separate bugs. SnappySnag allows users to tap anywhere to drop up to 5 numbered pins (①–⑤) with targeted comments.

Non-Destructive Vector Coordinates

Pin positions are stored as normalized vector percentages (x, y ratios) rather than burned into the screenshot. Dashboard users can toggle pins on/off and inspect original high-resolution pixels cleanly.


3-Tier Roles & AI Credit Safety

Strict permission boundaries designed for client work, contractors, and mixed internal/external teams.

👑

Project Owner

  • Full project & member management
  • Pin inclusion / exclusion triage
  • AI auto-fix generation & credit consumption
💻

Developer

  • View all pins & technical details
  • Triage pins (include/exclude)
  • Execute AI fixes & copy agent prompts
🧪

Tester

  • Submit new feedback & pins from app
  • View approved pin feedback
  • 🛡️ Cannot consume AI credits (Safe)

Configuration API Reference

👈 Scroll horizontally to view details
OptionTypeDefaultDescription
apiKeyStringRequiredProject API key starting with snag_live_...
modeSnappySnagModeuserOperation mode: user (clean user feedback) or dev (shows duplicate warnings & tickets for QA).
showTriggerButtonboolfalseWhether to display the floating overlay capture button.
enabledbooltrueMaster switch. When false, suppresses overlay and shake listeners completely.
userSnappySnagUser?nullUser identity (email, id, name). Matches dashboard member permissions.
packageNameString?nullLocks API Key requests to your registered bundle identifier.
enableWidgetTreebooltrueTraverses Flutter UI tree (up to 10 levels) with automatic PII redaction.
enableLoggingboolfalseSuppresses verbose console logs during development.

Production & Testing Strategies

SnappySnag supports both in-app public user feedback collection and internal QA testing workflows.

Style A: Live User Feedback (Recommended Standard)
Default

Works out-of-the-box in production releases. Floating buttons default to hidden, and Release mode automatically suppresses internal duplicate warnings & tickets. Calling startFeedbackMode from your settings menu is the industry standard.

// 設定やヘルプメニューから呼び出し:
ListTile(
  leading: const Icon(Icons.feedback_outlined),
  title: const Text('ご意見・不具合を報告'),
  onTap: () => SnappySnag.startFeedbackMode(context: context),
)
Style B: Internal Testing Only (TestFlight/QA)
Option

If company policy dictates that the SDK must be completely dormant in public store releases, pass a boolean flag to enabled. The simplest method is !kReleaseMode, or use --dart-define for TestFlight builds.

// パターン1: リリースビルドで完全自動停止(コード1行)
SnappySnag().initialize(
  apiKey: 'YOUR_API_KEY',
  enabled: !kReleaseMode,
);

// パターン2: TestFlightのみ有効化したい場合
// flutter build ipa --dart-define=ENABLE_SNAPPY_SNAG=true
const bool isTestFlight = bool.fromEnvironment('ENABLE_SNAPPY_SNAG', defaultValue: false);
SnappySnag().initialize(
  apiKey: 'YOUR_API_KEY',
  enabled: isTestFlight,
);

Team Notifications

Real-time Slack & Discord Notifications

Instantly broadcast feedback reports to your Slack or Discord channels. Interactive cards include direct deep links to open the ticket immediately on the web dashboard.

💬Slack (Incoming Webhook)
  1. Create an Incoming Webhook in your Slack workspace.
  2. Paste URL into Project Settings > Notifications tab.
  3. Click 'Send Test' to verify connection (auto-saves on success).
💡 Formatted with Slack Block Kit featuring screen name, pin count, OS specs, and reporter details.
🎮Discord (Webhook)
  1. Create a Webhook under Discord Channel Settings > Integrations.
  2. Paste URL into Project Settings > Notifications tab.
  3. Click 'Send Test' to verify connection (auto-saves on success).
💡 Styled with Amber Gold rich Embed cards for crystal-clear readability.

Security & Project Language Localization

All Webhook URLs are encrypted with AES-256-GCM. Notification titles, labels, and formats are automatically localized according to your Project Language (Japanese / English) settings.


FAQ

Frequently Asked Questions

Common questions about integration, safety, ecosystem coexistence, and AI agent usage.

Q.How does it differ from Sentry or Firebase Crashlytics? Can they be used together?

Yes, they can be used together seamlessly. Sentry and Crashlytics capture fatal crashes and stack traces passively. SnappySnag captures non-crash visual glitches, layout bugs, and human feedback with multi-point pins, pairing with AI coding agents to fix them immediately. They operate independently without conflict.

Q.Is it safe to deploy in live production App Store and Google Play builds?

Yes. In release builds, internal duplicate tickets and QA dialogs are automatically suppressed. The floating button is hidden by default. You can safely expose it as an in-app feedback channel via SnappySnag.startFeedbackMode(context) from your settings or help menu.

Q.Which AI coding agents support the generated fix prompts?

Cursor, Windsurf, Claude (Artifacts/Projects), GitHub Copilot, and ChatGPT. Any modern LLM or AI coding agent that accepts Markdown prompts can utilize the structured repro guides.

Q.What happens when free tier AI credits run out?

Feedback capture, multi-pin drop, and GitHub Issue sync remain 100% free and unlimited. To continue using AI auto-fix code suggestions without upgrading, simply bring your own Gemini API key (BYOK) in the project settings.

Q.Are passwords and Personally Identifiable Information (PII) protected?

Yes. SnappySnag's widget tree dumper automatically filters out password fields and sensitive input types. Testers can also draw redaction boxes over sensitive screen elements before submission.