Giter Site home page Giter Site logo

kindlyops / chirpyhire Goto Github PK

View Code? Open in Web Editor NEW
3.0 3.0 0.0 15.4 MB

๐Ÿคณ ChirpyHire v1 ๐Ÿ‘ฉโ€๐Ÿ’ผ

Home Page: https://app.chirpyhire.com

License: Apache License 2.0

Ruby 50.22% JavaScript 10.39% HTML 13.91% CSS 25.38% Shell 0.04% Dockerfile 0.05%
sms telephony screening chatbot recruiting

chirpyhire's Introduction

README

Zero to Green

  1. Install xcode command line tools and homebrew
  2. brew install rbenv ruby-build libpq readline yarn
  3. Follow printed instructions on activating rbenv in your shell
  4. RUBY_CONFIGURE_OPTS=--with-readline-dir=brew --prefix readline rbenv install 2.6.2
  5. git clone [email protected]:kindlyops/chirpyhire.git
  6. cd chirpyhire
  7. ruby -v should show version 2.6.2. which ruby should show an rbenv path similar to /Users/emurphy/.rbenv/shims/ruby
  8. gem install foreman
  9. gem install bundler
  10. bundle config --local build.pg --with-opt-dir="/usr/local/opt/libpq"
  11. bundle install
  12. yarn install
  13. rbenv rehash

Set up PostgreSQL and Redis

  1. brew install redis (remember to start redis)
  2. set up https://postgresapp.com with PostgreSQL 10

initialize the environment

  1. rails db:create && rails db:migrate && rails db:seed && rails assets:precompile
  2. rspec
  3. ./start
  4. open localhost:3000

Experimental docker alternatives

  1. Install docker and docker-compose.
  2. Get .env file from a developer. You can use dummy keys to help run tests.
  3. build containers, set up database
docker-compose up -d
docker-compose exec website rails db:create
docker-compose exec website rails db:migrate
docker-compose exec website rails db:seed
docker-compose exec website rails assets:precompile
open localhost:3000

Demoing App

Ensure you have a clean install: rails db:drop && rails db:create && rails db:migrate && rails db:seed Start Local Server: foreman start -f Procfile.dev

TODO: describe how to use the demo environment

Twilio Development

Use ngrok tunnel For Twilio Webhook: ngrok http 3000 Login to Twilio and set SMS Webhook URL to the Dynamic ngrok URL. More info

Stripe Development

Use test keys and test environment.

To run a single rspec test

rspec spec/models/contact_spec.rb

to run the rspec tests for the reminders

