Giter Club home page Giter Club logo

cb-connect's Introduction

CodeBuddies logo All Contributors All Contributors

CodeBuddies Hangouts Platform v2.0 - from scratch

slack in contributions welcome first-timers-only Issue Stats Issue Stats License: GPL v3 code style: prettier

FAQ

What is CodeBuddies?

We're a community of independent code learners who help each other on Slack, schedule hangouts to learn with each other, contribute to a periodic anonymous crowdsourced newsletter where anyone can share a personal project or leave a shout out, and post on Facebook. We come from all over the world; there are members living in the United States, Japan, Sweden, the United Kingdom, Russia, Australia, Canada, India, and more. We accept donations and are 100% transparent on Open Collective.

Learning with each other helps us learn faster. We strive to create a safe space for anyone interested in code to talk about the learning process. The project is free and open-sourced on Github, and this app is 100% community/volunteer-built.

Join us on Slack! You can get your invite by clicking on the Slack invite button and join the community by verifying your invitation through your e-mail!

How do I contribute to this project?

Much of the work on this platform has shifted to the next version of CodeBuddies (aka CBv3), built in React + Django API instead of Meteor.

The two new repositories:

PLEASE go to contributing.md and refer to the contribution steps listed there! There are also helpful resources there, in case you get stuck. To add yourself as a contributor, please see the How do I add myself as a contributor? section.

Please check out docs.codebuddies.org for the full documentation.

What are you trying to build here?

screenshot of what we're building Credit: Ada Chiu.

Why are you building this site?

Our community spends a lot of time helping each other on our public Slack (P.S. You can get an invite here if you want to join), but it's hard to schedule screensharing/voice hangout study times via Slack, and it's also hard to know who else is online and available for joining a Hangout to work on something together. The platform we're building solves those issues.

Support CodeBuddies

You can help keep this project alive by becoming a Sponsor!

You can also support us with a monthly donation by becoming a Backer!

Backers

Thank you to @distalx, @alfougy, and @mozzadrella for supporting us on our Open Collective!

Sponsors

Thank you to DigitalOcean for sponsoring our hosting, MongoDB Atlas for sponsoring our database hosting, and StickerMule for sponsoring $50 in credits!

Powered by DigitalOcean

Hosted by MongoDB Atlas

Netlify

Thank you to StickerMule for sponsoring $50 in credits!

Who are the contributors so far?

Note: if you think you should be on this list, please fill out this form.


Linda

๐Ÿ’ฌ ๐Ÿ“ ๐Ÿ› ๐Ÿ’ป ๐Ÿ“– ๐Ÿ“‹ ๐Ÿ” ๐Ÿค” ๐Ÿ‘€ ๐Ÿ“ข

nalbina

๐Ÿ› ๐Ÿ’ป ๐Ÿ‘€

distalx

๐Ÿ’ฌ ๐Ÿ› ๐Ÿ’ป ๐Ÿ“– ๐Ÿ“‹ ๐Ÿค” ๐Ÿš‡ ๐Ÿ‘€ ๐Ÿ”ง

Connie Leung

๐Ÿ› ๐Ÿ’ป ๐Ÿค” ๐Ÿ‘€

Ada Chiu

๐ŸŽจ ๐Ÿค”

Anbuselvan Periannan

๐Ÿ’ฌ ๐Ÿ’ป ๐Ÿ’ต ๐Ÿค”

Roberto C Quezada

๐Ÿ’ฌ ๐Ÿ’ป ๐Ÿค” ๐Ÿ‘€

Will

๐Ÿ’ฌ ๐Ÿ’ป ๐Ÿค”

BethanyG

๐Ÿ’ฌ ๐Ÿ› ๐Ÿ’ป ๐Ÿ“‹ ๐Ÿ’ก ๐Ÿค”

wuworkshop

๐Ÿ’ฌ ๐Ÿ” ๐Ÿค” ๐Ÿ‘€ ๐Ÿ’ป

Olivia Brundage

๐Ÿ’ฌ ๐Ÿ“– ๐Ÿค”

Hannan Ali

๐Ÿค”

Luke Camilleri

๐Ÿ’ป

Abhiram R

