Giter Club home page Giter Club logo

quill's Introduction

Quill

Registration, for hackers!

Contributor Covenant License: AGPL v3 Dependencies Codacy Badge

Quill is a registration system designed especially for hackathons. For hackers, it’s a clean and streamlined interface to submit registration and confirmation information. For hackathon organizers, it’s an easy way to manage applications, view registration stats, and more!

Login Splash

Table of Contents

Features

Quill for Hackers

Dashboard

Dashboard

After users login, the Dashboard displays the user’s application status and status-specific prompts to resend a verification email, view/edit their application or confirmation forms.

Statuses:

  • Unverified: users have not verified the email address they registered with
  • Incomplete, registration open: the user has not submitted their application, but the registration deadline has not passed
  • Incomplete, registration closed: the user has not submitted, but the registration deadline has passed
  • Submitted, registration open
  • Submitted, registration closed
  • Admitted / unconfirmed: the user has been admitted to the event, but has not confirmed their attendance and submitted their confirmation form
  • Admitted / confirmation deadline passed: the user has been admitted, but did not confirm their attendance before the deadline
  • Waitlisted: the user was not admitted to the event
  • Confirmed: the user has been admitted and has confirmed their attendance
  • User declined admission: the user has been admitted, but will not be attending the event

Application

Application

The Application tab takes users to their registration or confirmation form.

Team Registration

Hackathons commonly allow participants to register and be admitted as a team. The Team tab allows users to create or join a team with other users.

Quill for Admins

Admins can view stats, look through applications, or edit settings from the Admin panel.

Stats

Stats

The Stats tab summarizes useful registration statistics on the number of users in each stage of the process, demographic information, and miscellaneous event preferences like shirt sizes, dietary restrictions, or reimbursement requests.

Users Table

Users table

The Users tab displays a table of users where admins can:

  1. Search for a user by name
  2. Quick-view user applications in a pop-up modal
  3. See a user’s application status (verified, submitted, admitted, and confirmed) at-a-glance
  4. See responses to other miscellaneous fields on the application
  5. Open and edit an individual application
  6. Admit users manually
  7. Mark users as checked-in at the event day-of

Settings

Settings

On the Settings tab, admins can easily control their event application timeline by setting registration / confirmation deadlines. They can also write custom waitlist, acceptance, and confirmation copy that users will see on their dashboard throughout the application process. The custom copy is interpreted as Markdown, so HTML and images can be added.

Setup

Deploy

Requirements

Requirement Version
Node.js 10.13+
MongoDB 4.0+

Run the following commands to check the current installed versions:

node -v
mongo --version

How to upgrade to latest releases:

Additonally, there is an .nvmrc file in the root of the project. You can use Node Version Manager (nvm) to make sure you are using the right version of node for this and other projects! This also ensures that any cloud deployments of the project use the same version of Node.

We use dotenv to keep track of environment variables, so be sure to stop tracking the .env file in Git:

git update-index --assume-unchanged .env

After doing this, fill in the environment variables in the .env before running Quill.

Local Deployment

MongoDB

