sunlight

pub package

Automated event documentation with screenshots for Flutter applications. No more spreadsheets or manual loggingβ€”just clear, consistent event records sent straight to your team board.

πŸŒ… What is sunlight?

sunlight is a lightweight Dart package designed to work side by side with your current logging system. It automatically captures a screenshot and sends both the event metadata and image to a central board or endpoint. This helps teams:

  • Monitor which events are being sent.
  • Reduce the need for manual documentation.
  • Improve visibility and QA during development.

πŸ”§ Use Case

Ever found yourself wondering:

  • "Which events have we already instrumented?"
  • "Did we forget to document this one?"
  • "Have we documented events sent by the new screen in the flow?"

With sunlight, all these questions are answered. Each time you send an event, a screenshot is captured and pushed with itβ€”making event tracking and QA much simpler.

https://github.com/user-attachments/assets/33eb80d5-854a-40f6-a668-223a72699ede

πŸ§‘β€πŸ’» How to Use

  1. In your app initialization, set up sunlight with the desired options:
SunlightAnalyticsFlutter.setup(
  boardClient: miroBoardClient(
    boardId: "your_board_id",
    token: "your_api_token",
  ),
);
  1. To allow capturing screenshots you need to wrap the entire section you want to be tracked with a custom sunlight widget.
runApp(
  MaterialApp(
    home: Sunlight(
      child: Home(),
    ),
  ),
);

example: main.dev.dart

  1. In your current centralized analytics logging, add sunlight logs:
class CurrentAnalyticsLogger {
  Future<void> logEvent(String name) {
    // current analytics logging.
    return SunlightAnalytics.log(name: name);
  }
}

Production builds

Sending a screenshot for every event fired might become heavy for production builds. That is why we recommend setting sunlight up only for development/internal builds. That is usually enough to cover all app paths without adding overhead to your production users.

If SunlightAnalyticsFlutter.setup or SunlightAnalyticsr.setup are never called, SunlightAnalytics.log becomes a no-op. So your production app stays unaffected.

πŸ›€οΈ Roadmap

  • βœ… Automatic screenshot taking with minimal setup.
  • βœ… Automatic board integration via BoardClient interface.
  • βœ… Separate analytics log from flutter package.

Planned:

  • Visual identification of user interaction on screenshots taken.
  • More Board Integrations.
  • Sunlight portal.

πŸ“‹ Available Board Integrations

Currently supported:

  • βœ… Miro β†’ miroBoardClient

Planned:

  • Notion
  • Figma
  • Custom webhook
  • Sunlight portal.

πŸ™‹β€β™‚οΈ Why "sunlight"?

Just like sunlight makes things clear and visible, this package makes your event flow transparent for your whole team.

πŸ‘ Contributions

Feel free to open issues or PRs! Feedback, ideas, and use cases are very welcome.

Libraries

sunlight