๐Ÿ’ป

Sharynne Azhar

๐Ÿ’ป

ispol

๐Ÿ’ป ๐Ÿค”

raresight

๐Ÿ“ ๐Ÿ’ป

Joel

๐Ÿ’ป

Michael

๐Ÿ’ป

Christoph Wagner

๐Ÿ’ฌ ๐Ÿ’ป

Patrick San Juan

๐Ÿ’ป ๐Ÿค”

Sheldon Barnes

๐Ÿ’ป

Sujil Anto

๐Ÿ’ป

techgeek503

๐Ÿ’ป

Omar Sanseviero

๐Ÿ’ฌ ๐Ÿ’ป ๐Ÿ“– ๐Ÿค” ๐ŸŒ โœ…

Angelo Cordon

๐Ÿ’ฌ ๐Ÿ’ป ๐ŸŽจ ๐Ÿ“– ๐Ÿค” ๐Ÿ‘€

Marc Baghdadi

๐Ÿ’ฌ ๐Ÿ’ป ๐Ÿค” ๐Ÿ‘€

Oliver Acevedo

๐Ÿ’ป

anonRegions

๐Ÿค”

ๅฒกใ€€ๅคง่ผ”๏ผˆDaisuke Oka)

๐Ÿค”

Tyler Hampton

๐Ÿค”

Alex

๐Ÿค”

grfraser

๐Ÿ’ป

Austin Ewens

๐Ÿ’ป

Jordan

๐Ÿ’ป

Jason Mabry

๐Ÿ’ป

ricjon

๐Ÿ’ป

morrme

๐Ÿ’ป

D/S

๐Ÿ’ป

Akosua

๐Ÿ’ป

Simon Brix

๐Ÿ’ป

Gabriel Ribeiro da Silva

๐Ÿ’ป

AJ Parise

๐Ÿ’ฌ ๐Ÿ’ป ๐Ÿค”

Marcia

๐Ÿ’ป

Jason Ly

๐Ÿ’ป

Raj Maurya

๐Ÿ’ป

Chris Ireland

๐Ÿ’ป

Radhika Morabia

๐Ÿ’ป ๐Ÿค” ๐Ÿ’ฌ

Gytis Daujotas

๐Ÿ’ป ๐Ÿค”

Rishabh Madan

๐Ÿ’ป

Jason Morris

๐Ÿ’ป

Rebecca Taylor

๐Ÿ’ป

Kevin Coleman

๐Ÿ’ป

Randy

๐Ÿ’ป

Dan Minshew

๐Ÿ’ป ๐Ÿ“‹

Arthur

๐Ÿ’ป ๐Ÿ’ต ๐Ÿค”

Julian Johannesen

๐Ÿ’ป ๐Ÿ“‹ ๐Ÿค”

agatac

๐Ÿ’ป

Kristina Karnitskaya

๐Ÿ’ป

Kenny Huynh

๐Ÿ’ป

Denny Scott

๐Ÿ’ป

Sarthak Batra

๐Ÿ’ป

R.Ganesh

๐Ÿ’ป

_Axieum

๐Ÿ’ป

josephkmh

๐Ÿ’ป

schoettkr

๐Ÿ’ป

Gabriel Romay Machado

๐Ÿ’ป

Lesfer Ayoub

๐Ÿ’ป

Jessica

๐Ÿ’ป

Vali Shah

๐Ÿ’ป

Steve Phillips

๐Ÿ’ฌ ๐Ÿ“

dmost1

๐Ÿ’ป

colleenboodleman

๐Ÿ’ป

Anish Singh Shekhawat

๐Ÿ’ป

Chen F.

๐Ÿ’ป ๐Ÿ“‹

Richard Tran

๐Ÿ’ป

Anna

๐Ÿ’ป

KPM

๐Ÿ’ป

Neha Batra

๐Ÿ’ป

Stratos Gerakakis

๐Ÿ’ป

Abhimithra Karthikeya

๐Ÿ’ป

Aaron Kim

๐Ÿ’ป

Harsh Vardhan

๐Ÿ’ป

ericathedev

๐Ÿ› ๐Ÿ’ป

Karthikeya Pammi

