A macOS application that generates Anki flashcards from the birthdays in your Apple Contacts. The app creates a tab-separated values (TSV) file that can be imported directly into Anki to help you remember your friends' and family's birthdays.
- Extracts birthday information from Apple Contacts
- Generates Anki-compatible flashcards in the format "When is [Name]'s birthday?" → "[Date]"
- Native macOS GUI with progress tracking
Download a .dmg from https://github.com/GabrielDougherty/bday-anki/releases and run it.
- Launch the application
- Click "Generate Cards" to create flashcards from your contacts
- The app will request permission to access your Contacts if needed
- Choose a location to save the output file (optional - defaults to Downloads)
- Import the generated TSV file into Anki:
- In Anki: File → Import
- Select the generated file
- Set field separator to "Tab"
- Import the cards
- macOS 11.0 or later
- Permission to access your Contacts (the app will prompt for this)
- Anki (for importing the generated cards)
- Install Zig 0.15.2 from ziglang.org
- Clone this repository
- Build the application:
zig build
- Run the application:
./zig-out/bin/bdays
To see detailed output during card generation, run with the --debug flag:
./zig-out/bin/bdays --debugTo create a distributable DMG installer:
-
Ensure you have
create-dmginstalled:brew install create-dmg
-
Run the release script:
./release.sh
-
When prompted, enter the version number (e.g.,
1.2,2.0, etc.)
The script will:
- Update the app bundle's version information
- Build the latest code
- Copy the binary to the app bundle
- Create a DMG installer named
AnkiBirthdays-[VERSION].dmg
The application is built in Zig and uses:
- Objective-C runtime for macOS GUI integration
- Cocoa frameworks (Foundation, AppKit) for native UI
- AppleScript for accessing Contacts data
- Multi-threaded architecture with progress reporting
The codebase is modularized into:
main.zig- Application entry point and shared statesrc/objc_helpers.zig- Objective-C runtime utilitiessrc/ui_components.zig- GUI component creationsrc/app_delegate.zig- Application event handlingsrc/threading.zig- Thread management and UI updatessrc/file_operations.zig- File system operationssrc/anki_generator.zig- Core card generation logic
See LICENSE.md for details.