Skip to content
This repository has been archived by the owner on May 11, 2021. It is now read-only.

Latest commit

 

History

History
615 lines (432 loc) · 25.8 KB

CONTRIBUTING.md

File metadata and controls

615 lines (432 loc) · 25.8 KB

Contributing

1. Setting Up

Ways to Contribute

If you are new to open source, we recommend reading GitHub's open source guide and their Hello World tutorial.

Feel free to contribute to the Techqueria website in one or more of the following ways and thank you for being willing to help out! 😊

  • Tackle any of the open issues that are labeled help wanted, good first issue or hacktoberfest.
    • If an issue has the label in progress, someone is already working on it.
    • If an issue has the label admin, an admin probably needs to get involved since it requires admin access.
    • Even if an issue has someone assigned, it still might need extra help so check it out if it appeals to you!
  • Open a new issue
  • Report a bug
  • Request a new feature
  • Improve our contributing guidelines (this file) or other documentation
  • Fix typos or grammar errors on pages or across the code base
  • Refactor code
  • Anything else you can think of! 😆

Benefits of Contributing

GitHub Profile

You can ask to be added to our GitHub organization.

After you are added you to our Techqueria GitHub organization as a contibutor, you can let the world know you've helped us by displaying our organization avatar on your GitHub profile (see screenshot below).

GitHub Organizations

By default, this is made private but you can easily make it public..

LinkedIn

Showcase your contributions through LinkedIn with Techqueria's company profile: https://linkedin.com/company/techqueria.

Just make sure to use the description below and you can briefly describe what you did as well.

Techqueria is a 501c3 nonprofit serving the largest community for Latinx in Tech.

- Contributed to their open source website through content updates and bug fixes

Here's an example of how that can be done by posting under "Experience" or "Volunteering" on your LinkedIn profile.

LinkedIn Contributions

Credibility

And there are many more reasons why contributing to open source is great!

Fork the repo

Fork this repository and clone it locally.

Connect your local to the original "upstream" repository by adding it as a remote.

Pull in changes from "upstream" often so that you stay up to date so that when you submit your pull request, merge conflicts will be less likely.

See more detailed instructions through this GitHub article called "Syncing a Fork".

Installation

If you've never used npm before, we recommend following these instructions to get npm up and running properly.

npm install

This will install all the packages needed to run this website locally.

2. Local Development

Live Server

npm start

This will automatically open a browser tab with the website and BrowserSync will automatically reload the CSS or refresh the whole page, when stylesheets or content changes.

At this point, you are able to preview the website locally and can make changes to the source code.

Our pipeline was inspired by Victor Hugo which is a Hugo boilerplate for creating truly epic websites.

Branding

You can view https://techqueria.org/about/brand as a reference for how we tackle our organization branding.

Service Workers

We are using Workbox to register a service worker on the production version of the website.

A service worker allows users to view the homepage of Techqueria even when they are offline and therefore caches the necessary assets.

❗ If you see a console error complaining about the service worker not registering while developing locally, that's okay! The service worker registration should fail in development since we don't want caching.

Tools

  • Hugo
    • static site generator or CMS
  • Bulma.io
    • design system
  • Gulp
    • asset pipeline
    • PostCSS for Sass compilation
    • ImageMin to optimize images
    • CSSO for CSS minification
  • Webpack
    • asset pipeline
    • Workbox to create a service worker
  • Babel
    • JavaScript compilation and transpilation
  • Twemoji
    • Emoji rendering the same regardless of platform or browser
  • Font Awesome
    • Standardized icons

Platforms

Languages

  • JavaScript
  • SASS
  • HTML
  • TOML
  • JSON

File Size

For files longer than 200 lines, we recommend breaking it out into multiple files by referencing partials like this: {{ partial "content/custom/breadcrumbs.html" . }}.

If you see existing files longer than 200 lines (excluding Markdown files), feel free to break them down further.

Special Characters

If there is a special character in the text, make sure to use double quotes.

However, "#" is not allowed in titles under any circumstances. 🤷🏽‍♂️

Images

All images should be added to assets/img within the relevant folder.

If there is not a relevant directory, please create one.

We do have automated image optimization but feel free to compress the image locally as well.

While it is easier to just link images, we highly recommend downloading images and adding them locally.

For optimal display, we recommend making images 1000px wide and 500px high.

Team Members