๐Ÿ’ป

Aditya Bansal

๐Ÿ’ป

Hamer Iboshi

๐Ÿ’ป

Jelani Thompson

๐Ÿ’ป

Govind Shukla

๐Ÿ’ป

mankinchi

๐Ÿ’ป

Steve Brewer

๐Ÿ’ป

Sebastian

๐Ÿ’ฌ ๐Ÿค”

Russ Eby

๐Ÿ’ฌ ๐Ÿค”

bryant tunbutr

๐Ÿค”

Albert Fougy

๐Ÿ’ต ๐Ÿค”

4imble

๐Ÿ’ฌ ๐Ÿ” ๐Ÿค”

Daniel Gillet

๐Ÿ’ฌ ๐Ÿ“‹

Judi

๐Ÿ’ฌ ๐Ÿ“‹ โœ…

Christopher Sabater Cordero

๐Ÿ’ฌ

Karyme Virginia

๐Ÿ’ฌ ๐Ÿ“‹

Matias Forbord

๐Ÿ’ฌ ๐Ÿ’ก

Gaurav Chikhale

๐Ÿ’ป ๐Ÿ“น

Emmanuel Raymond

๐Ÿ’ป

Bill Glover

๐Ÿ’ฌ ๐Ÿ“ ๐Ÿ› ๐Ÿ’ป ๐Ÿ“‹ ๐Ÿค” ๐Ÿ“น

Chuks Opia

๐Ÿ’ป

Maham Shahid

๐Ÿ’ป

Thanks goes to these wonderful people (emoji key):

This project follows the all-contributors specification. Contributions of any kind are welcome!

cb-connect's People

Contributors

angelocordon avatar d3vild06 avatar distalx avatar gauravchl avatar ispol avatar lpatmo avatar mcsmithers avatar

Stargazers

 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

cb-connect's Issues

Ability to provide feedback to the mentor

Not sure if this is already in the works, but something I remember Exercism.io allows users to do is rate their mentor and provide feedback. I'm kind of assuming mentors actually want feedback on how they are doing as a mentor. ๐Ÿ˜…

Define the minimal required node-version to run the app

In the package.json the engines specifies node as 8.11.4, but this force us to run the application with only that specific version of node. This could be changed to

... rest_of_code
  "engines": {
    "node": ">= 8.11.4"  // => this is the minimum required node-version you need to have to run the application
  },
... rest_of_code

This can be enhanced by adding a .node-version or .nvmrc file - depends which node version manager we decide to go with (nvm vs nodenv) - to the root of the project, i.e:

# .node-version || .nvmrc
8.11.4

This will throw a warning if you try to run the application without having this version of node installed.

Sidenote: node is at 10.15.3 LTS at the moment, so we might want to upgrade.

Use dotenv for environment variables

I think it might be worth looking into using dotenv to manage environment variables, like Sparkpost's API key. This seems to be the most compatible/reliable one I've seen for Meteor - https://atmospherejs.com/pauldowman/dotenv

The main problem statement here is simply a small inconvenience for now but I think could help future contributors in the long run. Currently, in order to get the authentication emails, we have to replace he password value in line 14 of dev-settings.json and ignore this when committing.

"password": "password",

Ideally, each contributor can have their own set of environment keys that doesn't checked in with git. I think using environment variables to manage these for us should help users get up and running easier and allow for better productivity.

I believe it might also give us a simpler way of running local versions as you probably shouldn't need to append --settings dev-settings.json when starting up anymore.

Of course this is a tiny optimization for now, but can be helpful in the future. Posting this here for discussion as we're going to be aware of this when deploying to Heroku as well.

Add prop validations through prop-types to our React Components

Currently we have 31 warnings on missing prop validations. To follow modern best practices when composing React components, we should include prop types in our components (both for documentation purposes and type checking; will help us improve our tests).

To see all components with missing prop types, run meteor npx lint in your terminal and it should return you a similar list of warnings:

image

The goal of this issue is to reduce the list down to 0.

For reference, see:
https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md
https://reactjs.org/docs/typechecking-with-proptypes.html
https://www.npmjs.com/package/prop-types

[UI] Clarify the field requirements on the 2nd application step