Ideally, you should run MongoDB as a daemon with a secure configuration (with most linux distributions, you should be able to install it with your package manager, and it'll be set up as a daemon). Although not recommended for production, when running locally for development, you could do it like this

mkdir db
mongod --dbpath db --bind_ip 127.0.0.1

SMTP

This step is only required if you want to test the email-related functionality of Quill. The easiest option is to use the SMTP server provided by your personal email (Gmail, Outlook, etc.). Look for the documentation about SMTP for your respective email and fill in the values in the .env accordingly. Be warned that sending many emails this way is not recommended and this method should only be used for testing. In particular, note that Gmail will require you to enable less secure apps in your security settings before Quill will be able to send email.

Quill

Install the necessary dependencies:

npm install

Ensure you have filled in the .env according to your setup, and then run the application:

gulp server

Deploying for your hackathon

MongoDB

The database can either be hosted with a cloud-hosted MongoDB provider, such as MongoDB Atlas, or on your own server. Cloud-hosted MongoDB will generally be easier to set up and should be the preferred choice unless you are familiar with administering your own server. A guide to setting up Atlas can be found here. Note that the URI for the database (which must be specified in .env) will be different depending on where your database is hosted. If you use the "Deploy the Heroku" button in this document, a MongoDB instance will automatically be spawned via Heroku.

SMTP

A dedicated SMTP provider is absolutely required if you want Quill to work for your hackathon. There are several providers available such as Mailgun or Sendgrid, both part of the GitHub Student Developer Pack. After setting this up, fill in the .env with the values that your provider gives you.

Quill

There are also several options for hosting Quill itself. You can use Heroku by clicking the Deploy to Heroku button above where, after making a Heroku account, you will be able to set the configuration variables and deploy Quill. A Dockerfile has also been provided to make it easy to run Quill in a Docker container either on your own server or with your preferred cloud service provider. Don't forget to publish the container's port 3000 to the host machine. If using the command line, this is done by using the -p flag and specifying which port on the host machine should redirect to port 3000 on the container.

Customizing for your event

If you're using Quill for your event, please add yourself to this list. It takes less than a minute, but knowing that our software is helping real events keeps us going ♥

Copy

If you’d like to customize the text that users see on their dashboards, edit them at client/src/constants.js.

Branding / Assets

Customize the color scheme and hosted assets by editing client/stylesheets/_custom.scss. Don’t forget to use your own email banner, favicon, and logo (color/white) in the assets/images/ folder as well!

Application questions

If you want to change the application questions, edit:

  • client/views/application/
  • server/models/User.js
  • client/views/admin/user/ and client/views/admin/users/ to render the updated form properly in the admin view

If you want stats for your new fields:

  • Recalculate them in server/services/stats.js
  • Display them on the admin panel by editing client/views/admin/stats/

Email Templates

To customize the verification and confirmation emails for your event, put your new email templates in server/templates/ and edit server/services/email.js

CI/CD and Automation

Build and Test

.github/workflows/build.yml contains a Github Action for building and running the project. The only test currently run is to check that a GET request of /login returns a status code 200. This should be expanded in future with thorough unit testing. The Github action spawns a Docker instance of MongoDB for the application to connect to and utilizes the NodeJS version as specified in the .nvmrc file. This action is run automatically on each push to any branch.

Lint

.github/workflows/link.yml contains a Github Action for linting the project. The action is currently using ESLint to achieve this with a very minimal ruleset (currently only checking for semi-colon rules). This should be modified to include an opinionated style checker such as AirBnb's. This action is run automatically on each push to any branch.

Publish to Docker Hub

.github/workflows/dockerimage.yml conatins a Github Action for building and publishing a Docker Image to the Docker Hub. The action takes the docker file at .Dockerfile and publishes it to the account specified in the Github Secrets. This action is run automatically on each merge to the master branch

The following secrets need to be added to the repository

  • DOCKER_USER => your docker hub username
  • DOCKER_PASS => your docker hub password*

Using a Token rather than a password for this is probably a good idea.

This will output an image in Docker Hub located at $DOCKER_USER/quill:latest

Automated Dependency Updates

The repository has been signed up to Dependabot, an automated dependency management tool. Dependabot automatically checks for updates for any outdated or insecure requirements and it will open a pull request for each one of them. To parametrize the tool further please look here.

Notifications [on Push]

This project has been set up to run workflows that send notifications to a Discord server and a Slack workspace when changes are pushed. The secrets required to run these must be set by the admin according to the documentation of each implementation (configuration links).

  • .yml file information has already been added to the repository under .github/workflows/notify.yml and individual platforms may be removed by editing this file.
Discord Notification

Configuring the action to send notifications to your organization's Discord server can be found here.

  • Note that leaving /github at the end of the DISCORD_WEBHOOK token (contrary to what the action recommends) will use the default GitHub webhook settings in addition to sending this action's notification. We suggest leaving it if there is no webhook already configured.
Slack Notification

Configuring the action to send notifications to your organization's Slack workspace can be found here.

Testing

Jest

Basic Jest testing has been implemented in the test.js file. Currently the only test is to check that the /login page returns a HTTP 200 status code. These tests can be run using the npm run test command. More Jest tests including snapshots and unit tests should be added as features are created or updated.

Accessibility

Testing for accessibility is a great way to make sure that all hackathon enthusiasts can use Quill, regardless of ability. It's good practice to run accessibility tests on any changes that you've made to ensure that no new accessibility errors were introduced.

An accessibility testing tool, pa11y-ci, has been provided and configured for this project. To run pa11y-ci, make sure that Quill is running locally on http://localhost:3000/ (alternatively, you can change the URLs specified in .pa11yci to match those of your running instance). Then, run the command npm run test:accessibility. If several of the URLs checked by pa11y-ci produce the same number of errors, pa11y-ci may be having trouble logging in with the default admin credentials specified in .env. Check that your instance of Quill is running correctly, or change the credentials used in .pa11yci.

If your contribution adds any new pages to Quill, please add them to .pa11yci to make sure that these pages are covered by the accessibility tests. If your new pages are accessed as a non-logged-in user, add them at the beginning of the URL list. If they are accessed when logged in, add them after the URL with actions to log in.

For more information on pa11y-ci, please visit pa11y-ci and pa11y, in particular the section on actions.

Contributing

Contributions to Quill are welcome and appreciated! Please take a look at CONTRIBUTING.md first.

Feedback / Questions

If you have any questions about this software, please contact [email protected].

Contributors

Code Contributors

This project exists thanks to all the people who contribute. [Contribute].

Financial Contributors

Become a financial contributor and help us sustain our community. [Contribute]

Individuals

Organizations

Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]