When adding a new person, make sure to use their LinkedIn profile as the URL and find a high-res photo of them so we can host it locally.

Example: content/english/team/frances-coronel.md

---
title: Frances Coronel
image: "/assets/img/team/frances-coronel.jpg"
description: "Software Engineer, Slack"
linkedin: fvcproductions
twitter: fvcproductions
github: fvcproductions
flag: 🇵🇪
categories:
  - staff
  - san-francisco
---

Note that you only need usernames for LinkedIn, Twitter & GitHub profiles.

The flag identifies the heritage of the member and is optional.

Location can be san-francisco, nyc, los-angeles, austin and chicago.

Events

Techqueria has hosted quite a lot of events!

Once we finalize the date for an event, that's a good time to add it in.

Example: content/english/events/2019-06-19-lyft.md

Please format file name as year-month-day-event-name.md.

---
title: "Techqueria @ Lyft"
description: Join us for an evening with Lyft and Techqueria! We'll be talking about skills to advance into senior & leadership roles.
date: 2019-06-19
link: https://lyftxtechqueria.splashthat.com/
image: "/assets/img/events/2019-06-19-lyft.jpg"
photos: https://photos.app.goo.gl/5Ye8FhbV1B1SrxFH6
categories:
  - "san-francisco"
aliases:
  - /events/2019/06/19/techqueria-lyft/
organizations:
  - "Lyft"
organizers:
  - "Felipe Ventura"
  - "Frances Coronel"
  - "Dulce Villarreal"
  - "Jonathan De la Paz"
articles:
  - "Techqueria: Building a community for Latinos in tech industry"
---

The important keys to note here are companies, organizers and articles.

Each coincides with the title of another Markdown file representing said entity.

This makes it easy to relate an organizer with an event, a company with an event, an event with a press article and so on.

Companies

When adding a new company, make sure to link their careers site and download an appropriate logo image so we can host it locally.

The image for companies MUST be 1000px wide and 500 px high in order to display correctly.

Example: content/english/support-us/supporters/braintree.md

---
title: Slack
description: Slack is where work happens.
image: "/assets/img/supporters/slack.png"
link: https://slack.com/careers
---

Adding news updates

Blog updates

Make sure to always turn comments on and reference the author so they can get proper credit.

Example: content/english/news/2016-07-19-community-building.md

---
title: "Techqueria is now officially a 501c3 nonprofit!"
date: 2019-03-07
description: "This incorporation is part of a larger push to better serve our growing Latinx in Tech community."
image: "/assets/img/news/2019-03-07-nonprofit.png"
---

Press articles

Example: content/english/news/2019-07-18-el-tecolote.md

---
title: "Techqueria: Building a community for Latinos in tech industry"
date: 2019-07-18
description: "Techqueria, an organization for Latinos in tech, was founded in Berkeley back in November 2015 with the purpose of serving those who were studying or pursuing a career in tech."
publication: "El Tecolote"
image: "/assets/img/news/2019-07-18-el-tecolote.jpg"
link: http://eltecolote.org/content/en/features/techqueria-building-a-community-for-latinos-in-tech-industry/
---

You can add which team members are featured in the press article.

TODO: In the future, we would like to set up the publications so we can display them in a cool way like with the companies.

Resources

You can add a new resource to a bunch of different categories like career, nonprofits, healthcare, immigration, etc.

Example: content/english/resources/nonprofits/slack-for-non-profits.md

---
title: Slack for Nonprofits
image: "/assets/img/resources/slack.png"
description: The Slack for Nonprofits program offers eligible organizations a free or discounted upgrade of one workspace to a paid plan.
link: https://get.slack.help/hc/en-us/articles/204368833-Slack-for-Nonprofits
---

Directory Structure