image

We accept pattern="[A-Za-z]{5,50}" for the name and pattern="[A-Za-z]{8,140}" for the one-line intro, but it's not immediately obvious to the user right now that the name can't include numbers, for example. Or that it has to be between 5 and 50 characters.

TODO:

  • Return an error warning about the requirement for each field

[Discussion] Connecting matched partners

Feature Story:
As a matched user, I should be able to connect with my matched partner intuitively.

--

The original idea stated that matches will be emailed by the platform so that their personal email addresses are anonymized. A matched user can then reply to the email and an email chain will be created:

platform emails both matches,
match 1 replies back on the thread ---> gets sent to the platform ---> gets sent to match 2,
and then vice versa. 

I think there's an in between layer here that handles the emails from the server side, but that seems very murky to me currently.

--

I want to propose that we explore alternative routes as multiway emails are really difficult to manage + outside variables that can potentially send emails from our platform to a user's spam folder, then missing connections.

I think it might be a more doable challenge to build out an in-platform messaging feature as we can control the environments more proactively, and also be able lean in more on Meteor's own reactive system (data on the wire philosophy).

We would still need to use emails as a form of notifications, but at least that way we've cut that down to a one way flow (our only responsibility is to notify users, we don't have to listen for incoming messages).

--
Relative issue for reference: #8

Set up CI deployments to Digital Ocean

Add abilities to automatically deploy to Digital Ocean once PRs are merged into master branch. Should set up checks and balances to ensure that things aren't breaking when released into production, and if they do, have a way to rollback to a stable release.

Make the anonymous public board

image - screenshot of gif created by @distalx

Each card should look something like this:
image

Or alternatively, each card would only contain the "more description" value the user filled in, but mousing over the card would show a popover containing the one-line intro and timezone:

image

Change /home to /dashboard

Change the name of the route from /home to /dashboard. (This is the page that users see when they are logged in.)

[UI] Add testimonials to landing page

On
image,

we need to add three testimonials:

  1. "I will say emphatically, your idea was a success!
    Gaurav was excellent. The lost concepts I had were clarified. I will spend the day practicing what he has taught me and move forward.
    I look forward to reciprocating one day."

"I have chosen to be a part of CodeBuddies Connect because I believe everyone needs to share their knowledge with other people. In the wonderful CodeBuddies community, there are many students who want to acquire new Computer Science skills. Thanks to the Connect program, we have a chance to help them and learn more along the way. Also, we are doing the most important thing: "Free education"." - Zoran Pandovski

  1. Find someone willing to give a third testimonial

Adjust the help text on Step 2/3 depending on the category selected

On step 2/3, we've got some help text underneath the "more description" box:

image

We should adjust it depending on the category the user selected on Step 1/3.

For example:

  • Coding/Accountability Partner
    e.g. I am working on ______ and hoping to accomplish my goal of ______. Looking for someone who can ______.

  • Feedback/Career Advice
    e.g. I am working on ______ and wondering if ______. Looking for advice on ______.

  • Mentor
    e.g. I am working on ______ and struggling with ______. Looking for someone willing to meet in a hangout/chat about/pair on ______ with me for _________ (30 minutes/an hour).

  • Mentee (I would like to mentor or teach)
    e.g. I have experience with ______ and interesting in teaching/mentoring someone on ______. Can meet for 1 hour this week/Would prefer to chat over text only, not in a hangout or call.

  • An Open Source Project to contribute to
    e.g. I have experience with ______ and am interested in working on a project with the following technologies: _________. I'm willing to contribute ______ (code/design/documentation/project management).

  • Potential New Contributor(s) to my OSS project
    e.g. I started an open-sourced project called ____ and am looking for contributors who can help with ________ (code/design/documentation/project management). Technologies involved: ________________.

  • Other (Not mentioned above)
    e.g. I am looking for ________.

Define moderator roles for users

Feature Story:
As a moderator, I should have the ability to add users as moderators so that we can have more help moderating the platform.

Broken endpoint for newly registered users

When a user finished inputting their information and hits submit, the endpoint hangs up.

The meteor console reads:

