Git Product home page Git Product logo

spoke's People

Contributors

agreenspan24 avatar arique1104 avatar asalant avatar aschneit avatar aspensmonster avatar azuzunaga avatar bchrobot avatar codygordon avatar cp4r3z avatar crayolakat avatar filafb avatar frydafly avatar harpojaeger avatar hiemanshu avatar ibrand avatar inorvig avatar jamesr2323 avatar jeffm2001 avatar jeremyparker avatar joemcl avatar jparkrr avatar lperson avatar mathemagica avatar matteosb avatar sandramchung avatar schuyler1d avatar shakalee14 avatar spakanati avatar sreynen avatar stefanhayden avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

spoke's Issues

Add incoming messages dashboard

  • As an admin, I can see incoming messages for all campaigns filtered by date and campaign
  • As a volunteer texter, I can see if individuals have responded

Review security of app

any admin-only views should be admin only.

Note: nexmo incoming messages should verify that they are from nexmo but not a priority right now to implement.
Note: Need to write backend test that catch authentication issues

Reusable Scripts

As an admin, I want to be able to reuse scripts from previous campaigns so that I can text a new group without re-creating the conversation flow each time.

Copying a campaign involves creating a new campaign with title info (from campaign table), script data and canned response data (texters and campaign contacts should not carry over).

Strange behavior when editing texter assignments with autosplit on and some contacts have been texted already

On the campaign edit/create screen, in the texter panel.

Here's my test situation:
I have 6 contacts. I start with two texters. The Auto-split algorithm assigns three contacts to each texter. Texter A texts one contact; texter B texts no one.

  • Current behavior: When I go back to the campaign edit/create screen to add another texter (Texter C) with Auto-split still enabled, Texter C gets a single contact assigned to them. Texter B gets either 1 or 2 contacts assigned to them. Texter A still has 2 contacts assigned to them in addition to the 1 they've already texted.
  • Desired behavior: Algorithm should included the number of contacts already messaged in the total contacts assigned to the texter. In this case, Texter A would have 1 contact already messaged and one assigned, and Texters B and C would each have 2 assigned.

All sorts of other wacky things happen if you try to edit texter assignments with Autosplit on after the campaign starts and the texters have already texted one or more contacts.

Migrate from RethinkDB to Postgres

Phase III: Bug chasing

  • Invite logic needs updating in knex #86
  • assignments assigning, but making a second campaign seems to have weird behavior (thinks it already contacted the same contacts)
  • message.service is not being set properly

Phase II:

(checked means merged into master or knex branch)

  • workers/(incoming-|message-sender-)*.js: .group()...
    work requires coordination with moving away from user_number paradigm
    For similar pattern without regex, try .where(field, 'LIKE', '%7').orWhere..
  • #74 workers/jobs.js::assignTexters(job): .merge with meta/sub-queries
  • server/notifications.js: .changes()
    Might be able to implement this in rethink-knex-adapter as a listener
  • workers/number-assigner.js does-not-equal pattern in filter(). Also might want to try supporting relative ne, gt, etc in rethink-knex-adapter
  • pr api/schema.js::joinOrganization: nth() (rethink-knex candidate) @schuyler1d
  • #74 api/schema.js::createOptOut: merge(), ?forEach()? (or is that on a returned val)
  • #74 api/schema.js::sendMessage: merge()
  • #74 api/schema.js::deleteQuestionResponses: complex filter()
  • api/campaign-contact.js: innerJoin (on top of another eqJoin)
  • #70 api/user.js::todos: complex filter with r.and(...) @schuyler1d

Phase I:

Texter Saved Replies

  • As a texter, I can save my own canned responses that can be used across campaigns

Speed up dev start time

npm run dev takes a long time (20 seconds for some people, over a minute for others) to get to a working server, which slows down development significantly for things that require frequent restarts. Let's see if we can speed that up.

Improve sendMessage speed

  • Assign contact number upon signup instead of on first text
  • Move more of the method of sendMessage into the async part of sendMessage. See if we can get it down to < 50ms.
  • Make it threadsafe so we can have multiple message senders. Possibly look into using my new job queue to do this, creating a queue per number.

Easter Egg Invite Link

  • As a user, I can invite myself to the repo without directly going to port 8080 via a link on the splash page

fix incoming message processing

Sign in as an admin and create a campaign, assign contacts and a texter to this campaign, and a script, and then sign in as a the texter, and send the first message. As the message recipient, send a reply to this message.

As the texter, on the texter's campaign page, the texter should see a response from the recipient, and currently does not see this.