├── .github
|  ├──  ISSUE_TEMPLATE             // folder with issue template files
|  ├──  CODE_OF_CONDUCT.md         // code of conduct
|  ├──  CODEOWNERS                 // automatic reviewers for certain files and directories
|  ├──  config.yml                 // configuration for various 3rd party GitHub bots
|  ├──  invite-contributors.yml    // configuration for invite contributors bot
|  ├──  CONTRIBUTING.md            // how to contribute - what you are reading
|  ├──  ISSUE_TEMPLATE.md          // template for new issues
|  ├──  PULL_REQUEST_TEMPLATE.md   // template for new pull requests
|  ├──  stale.yml                  // configuration for Stale bot
|  └──  topissuebot.yml            // configuration for Top Issue bot
├── .vscode
|  └──  settings.json              // VS Code workspace settings
├── CNAME                          // configuring domain
├── LICENSE                        // repo license
├── README.md                      // overview of project
├── assets                         // folder of assets handled by Gulp/Webpack
|  ├── img                         // images are optimized through Gulp
|  ├── js                          // compressed and transpiled to a single JS file
|  └── sass                        // compressed and compiled to a single CSS file
├── config.toml                    // configuration file (Hugo)
├── content                        // content goes here (Markdown files with posts and pages)
├── drafts                         // files not ready for prime time
├── gulpfile.babel.js              // configuration for Gulp
├── layouts                        // HTML Liquid templates for pages
├── netlify.toml                   // configuration for Netlify deployment
├── package-lock.json              // don't delete or modify this
├── package.json                   // managing NPM packages
├── renovate.json                  // configuration for Renovate bot
├── static                         // files that go into root of dist directory
|  ├── _redirects                  // handle redirected URLs
|  ├── browserconfig.xml           // configuration for Windows tiles
|  ├── favicon.ico                 // main favicon image
|  └── manifest.json               // configuration for Progressive Web App
├── webpack.dev.js                 // Webpack build configuration for local development
└── webpack.prod.js                // Webpack build configuration for production

Available Commands

References package.json and gulpfile.babel.js

We've covered one of them already - npm start - here are the others.

  • npm build
    • Build production ready files
  • npm build:dev
    • Build local files
  • npm start
    • Local server for development
  • npm start:prod
    • Local server for production ready website
  • npm start:preview
    • Preview draft and future posts.
  • npm lint
    • This will report any ESLint issues within the command line.

Audits

We use Google's Lighthouse to check for performance, accessibility, SEO, our PWA score and to make sure we follow best practices.

If you are using Chrome, Lighthouse is the default audit system so it's easy to use!

Chrome DevTools - Lighthouse

As of October 2018, we have scores of 100 or close to that for every metric and we strive to keep it that way through automated checks in PRs (see more below).

Techqueria - Lighthouse Scores

Deployment

Heads up, you do not need to run this command for development purposes.

npm run build

This will build a static version of the website inside the /dist folder.

This command is just used to handle production deployments through Netlify and does not need to be run locally - refer to netlify.toml and gulpfile.babel.js.

3. Opening a Pull Request

A Good PR

Make sure to do the following when opening your pull request (or PR)

  • include a useful description of your PR after opening it
  • make sure all the checks have been filled out
  • reference any relevant issues or supporting documentation in your PR (for example, "Closes #37.")

Below is an example of what the Markdown for a good PR looks like.

Notice it has a with a description with a reference to an existing issue. It also has all the checks filled in with an x.

Adds a contact form to the website using Bulma

- Fixes #92

---

<!-- Thank you for contributing to Techqueria, it is much appreciated! 😊 -->

<!-- Before creating a PR, make sure to verify the following. -->

> ✅️ By submitting this PR, I have verified the following

