From Idea to App Store: The Neo4j Story of Traverse Mobile [Community Post]


[As community content, this post reflects the views and opinions of the particular author and does not necessarily reflect the official stance of Neo4j.]

Where We Got the Idea for Traverse


Our co-founder was inspired to build Traverse Mobile while on a backpacking trip to Thailand in 2011.

After spending two nights in the elephant jungles of Chiang Mai with a strange – but inspiring and contagiously fun – group of tourists and locals, he left with more than great memories and a rolodex of friends from around the world. He had pages of travel tips on where to go, what to see, and where to eat all throughout Thailand. This planted the seed for Traverse.

Two years later, he was on a trip to Rome and looking for a place to escape the tourist maze. Fed up with sifting through hundreds of random travel websites and long-winded Yelp reviews from strangers, all while having to constantly close and re-open his Google maps app to get directions, he finally exclaimed to his travel buddy: “Dude, I’ve had enough! I shouldn’t have to use 4, 5 or 6 websites or apps for tips on where to go and what to do!”

What we needed was a simple, yet beautiful mobile-friendly way to save and share all of the great experiences we have around the world in the form of a personalized map with trusted ratings and reviews from people you know – and more importantly – trust.

So in 2015 we began to Traverse.

Validation Sure Helps


During the summer of 2015, Colby and I attended a Startup Weekend business-to-business edition in New York City, met a bunch of incredible people and gained a lot of valuable advice. We were able to interact with potential clients, find our niche, construct a sound business plan and begin to validate the idea with the 80+ participants that were there.

We felt like rock stars! No one thought it was a dumb idea, everyone felt the same pain that we feel when we travel, and we were off to a great start! We came away from this weekend with a lot of great ideas, but it was time to put the fingers on the keyboard and begin to make this a reality.

The First Adventure


You hear about the success of startups in the news, kids in college with ideas for the Uber of Facebook, and the dream of being absurdly lucky and become apart of a unicorn (private company valued at over $1B) like Uber Technologies.

The reality is that the success rate of startups becoming a viable business is around 1%. Startups fail for all sorts of reasons, but I will leave that analysis to the experts like Paul Graham.

Our first adventure was finding talent that shared Colby and my vision and was willing to dedicate immense time, sweat equity and painful failures in order to bring this idea to fruition. We got lucky because two very good friends of mine, Ahmed and Sam, who I regularly play tennis with were engineers and capable of helping! Another great pick up was Colby finding Mike, our graphic designer.

No one wants to use an app that looks like garbage and he has and continues to do an incredible job making every page, image and interaction feel native and beautiful. Colby and Mike are very meticulous at this and internal feedback is a story for another time.

Where Do We Start


The team all has iPhones, and we wanted to be able to use our own app, so coding in Swift for iOS simply made sense.

Startups generally host applications, databases and infrastructure in the cloud because of its cheap and efficient setup. We chose AWS because we use them at ASU.

Next, we needed to decide how we were going to store our data. Being the data guy in the group, I despised a lot of my interactions with SQL for a variety of reasons. While I never had the pleasure of immersing myself in a NoSQL database, I knew there had to be a better way.

Research is what led me to discovering graph databases and their potential to easily connect the dots in social applications. This also then led me to Neo4j Community Edition so I threw it on my local machine and began to learn.

The movie tutorial embedded in the product was my first interaction with Cypher queries – or even a graph – and it all just came naturally. I instantly became an advocate of the graph! Neo4j was awesome and this became our backend database.

How Do We Get This on the Cloud


We were instantly out of our league. No one on the team had ever set up infrastructure, and we didn’t exactly have time to learn how. Back to Neo4j! In a few short minutes, we came across this gem of a GitHub repository on their website, and we were up and running.

I knew how to interact with Neo4j from the browser, but our next step was to figure out how our app was going to read and write data to our database. In a few short minutes, we found an incredible framework from Cory Wiles, and we were back at it with our first Theo function – creating users!

func CreateUserNode(completion: () -> Void){
        let url: String = glblUser.serverLink
        let theo: Client = Client(baseURL: url, user: glblUser.serverUse, pass: glblUser.serverPass)
        let node = Node()
        let date = NSDate()
        let dateFormatter = NSDateFormatter()
        let timeFormatter = NSDateFormatter()
        dateFormatter.dateStyle = NSDateFormatterStyle.ShortStyle
        timeFormatter.timeStyle = NSDateFormatterStyle.ShortStyle
        dateFormatter.stringFromDate(date)
        timeFormatter.stringFromDate(date)
       
        let sodium = ***
        let message = ***
        let h = ***
        var randomOne = ***
        let randomTwo = ***
        var hashedPassword = ***
        hashedPassword += ***
        randomOne += ***
        let finalHash = ***
       
        node.setProp("Email", propertyValue: email)
        node.setProp("FirstName", propertyValue: firstName)
        node.setProp("LastName", propertyValue: lastName)
        node.setProp("Password", propertyValue: finalHash)
        node.setProp("Description", propertyValue: "Photographer. Explorer. Foody. I love Traverse!")
        node.setProp("Time", propertyValue: "\(timeFormatter.stringFromDate(date))")
        node.setProp("Date", propertyValue: "\(dateFormatter.stringFromDate(date))")
        node.setProp("CountReviews", propertyValue: 0)
        node.setProp("CountFollowers", propertyValue: 1)
        node.setProp("CountFollowing", propertyValue: 1)
        node.setProp("PictureName", propertyValue: ***)
       
        theo.createNode(node, completionBlock: {(node, error) in
        	//print("new node \(node)")
        	self.SaveData({() in
        	})
        });
        glblUser.loggedIn = true
    }

Here I am, the first user!

MATCH (n) WHERE n.FirstName = “Corey” 
RETURN n

Adding a User via Neo4j Cypher Query on Traverse Mobile


Neo4j just connects the dots for us and allows to build recommendation engines as well as understand the strength of specific relationships.

MATCH (a)-[b:FOLLOWS]-(c) WHERE a.FirstName = “Corey” 
RETURN a,b,c

Learn How Traverse Mobile Went from Idea to Beta Release in the App Store Using Neo4j


This is all very basic and does not even begin to scratch the surface of Neo4j, but in order for us to understand user adoption and identify Traverse influencers, it all becomes very clear very easily.

A Note on Support


We have had questions, hiccups and random thoughts along the way and the Neo4j team including William Lyon has been very supportive along our journey and they have saved a tremendous amount of headaches.

Their neo4j-users Slack group was a great idea and if you use Neo4j and are not on there – then get on there!

Where We Are Today


Development is chugging along with over 25,000 lines of code, and the beta app is in the iOS app store under the name Traverse Technologies. Our graph is becoming increasingly more complex as we develop the functionality to better track user interactions with their map and other users, allow users to upload images, share tips and like posts.

Neo4j has proved great in terms of speed, mathematical computation, pattern recognition and we are very happy with our results!

Thank You


Traverse is a confluence of a simple concept, a bold idea of what the world “should” be like and the hard work of many people to bring this to reality. To our current users and future users (and to the Neo4j team), we thank you because none of this would be possible without your dedication and support.


Want to use Neo4j to get started on your own app or project? Click below to get your free copy of the Learning Neo4j ebook and catch up to speed with the world’s leading graph database.