I20190506-14:40:07.608(-6)? { Error: Invalid login: 535 5.7.8 Sorry.
I20190506-14:40:07.612(-6)?     at SMTPConnection._formatError (C:\Users\chris\AppData\Local\.meteor\packages\email\1.2.3\npm\node_modules\node4mailer\lib\smtp-connection\index.js:558:19)
I20190506-14:40:07.615(-6)?     at SMTPConnection._actionAUTHComplete (C:\Users\chris\AppData\Local\.meteor\packages\email\1.2.3\npm\node_modules\node4mailer\lib\smtp-connection\index.js:1254:34)
I20190506-14:40:07.616(-6)?     at SMTPConnection._responseActions.push.str (C:\Users\chris\AppData\Local\.meteor\packages\email\1.2.3\npm\node_modules\node4mailer\lib\smtp-connection\index.js:341:26)
I20190506-14:40:07.616(-6)?     at SMTPConnection._processResponse (C:\Users\chris\AppData\Local\.meteor\packages\email\1.2.3\npm\node_modules\node4mailer\lib\smtp-connection\index.js:707:20) I20190506-14:40:07.617(-6)?     at SMTPConnection._onData (C:\Users\chris\AppData\Local\.meteor\packages\email\1.2.3\npm\node_modules\node4mailer\lib\smtp-connection\index.js:510:14)
I20190506-14:40:07.617(-6)?     at TLSSocket._socket.on.chunk (C:\Users\chris\AppData\Local\.meteor\packages\email\1.2.3\npm\node_modules\node4mailer\lib\smtp-connection\index.js:658:51)
I20190506-14:40:07.618(-6)?     at emitOne (events.js:116:13)
I20190506-14:40:07.618(-6)?     at TLSSocket.emit (events.js:211:7)
I20190506-14:40:07.619(-6)?     at addChunk (_stream_readable.js:263:12)
I20190506-14:40:07.619(-6)?     at readableAddChunk (_stream_readable.js:250:11)
I20190506-14:40:07.620(-6)?     at TLSSocket.Readable.push (_stream_readable.js:208:10)
I20190506-14:40:07.620(-6)?     at TLSWrap.onread (net.js:597:20)
I20190506-14:40:07.621(-6)?   code: 'EAUTH',
I20190506-14:40:07.621(-6)?   response: '535 5.7.8 Sorry.',
I20190506-14:40:07.622(-6)?   responseCode: 535,
I20190506-14:40:07.622(-6)?   command: 'AUTH PLAIN' }

If the in-browser console is read, you can see some sockJs errors such as

The connection to ws://localhost:3000/sockjs/663/ushrz9bh/websocket was interrupted while the page was loading.

Flag an entry (see: `flagged`: boolean)

Users should be able to block another user they were matched with. If they block the user, they'll never be matched with that other user again, and won't see that user's entries.

[Feature] Add Continuous Integration Service

Evaluate and implement a continuous integration service for open source projects (Travis-CI, CircleCi, or CodeShip). Main priority is to be able to run our testing frameworks on PRs and report back into GitHub so that we can automatically see if PRs are mergeable without failing specs.

--
Secondary goal would be to automatically deploy main branches (staging or master) to our Digital Ocean droplets as soon as conditions are good, but I think this part might need a broader discussion.

UI for user dashboard page

After applying, a user should:
[X] get an email asking them to verify their submission
image
image

[ ] After they click to verify the account, they should be redirected to their profile page (right now it looks like the profile page should be /home, but users are actually redirected to a link that looks like http://localhost:3000/enroll-account/G-qr9CR7NTLM4uhWemg-39oXMDnwIQ9OXPwCtMH--I after they click to verify in the email.)
[ ] Logged-in users should see a link to "Dashboard" on the navbar
[ ] On Dashboard page, users should see:

  • an option to submit another card
  • An anonymous board of already-submitted cards
  • hearts on each card to click on, indicating they want to be matched with that card
  • A list of previous matches
  • An area where where the new pending match is displayed. Here, they can click to accept (start a conversation with) or reject the match.
  • An option to expire a card they previously submitted
  • An option to edit a card they previously submitted

Split timezone into two lines

Current issue is that our timezone can sometimes be too long to fit inside a MatchCard component.
image

Proposing to breakdown the timezone into two segments so that they can be rendered as:
image

One approach would be to splice the timezone value and splitting them in the MatchCard component.

<small className="text-muted">{timezone}</small>

For example, if timezone returns the value of

'(GMT-12:00) International Date Line West'

use JS to split at ) (or use regex to split the value from (...) and everything else) so that we can add a break in between in the MatchCard render function:

