Coder Social home page Coder Social logo

developersdo / opensource Goto Github PK

View Code? Open in Web Editor NEW
65.0 10.0 41.0 36.79 MB

🔦 Discover the open source ecosystem related to the Dominican Republic!

Home Page: https://developersdo.github.io/opensource?utm_source=github

License: MIT License

JavaScript 75.85% HTML 24.15%
opensource dominican usergroup

opensource's Introduction

Dominican Open Source - Discover the open source ecosystem related to the Dominican Republic!

GitHub license CircleCI

Dominican Open Source is an initiative to gather all possible public data about projects and their contributors related to the Dominican Republic in GitHub using the GraphQL API.

Want to join?

There are different ways to participate in this local effort:

  • You can include your GitHub users by adding the term “Dominican” to your profile's location. (Note: Dominicana is also accepted)
  • You can improve the code of the public website or the scraper.
  • And if you don't code you can check the grammar, the UX, the graphic design, report bugs - it is up to you ;)

Development

If you want to run this project locally you will need: NodeJS 8+. After git-cloning this project do:

Note: If you just want to develop the website then skip step 3 and 4.

  1. npm install
  2. Copy config/default.json to config/development.json.
  3. Generate a GitHub personal access token.
  4. Add your GitHub personal access token to config/development.json (this file is git-ignored).
  5. npm run serve and open http://localhost:8080/opensource

That's it! Happy coding.

Scripts

  • npm run scrape – scrape for all GitHub users and repos as configured.
    • npm run scrape -- --only=users – scrape for all GitHub repos.
    • npm run scrape -- --only=repos – scrape for all GitHub users.
  • npm run generate-data – generate GitHub users and repos for front-end usage.
    • npm run generate-data -- --only users – generate JSON data for users.
    • npm run generate-data -- --only repos – generate JSON data for repos.
  • npm run sequelize – to use sequelize, pass cli args as follow: npm run sequelize -- db:migrate.
    • npm run sequelize -- db:migrate – Run all pending database migrations.
    • npm run sequelize -- db:migrate:undo – Rollback last database migration.
    • npm run sequelize -- db:migrate:undo:all – Rollback all database migrations.
  • npm run sequelize:debug – to use sequelize in debug mode.
  • npm run refresh – to run the scraper and generate frontend data.
  • npm run build – to run static assets for production usage.

Deployment

The deployment is done by CirceCI which listen to pushes in master branch, then build website assets and finally pushes the site into gh-pages branch. All details are specified at .circleci/config.yml.

With ♥︎ from all contributors.

opensource's People

Contributors

adityatandon007 avatar akashsara avatar andydev404 avatar celinrayen avatar ckabalan avatar dannyfeliz avatar denys-medynskyi avatar diegomichell avatar domosapien avatar dschau avatar eduardoveras avatar hectoraristy avatar icueto avatar imgbotapp avatar janakact avatar jouderianjr avatar maria-mata avatar mudstart avatar pnkapadia64 avatar pthomas931 avatar rmariuzzo avatar samueldaviddelacruz avatar savagemike avatar viveksdf avatar wilburhimself avatar zerquix18 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

opensource's Issues

Add the position number in the card

That would be cool if the position number is added to the card, this will give us a better idea how much repositories there are before ours. What I suggest is something like:
number

Filter developers by name

Requirements

  • May depend on #10