License

Copyright (c) 2015-2016 Edwin Zhang (https://github.com/ehzhang). Released under AGPLv3. See LICENSE.txt for details.

quill's People

Contributors

aminealikacem avatar anishathalye avatar aswinzz avatar at0dd avatar chriswongtv avatar dggsax avatar diakov2100 avatar ehzhang avatar jackcook avatar jcisneros01 avatar jeremy-melnyk avatar jlin816 avatar jsonkung avatar justinawei avatar kevindice avatar krubenok avatar monkeywithacupcake avatar patins avatar pshirlyn avatar rahulyesantharao avatar revalo avatar soqueen avatar srandall97 avatar staceybeard avatar toruowo avatar turbomaze avatar veronicaboychuk avatar xteddie avatar yashovardhan 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

quill's Issues

Add more customizable options in admin panel

These options vary a lot from hackathon to hackathon, and it would be nice for there to be a toggle switch in the admin panel to enable/disable them:

  • Disallow (current) / allow minors to register
  • Force registration with a *.edu email and whitelist special cases (current) / allow all emails to register

Clearer error messages

Right now, invalid form submissions show up red, but don't have error messages. It would be nice to have tooltips (so that users don't have to scroll to the top of the app) pop up next to fields that need to be fixed after submission.

Team name error

A couple of particpants when trying to use team name : TEAM #007 the team name was not shown in others.

28313137_2081414695422686_1228698588_n
28449840_2081414608756028_2077116892_n

Upon using admin, i was able to find only one persons name with team #7.

Update README with Software Requirements

Per #67 it would be helpful to add software requirements and/or a guide for installing them in the README. I can take care of this soon, but would welcome any contributions!

Resume upload?

Is there anything special to be done for this or should it just be a link to a dropbox users can upload to? It's not very clear due to lack of documentation and the default link just redirects to an inactive dropbox.

Auto-populate team list upon joining a team

  • currently, when you join a team that contains other people, you do no see any of their names
  • this confuses users and makes them think they messed up
  • upon page refresh, everything is made clear
  • the data should be loaded dynamically upon joining a team so that no refresh is needed
  • note: we've fixed this problem already on some branch of the hackmit version of quill, and it was a simple fix

Docker and/or Firebase?

Hey, so I'm already Dockerizing quill (pretty much done with that) and I'll submit a PR once I'm happy. I was wondering would be interested in a firebase port, using Real-time Database or Cloud Firestore instead of MongoDB. I probably wouldn't port it over to use the firebase SDK on the frontend, just to use cloud functions instead, but that's probably dependent on how much time I have to kill.

Thoughts?

Postinstall script error

this probably is a stupid mistake we made, but could someone shed some light on this error?
error

i tried rebuilding gulp-sass which did help and updated gulp, but this still shows up. Has anyone else faced this?

Note: we were able to work this a month or two ago, but the dev team went away for the summer and now these issues are popping up out of nowhere.

@kirandasika98

Trouble installing quill locally

I followed the setup infos (which in my opinion are very reduced) to get quill locally running. After running git clone https://github.com/techx/quill and npm install on a Centos 6.9 I got the message:

[email protected] install /var/www/html/quill/node_modules/gulp-sass/node_modules/node-sass
node scripts/install.js
/var/www/html/quill/node_modules/request/node_modules/hawk/node_modules/boom/lib/index.js:5
const Hoek = require('hoek');
^^^^^
SyntaxError: Use of const in strict mode.
at Module._compile (module.js:439:25)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object. (/var/www/html/quill/node_modules/request/node_modules/hawk/lib/index.js:5:33)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
npm ERR! weird error 8
npm ERR! not ok code 0

Any hints how to resolve this? Whats the preferred system it runs on locally?

Add current word/character count for text fields that limit those

I was filling out registration for MakeMIT and testing Blueprint registration. MakeMIT had a word limit and Blueprint had a character limit for the free response questions. Whereas Blueprint truncated the response once I got to their character limit (1000 chars), MakeMIT's registration gave me no feedback in terms of begin over the limit (and would allow me to submit with responses of arbitrary length).

