One of my goals was to be able to integrate contact data into my incremental backup procedure. This meant that I needed to adhere to a design where one contact is saved in one file, which can then be moved, backed up, sent vial e-mail and so on. The “last modified” timestamp stored in the computer’s file system also functions as the last data change timestamp for that particular contact. By avoiding a monolithic database file, my contacts can be incrementally backed up just like any other document.
As for the format, I decided on a Zip-compressed file that includes a vCard, a JSON file with additional metadata, and any number of photos and scanned business cards. KontakteDB supports basic image editing functionality (cropping and brightness/contrast adjustment), the parameters of which are saved in the contact file along with the unmodified original photo, thus even after the editing process the integrity of the original file is preserved.