Introducing bbook

Hunting for a job usually involves talking to a lot of people. It's important to keep track of who you want to talk to, who you've already talked to, and what you talked to them about. The world is awash in contact management applications, everything from the address book on your phone to software suites like Goldmine, Zoho, Salesforce, and SugarCRM. The first application I worked on was a contact management system for insurance marketing firms.

Now that contact management is an important part of my life, I should have a tool that's suited for the task. Storing and organizing contact information is the defining feature of a contact management system. Recording interactions with contacts is a key feature that I don't see very often outside of the larger suites. Previously, I wrote about a DIY contact management solution I cobbled together using ranger and vim. That was certainly a workable solution, but I felt up to the challenge of creating something more streamlined and purpose-built.

I created bbook to track my interactions with recruiters. When I'm facing the end of a contract (or the sudden lack of any contract), I write a short letter to my contacts at local staffing firms. I tell them what kind of work I've been doing and tell them what kind of work I'm looking for. This is less about naming titles and more about describing the role I play within a team. I also make sure to attach an up-to-date resume, include my phone number, and provide my availability for a phone call over the next several days.

When I get a call or email back, I can use the search function in bbook to quickly find their contact information and interaction history. I add a new note to summarize the content of that call or email. If there is something I need to do, like return their call, or send a completed form, I can include that in the note and flag the contact for follow-up in bbook. When I want to make sure I'm caught up, I can filter on the follow-up flag and see only the contacts I need to get back to.

I keep only the most basic demographic information about each person: name, company, and email. I don't even keep a phone number. While it's important to have this information, it's not terribly useful if I don't also track my interactions with each person. To do that, bbook has a notes section that shows a reverse-chronological list of the notes I've entered for each contact. The notes tell me when I last interacted with each person and what that interaction was about.

I chose to write bbook in bash because bash is widely available. If you are already running bash as your shell, then there is virtually no additional overhead. I considered using ncurses or dialog for screen-painting operations, but I decided to keep things simple with tput. I've also been looking for an excuse to use GNU recutils, and these relatively simple data strucures seemed like a good fit. Recutils lets me keep all the data in a textual, human-readable format. This makes it a lot easier to migrate existing contact information into the bbook database.

bbook uses simple data models and operations, but they get the job done. It's also extensible; I can add and change features, or just perform operations on the data outside of the application. For example, in the scenario where I need to send an email to all my contacts, I could write a script to read in a boilerplate message, swap in the contact name and email, send the email, and then add a note to the contact record.

If this sounds valuable to you, I hope you'll give bbook a try. Take a look at the source and, if you're up to it, customize it for your particular situation. If you think your customization is generally applicable, feel free to send a merge request or patch.