Chorus


UCLA contacted us with the idea of developing this application for their neuroscience department.

Chorus is a web app that empowers people and communities to simply create their own text messaging and interactive voice applications.



Development

Chorus is a Ruby on Rails app that works to facilitate the creation and configuration of applications for the automatic response on mobile messaging services.

This app is integrated with Twilio and Trope as SMS services. The application provides a variety of tools to configure applications providing replies to the messages received.

module ClientFinder
def find_client(network, id, appid)
  send(network.downcase+"_find", id, appid)
end

def text_find(id, appid)
  app_client_id(:phonenumber, id, appid)
end

def sms_find(id, appid)
  app_client_id(:phonenumber, id, appid)
end

def voice_find(id, appid)
  voice_id(id, appid)
end

def voip_find(id, appid)
  voice_id(id, appid)
end

def sip_find(id, appid)
  voice_id(id, appid)
end

def voice_id(id, appid)
  app_client_id(:voicenumber, id, appid)
end

def skype_find(id, appid)
  app_client_id(:instantMessage, id, appid)
end

def app_client_id(column, id, appid)
  fixed_id = check_phonec(id)
  client = AppClient.where(["app_id = ? AND (voicenumber = ? OR instantMessage = ? OR phonenumber = ?)", appid, fixed_id, fixed_id , fixed_id]).last
  if client.nil?
    new_client(column, fixed_id, appid)
  else
    client.update_attribute(column, fixed_id)
    client.id
  end
end

def new_client(column, id, appid)
  AppClient.create(:app_id => appid, column => id).id
end

private

def clean_numberc(numberc)
  numberc.gsub(/[^0-9]/i, '')
end

def check_phonec(phonenumber)
  phonenumber = clean_numberc(phonenumber)
  return phonenumber if phonenumber[0..1] == '58'
  if phonenumber[0] != '1'
    return “1”+phonenumber
  else
    return phonenumber
  end
end
class CheckCaller
  attr_reader :id, :network
    def initialize(session, app)
      @app = app
      @id = session[:from][:id]
      @network = session[:from][:network].downcase
    end

    def is_valid?
      app_membership_type_name == 'open' ? true : app_have_caller_id?
    end

    private

    def app_have_caller_id?
      @app.app_clients.where(send(@network+"_caller") => @id).size > 0
    end

    def sms_caller
      :phonenumber
    end

    def sip_caller
      voice_c
    end

    def voice_caller
      voice_c
    end

    def ivr_caller
      voice_c
    end

    def voip_caller
      voice_c
    end 

    def voice_c
      :voicenumber
    end

    def skype_caller
      :instantMessage
    end

    def app_membership_type_name
      !@app.app_membership_type_id.nil? ? AppMembershipType.find(@app.app_membership_type_id).name.downcase : 'close'
    end

  end  

Don't take our word for it.

We run Chorus through Code Climate, and this third party app rates our code and gives us recommendations in how to improve it.


Our Process

Meetings

We have weekly calls where we discuss progress. We use Skype, Google Hangouts or GotoMeeting.

We agreed on a day and time that worked for everyone.

Planning

In the beginning we send a timeline specifying the planning and tasks for that week.

These tasks are the same cards we have planned in Trello.

Trello

We translate all requirements into stories in Trello Cards.

Trello is the place to add any specification, ask questions or comments to the team.

Deliveries

Once the tasks are done they go through a testing process and we pass them for your approval.

Every week we will pass cards onto the client list for you to give us feedback.

Quality Assurance

Once the functionality is completed one of our functional testers will try to break the feature.

We either move it to Needs Improvement or pass it to you for feedback.

Feedback

We need the support from you to review the cards and Approve them or tell us how to improve it.

This is key to meet goals and being on time in the development of the application.