basically twilio sends back a message to /twilio which creates a record in pending_message_part table. Then the src/works/incoming-message.....js file is supposed to convert the pending_message_part record into a Message object. but that doesn't happen

Access data warehouse

  • As an admin, I want to have direct access to my own internal data warehouse from the application without uploading a CSV to create texting lists
  • As an admin, I want to sync information gathered from a campaign to the data warehouse. Currently, an admin is able to export data to an S3 bucket with proper credentials.

Event Syncing with Data Warehouse

  • Responses to surveys should be automatically/periodically recorded in the data warehouse i.e. scripts should sync yes responses with external datawarehouse

Remove gearshift.co references

Spoke was originally a project of gearshift.co and the codebase still has a lot of references to that. Now that it's open source, let's replace those references with more relevant links and email addresses.

Volunteer notifications configurable and by SMS

  • As a volunteer texter, I want to create a profile without having a campaign assigned to me
  • As a volunteer texter, I would like to be asked on sign up whether I want to let my volunteer coordinator notify me about my assignments via text or email
  • As a volunteer texter, I'd like to have a profile in order to change my preferences in the future on list notifications

Review Created Campaign

  • Admin should be able to review a campaign that is in process with correct response data
  • Admin should be able to receive a csv report

Mobile Responsive View for Texter

  • As a user, I should be able to easily use app on my phone.
  • Convert links to actual links
  • Texter campaign dashboard responsive to mobile (profile and landscape)
    • Too early to send messages button text bleeds
    • contacts count for send first, replies, and too early categories is too small on mobile
  • Texting dashboard buttons are scrambled in sizes and inconsistent
    • Send button needs to be more prominent
    • Cannot scroll in conversation to previous texts
    • Exit button isn't prominent

Reusable Texter Pool

  • As an admin, I want to be able to see a drop down of texters who have already signed up for a previous campaign to invite to a new campaign

Document data-flow

What are the data structures and how do they interract with the features and users of the system.

  • A high-level document for users
  • A more low-level document for developers

Local area codes

  • As a texter, I should be able to send messages to contacts with a phone number with a local area code.

Admin Interactions Nesting

  • As an admin, when I create an interaction script, my questions and links to the next step should display in some nesting format.

Invite logic needs updating in knex

Currently the invite link is going to /invite/null because it's not getting the ID back on creation. But even if it does get the ID back, we need to use something other than the ID for the URL, because IDs in PostgreSQL are not obscure hashes like they are in RethinkDB, they're easily guessable numbers.

Replace Babel dependency in server code build with newer NodeJS version

Development workflow would be a lot faster if we didn't have to run it through Babel between making edits and testing.

Newer versions of NodeJS support almost everything in ES2015. The main thing missing seems to be import which can be replaced with require pretty easily. Possibly this will be more complicated in practice, but in theory this could be a quick change that speeds up other dev.

knex bug: “Assigned Contacts” display is incorrect in Campaign screen

Sign in as admin user and create a campaign. Fill out all the parts of the new campaign including assigning some contacts. Assign 6 contacts in this example and then reload the page. Now instead of seeing 6/6 contacts assigned, the displayed message is "24 / 6 contacts assigned" - fix this to display the accurate number of assigned contacts

  • fix assignTexters not to duplicate assignments
  • #107 rework getContacts() in api/assignment.js to use a knex query fixing filters
  • #114 front-end client should distinguish between contactsCount and messaged contactsCount

getContacts filters (probably) not really working

getContacts here: https://github.com/MoveOnOrg/Spoke/blob/master/src/server/api/assignment.js#L17
is used lower down in the same file here:
https://github.com/MoveOnOrg/Spoke/blob/master/src/server/api/assignment.js#L101
Note that it has a query parameter for contactsFilter, e.g. from:
https://github.com/MoveOnOrg/Spoke/blob/master/src/containers/AdminCampaignEdit.jsx#L32

All of the logic in if (contactsFilter) { ... is making some subtle assumptions about how indexValues ends up used in getAll() below. This function should probably start with a knex query on top, and then add filters properly conditioned on the contactsFilter options enumerated.

This relates to #100 (it's bullet 2)

Tags

  • As an admin, I want to be able to create universal tags in case I want to save information about certain contacts
  • As a texter, I want to be able to tag contacts with admin created tags if a contact responds
  • Example:
    Admin creates a tag for 'potential leaders' with a description.
    Texter receives a reply from a highly experienced volunteer and is able to tag that number with the 'potential leaders' tag

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.