render () {
   ...
   <Card.Footer>
       <small className="text-muted">{timezone[0]}</small>
       <small className="text-muted">{timezone[1]}</small> 
   </Card.Footer>
}

where timezone is now an array of ['(GMT-12:00)', 'International Date Line West']

--

A second approach would be to refactor the entries file so that the timezones are already split accordingly:

image

Integrate Cypress as an E2E testing framework

Adding e2e tests should help test out our React components as a whole; currently unit testing React is a bit weird as we're relying on DOM rendering; Writing some BDD tests on how our UI is suppose to function and work should help lower manual QA and solidify feature specs.

See: https://www.cypress.io/

Build Redesigned Landing Page

Revamp current landing page to

image

For specs, the page is split into halves - the first six columns for a wide display are for the main content, and the second six columns are for the carousel displaying a series of MatchCards components. The carousel would have to be built. For an idea of how the carousel should work, see this comment.

image

Other details:

  • The main primary colors use #277FE3 (primary buttons, h1 elements, a tags; not shown in this design sketch, but navigation links should also follow the same pattern: #277FE3 for link color and #386496 for hover color).
  • The h2 tag and other body text color uses #386496.
  • Lean in on React-Bootstrap components before making your own.

For additional reference, this is the Bootstrap theme were currently using - https://bootswatch.com/cosmo/

[MVP] Add "skills" fields to the application form

The two "skills" question in the original Google Form survey evoked some great responses which were more illuminating than the one-line intro, so am keen to add these two fields to the second step of the application form.

We can move the "More description" field to the first page for the form, since I often find myself forgetting the specific category I chose by the time I'm on the second page.

image

[UI] FAQ Page - Questions Brainstorming

Brainstorming some questions folks might have... feel free to comment w/ more questions.

0/ What is CodeBuddies Connect?

1/ Why does it exist?

2/ How does it work?

3/ Can I request to be matched with someone in particular?

4/ How do I flag a user I do not want to connect with, after the match is made?

5/ How do I flag a user who violated the Code of Conduct?

6/ What are the expectations after I am matched with someone?

7/ Can I submit multiple entries at the same time?

Match and send an introductory email

Questions:

  • Do we leave it all to the system to find a match based on two categories? (e.g. mentor -> mentee) and the description in the "learn more" section?
  • Or do we also allow volunteer mods to click on two users, then hit submit, which fires off an introductory email between the two?
  • Or do we rely on manual matching from the start?

The email will ask the user to log in to contact their match. Will file a separate issue about creating that inbox feature.

UI for moderator dashboard

We need to design the UI for what the moderator will see when they log in to start manually matching cards.

[MVP] Function that generates email template to send out

The template:

Hey [NAME],

After sifting through all of the submissions, we narrowed down the perfect [OPPOSITE CATEGORY NAME] for you this week.

People who have connected through CodeBuddies have gone on to make projects together, host hangouts together, and keep each other accountable to their goals.

As a reminder, you said you were looking for:

[CATEGORY]
One-line intro of yourself: [ONE-LINE INTRO]
What skills can you help others with? [SKILLS HELP OTHERS]
What skills are you trying to improve? [SKILLS TO IMPROVE]
Timezone: [TIMEZONE]
General availability this week: [AVAILABILITY]

Your CodeBuddy is [NAME OF PARTNER].

[NAME OF PARTNER] is looking for [CATEGORY NAME]
One-line intro of [NAME OF PARTNER]: [PARTNER INTRO]
Skill(s) [NAME OF PARTNER] can help others with: [SKILLS HELP OTHERS]
Skill(s) [NAME OF PARTNER] is trying to improve: [SKILLS IMPROVE]
Timezone: [TIMEZONE]
General availability this week: [AVAILABILITY]

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.