It would be nice to have some feedback as your typing your response as to how close I am to my limit (I'm guessing something like "n words/characters remaining"). It might also be nice to add some verification to actually enforce these limits.

Admin page user modal fails to display phone numbers

  • the admin page allows you to click on users to see their information
  • one of the fields provided by default is a phone number field
  • in the user model this is "confirmation.phoneNumber", but in the admin modal logic it is referred to as "confirmation.phone"

PR incoming

Export emails/other info of any particular search

We often need to email all checked-in hackers, or all hackers who were accepted but have not submitted their confirmation yet, etc. Currently we query the database manually for these emails.

It would be great in conjunction with #7 to get and export these users' emails.

Porting Backend to Laravel (PHP)

Hello,
we are intressted to deploy this platform for our hackathon but our server is limited to cpanel only, we dont have ssh access for the moment, we can only deploy PHP apps only, are there any plans to port it to any PHP framework ?
thanks

No save

There's no way to save the application without submitting it

Merge application and confirmation view

I believe both views should be merged because there was high percentage of bounce rate using this system. This would reduce the number of steps for users to attend the event.

Deploy to Heroku Not Working?

I need some help.... It is slightly dire.

It seems to work, when I run it locally, but using the deploy now button and trying to push my version to heroku the deployment does not work. Is there some other sort of adjustments I need to make for it to work for heroku? This is my first time working with angular.

Batch accept users via search queries

It would be unbelievably helpful to be able to batch admit users from the search queries in the user panel. This would require that the search interface be improved so that selections can be made based on Major, Degree, School, or any other parameters in the application then being able to select all students that match the search criteria or simply select them from the list.

We didn't have time to build this for McHacks, but I did add in a CSV export in the Users list view so we did all of this offline.

Changing registration/confirmation deadlines

Changing registration / confirmation deadlines when users are in the middle of the pipeline doesn't seem to have a defined behavior. We commonly need to extend deadlines for individual cases, but their dashboards don't update, acceptances get canceled, etc.

Display current registration deadline on dashboard

Either for just people who haven't applied yet, or for everyone (the registration deadline is also the deadline to edit applications).

I'm filing this issue in response to a HackMIT applicant who was looking for the reg deadline - they must have been linked directly to my.hackmit.org.

Issues with setup

So I have the server running, technically, but whenever I run it all the js plugins are being replaced with index.html, making the js console look like
screen shot 2017-06-19 at 7 40 16 pm
So I know this is because the src attribute is being pointed to the wrong location but I didn't move anything since cloning the repo and I can't really figure it out.

Any help would be appreciated.

SoftAdmit and send acceptance emails button

What do you think about adding a button to send emails to all accepted participants ?
This needs the following changes

  • Add a softadmit option in the user status
  • softadmit instead of admit when admin accepts user
  • add a button to send all softadmited participants an email of acceptance and make their status admitted

Batch-admit users by email via the admin interface

  • often times, accepting users is a team decision
  • this may involve a separate review process that involves recording acceptance decisions in a separate medium (such as Google sheets or a custom webapp for application reading)
  • the result of such review processes is a list of emails to accept
  • currently, to automatically accept those users, the best thing you could do was write a short script that uses the reg API to admit each of them one at a time
  • this is inconvenient and not user friendly
  • to simplify this common use case, the admin page should support admitting whole lists of email addresses at a time

Remove hardcoded references to HackMIT

There is an Angular variable {{ EVENT_INFO.NAME }} which contains the user-specified name of the hackathon. There are a few instances where this is not respected, and is instead written out as HackMIT. To make it easier for others to fork the project, these references should be changed.

I can submit a PR to do this. Just wanted to make an issue for it too.

Admin ability to view/download user's resume through webapp

Having the ability to view/download the applicant's resume will speed up the process of going through every applicant's profile.

This feature was implemented in our registration system, but it was not secured. Our system was forked from the repo of HackGT. The repo of HackGT was a fork from the old repo of Quill.

Here's is a picture on how it looks like:
capture

Also, the resume field was moved from the confirmation view to the application view. The resume was uploaded directly to the server and not in dropbox.

Populate email templates from .env

As a continuation of this revision (should be an easy fix given all the locations listed here): #31, ideally we should be able to set the email sender and name from a .env variable and have it update on all the templates.

Npm install is taking forever

Hello ,
I have an issue when trying to deploy it locally, when i run npm install, i got the semantic-ui setup which is taking very long time and stuck at : Starting 'create install files'... or config src/theme
what am i doing wrong?
Thank you

Add SSL Options to Environment

As an added feature, add easy to setup SSL that's compatible with LetsEncrypt.

Would require two variables in the .env, and a modification to app.js where if the certificate was specified, read the file and start a server. If no certificate is specified the app will listen as normal.

Crash When Updating/Adding Application Before Registration Opens Date

get the following error when trying to update/add application before registration opens date, is only able to be done by the admin or in the event of the registration open changing:
`PUT /api/users/5a5d9a6c855a1d2e53ee7db2/profile 200 64.404 ms - 490
events.js:160
throw er; // Unhandled 'error' event
^

Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:356:11)
at ServerResponse.header (/home/quill/quill-MakeOHIO-2018/node_modules/express/lib/response.js:767:10)
at ServerResponse.send (/home/quill/quill-MakeOHIO-2018/node_modules/express/lib/response.js:170:12)
at ServerResponse.json (/home/quill/quill-MakeOHIO-2018/node_modules/express/lib/response.js:267:15)
at ServerResponse.send (/home/quill/quill-MakeOHIO-2018/node_modules/express/lib/response.js:158:21)
at /home/quill/quill-MakeOHIO-2018/app/server/routes/api.js:102:34
at /home/quill/quill-MakeOHIO-2018/app/server/controllers/UserController.js:299:16
at /home/quill/quill-MakeOHIO-2018/app/server/models/Settings.js:68:7
at /home/quill/quill-MakeOHIO-2018/node_modules/mongoose/lib/query.js:3115:18
at newTickHandler (/home/quill/quill-MakeOHIO-2018/node_modules/mpromise/lib/promise.js:234:18)
at _combinedTickCallback (internal/process/next_tick.js:73:7)
at process._tickCallback (internal/process/next_tick.js:104:9)'

Join Team Race Condition

The team size check in UserController#createOrJoinTeam has a race condition that allows a team to be bigger than MAX_TEAM_SIZE. The amount of time that the transactions take allow this to be relatively easy to exploit. (script pictured got it on the first iteration)
race

Because of the non-transactional nature of Mongo I'm not sure if there is a really straightforward way to handle this. I could be wrong though I don't know that much about it. A possible but inelegant solution would be making a team_count table or something that we could perform an atomic operation (increment given it's less than team_size) and see if the update was successful.

Using QR Codes to track hacker activity

There's a lot of untapped data in hackathons that can be utilized if, in addition to (or instead of) using paper IDs distributed at the beginning of the event, users had QR codes that could be scanned. This could help determine which events are popular among hackers, which sponsors are the most popular (and should return the next year), who has had their meals and who hasn't, and, depending on how in-depth you want to be, you can get data on all kinds of activities, determining which snacks are the most popular, etc.

Event Popularity Tracking

At a mini event (say, a typing competition) supervising organizers/staff members open a link on Quill that requests access to their camera. Once granted, they are able to scan hackers who want to participate. This tracks the popularity of the typing competition, and indicates whether it should make an appearance next year.

Sponsor Popularity Tracking

Similarly to the example above, a sponsor representative could open a link that requests access to their camera, and once granted, they're able to scan QR codes of hacker who are interested in networking or just making conversation. This is a mutually-beneficial situation as well, as sponsors could maybe view the hacker's resume after scanning the code, and the event organizers can track which sponsors are popular and should make a reappearance.

Meal Tracking

Meal tracking is an interesting application of this system. Rather than checking boxes on a paper ID (which costs money to produce), users could have their codes scanned when getting a meal, which "checks" their meal off. Another application of the code scanning would be optimizing dietary restriction ordering. If 20 people indicate that they want a vegetarian option, and 30 people over the course of the event scan in at the vegetarian line, maybe next year, more vegetarian meals could be ordered.

Some people might have qualms with their data being tracked, so it could be an opt-in system.

Problems with smtp

POST /auth/verify/resend 200 8.227 ms - -
{ Error: Connection timeout
    at SMTPConnection._formatError (/var/twww/dashboard/node_modules/smtp-connection/src/smtp-connection.js:384:15)
    at SMTPConnection._onError (/var/twww/dashboard/node_modules/smtp-connection/src/smtp-connection.js:374:29)
    at SMTPConnection.<anonymous> (/var/twww/dashboard/node_modules/smtp-connection/src/smtp-connection.js:163:14)
    at ontimeout (timers.js:466:11)
    at tryOnTimeout (timers.js:304:5)
    at Timer.listOnTimeout (timers.js:267:5) code: 'ETIMEDOUT' }

500 when trying to save application form

Everything works fine
Changed graduation years in

client/views/application/
server/models/User.js
and views and stats

run
gulp server

Now can't save application form

PUT /api/users/SOMETOKENHERE/profile 500 171.183 ms - 66

I checked #1 but it seems that function #1 (comment) is already updated

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.