GithubHelp home page GithubHelp logo

the-vampiire / chingu-chimp Goto Github PK

View Code? Open in Web Editor NEW
6.0 3.0 1.0 340 KB

Fully featured Slack Application User profile system and API

Home Page: https://github.com/Chingu-Core-Components/ChinguChimp

JavaScript 84.43% HTML 14.78% CSS 0.79%
chingu chingu-cohorts javascript nodejs express slack slack-app slack-bot chingu-profile-card chingu-chimp

chingu-chimp's Introduction

The Chingu Chimp

Technologies

What is the Chingu Chimp?

I created the Chimp to give members of Chingu a more visual sense of community and personal growth. The Chimp is a robust profile bot that lets users update, view, and share each others profiles and profile items all from within Slack.

It also handles check-ins where users can keep track of personal, team, pair-programming, and accountability progress.

How does it work?

There are three commands that handle all of the Chimp's duties:

1) The /profile command: lets users view and share profile cards and individual profile items

2) The /update command: lets the user update all of their profile items using a git-style inline interface

3) The /checkin command: lets a user check-in themselves and any other partner(s) into a team meeting, pair-programming session, accountability session, or a self-checkin


The /profile command

The profile command is the heart of the Chimp. It lets users view and share each other's profile cards and profile items across all Chingu cohorts.

Chingu Profile Card

Chingu Profile Card Example

Each profile card is populated based on the available data for that user. The more you update the more detailed your profile will appear.

At the end of every card are a series of buttons. If a button is green it means a member has added that profile item - if it is grey they have not.

Clicking a profile item button will display that item along with a footer button to return back to the original profile card.

Chingu Profile Card Buttons Example

General Form:

  • /profile <@userName> [share] [profile item]
    • <@userName>: the user to be requested.

      • Note: if the user is in your cohort then their name will auto-complete through Slack.
      • you can still request a user's profile who isn't in your cohort as long as you know how to spell their user name
    • [share]: an optional parameter which will share the profile card / item publicly into the current channel

      • all profile card and profile item requests default to private unless the share parameter is used
    • [profile item]: an optional parameter to call a specific profile item.

      • if a profile item parameter is omitted then the requested user's profile card will be returned

Profile items that can be viewed or shared individually

  • Blog, Portfolio, Github
    • /profile @userName [share] blog

Blog / GitHub / Portfolio Example

  • Certifications
    • /profile @userName [share] certifications

Certifications Profile Example

  • Projects
    • /profile @userName [share] projects

Projects Example

  • Skills
    • /profile @userName [share] skills

Skills Example

  • Story
    • /profile @userName [share] story

Story Example


The /update Command

This is a summary of the command. For a detailed help guide you can issue the /update help command in Slack

  • You build your command by passing a profile item and its associated [-flag data] pairs.

General Form

  • /update <profile item> [ -flag data ]

List of Update Items

  • blog, certifications, gitHub, picture, portfolio, projects, skills, story

List of Update Flags

  • -date, -name, -repo, -url
  • All of the flags can also be written shorthand: -d, -n, -r, -u
type/format string mm/dd/yy string string
-flag -url / -u -date / -d -name / -n -repo / -r
Profile item
blog blog url
certifications certificate url completion date (optional)
gitHub GitHub profile url
portfolio portfolio url
projects project url completion date (optional) project name (optional) GitHub repo url

Note 1: Dates are optional. If no date is passed then the current date is inserted.

Note 2: Projects require at minimum a project name and GitHub repo link

Note 3: All urls must begin with http(s):// and are validated before being accepted and committed to the database. Certification urls are verified with Free Code Camp before being updated.

Updating Your Blog, GitHub Profile, or Portfolio URL

Example: /update blog -url https://blogurl.com

Updating Free Code Camp Certficiations

Example: /update certifications -url https://www.freecodecamp.com/userName/x-x-certification -date 01/01/11

Updating Profile Picture

The profile picture update command does not take any additional parameters. When the command is entered the user's current Slack profile picture will be saved and added to your Chingu profile card.

Note: The system is designed to update a user's profile picture automatically during the updating of any item - every 14 days. The /update picture command can be used to force an update at any time.

Example: /update picture

Updating Projects

flag data
-name Project Name
-date 01/01/11
-repo https://github.com/userName/repoName
-url https://projecturl.com

Example: /update projects -n Project Name -d 01/01/11 -r https://github.com/userName/repoName -u https://projecturl.com

Updating Skills

Skills are broken down into three categories: languages, frameworks, and technologies. Updating skills takes place in an interactive message

Example: /update skills

Update Skills Example