rspec spec/lib/reminder/**

Interactive database maintenance

To get a local rails console:

rails console

Find a user

a = Account.find_by_email '[email protected]'

chirpyhire's People

Contributors

dependabot-preview[bot] avatar dependabot-support avatar hwhelchel avatar johnwhelchel avatar statik avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

chirpyhire's Issues

Survey

As a home care recruiter, I would like to be able to survey leads so that I can hire the best candidates for my agency.

  • Surveyor welcomes the Person
  • Surveyor asks the questions
  • Surveyor gets the next question from the Survey
  • Survey has Questions (experience, skin test, availability, transportation, zip code, certification, CPR / 1st Aid)
  • Surveyor uses the Survey (uses the Questions) to determine the validity of an answer
  • If answer to a question is valid or invalid, the Surveyor uses the Survey (and Question) to determine the appropriate response
  • Surveyor saves each outbound and inbound message
  • Surveyor creates or updates the person's candidacy and updates the question the person is on when valid answer
  • Surveyor thanks the respondent in a standard way at end of survey

CPR / 1st Aid Question

Is your CPR / 1st certification up to date? Please reply with just Yes or No.

  • Approximate string match the answer to yes or no and accept as valid.

  • Else consider the answer as invalid and respond with "Sorry, we didn't quite get that. Please reply with just Yes or No."

  • Question#body

  • Answer takes a Question on initialization

  • Answer#valid?

  • Question#restated

List View

As an HCA, I would like to see a list of all my candidates, so that I can recruit best fit candidates.

  • Sort
  • Paginate
  • Click on phone number to go to conversation page.

Search Candidates List

  • Against phone number, zipcode, availability, experience, certification, skin_test, cpr / first aid, subscribed / unsubscribed, promising / ideal, screened / unscreened.
  • using :tsearch
  • tsearch weights
  • tsearch prefix true
  • tsearch negation true
  • tsearch english dictionary for stemming
  • consider tsearch any_word
  • order_within_rank by last updated candidacy

Option A:

  • Multisearchable.where(searchable_type: 'Contact')
  • Add organization_id to pg_search_document
  • Scope search of contacts to organization_id

Option B:

  • Merge Person into Candidacy
  • Switch Integer Enums to Strings
  • Add ts_vector columns

Option C:

  • Search against Candidacy and use person: contacts join to scope to Organization
  • Switch Integer Enums to Strings
  • Validate these Strings are in a certain list
  • pg_search_scope :search_candidacies

=========

  • tsvector columns for each column
  • after_create, after_update hooks to update the tsvector columns
  • Add class method to regenerate the tsvector columns in background jobs
  • native SQL schema format

=========

  • consider interaction between existing sort feature and the searching
  • consider trigram
  • consider a materialized view over person, candidacy, and subscriber tied to organization, with enums turned into strings

Track if Ideal Candidate

As an HCA, I would like to know if a candidate is ideal or not.

Ideal: Within zip codes specified, has reliable personal transportation, has Skin Test, has CPR / 1st Aid, currently licensed or certified.

  • Show definition of ideal candidate in the Ideal Candidate page
  • Add Subscriber#ideal? and Subscriber#promising?

Location

Add Location to the List View

Zip Code and Map Marker Icon

Provision Phone Number

As a HCA, I would like a unique local phone number so that I can screen candidates via text.

  • When an HCA signs up ask for email and zip code

Restate Question

Only restate question once, then say we're getting help etc. someone will respond shortly.

Thank You

Thanks for your interest!

  • Reply with once all questions have been asked

Refresh Candidates List

As a user, I would like to be able to refresh the candidates list view to see new incoming candidates.

Unsubscribe Person

As a lead, I would like to be able to unsubscribe from an HCA if I'm no longer interested in receiving SMS messages.

Ideal Candidate

As an HCA, I would like to be able to specify my Ideal Candidate so that I can easily filter down to a smaller list of candidates.

  • Specify Zip Codes the HCA operates in
  • Show the Icon Legend of Data
  • Include form where the HCA can submit suggestions of other data they would like to know on their caregivers.

Make it look like a social profile

Certification Question

Are you currently licensed or certified? a) Yes, CNA b) Yes, PCA c) Yes, Other (MA, LPN, RN, etc.) d) No Please reply with just the letter a, b, c, or d.

  • If the candidate answers is the multiple choice letter, or stripped of punctuation and spacing is the multiple choice letter, accept as a valid answer.

  • Approximate string match the answer and accept as valid.

  • If neither of those work, consider the answer as invalid and respond with "Sorry, we didn't quite get that. Please reply with just the letter a, b, c, or d."

  • Question#body

  • Answer takes a Question on initialization

  • Answer#valid?

  • Question#restated

Zip Code Question

What is your five-digit zipcode?

  • Strip of punctuation spacing etc.

  • Approximate string match to all the zip codes in the U.S.

  • Else consider the answer as invalid and respond with "Sorry, we didn't quite get that. Please reply with just your five-digit zipcode."

  • Question#body

  • Answer takes a Question on initialization

  • Answer#valid?

  • Question#restated

Message Candidates

  • Show Conversation
  • Show Profile
  • Empty States of the Profile
  • Track if Manual or Automatic Message.
  • Send a message (use AJAX).
  • Empty States of the Messenger
  • Enter to send, ctrl+enter for newline

Screened

bookmark + certificate font-awesome icon
greyed out icon at first with gray background.
3D button with this styling: http://codepen.io/jgthms/pen/EjxBdR
Transition color of icon to blue and background of button to white
Animate transition of icon color

  • flip flag on backend that they are now screened

  • Mark as Screened

  • Unmark as Screened

  • Add ability to export screened status

  • Add ability to sort by screened status

Welcome

As an HCA, I would like to welcome new leads to the screening process.

  • If the Person does not have a candidacy and has not been welcomed before it prepends a welcome preamble to the first question.

Survey

  • Person is shared across the entire app
  • Candidacy is shared across the entire app
  • Messages are tied to organization and Person
  • If a Survey has already begun for a person and an organization then finish that survey and don't start another one
  • If a Survey has been completed for a person, then don't re ask the questions.

"Not Ready" List View

As a user, I would like to be able to see all candidates that haven't finished the survey so that I can message them and support them in finishing the survey.

  • View Contact, First Activity, Last Activity, Survey Progress, and Temperature
  • Sort Not Ready List View
  • Export Not Ready List View
  • Search Not Ready List View

Availability Question

As a HCA, I would like to ask what availability people have.

  • Live in
  • Hourly
  • Both

"Please reply with just the letter a, b, or c."

  • If the candidate answers is the multiple choice letter, or stripped of punctuation and spacing is the multiple choice letter, accept as a valid answer.

  • Approximate string match the answer and accept as valid.

  • If neither of those work, consider the answer as invalid and respond with "Sorry, we didn't quite get that. Please reply with just the letter a, b, or c."

  • Question#body

  • Answer takes a Question on initialization

  • Answer#valid?

  • Question#restated

Transportation Question

Can you easily get to client's homes?

a) Yes, I have reliable personal transportation.
b) Yes, I use public transportation
c) I do not have transportation.

"Please reply with just the letter a, b, or c."

  • If the candidate answers is the multiple choice letter, or stripped of punctuation and spacing is the multiple choice letter, accept as a valid answer.

  • Approximate string match the answer and accept as valid.

  • If neither of those work, consider the answer as invalid and respond with "Sorry, we didn't quite get that. Please reply with just the letter a, b, or c."

  • Question#body

  • Answer takes a Question on initialization

  • Answer#valid?

  • Question#restated

Real Time Messages 1-1

  • Animate appending message to list
  • Receive inbound messages automatically
  • Admin Presence

Subscribe Person

As a lead, I would like to be able to subscribe to an HCA's SMS messages, so that I can get a job.

Skin Test Question

As a HCA, I would like to ask if people have a skin test.

"Is your TB skin test or X-ray up to date?"

"Please reply with just Yes or No."

  • Approximate string match the answer to yes or no and accept as valid.

  • Else consider the answer as invalid and respond with "Sorry, we didn't quite get that. Please reply with just Yes or No."

  • Question#body

  • Answer takes a Question on initialization

  • Answer#valid?

  • Question#restated

All Candidates

  • Click button exports to CSV.
  • Change name of CSV download file
  • Handle cells with multiple rows within them
  • Add text to export buttons

OR...

  • respond_to csv, send_data
  • Add to_csv method to class

Experience Question

As a HCA, I would like to ask how much experience people have.

  • 0 - 1 years
  • 2 - 5 years
  • 6+ years

"Please reply with just the letter a, b, or c."

  • If the candidate answers is the multiple choice letter, or stripped of punctuation and spacing is the multiple choice letter, accept as a valid answer.

  • Approximate string match the answer and accept as valid.

  • If neither of those work, consider the answer as invalid and respond with "Sorry, we didn't quite get that. Please reply with just the letter a, b, or c."

  • Question#body

  • Answer takes a Question on initialization

  • Answer#valid?

  • Question#restated

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.