From: [email protected]
Date: 2018-06-16
Subject: 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  ad-
dress  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  orga-
nizing  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  cob-
bled  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 pro-
vide 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 con-
tacts I need to get back to.

I  keep only the most basic demographic information about each per-
son: 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-chronologi-
cal list of the notes I've entered for  each  contact.   The  notes
tell  me  when I last interacted with each person and what that in-
teraction 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 virtu-
ally no additional overhead.  I considered using ncurses  or  `dia-
log`  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 ex-
isting 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 ex-
ample, in the scenario where I need to send an email to all my con-
tacts, 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 gen-
erally applicable, feel free to send a merge request or patch.

References

1. http://davebucklin.com/work/2018/01/06/ranger-vim-crm.html
2. https://gitlab.com/davebucklin/bbook
3. https://www.gnu.org/software/recutils/