- [x] Checked to [see if a similar PR has already been opened](https://github.com/techqueria/website/pulls) 🤔️
- [x] Reviewed the [contributing guidelines](https://github.com/techqueria/website/blob/master/.github/CONTRIBUTING.md) 🔍️
- [x] Added my name to the bottom of the list under the **Contributors** section in the [README.md](https://github.com/techqueria/website/blob/master/README.md) with a link to my personal website or GitHub profile 👥️

Checks

We use several GitHub integrations/bots to make it easy to catch errors for every new PR created.

Here's an example of how that would look like for a great PR.

GitHub Checks

GitHub Integrations

  • AccessLint tests accessibility
  • Codacy automatically identify issues through static code analysis
  • Codebeat allows you to get instant feedback on your code
  • CodeFactor provides automated code review
  • Hound comments on code quality and style issues, allowing our team to better review and maintain a clean codebase
  • LGTM allows us to find and prevent zero-days and other critical bugs, with customizable alerts and automated code review
  • Netlify Deploy Previews lets you see how your changes would look like in production
  • Pull Reminders lets you review and merge pull requests faster with Slack reminders and notifications
  • Synk is a developer-first solution that automates finding & fixing vulnerabilities in our dependencies

GitHub Bots

We take advantage of GitHub bots to make reviewing PRs and recognizing contributors easier.

  • Background Check notifies maintainers when new contributors who have been toxic in the past join the project
  • Delete Merged Branch automatically deletes merged branches
  • First Timers creates starter issues to help onboard new open source contributors
  • Invite Contributors invites authors of merged pull requests to our organization
  • Reminders set reminders on issues and pull requests
  • Request Info requests more info from PRs/Issues with either the default title or a blank body
  • Sentiment Bot replies to toxic comments with a maintainer designated reply and a link to the repo's code of conduct
  • Stale closes abandoned issues after a period of inactivity
  • Todo creates new issues based on actionable comments in your code
  • Top Issues labels issues with the most "+1" emoji reactions
  • Unfurl Links adds context to the links shared in discussions
  • Welcome welcomes new users
  • Work In Progress prevents merging of pull requests with "WIP" in the title

Adding a contributor

See https://allcontributors.org

@all-contributors please add @awesomeContributor for infrastructure, tests and code

Adding a contributor

Remind yourself to tackle an issue

Use the /remind slash command to set a reminder on any comment box on GitHub and you'll get a ping about it again when the reminder is due.

Use any form of /remind me [what][when], such as:

  • /remind me to deploy on Oct 10
  • /remind me next Monday to review the requirements
  • /remind me that the specs on the rotary girder need checked in 6 months

Remind me

Issue Tracker

There are 2 labels being used to track progress.

  1. in progress

    Maintainers & contributors are responsible for adding the label in progress once someone has decided to take on an open issue.

  2. review

    A PR has been opened and references a specific issue.

Stale Pull Requests

If after a week you haven't heard from any of the maintainers, please mention @techqueria/owners in the PR.

4. Getting Paid for Bounty Issues

You can get paid to contribute to Techqueria!

Our nonprofit team is small and we're always looking for new contributors for our website.

We have a bounty program in order to build and maintain our member portal where contributers can be rewarded financially.

Priorities

Our bounty program is about creating opportunities for our community to contribute to Techqueria's Casa member portal, to make it their own. It also gives us an opportunity to get to know developers who we could potentially work with more in the future. We celebrate making open source contributions more sustainable by paying, but money alone shouldn't be the primary motivation for participation.

Quality

We're not able to accept pull requests that aren't completed to a high standard in a reasonable timeframe. Please only pick up bounties that you are confident you can complete at your current knowledge and skill level. We will not accept pull requests or pay bounties for code that's not up to the standard we need to maintain for our members who rely on this platform. Our dev team is happy to answer questions and provide some limited support, but we don't have capacity to mentor junior developers through the bounty program.

We want to attract quality contributions. The issue will only be considered complete and approved for payment if the pull request is merged by a core team member.

Workflow

  1. Search for issues with attached bounties: Bounties for all repositories which will have the bounty amount set
  2. Express interest by commenting on the issue and ask to be assigned
  3. You'll be assigned and given an expected timeframe to deliver (if you aren't able to meet the deadline, the issue may be assigned to someone else)
  4. Create your solution
  5. Open a Pull Request to get your code reviewed
  6. Incorporate any feedback from Core Contributors
  7. PR is reviewed, approved, and merged by a Core Contributor
  8. Submit your invoice as an expense to Open Collective Engineering*
  9. Get paid!

Troubleshooting

Error: Cannot find module

Try rm -rf node_modules and then npm install again.

Not seeing changes live

Outdated pages, service worker still loading on local development

Try running npm run clean - this will delete the dist directory.

You can then run npm start to spin up a local server.

Recently Merged Changes

If there were changes recently merged that involved a lot of changes, you first want to pull the master branch, resolve any merge conflicts correctly and then make sure to run both npm run clean, npm install and npm start in that order before opening a new issue.

Questions?

If you have any questions, comments, concerns or general feedback, we're happy to help!

GitHub

Please make a comment mentioning @techqueria/admins in your issue or PR and one of us will get back to you ASAP.

Slack

If you are part of the Techqueria Slack workspace, we also have a dedicated #meta-website channel for discussion and a #meta-website-alerts for GitHub notifications.

Gitter

If you are not part of our Slack community and want to use something besides GitHub, we also have a Gitter lobby.

Email

If needed, there is also the option of contacting us using https://techqueria.org/contact