Updating a User Story

User stories can be updated by pasting or writing your user story after the /update story command.

  • Note: Slack markdown / formatting can be preserved by copying from the "edit message" window of your user story message in the intro-stories channel

Example: /update story Paste your user story here with *bold* _italic_ and any other Slack supported markdown

The /checkin Command

The check-in command lets users keep track of their progress through a simple 15 second process in Slack. Users can check-in to team meetings, pair programming meetings, accountability buddy sessions, or as inviduals in a self-checkin.

Check-in command example gif

My goal for check-ins was a way to quantify a major part of Chingu members' progress within the community and their teams. When team members check-in together they can each add and share the record of their check-ins on their profiles. Other members can view a user's check-ins as an indication of their ability and, most importantly, reliabilility.

How it Works

Check-ins take place using an interactive message menu (a Slack dropdown menu). When a user selects the type of check-in a new menu of type related activities are returned to select from.

Currently only pre-defined check-in types and activites can be chosen. You can add them as a comment to the Types and Activities issue on this repo and I will add them to the menus.

That being said - according to the Slack API Team's Trello they will be releasing version 3 of interactive messages "in the neat future" which will enable text input into Slack app messages.

In the future when text inputs become available check-ins can become much more specific. Check-ins could have a user input type, activity, and notes.

At that point it would be nice to build a simple front end that could display check-ins "posts" for users to have a running log of all they have accomplished in Chingu.

Using the /checkin Command

General form

  • /checkin [@partner] [@partner,N]

Using the check-in command is simple - you call the command and pass any partners (or none for a self check-in) then follow the interactive menu form that is presented to provide details about the check-in.

All users that are tagged in the command will have the check-in processed on their behalf. The user calling the check-in command is always included in the check-in.

Calling a check-in for just yourself

Example: /checkin

Calling a check-in for your team

Example: /checkin @userName1 @userName2


Errors

Feel free to mess up

All erroneous commands and invalid inputs should return a useful error message to help guide you towards fixing the command. If you do not receive a specific and useful error message for your erroneous command you can raise an issue on this repo to have it fixed.

API

The API is private right now but if you'd like to read more about it you can navigate to /API/getRequestGuide.md in the project

chingu-chimp's People

Contributors

dsegovia90 avatar jcroxford avatar the-vampiire avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

dsegovia90

chingu-chimp's Issues

Create README.md

I think it would be cool if you created a readme, so I knew what your project was about! It would really help with other people as well.

need: a checkin "form" message

use valStringer functions to build a form message.

process the bulk data received after the final submit button value is posted to the server

needed: front end user profile display in slack

we need to build a slack message to display the user's profile when it is called. it will be comprised of multiple attachments to house everything in an organized and visually appealing way

Detect a redirect when ping-testing certification urls.

Ping-testing is already live for all url flag data. However, it fails to prove the existence of a user's certification because FCC will auto-redirect a failed certification url to the homepage.

Detecting the redirect can be used as a means to determine the validity of the certificate. All certificate urls are already in full (https://www...) form due to input sanitation so there is no reason a certificate url should redirect unless it has been falsified.

Sort array items by date

New items are being .unshift() -ed into the arrays to always display first. That's lazy and should be changed to sort by date.

Restructure respond.js

respond.js is an abomination of code - something like 600 lines. it needs to be split into respondCheckin.js / respondUpdate.js / respondProfile.js / respond.js [the latter for general responses]

Help responses

Need a help response for /profile and /checkin
Place the help response in controller.js under the appropriate route (the if block is already set up)

/update needs better error checking

At this point consider rewriting the error scanner. It is reactive rather than proactive.

In any case it needs to be able to detect and throw an error for:
general: repeated tags (only one of each expected tag may be used)
projects: gitHub link missing [project url is optional]

/update skills

updating a skill is currently pushing it directly into the respective skill array. first it should check if that skills exists and if so update the skill level. if it doesnt exist then push it into the array (prevents repeats)

Help Needed: Designing new badge concepts (qualifiers) and designing badges (graphically)

Open for suggestions on:

new badge concepts and qualifiers. Examples include "getting your x-x certification", "50 check-ins", "5 projects completed" etc.

badge designs. I made the front end / back end / data vis certification badges using Piskel. any program can be used to make them as long as they are no larger than 32x32 pixels (and display properly in 16x16 format).

respond here or message @vampiire in Chingu Voyage / Central if you are interested in helping.

badges?

can badges be added to the profile? keep track anyways for the website. update schema to handle badges

add more badges

certifications
number of projects
streaks
total check-ins
number of cohorts
...

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.