Tasks

  • Create or reuse the Filter component at src/client/components/filter/Filter.js (more details on creating at #10).
  • Developers should be filtered by name or login fields.
  • Add the Filter into src/client/components/repositories/popular/Popular.js and src/client/components/repositories/recently-joined/RecentlyJoined.js where it will filter both lists.

Handle long tag list in repo cards.

Some repository cards in some resolutions they will overflow and put the extra content above. The desired is to disable the wrapping and make it look more aceptable. We could hide the extra in the same line. Any suggestions are more than welcome!

localhost 8080 2017-10-03 18-19-15

Optimize Images

Properly formatting and compressing images can save many bytes of data.

Compressing and resizing https://avatars3.githubusercontent.com/u/439839?v=4 could save 257.2KiB (98% reduction).
Compressing and resizing https://avatars2.githubusercontent.com/u/20671846?v=4 could save 52.9KiB (98% reduction).
Compressing and resizing https://avatars3.githubusercontent.com/u/4788817?v=4 could save 28.8KiB (97% reduction).
Compressing and resizing https://avatars3.githubusercontent.com/u/1163358?v=4 could save 27.9KiB (97% reduction).
Compressing and resizing https://avatars2.githubusercontent.com/u/773158?v=4 could save 22.6KiB (97% reduction).
Compressing and resizing https://avatars2.githubusercontent.com/u/2547751?v=4 could save 22.4KiB (97% reduction).
Compressing and resizing https://avatars0.githubusercontent.com/u/1013337?v=4 could save 22KiB (97% reduction).
Compressing and resizing https://avatars1.githubusercontent.com/u/10523232?v=4 could save 16.6KiB (96% reduction).
Compressing and resizing https://avatars3.githubusercontent.com/u/15680836?v=4 could save 5.2KiB (93% reduction).

Improve popular repositories positioning

Currently we are determining popular repositories by their stargazers. That said, if two or more repositories has the same amount of stargazers then all of them will have the same position. For example:

dominican open source communities 2017-10-20 12-22-16

Those positioning can be confusing, therefore, we would like to use more data points to determine repositories popularity. The new order should be determined by:

  1. stargazers desc.
  2. forks desc.
  3. watchers desc.
  4. name asc.

Things to do:

  • Implement the new ordering logic (here).
  • Change the positioning logic and assign each repo their unique position (here).

Create CLI script for scraper

Currently we have 3 NPM scripts for scraping purposes. However no script files exists. We would like to create a script files that support the three current actions for the scraper:

  1. scrape – scrape everything.
  2. scrape --only=users – scrape users only.
  3. scrape --only=repos – scrape repos only.

Tasks:

  • Create a script file at: src/server/scripts/scrape.js.
  • Follow this guide to add the proper shebang directive and setup permissions only. Do not add a bin entry.
  • The script file should support the options --only and only one of two values are accepted: users or repos. When that CLI option is specified, then only the specified set will be scraped.
  • Replace the 3 current NPM scripts (scrape, scrape:users and scrape:repos) with one script: scrape which will execute our new cli script defined at: src/server/scripts/scrape.js.

Infinite scroller component do jump on scroll

We are using react-list. However, scrolling in any size cause the scroll to jump. See screencast:

ezgif-4-266a25e1a0


We would like to find another alternative for infinite scroll. It can be another library, or another technique (pagination or load more button).

Add page title for each page components

We currently have a few page component that needs to set a page title.

Tasks:

  • Install https://github.com/gaearon/react-document-title (yarn add react-document-title)
  • Remove the title tag from src/client/index.html.
  • Wrap output of src/client/components/repositories/popular/Popular.js with DocumentTitle and set title to: Popular Repositories – Dominican Open Source.
  • Wrap output of src/client/components/repositories/trending/Trending.js with DocumentTitle and set title to: Trending Repositories – Dominican Open Source.
  • Wrap output of src/client/components/repositories/new/New.js with DocumentTitle and set title to: New Repositories – Dominican Open Source.
  • Wrap output of src/client/components/developers/popular/Popular.js with DocumentTitle and set title to: Popular Developers – Dominican Open Source.
  • Wrap output of src/client/components/developers/recently-joined/RecentlyJoined.js with DocumentTitle and set title to: Recently Joined Developers – Dominican Open Source.
  • Wrap output of src/client/components/developers/about/About.js with DocumentTitle and set title to: About and Statistics – Dominican Open Source.

Create CLI script for generator

Currently we have a single NPM script for data generation purposes. However no script files exists. We would like to create a script files that replace the data generation process.

Tasks:

  • Create a script file at: src/server/scripts/generate-data.js.
  • Follow this guide to add the proper shebang directive and setup permissions only. Do not add a bin entry.
  • The script file should support a --only option and only one of two values are accepted: users or repos. When that CLI option is specified, then only the specified set will be generated.
  • Replace the current single NPM script (generate, scrape:users and scrape:repos) with one script: generate-data which will execute our new cli script defined at: src/server/scripts/generate-data.js.

Feature: add pagination to popular repos

As a user, I would like to view all popular repositories. I want to navigate the repos as pages.

  • Add a footer with pagination (done #5).
  • Navigate to desired page of repos (done #5).
  • Show 9 pages at once (4 previous if any, 4 next if any).

Note: we don't want to sync the route or alter the URL / location.

Leverage browser caching for the following cacheable resources:

Create history for users

We would like to track some changes for users when the scrape runs.

Tasks:

  • Create a migration scripts using yarn sequelize -- migration:create.
  • Define the table users_history to be similar to users except for the field scrapedAt.
  • During scraper execution detect any kind of change made. If a change was detected then create a record into users_history containing the now old version of the users, the createdAt field will be current date to keep the history time.

Refactor page components

We would like to better organize page components.

Tasks

  • Put all page components into src/client/pages.
  • Rename all page component into their full name.

Add user and repo history

We would like to prepare the current code to support history of changes for users and repo.

Tasks:

Important: this issue should be worked as separate tasks.

Create history for repos

We would like to track some changes for repos when the scrape runs.

Tasks:

  • Create a migration script using yarn sequelize -- migration:create --name repo-changes.
  • Define the table repo_changes to be similar to repos except for the field scrapedAt.
  • During scraper execution detect any kind of change made. If a change was detected then create a record into repo_changes containing the now old version of the repo, the createdAt field will be current date to keep the history time.

Card number duplicated

If you scroll down too fast something happens with the position numbers and appear duplicates
image

Los tags deben ser clickeables

Para la facilidad usabilidad y experiencia de los usuarios, es recomendable que al hacer clic en uno de los tags, realice el filtro.

Filter repositories by name or username

Sometimes we want to find a specific repository or all the repositories of a user but the only way at this moment is walking through all pages until we find it but this is time-consuming and is not an easy way, so I suggest adding a search by repository name or username.

Tasks

  • Create a Filter component at src/client/components/filter/Filter.js
  • The Filter component will have a text input (as shown in the image below).
  • The Filter should follow the styles by http://materializecss.com
  • The filter will be apply as soon as the user type.
  • Add the Filter into src/client/components/repositories/popular/Popular.js and src/client/components/repositories/new/New.js where it will filter both lists.
  • Repositories should be filtered by name or description fields. When the filter begins with @ then repositories should be filtered by user.name or user.login.
  • Both Popular.js and New.js will have a note to indicate that a filter can be applied by owners using @ (as shown in the image below)

repositories

Handle repos changes such as name renaming

Currently, the scraper identify repos by their name user/repo, but if a repo name changes then we will be adding the same repo twice, and thrice, and so on...

  • We need to identify repos by their GitHub ids.
  • We need to store their GitHub ids.

Add page description

We need to add a page description. <3 SEO friendly.

Tasks

  • Add a <meta name="description" content=""> tag into src/client/index.html.
  • Set the meta's content attribute to Initiative to gather all possible public data about projects related to the Dominican Republic in GitHub using the GraphQL API.

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.