We’re happy to announce the first public beta of Flightminer! It’s been a long time in the making, but we think the finished product is worth the wait. Flightminer is a tool that lets you find cheap combinations of flights.

There’s lots of great sites where you can shop around for cheap A-B-A flights, but only a few of these handle multistop and not particularly well.

Our intention was to create a site for people who don’t always know where they’re going. In Flightminer.co, you can enter the start and end date and location for your trip and we’ll do the rest. We use clever-ish algorithms to generate cheap combinations of flights that fit with with your plans.

You say Python, I say Meteor

My friend, Dave, first came to me telling me he’d started crawling the Easyjet website. He knew Python and so thought that he would have to learn Django to create the app that was necessary for to share his code’s functionality with the masses. I travel a lot and thought this would be a pretty good tool. Before, I would jump on any project, but now I try and stick with projects where I would actually be a customer. This helps dramatically with the testing process.

I told him that I’d fallen in love. His reaction was “Again?”, but then I explained that she was a full-stack Javascript framework. He only knew how to work in Python and I was only really interested in working with Meteor.

Problem? It was until I ready this blog about publishing anything that I realised how easy this could be.

Publishing from a JSON API with Meteor

A simple example of how to publish anything taken from the Meteor Capture blog shows how to publish data not stored in a collection.

Meteor.publish "books", ->
  self = this
  books = [
    {title: "Book 1"}
    {title: "Book 2"}
    {title: "Book 3"}
  ]
  _.each books, (book) ->
    self.added "books", Random.id(), book

  self.ready()

 

The next step is to replace the books with the the results that would come from the external api. I also added an argument to the publish function for the search query.

Meteor.publish "results", (query) ->
  self = this

  try
    url = Meteor.settings.apiUrl

    #Make the call to the Python API
    response = HTTP.get url, query
    combinations = EJSON.parse(EJSON.parse(response.content).message)

    _.each combinations, (combination)->
        self.added "results", Random.id(), doc

  catch error
    self.error(error)

In order to hide the API’s URL, I actually wrapped this in a method which complicated things.

Advantages and Disadvantages of using two different frameworks

Advantages:

  • Individual team members can play to their strengths
  • Can make the most of the comparative strengths of each framework

Disadvantages:

  • Two entirely separate code bases
  • Must be deployed separately

I would be happy to work like this again. My strengths are providing the user an awesome frontend experience and getting the data from an external api allowed me to better focus on this. Take a look at Flightminer and see what you think.