Source code of Remotebear.

Overview

Remotebear

Source code of remotebear.io.

 

Remotebear

Technology & Architecture

Remotebear is a NextJS web application that gathers job offers from public APIs or by scraping public websites using a Node script. The entire codebase and "database" are contained in the repo remotebear-io/remotebear repo and is organized using Yarn Workspaces.

The way Remotebear collects remote jobs is the following:

  1. In the repo I'm storing a companies-data.json file, which keeps track of what companies we're interested in. It holds information about the company name, URL, description, and about how their remote positions should be collected (AKA from which job board, like Greenhouse, Lever, etc...).
  2. Every n hours, I run a Node script on Heroku that, given companies-data.json, collects each company remote job, normalizes it (e.g.: normalize locations like "Remote - New York only" into more scoped "us", "eu", "global" buckets), and submits a pull request to the repo with the goal of saving the collected remote jobs in a JSON file called jobs-data.json.
  3. If the pull request tests pass, Bulldozer automatically merges it.

Here's a pull request example:

All the static data that populates Remotebear lives in the repo as huge JSON objects.
Why? Because this pattern is working well enough for our current use case.
Does it scale well? No.
Are we planning to scale? Who knows.

Remotebear's website is built with NextJS, is hosted on Vercel, and uses SSR to grab the jobs/companies data from distributed serverless functions that expose jobs-data.json and company-data.json (they just read them once loaded and keep them in memory).
For jobs and companies data, we set a long caching window at the edge — but we never show stale data because every time the pull request with updated jobs is merged, Vercel starts a new build, invalidating the entire cache.
Immutable assets (e.g.: fonts, images, etc...) are also cached on the browser.
Basically, the way we store and use data on the front-end is a mixture between State Site Generation and Server Side Rendering; we're not going all-in with a Static Site Generation approach because pagination, search, and filtering, would still require some kind of Server Side Rendering to generate the pages on-demand.

Repo structure

packages/data

All the static data that populates Remotebear lives in this package as JSON objects.

In this package you can find:

  • companies: Companies configs and metadata.
  • departments: Departments enums/labels.
  • jobs: The entire list of remote jobs shown on the website.
  • location-patterns: List of rules used to normalize job locations.
  • locations: Location enums/labels.

packages/data-api

Thin API layer on top of packages/data that abstracts the data usage. Other packages should use this instead of accessing the data directly.

In this package you can find the following scripts:

  • create-company: Create a new company configuration.
  • update-company-metadata: Update company metadata (by getting it from Crunchbase).

Environment variables:

  • CRUNCHBASE_API_KEY: Required to use update-company-metadata.

packages/normalizer

Logic used to normalize job departments and locations (especially locations). Our goal here is to normalize locations like "Remote - New York only" into more scoped buckets ("us", "eu", "global", etc...) in order to let users filter them. This is done is using a mixture of generic (packages/data/location-patterns) and company-specific rules/patterns.

In this package you can find the following scripts:

  • check-normalizations: Helper that recaps successful/failed validations.
  • print-locations-for-test-file: Helper that prints the normalized location of a specific company (from jobs-data.json) that can be then manually copy-pasted in packages/normalizer/src/location-normalizer.mock.json to prevent regressions.

packages/scraper

Collects the job positions and creates a pull request on GitHub with the updated jobs. The script can be run using yarn start or yarn scrape.

Important modules here are:

  • src/company-configs: Company-specific rules and customizations. Companies that don't have a specific config will fall back to the settings defined in packages/data/companies/companies-data.json and to the default normalization logic.
  • src/services/github-api.js: Logic that handles creating the GitHub pull request. Requires a GITHUB_API_TOKEN to run.
  • src/strategies.js: Strategies used to collect the job positions. E.g.: Greenhouse API, Lever API, etc...
  • src/scrape-jobs.js: The scraping pipeline.
  • scripts/scrape.js: The scraping script.

Required environment variables:

  • GITHUB_API_TOKEN
  • GITHUB_OWNER
  • GITHUB_REPO
  • CRUNCHBASE_API_KEY

packages/website

Remotebear website — it's a NextJS app hosted on Vercel.

Feedback & Roadmap

Future roadmap and contribution guidelines are still a work in progress.

License

Remotebear is open-source under the GNU Affero General Public License Version 3 (AGPLv3) or any later version. You can find it here.

You might also like...

Easy to maintain open source documentation websites.

Easy to maintain open source documentation websites.

Docusaurus We are working hard on Docusaurus v2. If you are new to Docusaurus, try using the new version instead of v1. See the Docusaurus v2 website

Jan 2, 2023

Open source, production-ready animation and gesture library for React

Open source, production-ready animation and gesture library for React

An open source and production-ready motion library for React on the web. Framer Motion is an open source, production-ready library that's designed for

Jan 9, 2023

Open-source project which generates the Fortnite Item Shop in an image similar to the in-game design.

Open-source project which generates the Fortnite Item Shop in an image similar to the in-game design.

