Adam Kirk

Bots, iOS, Elixir, Rails, Ember.js

About Me

I love software engineering because with just a computer, I can make things that help people. The feeling of finding elegant solutions to complex problems is very satisfying. Using maths to visualize and model problems makes the future seem closer. Being creative and making something amazing gets me up early.

AI / Chat Bots

Facebook Messenger Bot

This Facebook Messenger bot asks for ingredients and makes recipe suggestions based on the users responses. Responses do not need to be structured. As long as the user mentions an ingredient and a positive or negative sentiment, it will return recipes that include or exclude those ingredients. "I really love artichoke" will look for recipes with artichoke. "I'm allergic to peanuts" will return recipes without peanuts.

Slack Bot

A Slack chat bot I built using Go. Domain is workplace acknowledgment. Can handle many different tasks, including asking surveys, pulses and propping getting team members talking positively about each other. Functionality also includes mentioning team members, communicating results to an API, and handling edge cases like preventing a user from mentioning a channel when they didn't intend to.


A simple Rails app for digest news. A web app and example ios app source code to help people learn by tinkering. An online help desk. Had an iOS and Mac app as well. Girl looking out people on beach I rebuilt the entire authenticated front-end in Ember.js. Customers loved it.

iOS / Mac

Calvetica was the first calendar app on the App Store in 2010 Reached #50 Overall in the App Store Praised by John Gruber, Merlin Mann and NPR Morning Edition Girl looking out people on beach Worked on the Publish UI and refactored major parts of the application core. Built a prototype of the iOS app for 5 of our apps have been featured on the home page of the App Store Girl looking out people on beach Advanced UI with UIKit Dynamics and MapKit The first version of Calvetica, released in 2010 I built this prototype for iPad and iPhone myself in 2011. Almost every app I've written has been built for universal support of iPhone and iPad. I spoke at a conference in Australia because of the success of Calvetica. Another example of great use of iPad screen real estate. iPads are displayed outside conference rooms all around the world. I worked on all aspects of the app but the room browser is my personal mark. Worked as a contractor for Vivint Solar to build their customer app prototypes.

This demonstrates an application that syncs via
a Rails back-end. I developed all the components of
this application, including both the iOS app, Mac app,
web app and back-end API.



ZipBooks is the best online accounting software. I've led the choice to use Ember.js on front-end and Elixir on backend and these choices have paid off. We've been able to build new features fast, easily write tests for everything along the way, and our load/response times are very very fast.


Calvetica was the first 3rd party calendar app on the App Store. I built the first version as a personal project with a friend in 2010. Over the years it has done $550,000 in sales. At one point it ranked #50 in top paid apps. We invented infinite scrolling month view that you now see in the default Calendar app.

Day One

I worked as an employee on Day One, the iOS and Mac App. Day One is massively successful and the Mac App won an Apple Design Award.


You'll find EventBoard on iPad displays outside the conference rooms of tens of thousand of companies including Uber, Dropbox, Twitter, Stripe, Slack, Yelp and Airbnb. I did the "Find a Room" feature on the displays and later co-led the overhaul of the authenticated front-end in Ember.js. I emphasized testing and set up a deploy pipeline that never pushed broken code.


At FamilySearch I did three significant things. First, I worked on a team where we built a prototype of a user-friendly web interface for people to collect family memories in a skuemorphic book. I was in charge of the front-end dev to make it work. Second, I built an iOS prototype (and an open source client) so that people with iPhones could browse their family tree and attach media to their ancestors, like being able to record interviews with family members using the app. Third, I build an interactive fan chart so people can browser their tree in a delightful way. They told me not to "waste time" on animations, but I ignored that and now those awesome animations are still there 7 years later:

FamilySearch Fan Chart from Adam Kirk on Vimeo.

Open Source

Objective-C / Swift

Option Stars Description
Touch Forms The forms framework that should come with UIKit
Fake Events Allows you to add lots of test event data to an iOS simulator or device using EKEventKit framework
ATKColor Color categories
Xcode Plugin An Xcode plugin for aligning code so it's more readable.
FamilySearchCocoa An easy to use library for interacting with the API on iOS or OS X
AutoKhan Auto plays Khan Academy videos one after another.
Big Splash tvOS Unsplash Client For Apple tvOS
MTAnimation Animate UIView with 25+ timing functions. (Bounce, elastic, exponential, etc.)
MTPDF Objective-C PDF objects. Doing my part to help us stay out of the headache that is Core Foundation.
MTPocket Cocoa Web Requests
Jumper Time and date library in Swift.
MTGeometry An extension to Core Graphics Geometry. Intersections, scaling, etc.
MTDates A thread safe date calculation library with all the date functions you'll ever need.
MYSForms Easy forms for iOS
MYSRuntime Obj-C Library that makes runtime self-inspection and class modification dead easy.
MTStringAttributes Easier way to create an attributes dictionary for NSAttributedString
MTQueue Add blocks to queues in a super terse and readable way!
MTPencil Draw animated lines (like an invisible pencil) with Core Graphics. (Prototype, will get much better).
MYSCoreText An Objective-C wrapper around Apple's Core Text framework.
MTTimer An Objective-C timer that restricts firing to a time range. If it's called BEFORE min, it waits for min. If it's called AFTER max, it's called at max.
MTFittedScrollView A UIScrollView subclass that resizes itself to fit around its content.
EKEventToiCal Returns a string in iCal format for an EKEvent object.


Flunk A gem for testing Ruby on Rails web APIs by simulating a client.



I love to work in a team and the strategies that help a team work efficiently. As we see in large corporations, 2 heads aren't always better than 1. When done correctly though, 2 heads can be as good as 3.


When I first got started programming, I remember the anxiety of pushing code to production. Since then, I've learned to love testing and the safety and peace of mind it provides. There's no greater feeling than seeing all green with 100% test coverage. Pushing to production with confidence is very satisfying. I also really enjoy the challenge of finding ways to test things that are particularly hard to test.


I love to study business and, in particular, startups.
Solution: To be a successful business, there has to be a real problem that people want a solution for. Even if they don't realize they have the problem until they see the solution.
Execution Provide a solution for which the experience of using is better than experiencing the problem. Hopefully, much better.
Distribution Spend less money finding, converting and fulfilling a buyer than you make from that single buyer.
Obviously, I love to help the businesses I work for execute an amazing experience that makes customers not only keep coming back, but love the product emotionally.

AI / Machine Learning

Every evening, I spend some time studying Machine Learning. I find it extremely exciting and think it opens up crazy possibilities for making the world a better place. With AI, I think computers can free up time for people to spend with their families and be much more effective and creative at work.