Skip to content
Serafin Sanchez
macOS Menu Bar App for Miro Sticky Notes with Swift and SwiftUI preview

macOS Menu Bar App for Miro Sticky Notes with Swift and SwiftUI

A native macOS menu bar app for instantly converting copied text into Miro sticky notes, streamlining workshops and brainstorming.

Swift
SwiftUI
AppKit
macOS
Productivity

Project Overview

I built MagicMiro because I was tired of manually creating dozens of sticky notes in Miro during workshops. You know that pain—you've got a list of ideas or feedback, and you're sitting there copy-pasting each line into a new sticky note one by one. It's mind-numbing.

This little menu bar app fixes that by letting you copy any text, hit a keyboard shortcut, and boom—it's formatted perfectly for Miro's spreadsheet import feature. What used to take 10 minutes now takes 10 seconds, which means you can focus on the actual brainstorming instead of fighting with the tools.

Key Features

⚡ Global Keyboard Shortcut

  • Instantly convert clipboard text to Miro sticky notes with a user-defined shortcut
  • Managed via HotKey library for robust shortcut handling
  • User-configurable shortcuts with persistence across app launches

📋 Clipboard Conversion

  • Reads plain text from clipboard and splits it into individual lines
  • Generates Miro-compatible HTML table with Google Sheets markers
  • Includes analytics metadata for seamless Miro integration
  • Outputs both HTML and plain text for maximum compatibility

🎯 Menu Bar Integration

  • Minimalist menu bar icon with quick access to preferences
  • Visual feedback with animated success (checkmark) or error (exclamation) indicators
  • Shortcut display and quit options directly from menu bar
  • Runs as background utility (LSUIElement) for non-intrusive operation

⚙️ Preferences & Settings

  • Configure or reset global shortcuts through intuitive interface
  • Toggle launch at login for automatic startup
  • View current settings and shortcut assignments
  • Accessibility permission handling with user guidance

🛡️ Robust Error Handling

  • Detects empty/non-text clipboard content

  • Checks for required macOS permissions

  • Handles conversion failures with clear user feedback

  • Extensive debug logging for troubleshooting

Architecture and Backend Design

Native macOS Development

  • Swift for core application logic and system integration
  • SwiftUI for modern, responsive settings and preferences UI
  • AppKit for menu bar integration and system dialogs
  • No Backend Required: All processing is local; no user data leaves the device

Data Management

  • UserDefaults for persistent storage of shortcuts and user preferences
  • HotKey Library for global shortcut management and registration
  • In-Memory Processing: All clipboard operations handled locally

Security & Permissions

  • macOS Accessibility Permissions: Required for global shortcut functionality
  • User Guidance System: Automated detection and user guidance for permission setup
  • Direct System Preferences Links: Streamlined permission enablement process

Technical Challenges Overcome

Clipboard Format Handling

  • Precisely replicated Miro's expected spreadsheet HTML structure
  • Generated proper analytics JSON metadata for flawless sticky note creation
  • Ensured both HTML and plain text clipboard compatibility

Global Shortcut Management

  • Integrated HotKey library for robust, cross-application shortcut handling
  • Implemented shortcut persistence and conflict detection
  • Created user-friendly shortcut recording and reset functionality

Permission Flow Automation

  • Automated detection of macOS Accessibility permissions
  • Provided clear user guidance with direct links to System Preferences
  • Handled permission denial scenarios with informative error messages

System Integration

  • Implemented proper menu bar utility behavior (LSUIElement)
  • Created dynamic menu bar icon feedback system
  • Ensured seamless integration with macOS design patterns

UI/UX Details

SwiftUI Modern Interface

  • Clean, intuitive preferences window with shortcut recording
  • Real-time feedback for shortcut conflicts and validation
  • Consistent with macOS design guidelines and accessibility standards

Menu Bar Experience

  • Custom "M" icon with dynamic visual states
  • Minimal disruption to user workflow
  • Quick access to all essential functions

User Feedback Systems

  • Visual feedback through menu bar icon animations
  • Dialog-based error reporting for critical issues
  • Clear success/error states for all user actions

Impact and Problem Solved

MagicMiro eliminates the tedious manual process of creating multiple sticky notes in Miro from raw text. By automating the conversion and leveraging Miro's spreadsheet import capabilities, it provides:

Time Savings:

  • Reduces multi-step manual processes to a single keyboard shortcut
  • Eliminates repetitive copy-paste operations for multiple sticky notes
  • Streamlines workshop preparation and brainstorming sessions

User Experience:

  • Seamless integration with existing Miro workflows
  • Non-intrusive background operation
  • Consistent, reliable performance across macOS versions

Professional Impact:

  • Enhances productivity for workshop facilitators and design teams
  • Reduces friction in collaborative brainstorming sessions
  • Improves meeting efficiency and idea organization

It's been pretty cool to see Miro power users actually using this thing and leaving nice reviews on the Mac App Store. People seem to really appreciate how simple and effective it is.

Related Projects

Other projects you might find interesting

A zero-friction, real-time polling platform that lets teachers create engaging polls in seconds and get instant feedback from students.
Next.js
React
InstantDB
+2
A sophisticated B2B/B2C e-commerce platform for a 50+ year family-owned manufacturer of custom metal products, featuring role-based pricing, custom orders, and vendor management.
Next.js
Supabase
TypeScript
+2
A modern, responsive developer portfolio built with Next.js 14, featuring MDX content management, dark mode, and a clean design system.
React
Next.js
TypeScript
+2