Fort-Shop Fort-Shop is a unique project which generates the current Fortnite Item Shop into a stylized image, similar to the new In-Game design (refer

Jan 5, 2023

TryShape is an open-source platform to create shapes of your choice using a simple, easy-to-use interface. You can create banners, circles, polygonal shapes, export them as SVG, PNG, and even as CSS.

TryShape is an open-source platform to create shapes of your choice using a simple, easy-to-use interface. You can create banners, circles, polygonal shapes, export them as SVG, PNG, and even as CSS.

Create, Export, Share, and Use any Shapes of your choice. View Demo · Report Bug · Request Feature 👋 Introducing TryShape TryShape is an opensource p

Dec 26, 2022

Open-source website for the 4C

Open-source website for the 4C

4c Repository for the 4c.rocks webiste. The Cool Community For Content Creators or 4c, is a community to connect with other like-minded creators, coll

Jan 4, 2023

A collection of free logos for open source projects

A collection of free logos for open source projects

Libre Logos Libre Logos is a library of free logos. The logos are intended for open source projects and NGOs. Designers are invited to contribute. The

Nov 11, 2022

Free Open Source High Quality Dashboard based on Bootstrap 4 & React 16: http://dashboards.webkom.co/react/airframe

Free Open Source High Quality Dashboard based on Bootstrap 4 & React 16: http://dashboards.webkom.co/react/airframe

Airframe React High Quality Dashboard / Admin / Analytics template that works great on any smartphone, tablet or desktop. Available as Open Source as

Jun 5, 2022

This web application aim to produce an contest notifier utility and a modern open-source compiler.

This web application aim to produce an contest notifier utility and a modern open-source compiler.

This web application aim to produce an contest notifier utility and a modern open-source compiler. The current features of the application include : Code Runner , Upcoming and Ongoing Contests.

Dec 3, 2022

Your toolkit for financially sustainable open source development

Your toolkit for financially sustainable open source development. Getting Started · Why? · Plans · Documentation · Contributing Description Open sourc

Feb 12, 2022
Comments
  • RSS feed support

    RSS feed support

    First of all, great job! I love the no-nonsense website, just job ads and meaningful search criteria. :clap:

    Now a suggestion/idea: It would love to have an RSS feed of the jobs, based on the search criteria. For example, to get engineering jobs in Europe: https://remotebear.io/feed?l=eu&d=engineering would return the XML feed.

    opened by teoulas 0
Owner
Remotebear
The remote jobs aggregator that helps you find work that you love.
Remotebear
⚡️ Look for Covid-19 Resources, Get Vaccine Availability Notification, Complete source code for covidrescue.co.in website.

covidrescue.co.in ⚡️ Get real-time, verified leads on Oxygen, Remdesivir, ICU, Beds, Food and more based on your location. Get notifications on Vaccin

Placeholder Tech 15 Jul 10, 2022
Source code for my tutorial on how to build customizable table component with React Table and Tailwind CSS.

React Table + Tailwind CSS = ❤️ Source code for my tutorial on how to build customizable table component with React Table and Tailwind CSS. Both parts

Samuel Liedtke 147 Jan 7, 2023
This hook allows you to isolate and manage the state within the component, reducing rendering operations and keeping the source code concise.

React Hook Component State This hook allows you to isolate and manage the state within the component, reducing rendering operations and keeping the so

Yongwoo Jung 2 May 15, 2022
This repository store the source code of a chat application built in NextJS.

This repository store the source code of a chat application built in NextJS. The code was built in alura's React event, and here I styled the code to make it unique and creative!

Victor Silva 5 Mar 31, 2022
Source code for the deprecated expo-google-app-auth package. Deprecated in favor of expo-auth-session.

expo-google-app-auth Source code for the deprecated expo-google-app-auth package. Expo Google App Auth API wrapped the deprecated expo-app-auth packag

Expo 4 Nov 2, 2022
Source code of d1m0s.me

Welcome to d1m0s23 WebSite ?? > Own beautiful card-site Install npm i npm install -g serve Prepare npm run build Run in production serve -s build -l 3

d1m0s23 6 Apr 1, 2022
⚡ Pcode lets you create and share beautiful images 🎉 of your source code 🚀

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: ya

pcode 33 Jul 14, 2022
🎭 Website source code for our school play.

?? Sane Lunatics Website Website that is built for the theater play "Aklı Başında Deliler Kumpanyası" that will play on stage in ???? Mus Alparslan Un

EGGSY 9 Jun 3, 2022
An open source application to create, manage and embed contact forms on static/dynamic sites with no code

Formify is an open source application that lets you create, manage and embed contact forms on any site without writing code. This project is done as a

Basharath 37 Dec 26, 2022
This is a simpler project than the full webpack source code, and you can understand the design ideas in webpack through it

my-webpack 这是一个简化版的webpack,旨在于理解webpack的设计原理以及webpack当中 loader和plugin的区别,运行方式。 运行步骤如下(方案一): 切换到my-webpack目录,运行npm install 切换到test目录,运行npm install 在tes

null 14 Sep 30, 2022