master 849f6c6c3b08 cached
35 files
105.3 KB
35.1k tokens
13 symbols
1 requests
Download .txt
Repository: engineerapart/TheRemoteFreelancer
Branch: master
Commit: 849f6c6c3b08
Files: 35
Total size: 105.3 KB

Directory structure:
gitextract_cb2vatad/

├── .gitignore
├── LICENSE
├── README.md
└── docs/
    ├── 404.html
    ├── CNAME
    ├── Gemfile
    ├── _config.yml
    ├── _data/
    │   └── sites.csv
    ├── _includes/
    │   ├── board_listing.html
    │   ├── board_listing_item.html
    │   ├── board_listing_item_mobile.html
    │   ├── footer.html
    │   ├── google-analytics.html
    │   ├── head.html
    │   ├── header.html
    │   └── logo.html
    ├── _layouts/
    │   ├── default.html
    │   ├── home.html
    │   ├── post.html
    │   └── posts.html
    ├── _posts/
    │   ├── 2017-09-04-difference-between-types.markdown
    │   └── 2017-09-05-why-people-hate-upwork.md
    ├── assets/
    │   ├── app.css
    │   └── app.source.css
    ├── build.sh
    ├── dev.sh
    ├── index.md
    ├── package.json
    ├── postcss.config.js
    ├── posts.html
    ├── scripts/
    │   ├── alexa.py
    │   ├── download_favicons.py
    │   ├── sites_history_script.py
    │   └── update.py
    └── tailwind.config.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
.DS_Store
_site/
.sass-cache/
.jekyll-metadata
__pycache__
.idea/
node_modules
# Local Netlify folder
.netlify
docs/.netlify
docs/.jekyll-cache


================================================
FILE: LICENSE
================================================
This is free and unencumbered software released into the public domain.

Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.

In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

For more information, please refer to <http://unlicense.org>


================================================
FILE: README.md
================================================
# The Remote Freelancer
List of community-curated resources to find topical remote freelance &amp; contract work for software developers, web designers, and more!

See [Why](#why) and [Contributing](#contributing). Rank: This is an estimation on how popular the site is, with #1 being the most viewed site on the internet in the US. Up until 2022 Alexa was used, Similar web will be used for future ratings. [Graph of changes over time](https://public.tableau.com/profile/andrew.chase#!/vizhome/theremotefreelancer/AlexaRankOverTime?publish=yes)

| **Clients**                                                                              |                |            |                                           |
|------------------------------------------------------------------------------------------|----------------|------------|-------------------------------------------|
| **Name**                                                                                 | **Rank** |            | **Hires these Types**                     |
| [Upwork](https://upwork.com)                                                             | 200            |            | Designers, Developers, & Others           |
| [Freelancer](https://www.freelancer.com/affiliates/andychase)                            | 700            |            | Designers, Developers, & Others           |
| [PeoplePerHour](https://www.peopleperhour.com)                                           | 2,000          | & Gigs     | Designers, Developers, & Others           |
| [Toptal](https://www.toptal.com/BLjoyn/worlds-top-talent)                                | 3,000          |            | Designers, Developers, & Others           |
| [Guru.com](http://www.guru.com/)                                                         | 5,000          |            | Designers, Developers, & Others           |
| [Turing](https://turing.com/)                                                            | 6,000          |            | Developers                                |
| [Truelancer](https://www.truelancer.com)                                                 | 10,000         |            | Designers, Developers, & Others           |
| [Crossover](https://www.crossover.com)                                                   | 10,000         |            | Developers & Business Managers             |
| [arc.dev](https://arc.dev/)                                                              | 20,000         |            | Developers                                |
| [Scalable Path](https://www.scalablepath.com/)                                           | 70,000         |            | Designers & Developers                    |
| [freelancermap](https://www.freelancermap.com/it-projects.html)                          | 80,000         |            | Developers, Engineers, Consultants, Others|
| [StoreTasker](https://www.storetasker.com/)                                              | 100,000        |            | Shopify Developers                        |
| [Soshace](https://www.soshace.com/)                                                      | 100,000        |            | Developers                                |
| [Adeva](https://adevait.com/)                                             		       | 200,000        |            | Designers, Developers, & QA               |
| [Speedlancer](https://speedlancer.com/)                                                  | 600,000        |            | Designers & Developers                    |
| [Worksome](https://worksome.co.uk/)                                                      | 2,000,000      |            | Consultants, Data Scientists, & Developers|
| **Tutoring**                                                                             |                |            |                                           |
| [CodeMentor.io](https://www.codementor.io)                                               | 10,000         | Tutoring   | Developers                                |
| **Other**                                                                                |                |            |                                           |
| **Name**                                                                                 | **Rank** |            | **Hires these Types**                     |
| [Fiverr](https://www.fiverr.com/)                                                        | 100            | Gigs       | Variety                                   |
| [Bonsai](https://app.hellobonsai.com/users/sign_up?refer=8728021d)                       | 20,000         | Tools      | Designers, Developers, & Others           |
| [Jobdone.net](https://jobdone.net/explore?)                                              | 1,000,000      | Gigs       | Variety                                   |
| [\#frontenddevelopers.org](http://frontenddevelopers.org/)                               | 1,000,000      | Community  | Developers                                |
| [Remote One](https://remote.one/)                                                        | 1,000,000      | Tools      | Designers, Developers, & Others           |
| [Clarrow](https://clarrow.com/)                                                          | 2,000,000      | Tools      | Designers, Developer & Others             |
| **Jobs**                                                                                 |                |            |                                           |
| **Name**                                                                                 | **Rank** |            | **Hires these Types**                     |
| [Dribbble Jobs](https://dribbble.com/obs?utf8=%E2%9C%93&anywhere=true&location=Anywhere) | 1,000          |            | Designers                                 |
| [Angel List Jobs](https://angel.co/jobs#find/f!%7B%22remote%22%3Atrue%7D)                | 2,000          |            | Variety                                   |
| [FlexJobs](https://www.flexjobs.com)                                                     | 7,000          |            | Variety                                   |
| [We Work Remotely](https://weworkremotely.com/)                                          | 10,000         |            | Variety                                   |
| [Hired](https://hired.com/)                                                              | 20,000         |            | Designers, Developers, & Product Managers |
| [RemoteOK](https://remoteok.io/)                                                         | 80,000         |            | Developers                                |
| [Himalayas](https://himalayas.app)                                                       | 200,000        |            | Designers, Developers, & Product Managers |
| [No Fluff Jobs](https://nofluffjobs.com/#criteria=remote)                                | 200,000        |            | Developers                                |
| [Golangprojects.com](https://www.golangprojects.com/golang-remote-jobs.html)             | 600,000        |            | Go/Golang jobs, filter on remote jobs     |
| [Remotesome.com](https://www.remotesome.com/)                                            | 1,000,000      |            | Developers                                |
| [RemoteYeah](https://remoteyeah.com/)                                                    | 2,000,000      |            | Data Scientists & Developers              |
| [Jobhunt.ai](https://jobhunt.ai/machinelearning-remote-jobs.html)                        | 8,000,000      |            | AI/Machine learning jobs, filter on remote jobs  |
| [Team Extension](https://teamextension.io/)                                              | 8,000,000      |            | Eastern Euro Developers, Designers, QA
| **Agency**                                                                               |                |            |                                           |
| **Name**                                                                                 | **Rank** |            | **Hires these Types**                     |
| [Codeable](https://codeable.io/)                                                         | 40,000         |            | Wordpress Developers developers           |
| [Superside](https://www.superside.com/)                                                  | 50,000         |            | Designers                                 |
| [Working Not Working](https://workingnotworking.com/)                                    | 70,000         |            | Designers                                 |
| [X-Team](http://x-team.com)                                                              | 70,000         |            | Developers                                |
| [Experfy](https://www.experfy.com/)                                                      | 80,000         |            | Data Scientists & Developers              |
| [Gun.io](https://gun.io/)                                                                | 100,000        |            | Developers                                |
| [Gigster](https://gigster.com/)                                                          | 200,000        |            | Developers, Project Managers, & Designers |
| [DOZ.com](https://www.doz.com)                                                           | 500,000        |            | Marketing                                 |
| [Moonlight](https://www.moonlightwork.com)                                               | 1,000,000      |            | Developers                                |
| [10xmanagement](https://www.10xmanagement.com/)                                          | 1,000,000      |            | Designers & Developers                    |
| [Lightboard](https://lightboard.io)                                                      | 2,000,000      |            | Designers                                 |
| [MeteorOps.com](https://meteorops.com)                                                   | 10,000,000      |            | DevOps Engineers                          |
| [Dreamlance](http://dreamlance.io/)                                                      | 10,000,000     |            | Designers & Developers                    |
| [CodersClan.net](https://codersclan.net)                                                 | 10,000,000     |            | Developers                                |

## Regional, or Language-Specific

* UK
  * [Gigged AI](https://gigged.ai) - Newcomer in the space with Clients ready but little Talent.
  * [devitjobs.uk](https://devitjobs.uk/jobs/all/remote)
* Germany
  * [germantechjobs](https://germantechjobs.de/jobs/all/remote)
* Latin America
  * [Workana](https://www.workana.com) – Largest Latin American freelancer network
* French
  * [Codeur](https://www.codeur.com/) - Leader in France.
  * [Malt](https://www.malt.fr/) - One of the largest platform for french Freelancers.
  * [Comet](https://www.comet.co/) - French platform that search and qualify IT freelancers for each mission.
  * [Laotop](https://www.laotop.fr/) - French platform that search and qualify IT freelancers for each mission.
* Denmark
  * [Worksome](http://www.worksome.dk) - Denmark's largest platform for local freelancers.
* Dutch
  * [Freelance.nl](https://freelance.nl/) - Leader in the Netherlands.
  * [Marktplaats](http://klussen.marktplaats.nl/diensten-en-vakmensen/klussen/0) - Kind of like Craigslist.
  * [Funle.nl](https://funle.nl/) - Aggregator of all available IT-specific freelance gigs in the Netherlands
  * [de Publieke Partner](https://depubliekepartner.nl/) - Agency in dutch Government freelance assignments.
* Spanish
  * [Freelancer MX](https://www.freelancer.mx) - Contrata a freelancers expertos para tu trabajo en l?nea.
* Persian
  * [Ponisha](http://ponisha.ir) - Ponisha is an online network for freelance professionals, in Iran.
* Brazilian
  * [99 Freelas](https://www.99freelas.com.br) - Contrate os melhores freelancers do Brasil.
* Russian
  * [Freelansim](https://freelansim.ru/) - биржа удаленной работы для IT-специалистов.
  * [FL](https://www.fl.ru/) - профессиональный ресурс, предназначенный для поиска работы или исполнителя на удаленную работу.
  * [freelance.ru](https://freelance.ru/) - Биржа фриланса, каталог фрилансеров и самозанятых по категориям.
* Indonesian
  * [Projects.co.id](https://projects.co.id/) - Leader in Indonesia.
  * [Fastwork](https://m.fastwork.id/) - Newcomers.
  * [Sribu.com](https://sribu.com/) - is For Designer (but sribulancer.com is dead).

## Why
This repo was inspired by [this Hacker News thread](https://news.ycombinator.com/item?id=12773282) about one software developer's experience with Upwork. For all those who have had bad experiences with Upwork, I wanted to create a list of additional resources that software developers can use to find freelance, nomadic and contract work.

## Contributing
Please please please contribute to the list! If you have freelance work available or know someone who does, feel free to open a pull request to augment this list!

Thank you for looking :) Good hunting!

## Differences between types

|                                  | Clients                                                                                          | Jobs                                                                                         | Agency                                                                                            |
|----------------------------------|--------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------|
| Interaction with Clients         | Your interaction is with clients directly, organization does little/no communication with clients | You interact with employers directly, organization does little/no communication with clients | Organization handles clients and just gives you work. You have little/no interaction with clients |
| Control over working environment | Generally you can work however, using own tools, supplies, set own hours, etc                    | Employer controls how you work generally. Provides tools, sets hours, tasks, etc.            | Agency might direct you on what tasks to do but you have flexibility on how to accomplish them    |
| Payment                          | Client pays you, but through the organization (which may takes its cut)                          | Employer pays you salary (withholding taxes)                                                 | Agency pays you                                                                                   |
| Choice of Client or Project      | Complete control of client/project                                                               | Complete control of job selection                                                            | Little/no choice of project or client                                                             |
| Vetting/Interviews               | Clients vets you                                                                                 | Companies vet you                                                                            | Organization vets you, Client wouldn't really vet you individual                                  |

## Other resources

### Aggregators

- https://findwork.dev
- http://jobscribe.com/
- https://www.hellobonsai.com/gig-list
- https://www.folyo.me/
- http://www.lancelist.com/
- https://www.letsmakeapps.io/
- https://freelandr.com/
- https://remotephp.io
- https://periodix.net
- https://www.remotelyawesomejobs.com
- https://www.nynedge.com/
- https://remotework.fyi/
- https://www.vollna.com/
- https://remotebond.com/

### Bounties based and open source
- https://gitcoin.co
- https://bountysource.com
- https://gitpay.me

### Remote jobs

- [lukasz-madonawesome-remote-job](https://github.com/lukasz-madon/awesome-remote-job#job-boards) – A curated list of awesome remote jobs and resources. Inspired by [Awesome Python](https://github.com/vinta/awesome-python).
- [HN Hiring (hnhiring.me)](http://hnhiring.me/)
- [HNHIRING](https://hnhiring.com/) – All Jobs From Hacker News 'Who is Hiring?'.
- [Remote Leaf](https://remoteleaf.com/) – Receive hand-picked remote jobs posted anywhere delivered straight to your inbox.

### Job tracking tools
- [Upfeed](https://upfeed.io/) – Smart and personalized Upwork's feed.
- [Upwork jobs feed tracker](https://chrome.google.com/webstore/detail/upwork-jobs-feed-tracker/gcjmekbfkkmaccloaoccfiohjnmgkddm) – Convenient way to track new jobs for Upwork freelancers.

## Who

[Codinronan](https://github.com/codinronan) originally started this resource, [Andy Chase](https://github.com/andychase) has been maintaining since 2017. Special thanks to everyone who has submitted corrections and new sites. Also thanks to [Georges Kabbouchi](https://github.com/KABBOUCHI) who developed the website version based on a design from [Ovidiu Alexandrescu](https://github.com/owystyle).

## License
None. Literally, why would I include a license in this. Copy, paste, skewer, go nuts. (Ok, officially, "The Unlicense")


================================================
FILE: docs/404.html
================================================
---
layout: default
sitemap: false
---

<style type="text/css" media="screen">
  .container {
    margin: 10px auto;
    max-width: 600px;
    text-align: center;
  }
  h1 {
    margin: 30px 0;
    font-size: 4em;
    line-height: 1;
    letter-spacing: -1px;
  }
</style>

<div class="container">
  <h1>404</h1>

  <p><strong>Page not found :(</strong></p>
  <p>The requested page could not be found.</p>
</div>


================================================
FILE: docs/CNAME
================================================
theremotefreelancer.com

================================================
FILE: docs/Gemfile
================================================
source "https://rubygems.org"

gem 'github-pages', group: :jekyll_plugins


================================================
FILE: docs/_config.yml
================================================
# Welcome to Jekyll!
#
# This config file is meant for settings that affect your whole blog, values
# which you are expected to set up once and rarely edit after that. If you find
# yourself editing this file very often, consider using Jekyll's data files
# feature for the data you need to update frequently.
#
# For technical reasons, this file is *NOT* reloaded automatically when you use
# 'bundle exec jekyll serve'. If you change this file, please restart the server process.

# Site settings
# These are used to personalize your new site. If you look in the HTML files,
# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.
# You can create any custom variable you would like, and they will be accessible
# in the templates via {{ site.myvariable }}.
title: The Remote Freelancer
author: Andy Chase
email: hi@theremotefreelancer.com
description: > # this means to ignore newlines until "baseurl:"
  List of community-curated resources to find topical remote freelance & contract work for software developers, web designers, and more!
baseurl: "" # the subpath of your site, e.g. /blog
url: "https://theremotefreelancer.com" # the base hostname & protocol for your site, e.g. http://example.com
twitter_username: tr_freelancer
github_username:  andychase
google_analytics: UA-105858060-1

# Build settings
markdown: kramdown
plugins:
    - jekyll-sitemap
    - jekyll-seo-tag
    - jekyll-postcss

# Exclude from processing.
# The following items will not be processed, by default. Create a custom list
# to override the default setting.
# exclude:
#   - Gemfile
#   - Gemfile.lock
#   - node_modules
#   - vendor/bundle/
#   - vendor/cache/
#   - vendor/gems/
#   - vendor/ruby/
exclude:
  - Gemfile
  - Gemfile.lock
  - node_modules
  - yarn.lock
  - package-lock.json
  - README.md
  - postcss.config.js
  - .gitignore

================================================
FILE: docs/_data/sites.csv
================================================
netloc,name,url,rank,section,type,opinions,affiliate_link,screening,sdescription,support,jobterm
upwork.com,Upwork,https://upwork.com,200,Clients,Clients,[Why people hate Upwork](/2017/09/04/why-people-hate-upwork.html),,Open,"Fixed or hourly projects. Largest client listing. Lots of low-paid competition. Horrible Support. Guaranteed payment for hourly 20%/10%/5% depending on engagement length. <br /><a href=""2017/09/04/why-people-hate-upwork.html"">Why do people hate Upwork?</a>",4,4
freelancer.com,Freelancer,https://www.freelancer.com/,700,Clients,Clients,,https://www.freelancer.com/affiliates/andychase,Open,Much like upwork but their pricing is more around paying per listing/application. ,4,5
www.peopleperhour.com,PeoplePerHour,https://www.peopleperhour.com,"2,000",Clients,Clients & Gigs,,,Open,Emphasis on shorter projects. Spec work also.,4,2
www.guru.com,Guru,http://www.guru.com/,"5,000",Clients,Clients,,,Open,"Larger profile section for freelancers. Payment on completion with ""resolution process"" if client is unhappy.",3,4
www.toptal.com,Toptal,https://www.toptal.com/,"6,000",Clients,Clients,,https://www.toptal.com/BLjoyn/worlds-top-talent,Screening,"Can be hard to actually get jobs. Big name clients. Hourly or weekly engagements. Recruiters sell you to clients. Some sense of ""community"".",2,4
www.truelancer.com,Truelancer,https://www.truelancer.com,"9,000",Clients,Clients,,,,,4,4
www.crossover.com,Crossover,https://www.crossover.com,"20,000",Clients,Clients,,,Screening,Emphasis on long term engagements.,2,3
turing.com,Turing,https://turing.com,"20,000",Clients,Clients,,,,,4,4
arc.dev,Arc,https://arc.dev/,"40,000",Clients,Clients,,https://www.codementor.io/i/2kz84aesbl,Screening,Get paid for short tutoring sessions or find clients. Bit of a vetting process. For client projects payments aren't guaranteed.,4,4
storetasker.com,StoreTasker,https://www.storetasker.com/,"40,000",Clients,Clients,,,,,3,4
www.scalablepath.com,Scalable Path,https://www.scalablepath.com,"90,000",Clients,Clients,,,,,4,4
www.soshace.com,Soshace,https://www.soshace.com,"100,000",Clients,Clients,,,,,4,3
adevait.com,Adeva,https://adevait.com/,"200,000",Clients,Clients,,,,,4,4
speedlancer.com,Speedlancer,https://speedlancer.com,"600,000",Clients,Clients,,,,,4,4
worksome.co.uk,Worksome,https://worksome.co.uk,"2,000,000",Clients,Clients,,,,,4,4
codementor.io,CodeMentor,https://codementor.io/,"10,000",Tutoring,Tutoring,,https://www.codementor.io/i/2kz84aesbl,,,1,5
www.fiverr.com,Fiverr,https://www.fiverr.com/,100,Other,Gigs,,http://track.fiverr.com/visit/?bta=15132&nci=5490,Open,,4,4
jobdone.net,JobDone,https://jobdone.net/explore?,"1,000,000",Other,Gigs,,,,,5,4
frontenddevelopers.org,#frontenddevelopers.org,http://frontenddevelopers.org/,"1,000,000",Other,Community,,,,,4,4
remote.one,Remote One,https://remote.one/,"1,000,000",Other,Tools,,,,,4,4
clarrow.com,Clarrow,https://clarrow.com/,"2,000,000",Other,Tools,,,,,4,4
freelance.chat,#freelance,http://freelance.chat/,"6,000,000",Other,Community,,,,,4,4
hellobonsai.com,Bonsai,https://www.hellobonsai.com/,"10,000,000",Other,Tools,,https://app.hellobonsai.com/users/sign_up?refer=8728021d,,,4,5
hypelance.com,Hypelance,https://hypelance.com/,"10,000,000",Other,Community,,,,,4,4
codeable.io,Codeable,https://codeable.io/,"40,000",Agency,Agency,,,,,4,4
superside.com,Superside,https://www.superside.com/,"50,000",Agency,Agency,,,,,4,4
workingnotworking.com,Working Not Working,https://workingnotworking.com/,"70,000",Agency,Agency,,,,,3,4
x-team.com,X-Team,http://x-team.com,"70,000",Agency,Agency,,,,,4,4
www.experfy.com,Experfy,https://www.experfy.com/,"80,000",Agency,Agency,,,,,4,4
gun.io,Gun.io,https://gun.io/,"100,000",Agency,Agency,,,,,4,4
gigster.com,Gigster,https://gigster.com,"200,000",Agency,Agency,,https://gigs.to/r/Dz2vevg,,,4,4
pilot.co,Pilot,https://pilot.co/,"200,000",Agency,Agency,,,,,4,4
www.doz.com,DOZ.com,https://www.doz.com,"500,000",Agency,Agency,,,,,4,4
www.moonlightwork.com,Moonlight,https://www.moonlightwork.com,"1,000,000",Agency,Agency,,,,,4,4
www.10xmanagement.com,10xmanagement,https://www.10xmanagement.com/,"1,000,000",Agency,Agency,,,,,4,4
lightboard.io,Lightboard,https://lightboard.io,"2,000,000",Agency,Agency,,,,,4,4
meteorops.com,MeteorOps,https://meteorops.com,"10,000,000",Agency,Agency,,,Open,"DevOps Engineering Projects",4,4
dreamlance.io,Dreamlance,http://dreamlance.io/,"10,000,000",Agency,Agency,,,,,4,4
codersclan.net,CodersClan.net,https://codersclan.net,"10,000,000",Agency,Agency,,,,,4,4
careers.stackoverflow.com,Stack Overflow Careers,http://careers.stackoverflow.com/jobs/remote,60,Jobs,Jobs,,,,,4,4
dribbble.com,Dribbble Jobs,https://dribbble.com/obs?utf8=%E2%9C%93&anywhere=true&location=Anywhere,"1,000",Jobs,Jobs,,,,,4,4
angel.co,Angel List Jobs,https://angel.co/jobs#find/f!%7B%22remote%22%3Atrue%7D,"2,000",Jobs,Jobs,,,,,4,4
www.flexjobs.com,FlexJobs,https://www.flexjobs.com,"7,000",Jobs,Jobs,,,,,4,4
weworkremotely.com,We Work Remotely,https://weworkremotely.com/,"10,000",Jobs,Jobs,,,,,4,4
hired.com,Hired,https://hired.com/,"20,000",Jobs,Jobs,,,,,4,4
remoteok.io,RemoteOK,https://remoteok.io/,"80,000",Jobs,Jobs,,,,,4,4
nofluffjobs.com,No Fluff Jobs,https://nofluffjobs.com/#criteria=remote,"200,000",Jobs,Jobs,,,,,4,4
www.golangprojects.com,Golangprojects.com,https://www.golangprojects.com/golang-remote-jobs.html,"600,000",Jobs,Jobs,,,,,4,4
jobhunt.ai,Jobhunt.ai,https://jobhunt.ai/machinelearning-remote-jobs.html,"8,000,000",Jobs,Jobs,,,,,4,4
teamextension.io,Team Extension,https://teamextension.io/,"8,000,000",Jobs,Jobs,,,,,4,4


================================================
FILE: docs/_includes/board_listing.html
================================================
<div class="flex flex-col w-full bg-brand-gray-2 lg:w-2/3 xl:w-3/5 2xl:w-1/2 lg:h-screen">
    <div class="flex items-center justify-between px-6 bg-white shadow lg:p-6 2xl:p-10">
      <div class="space-x-4 tab-links">
        <a
          data-tab="clients"
          class="inline-block py-3 text-base md:text-lg font-medium border-b-2 cursor-pointer text-brand-gray-9 lg:py-1 border-brand"
          >Clients</a
        >
        <a
          data-tab="jobs"
          class="inline-block py-3 text-base md:text-lg font-medium cursor-pointer text-brand-gray-3 lg:py-1"
          >Jobs</a
        >
        <a
          data-tab="other"
          class="inline-block py-3 text-base md:text-lg font-medium cursor-pointer text-brand-gray-3 lg:py-1"
          >Other</a
        >
        <a
          data-tab="agency"
          class="inline-block py-3 text-base md:text-lg font-medium cursor-pointer text-brand-gray-3 lg:py-1"
          >Agency</a
        >
      </div>

      <div class="hidden md:flex space-x-3"> 
        <a href="https://github.com/engineerapart/TheRemoteFreelancer" target="_blank">
          <svg class="w-5 h-5 text-brand-gray-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg>
        </a>

        <a href="https://twitter.com/tr_freelancer" target="_blank">
          <svg class="w-5 h-5 text-brand-gray-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 26 26">
            <circle id="Ellipse_1" data-name="Ellipse 1" cx="13" cy="13" r="13" fill="currentColor"/>
            <path id="Social_Twitter_Bird_Symbol_copy_2" data-name="Social Twitter Bird Symbol copy 2" d="M1864.527,51.6a6.461,6.461,0,0,1-2.051.784,3.228,3.228,0,0,0-5.583,2.207,3.272,3.272,0,0,0,.083.736,9.161,9.161,0,0,1-6.652-3.372,3.232,3.232,0,0,0,1,4.309,3.228,3.228,0,0,1-1.462-.406v.04a3.231,3.231,0,0,0,2.589,3.166,3.236,3.236,0,0,1-1.458.055,3.231,3.231,0,0,0,3.014,2.241A6.477,6.477,0,0,1,1850,62.74a7.136,7.136,0,0,1-.77-.043,9.18,9.18,0,0,0,14.13-7.735l-.01-.418a6.49,6.49,0,0,0,1.613-1.669,6.444,6.444,0,0,1-1.853.509A3.246,3.246,0,0,0,1864.527,51.6Z" transform="translate(-1844 -44)" fill="#fff"/>
          </svg>
          
        </a>
      </div>
    </div>

    <div class="flex-1 px-6 py-10 mt-2 lg:overflow-scroll tabs lg:mt-0" >
        <div id="clients">
            <div class="hidden lg:block space-y-5">
              {% include board_listing_item.html section='Clients' %}
            </div>
            <div class="block lg:hidden space-y-5">
              {% include board_listing_item_mobile.html section='Clients' %}
            </div>
        </div>
        <div id="jobs" class="hidden">
          <div class="hidden lg:block space-y-5">
            {% include board_listing_item.html section='Jobs' %}
          </div>
          <div class="block lg:hidden space-y-5">
            {% include board_listing_item_mobile.html section='Jobs' %}
          </div>
        </div>
        <div id="other" class="hidden">
          <div class="hidden lg:block space-y-5">
            {% include board_listing_item.html section='Other' %}
          </div>
          <div class="block lg:hidden space-y-5">
            {% include board_listing_item_mobile.html section='Other' %}
          </div>
        </div>
        <div id="agency" class="hidden">
          <div class="hidden lg:block space-y-5">
            {% include board_listing_item.html section='Agency' %}
          </div>
          <div class="block lg:hidden space-y-5">
            {% include board_listing_item_mobile.html section='Agency' %}
          </div>
        </div>
      </div>
    </div>
  </div>

  <script>
    let getSiblings = function (e) {
      // for collecting siblings
      let siblings = [];
      // if no parent, return no sibling
      if (!e.parentNode) {
        return siblings;
      }
      // first child of the parent node
      let sibling = e.parentNode.firstChild;

      // collecting siblings
      while (sibling) {
        if (sibling.nodeType === 1 && sibling !== e) {
          siblings.push(sibling);
        }
        sibling = sibling.nextSibling;
      }
      return siblings;
    };

    let links = document.querySelectorAll(".tab-links > a");

    links.forEach((link) => {
      link.addEventListener("click", function (event) {
        event.preventDefault();

        this.className =
          "text-base md:text-lg text-brand-gray-9 font-medium cursor-pointer py-3 inline-block lg:py-1 border-b-2 border-brand";

        getSiblings(this).forEach((sibling) => {
          sibling.className =
            "text-base md:text-lg text-brand-gray-3 font-medium cursor-pointer py-3 inline-block lg:py-1";
        });

        let tab = document.querySelector(".tabs div#" + this.dataset["tab"]);
        tab.className = "";

        getSiblings(tab).forEach((sibling) => {
          sibling.className = "hidden";
        });
      });
    });
  </script>

================================================
FILE: docs/_includes/board_listing_item.html
================================================
{{ section }} {% assign listings = site.data.sites | where:'section',
include.section %} {% for listing in listings %}
<div class="md:flex bg-white shadow">
  <div class="w-full md:w-1/4 bg-brand-gray-1 border-r border-gray-200 p-6">
    <div class="flex md:flex-col justify-between h-full">
      <div>
        <img
          class="w-12 h-12"
          src="/icons/{{listing.netloc}}.ico"
          class="favicon"
        />

        <a
          class="block mt-5 text-lg"
          href="{% if listing.affiliate_link %}{{ listing.affiliate_link }}{% else %}{{listing.url}}{% endif %}"
        >
          {{listing.name}}
        </a>
      </div>
      <div class="flex flex-col md:flex-row items-center justify-between">
        <small
          class="text-xs text-brand-gray-4 uppercase tracking-wide font-medium"
        >
          Alexa Rank
        </small>

        <div class="flex items-center text-sm">
          <svg
            class="mr-2"
            xmlns="http://www.w3.org/2000/svg"
            width="16"
            height="13"
            viewBox="0 0 16 13"
          >
            <path
              id="Rectangle_7_copy_3"
              data-name="Rectangle 7 copy 3"
              d="M1104,357V347h4v10Zm-6,0V344h4v13Zm-6,0v-5h4v5Z"
              transform="translate(-1092 -344)"
              fill="#ffc601"
            />
          </svg>

          {{listing.rank}}
        </div>
      </div>
    </div>
  </div>
  <div class="flex-1 flex flex-col p-6" style="min-height: 100px">
    <div class="text-xs text-brand-gray-4">SUMMARY</div>
    <div class="flex-1 mt-4">
      <div class="font-light prose">
        {% if listing.sdescription == "" or listing.sdescription == nil %}
          -
        {% else %}
          {{listing.sdescription}}
        {% endif %}
       </div>
    </div>

    <div class="mt-4 grid grid-cols-2 gap-2 xl:gap-4 md:flex md:justify-between">
      <div class="flex items-center text-xs">
        <span
          class="text-xs text-brand-gray-4 mr-2 uppercase tracking-wide font-medium"
          >Type</span
        >
        {{ listing.type }}
      </div>

      <div class="flex items-center text-xs justify-end md:justify-start">
        <span
          class="text-xs text-brand-gray-4 mr-2 uppercase tracking-wide font-medium"
          >SUPPORT</span
        >
        {% assign support = listing.support | plus: 0 %} {% for i in (1..5) %}
        {% if i <= support and support <= 3 %}
        <div class="flex-shrink-0 w-2.5 h-2.5 rounded-full mr-1 bg-brand-light"></div>
        {% elsif i <= support and support > 3 %}
        <div class="flex-shrink-0 w-2.5 h-2.5 rounded-full mr-1 bg-brand-green"></div>
        {% else %}
        <div
          class="flex-shrink-0 w-2.5 h-2.5 rounded-full mr-1 bg-white border border-gray-300"
        ></div>
        {% endif %} {% endfor %}
      </div>

      <div class="flex items-center">
        <span
          class="text-xs text-brand-gray-4 mr-2 uppercase tracking-wide font-medium"
          >JOB TERM</span
        >
        {% assign jobterm = listing.jobterm | plus: 0 %} {% for i in (1..5) %}
        {% if i <= jobterm and jobterm <= 3 %}
        <div class="flex-shrink-0 w-2.5 h-2.5 rounded-full mr-1 bg-brand-light"></div>
        {% elsif i <= jobterm and jobterm > 3 %}
        <div class="flex-shrink-0 w-2.5 h-2.5 rounded-full mr-1 bg-brand-green"></div>
        {% else %}
        <div
          class="flex-shrink-0 w-2.5 h-2.5 rounded-full mr-1 bg-white border border-gray-300"
        ></div>
        {% endif %} {% endfor %}
      </div>

      <div class="flex items-center text-xs justify-end md:justify-start">
        <span
          class="text-xs text-brand-gray-4 mr-2 uppercase tracking-wide font-medium"
          >SCREENING</span
        >

        {% if listing.screening == 'Open' %}
        <svg
          class="w-5 h-5 text-brand-green"
          fill="none"
          stroke="currentColor"
          viewBox="0 0 24 24"
          xmlns="http://www.w3.org/2000/svg"
        >
          <path
            stroke-linecap="round"
            stroke-linejoin="round"
            stroke-width="2"
            d="M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z"
          ></path>
        </svg>
        {% else %}
        <svg
          class="w-5 h-5 text-brand-light"
          fill="none"
          stroke="currentColor"
          viewBox="0 0 24 24"
          xmlns="http://www.w3.org/2000/svg"
        >
          <path
            stroke-linecap="round"
            stroke-linejoin="round"
            stroke-width="2"
            d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"
          ></path>
        </svg>
        {% endif %}
      </div>
    </div>
  </div>
</div>
{% endfor %}


================================================
FILE: docs/_includes/board_listing_item_mobile.html
================================================
{{ section }} {% assign listings = site.data.sites | where:'section',
include.section %} {% for listing in listings %}
<div class="bg-white shadow">
  <div class="w-full">
    <div class="flex justify-between h-full p-6 bg-brand-gray-1">
      <div>
        <img
          class="w-12 h-12"
          src="/icons/{{listing.netloc}}.ico"
          class="favicon"
        />
      </div>
      <div class="flex flex-col items-center justify-between">
        <div class="flex items-center text-sm">
          <svg
            class="mr-2"
            xmlns="http://www.w3.org/2000/svg"
            width="16"
            height="13"
            viewBox="0 0 16 13"
          >
            <path
              id="Rectangle_7_copy_3"
              data-name="Rectangle 7 copy 3"
              d="M1104,357V347h4v10Zm-6,0V344h4v13Zm-6,0v-5h4v5Z"
              transform="translate(-1092 -344)"
              fill="#ffc601"
            />
          </svg>

          {{listing.rank}}
        </div>

        <small
          class="text-xs font-medium tracking-wide uppercase text-brand-gray-4"
        >
          Alexa Rank
        </small>
      </div>
    </div>
    <details>
      <summary class="flex flex-row-reverse justify-between p-6 border-b border-gray-300 bg-brand-gray-1">
        <a
          class="inline-block text-lg"
          href="{% if listing.affiliate_link %}{{ listing.affiliate_link }}{% else %}{{listing.url}}{% endif %}"
        >
          {{listing.name}}
        </a>
      </summary>
      <div
        class="mt-4 bg-white"
      >
        <div class="flex items-center justify-between p-6 text-sm border-b border-brand-gray-2">
          <span
            class="mr-2 text-xs font-medium tracking-wide uppercase text-brand-gray-4"
            >Type</span
          >
          {{ listing.type }}
        </div>

        <div class="flex items-center justify-between p-6 text-sm border-b border-brand-gray-2">
          <span
            class="mr-2 text-xs font-medium tracking-wide uppercase text-brand-gray-4"
            >SUPPORT</span
          >
          <div class="flex"> {% assign support = listing.support | plus: 0 %} {% for i in (1..5) %}
            {% if i <= support and support <= 3 %}
            <div
              class="flex-shrink-0 w-2.5 h-2.5 rounded-full mr-1 bg-brand-light"
            ></div>
            {% elsif i <= support and support > 3 %}
            <div
              class="flex-shrink-0 w-2.5 h-2.5 rounded-full mr-1 bg-brand-green"
            ></div>
            {% else %}
            <div
              class="flex-shrink-0 w-2.5 h-2.5 rounded-full mr-1 bg-white border border-gray-300"
            ></div>
            {% endif %} {% endfor %}</div>
        </div>

        <div class="flex items-center justify-between p-6 text-sm border-b border-brand-gray-2">
          <span
            class="mr-2 text-xs font-medium tracking-wide uppercase text-brand-gray-4"
            >JOB TERM</span
          >
          <div class="flex">{% assign jobterm = listing.jobterm | plus: 0 %} {% for i in (1..5) %}
            {% if i <= jobterm and jobterm <= 3 %}
            <div
              class="flex-shrink-0 w-2.5 h-2.5 rounded-full mr-1 bg-brand-light"
            ></div>
            {% elsif i <= jobterm and jobterm > 3 %}
            <div
              class="flex-shrink-0 w-2.5 h-2.5 rounded-full mr-1 bg-brand-green"
            ></div>
            {% else %}
            <div
              class="flex-shrink-0 w-2.5 h-2.5 rounded-full mr-1 bg-white border border-gray-300"
            ></div>
            {% endif %} {% endfor %}</div>
        </div>

        <div class="flex items-center justify-between p-6 text-sm border-b border-brand-gray-2">
          <span
            class="mr-2 text-xs font-medium tracking-wide uppercase text-brand-gray-4"
            >SCREENING</span
          >

          {% if listing.screening == 'Open' %}
          <svg
            class="w-5 h-5 text-brand-green"
            fill="none"
            stroke="currentColor"
            viewBox="0 0 24 24"
            xmlns="http://www.w3.org/2000/svg"
          >
            <path
              stroke-linecap="round"
              stroke-linejoin="round"
              stroke-width="2"
              d="M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z"
            ></path>
          </svg>
          {% else %}
          <svg
            class="w-5 h-5 text-brand-light"
            fill="none"
            stroke="currentColor"
            viewBox="0 0 24 24"
            xmlns="http://www.w3.org/2000/svg"
          >
            <path
              stroke-linecap="round"
              stroke-linejoin="round"
              stroke-width="2"
              d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"
            ></path>
          </svg>
          {% endif %}
        </div>
      </div>
    </details>
  </div>
  <div class="flex flex-col flex-1 p-6" style="min-height: 100px">
    <div class="text-xs text-brand-gray-4">SUMMARY</div>
    <div class="flex-1 mt-4">
      <div class="font-light prose">
        {% if listing.sdescription == "" or listing.sdescription == nil %} - {%
        else %} {{listing.sdescription}} {% endif %}
      </div>
    </div>
  </div>
</div>
{% endfor %}


================================================
FILE: docs/_includes/footer.html
================================================
<footer class="bg-brand-gray-10">
    <div class="max-w-7xl mx-auto py-12 md:px-4 overflow-hidden sm:px-6 lg:px-8">
      <div class="flex justify-center space-x-6">
        <a href="https://twitter.com/tr_freelancer" target="_blank" class="text-gray-400 hover:text-gray-500">
          <span class="sr-only">Twitter</span>
          <svg
            class="h-6 w-6"
            fill="currentColor"
            viewBox="0 0 24 24"
            aria-hidden="true"
          >
            <path
              d="M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.713v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84"
            />
          </svg>
        </a>

        <a href="https://github.com/engineerapart/TheRemoteFreelancer" target="_blank" class="text-gray-400 hover:text-gray-500">
          <span class="sr-only">GitHub</span>
          <svg
            class="h-6 w-6"
            fill="currentColor"
            viewBox="0 0 24 24"
            aria-hidden="true"
          >
            <path
              fill-rule="evenodd"
              d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"
              clip-rule="evenodd"
            />
          </svg>
        </a>
      </div>
      <p class="mt-8 text-center font-semibold text-lg text-gray-100">
        Andy Chase
      </p>
      <p class="mt-3 text-center text-base text-gray-300">
        <a
          href="mailto:contact@theremotefreelancer.com"
          class="hover:underline"
          >contact@theremotefreelancer.com</a
        >
      </p>
    </div>
  </footer>

================================================
FILE: docs/_includes/google-analytics.html
================================================
<script async src="https://www.googletagmanager.com/gtag/js?id={{ site.google_analytics }}"></script>
<script>
    window['ga-disable-{{ site.google_analytics }}'] = window.doNotTrack === "1" || navigator.doNotTrack === "1" || navigator.doNotTrack === "yes" || navigator.msDoNotTrack === "1";
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());

    gtag('config', '{{ site.google_analytics }}');
</script>

================================================
FILE: docs/_includes/head.html
================================================
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    {%- seo -%}
    <link rel="stylesheet" href="/assets/app.css" />
    <link rel="preconnect" href="https://fonts.gstatic.com" />
    <link
      href="https://fonts.googleapis.com/css2?family=Montserrat:wght@100;200;300;400;500;600;700;800;900&display=swap"
      rel="stylesheet"
    />

    {%- if jekyll.environment == 'production' and site.google_analytics -%}
    {%- include google-analytics.html -%}
    {%- endif -%}

================================================
FILE: docs/_includes/header.html
================================================
<header class="site-header" role="banner">

  <div class="wrapper">
    {% assign default_paths = site.pages | map: "path" %}
    {% assign page_paths = site.header_pages | default: default_paths %}
    <a class="site-title" href="{{ "/" | relative_url }}" style="margin: 10px 0;"><img src="/logo.svg" style="height: 64px;"/><span style="vertical-align: bottom; margin-left: 10px; font-weight: bold;">The Remote Freelancer</span></a>
  </div>
</header>


================================================
FILE: docs/_includes/logo.html
================================================
<svg
  class="w-auto h-16 mx-auto lg:mx-0"
  viewBox="0 0 227 68"
  fill="none"
  xmlns="http://www.w3.org/2000/svg"
>
  <g clip-path="url(#clip0)">
    <path
      d="M82.664 28H85.784V13.84H91.352V11.2H77.1V13.84H82.664V28ZM100.688 15.04C99.9019 15.0031 99.1167 15.1291 98.3816 15.4099C97.6465 15.6907 96.9773 16.1204 96.416 16.672V10.192H93.416V28H96.416V21.52C96.416 18.952 97.856 17.656 99.992 17.656C101.912 17.656 103.04 18.756 103.04 21.04V28H106.04V20.656C106.04 16.792 103.76 15.04 100.688 15.04ZM122.024 21.664C122.077 20.7926 121.947 19.9198 121.642 19.1018C121.337 18.2838 120.864 17.5388 120.253 16.9147C119.643 16.2907 118.908 15.8015 118.097 15.4786C117.286 15.1557 116.416 15.0063 115.544 15.04C114.671 15.0054 113.8 15.1506 112.986 15.4667C112.171 15.7827 111.43 16.2629 110.809 16.8773C110.188 17.4918 109.7 18.2273 109.375 19.0384C109.05 19.8494 108.895 20.7186 108.92 21.592C108.92 25.408 111.7 28.168 116 28.168C116.961 28.2238 117.922 28.0654 118.815 27.7043C119.707 27.3432 120.508 26.7884 121.16 26.08L119.552 24.232C119.102 24.6957 118.56 25.0593 117.96 25.2991C117.361 25.539 116.717 25.6497 116.072 25.624C115.123 25.711 114.176 25.446 113.41 24.8795C112.645 24.313 112.114 23.4845 111.92 22.552H121.976C122 22.264 122.024 21.9 122.024 21.664ZM115.544 17.44C116.432 17.4007 117.301 17.7017 117.975 18.2815C118.648 18.8613 119.075 19.6762 119.168 20.56H111.9C112.005 19.6777 112.438 18.8671 113.113 18.2892C113.788 17.7113 114.656 17.4082 115.544 17.44ZM146.168 28L142.3 22.48C143.385 22.0964 144.319 21.3743 144.963 20.4201C145.606 19.4658 145.927 18.33 145.876 17.18C145.876 13.46 143.14 11.204 138.724 11.204H131.816V28H134.936V23.1H138.728C138.944 23.104 139.161 23.096 139.376 23.076L142.808 28H146.168ZM142.736 17.176C142.736 19.288 141.32 20.536 138.584 20.536H134.936V13.836H138.584C141.32 13.84 142.736 15.064 142.736 17.176ZM161.12 21.664C161.173 20.7926 161.043 19.9198 160.738 19.1018C160.433 18.2838 159.96 17.5388 159.349 16.9147C158.739 16.2907 158.004 15.8015 157.193 15.4786C156.382 15.1557 155.512 15.0063 154.64 15.04C153.767 15.0054 152.896 15.1506 152.082 15.4667C151.267 15.7827 150.526 16.2629 149.905 16.8773C149.284 17.4918 148.796 18.2273 148.471 19.0384C148.146 19.8494 147.991 20.7186 148.016 21.592C148.016 25.408 150.8 28.168 155.1 28.168C156.061 28.2238 157.022 28.0654 157.915 27.7043C158.807 27.3432 159.608 26.7884 160.26 26.08L158.648 24.232C158.198 24.6957 157.656 25.0593 157.056 25.2991C156.457 25.539 155.813 25.6497 155.168 25.624C154.219 25.711 153.272 25.446 152.506 24.8795C151.741 24.313 151.21 23.4845 151.016 22.552H161.072C161.1 22.264 161.12 21.9 161.12 21.664ZM154.64 17.44C155.528 17.4007 156.397 17.7017 157.071 18.2815C157.744 18.8613 158.171 19.6762 158.264 20.56H150.992C151.097 19.6769 151.531 18.8658 152.207 18.2878C152.883 17.7098 153.751 17.4071 154.64 17.44ZM180.176 15.04C179.266 15.0073 178.361 15.1827 177.529 15.5528C176.697 15.923 175.961 16.4782 175.376 17.176C174.908 16.4707 174.262 15.9017 173.504 15.5266C172.745 15.1514 171.9 14.9836 171.056 15.04C170.268 15.0054 169.482 15.1468 168.756 15.454C168.029 15.7612 167.38 16.2265 166.856 16.816V15.184H164V28H167V21.5C167 18.956 168.344 17.66 170.336 17.66C172.16 17.66 173.216 18.76 173.216 21.044V28H176.216V21.5C176.216 18.956 177.584 17.66 179.552 17.66C181.376 17.66 182.432 18.76 182.432 21.044V28H185.432V20.656C185.432 16.792 183.272 15.04 180.176 15.04ZM195.152 28.168C196.042 28.2201 196.932 28.0878 197.768 27.7793C198.604 27.4707 199.367 26.9927 200.009 26.3751C200.652 25.7576 201.159 25.0139 201.501 24.1908C201.842 23.3677 202.009 22.4829 201.992 21.592C201.992 17.752 199.136 15.04 195.152 15.04C194.266 14.9897 193.379 15.1226 192.547 15.4306C191.715 15.7386 190.955 16.2149 190.315 16.8299C189.676 17.4448 189.17 18.1851 188.829 19.0045C188.489 19.8239 188.321 20.7048 188.336 21.592C188.32 22.4804 188.488 23.3626 188.828 24.1836C189.168 25.0045 189.673 25.7466 190.313 26.3635C190.952 26.9805 191.712 27.4591 192.544 27.7696C193.377 28.08 194.265 28.2157 195.152 28.168ZM195.152 25.6C194.633 25.6106 194.117 25.5124 193.637 25.3118C193.158 25.1112 192.726 24.8126 192.369 24.4352C192.012 24.0578 191.738 23.6099 191.564 23.1203C191.39 22.6306 191.321 22.1101 191.36 21.592C191.321 21.0739 191.39 20.5534 191.564 20.0637C191.738 19.5741 192.012 19.1262 192.369 18.7488C192.726 18.3714 193.158 18.0728 193.637 17.8722C194.117 17.6716 194.633 17.5735 195.152 17.584C195.673 17.5708 196.191 17.667 196.673 17.8664C197.155 18.0657 197.59 18.3638 197.949 18.7414C198.309 19.119 198.585 19.5678 198.761 20.0588C198.936 20.5498 199.007 21.072 198.968 21.592C199.007 22.112 198.936 22.6343 198.761 23.1252C198.585 23.6162 198.309 24.065 197.949 24.4426C197.59 24.8202 197.155 25.1183 196.673 25.3176C196.191 25.517 195.673 25.6132 195.152 25.6ZM211.736 25.168C211.251 25.5268 210.659 25.7127 210.056 25.696C208.904 25.696 208.28 25.024 208.28 23.776V17.676H211.712V15.276H208.28V12.348H205.28V15.276H203.168V17.676H205.28V23.844C205.28 26.676 206.888 28.164 209.696 28.164C210.725 28.1981 211.736 27.8947 212.576 27.3L211.736 25.168ZM226.664 21.668C226.717 20.7966 226.587 19.9238 226.282 19.1058C225.977 18.2878 225.504 17.5428 224.893 16.9187C224.283 16.2947 223.548 15.8055 222.737 15.4826C221.926 15.1597 221.056 15.0103 220.184 15.044C219.311 15.0094 218.44 15.1546 217.626 15.4707C216.811 15.7867 216.07 16.2669 215.449 16.8813C214.828 17.4958 214.34 18.2313 214.015 19.0424C213.69 19.8534 213.535 20.7226 213.56 21.596C213.56 25.412 216.344 28.172 220.64 28.172C221.601 28.2273 222.563 28.0683 223.455 27.7065C224.348 27.3447 225.149 26.7891 225.8 26.08L224.192 24.232C223.742 24.6957 223.2 25.0593 222.6 25.2991C222.001 25.539 221.357 25.6497 220.712 25.624C219.763 25.711 218.816 25.446 218.05 24.8795C217.285 24.313 216.754 23.4845 216.56 22.552H226.616C226.64 22.264 226.664 21.9 226.664 21.664V21.668ZM220.184 17.444C221.072 17.4047 221.941 17.7057 222.615 18.2855C223.288 18.8653 223.715 19.6802 223.808 20.564H216.536C216.64 19.6802 217.074 18.8681 217.75 18.2893C218.426 17.7104 219.295 17.4072 220.184 17.44V17.444ZM91.16 42.3V41.2H79.928V58H81.152V50.584H90.1V49.484H81.152V42.3H91.16ZM95.6 48.2V45.472H94.448V58H95.648V51.472C95.648 48.372 97.304 46.528 100.088 46.528C100.188 46.528 100.28 46.552 100.376 46.552V45.376C99.3836 45.2885 98.3888 45.5148 97.5319 46.0229C96.675 46.531 95.9993 47.2953 95.6 48.208V48.2ZM114.176 51.68C114.176 47.96 111.632 45.368 108.2 45.368C104.768 45.368 102.2 48.008 102.2 51.728C102.17 52.5795 102.317 53.428 102.632 54.2197C102.947 55.0114 103.423 55.729 104.03 56.327C104.637 56.9249 105.362 57.3903 106.158 57.6934C106.954 57.9966 107.805 58.1309 108.656 58.088C109.546 58.1202 110.432 57.9538 111.25 57.601C112.068 57.2481 112.797 56.7176 113.384 56.048L112.684 55.256C112.19 55.8297 111.573 56.285 110.879 56.5883C110.186 56.8915 109.433 57.035 108.676 57.008C107.997 57.0421 107.318 56.9386 106.68 56.7038C106.041 56.4689 105.457 56.1075 104.962 55.6413C104.467 55.175 104.072 54.6136 103.799 53.9906C103.526 53.3676 103.383 52.696 103.376 52.016H114.152C114.152 51.9 114.176 51.784 114.176 51.688V51.68ZM108.2 46.432C109.453 46.4149 110.662 46.8953 111.562 47.7681C112.462 48.6408 112.979 49.8347 113 51.088H103.4C103.421 49.8346 103.938 48.6406 104.838 47.7678C105.737 46.895 106.947 46.4146 108.2 46.432ZM128.5 51.688C128.5 47.968 125.956 45.376 122.524 45.376C119.092 45.376 116.524 48.016 116.524 51.736C116.494 52.5875 116.641 53.436 116.956 54.2277C117.271 55.0194 117.747 55.737 118.354 56.335C118.961 56.9329 119.686 57.3983 120.482 57.7014C121.278 58.0046 122.129 58.1389 122.98 58.096C123.87 58.1282 124.756 57.9618 125.574 57.609C126.392 57.2561 127.121 56.7256 127.708 56.056L127.008 55.264C126.301 56.0409 125.382 56.593 124.364 56.8517C123.346 57.1104 122.274 57.0643 121.282 56.7192C120.29 56.374 119.421 55.745 118.784 54.9103C118.146 54.0755 117.768 53.0719 117.696 52.024H128.48C128.48 51.9 128.5 51.784 128.5 51.688ZM122.524 46.432C123.777 46.4149 124.986 46.8953 125.886 47.7681C126.786 48.6408 127.303 49.8347 127.324 51.088H117.724C117.745 49.8339 118.262 48.6393 119.163 47.7664C120.064 46.8935 121.274 46.4135 122.528 46.432H122.524ZM132.224 58H133.424V40.192H132.224V58ZM142.712 45.376C140.883 45.3489 139.104 45.979 137.7 47.152L138.3 48.016C139.499 46.9789 141.035 46.4156 142.62 46.432C145.068 46.432 146.34 47.68 146.34 50.008V51.016H142.04C138.56 51.016 137.36 52.624 137.36 54.516C137.36 56.652 139.06 58.092 141.872 58.092C142.766 58.1631 143.663 57.9829 144.46 57.5715C145.257 57.1601 145.924 56.5341 146.384 55.764V58H147.536V50.056C147.536 46.96 145.808 45.376 142.712 45.376ZM142.04 57.112C139.832 57.112 138.56 56.104 138.56 54.472C138.56 53.032 139.472 51.952 142.06 51.952H146.332V54.3C146.015 55.1683 145.425 55.911 144.652 56.4176C143.879 56.9242 142.963 57.1678 142.04 57.112ZM158.6 45.376C157.588 45.305 156.577 45.5333 155.694 46.0326C154.81 46.5319 154.093 47.2801 153.632 48.184V45.472H152.48V58H153.68V51.328C153.68 48.352 155.48 46.456 158.432 46.456C160.976 46.456 162.488 47.944 162.488 50.776V58H163.688V50.68C163.688 47.176 161.648 45.376 158.6 45.376ZM173.624 58.1C174.545 58.1409 175.461 57.9521 176.291 57.5506C177.12 57.1491 177.837 56.5475 178.376 55.8L177.488 55.152C177.046 55.7565 176.463 56.2433 175.789 56.5697C175.116 56.8961 174.372 57.0521 173.624 57.024C172.933 57.0447 172.245 56.9209 171.604 56.6606C170.963 56.4003 170.384 56.0093 169.903 55.5124C169.421 55.0155 169.049 54.4237 168.81 53.7748C168.57 53.126 168.469 52.4343 168.512 51.744C168.469 51.0537 168.57 50.362 168.81 49.7132C169.049 49.0643 169.421 48.4725 169.903 47.9756C170.384 47.4787 170.963 47.0877 171.604 46.8274C172.245 46.5671 172.933 46.4433 173.624 46.464C174.372 46.4359 175.116 46.5919 175.789 46.9183C176.463 47.2447 177.046 47.7315 177.488 48.336L178.376 47.688C177.84 46.9368 177.124 46.3325 176.294 45.9306C175.464 45.5286 174.545 45.3421 173.624 45.388C172.781 45.3555 171.941 45.4979 171.156 45.8063C170.371 46.1148 169.658 46.5825 169.063 47.18C168.468 47.7776 168.002 48.492 167.697 49.2782C167.392 50.0643 167.252 50.9053 167.288 51.748C167.256 52.5895 167.397 53.4287 167.704 54.2129C168.011 54.9972 168.476 55.7098 169.071 56.306C169.665 56.9022 170.377 57.3693 171.16 57.678C171.944 57.9867 172.782 58.1304 173.624 58.1ZM192.368 51.692C192.368 47.972 189.824 45.38 186.392 45.38C182.96 45.38 180.392 48.02 180.392 51.74C180.362 52.5915 180.509 53.44 180.824 54.2317C181.139 55.0234 181.615 55.741 182.222 56.339C182.829 56.9369 183.554 57.4023 184.35 57.7054C185.146 58.0086 185.997 58.1429 186.848 58.1C187.738 58.1322 188.624 57.9658 189.442 57.613C190.26 57.2601 190.989 56.7296 191.576 56.06L190.876 55.268C190.169 56.0449 189.25 56.597 188.232 56.8557C187.214 57.1144 186.142 57.0683 185.15 56.7232C184.158 56.378 183.289 55.749 182.652 54.9143C182.014 54.0795 181.636 53.0759 181.564 52.028H192.34C192.344 51.9 192.368 51.784 192.368 51.688V51.692ZM186.392 46.436C187.645 46.4189 188.854 46.8993 189.754 47.7721C190.654 48.6448 191.171 49.8387 191.192 51.092H181.592C181.612 49.8379 182.128 48.6429 183.028 47.7692C183.928 46.8956 185.138 46.4146 186.392 46.432V46.436ZM197.24 48.212V45.472H196.088V58H197.288V51.472C197.288 48.372 198.944 46.528 201.728 46.528C201.828 46.528 201.92 46.552 202.016 46.552V45.376C201.024 45.2885 200.029 45.5148 199.172 46.0229C198.315 46.531 197.639 47.2953 197.24 48.208V48.212Z"
      fill="#FEFFFF"
    />
    <path d="M67 0H0V68H67V0Z" fill="#F2B632" />
    <path
      d="M16.5 57H18.276V41.736H24.18V40.2H10.596V41.736H16.5V57ZM40.4333 57L36.3293 51.24C38.7773 50.448 40.1693 48.6 40.1693 45.96C40.1693 42.36 37.5773 40.2 33.3053 40.2H27.0173V57H28.7933V51.672H33.3053C33.7853 51.672 34.2173 51.648 34.6493 51.6L38.4893 57H40.4333ZM33.2573 50.16H28.7933V41.736H33.2573C36.6172 41.736 38.3932 43.272 38.3932 45.96C38.3932 48.6 36.6172 50.16 33.2573 50.16ZM55.881 41.736V40.2H44.361V57H46.137V49.872H54.825V48.336H46.137V41.736H55.881Z"
      fill="#FEFFFF"
    />
  </g>
  <defs>
    <clipPath id="clip0">
      <rect width="226.664" height="68" fill="white" />
    </clipPath>
  </defs>
</svg>


================================================
FILE: docs/_layouts/default.html
================================================
<!DOCTYPE html>
<html lang="{{ page.lang | default: site.lang | default: 'en' }}">
  <head>
    {% include head.html %}

    <title>{{ site.title }}</title>

    <style>
      details > summary {
        list-style-type: none;
      }

      details > summary::-webkit-details-marker {
        display: none;
      }

      details > summary::before {
        display: block;
        content: " ";
        background-image: url("/images/chevron-down.svg");
        background-size: 28px 28px;
        height: 28px;
        width: 28px;
      }

      details[open] > summary::before {
        display: block;
        content: " ";
        background-image: url("/images/chevron-up.svg");
        background-size: 28px 28px;
        height: 28px;
        width: 28px;
      }
    </style>
  </head>

  <body class="min-h-screen font-sans antialiased text-brand-gray-9">
    {{ content }}
  </body>
</html>


================================================
FILE: docs/_layouts/home.html
================================================
---
layout: default
---

<div class="overflow-hidden lg:flex">
  <div class="relative w-full lg:w-1/3 xl:w-2/5 2xl:w-1/2 lg:h-screen">
    <div class="h-full">
      <img
        class="absolute object-cover object-center w-full h-full"
        src="/images/bg.jpg"
      />

      <div
        class="relative flex flex-col h-full p-12 text-center text-white lg:text-left lg:justify-between"
      >
        <div>{% include logo.html %}</div>

        <div class="py-20 lg:py-0 lg:max-w-md">
          <div>
            <h1 class="text-3xl 2xl:text-5xl font-extralight">
              Top Services <br />
              For Freelancers
            </h1>

            <p class="mt-3 text-base font-light 2xl:text-lg 2xl:mt-6">
              {{ site.description }}
            </p>
          </div>

          <div class="hidden w-full mt-8 lg:inline-block 2xl:mt-16">
            <div class="h-1 w-9 bg-brand"></div>

            <h1 class="mt-4 text-xl 2xl:text-2xl">Recent Articles</h1>

            <div class="mt-5">
              {% for post in site.posts limit:3 %}
              <a
                class="block font-light underline truncate"
                href="{{ post.url }}"
              >
                {{ post.title }}</a
              >
              {% endfor %}
            </div>

            <div class="mt-5">
              <a class="text-brand hover:underline" href="/posts"
                >More Articles</a
              >
            </div>
          </div>
        </div>

        <div class="hidden lg:inline-block lg:max-w-md">
          <div>
            <p class="text-lg font-medium">Andy Chase</p>
            <a
              class="font-light hover:underline"
              href="mailto:contact@theremotefreelancer.com"
              >contact@theremotefreelancer.com</a
            >
          </div>

          <div class="mt-5 space-x-5 text-xs font-base 2xl:mt-10">
            <a
              href="https://github.com/engineerapart/TheRemoteFreelancer"
              target="_blank"
              class="cursor-pointer hover:underline"
            >
              Suggest a change
            </a>
          </div>
        </div>
      </div>
    </div>
  </div>

  {% include board_listing.html %}

  <div class="block lg:hidden bg-brand-gray-10 px-8">
    <div class="w-full mt-8 inline-block text-center text-white">
      <div class="h-1 w-9 bg-brand mx-auto"></div>

      <h1 class="mt-4 text-xl 2xl:text-2xl">Recent Articles</h1>

      <div class="mt-5">
        {% for post in site.posts limit:3 %}
        <a class="block font-light underline truncate" href="{{ post.url }}">
          {{ post.title }}</a
        >
        {% endfor %}
      </div>

      <div class="mt-5">
        <a class="text-brand hover:underline" href="/posts">More Articles</a>
      </div>
    </div>

    {% include footer.html %}
  </div>
</div>


================================================
FILE: docs/_layouts/post.html
================================================
<!DOCTYPE html>
<html lang="{{ page.lang | default: site.lang | default: 'en' }}">
  <head>
    {% include head.html %}
  </head>
  <body class="antialiased min-h-screen font-sans">
    <header class="relative bg-gray-800">
        <nav
          class="relative max-w-5xl mx-auto flex items-center justify-between py-6 px-4 sm:px-6 lg:px-8"
          aria-label="Global"
        >
          <div class="flex items-center flex-1">
            <div class="flex items-center justify-between w-full lg:w-auto">
              <a href="/">
                {% include logo.html %}
              </a>
            </div>
          </div>
          <div class="flex lg:items-center lg:space-x-6">
            <a
              href="/posts"
              class="py-2 px-6 bg-brand border border-transparent rounded-md shadow-md text-base font-medium text-white hover:opacity-75"
            >
              Posts
            </a>
          </div>
        </nav>
    </header>

    <div class="max-w-5xl mx-auto prose py-14 px-4 sm:px-6 lg:px-8">
      <h1>{{ page.title }}</h1>

      <main class="p-1" aria-label="Content">{{ content }}</main>
    </div>
    
    {% include footer.html %}
  </body>
</html>


================================================
FILE: docs/_layouts/posts.html
================================================
<!DOCTYPE html>
<html lang="{{ page.lang | default: site.lang | default: 'en' }}">
  <head>
    {% include head.html %}
  </head>
  <body class="antialiased min-h-screen font-sans">
    <header class="relative bg-brand-gray-10">
        <nav
          class="relative max-w-5xl mx-auto flex items-center justify-between py-6 px-4 sm:px-6 lg:px-8"
          aria-label="Global"
        >
          <div class="flex items-center flex-1">
            <div class="flex items-center justify-between w-full lg:w-auto">
              <a href="/">
                {% include logo.html %}
              </a>
            </div>
          </div>
          <div class="flex lg:items-center lg:space-x-6">
            <a
              href="/posts"
              class="py-2 px-6 bg-brand border border-transparent rounded-md shadow-md text-base font-medium text-white hover:opacity-75"
            >
              Posts
            </a>
          </div>
        </nav>
    </header>

    <div class="max-w-5xl mx-auto prose py-8 px-4 sm:px-6 lg:px-8">
      <h1>{{ page.title }}</h1>

      <main class="p-1" aria-label="Content">{{ content }}</main>
    </div>

    {% include footer.html %}
  </body>
</html>


================================================
FILE: docs/_posts/2017-09-04-difference-between-types.markdown
================================================
---
layout: post
title:  "What's the difference between the different types of boards out there?"
date:   2017-09-04 10:35:01 -0700
published: true
---

<table>
  <tr>
    <th>&nbsp;</th>
    <th>Clients</th>
    <th>Jobs</th>
    <th>Agency</th>
  </tr>
  <tr>
    <td>Interaction with Clients</td>
    <td>You interaction is with clients directly, organization does little/no communication with clients</td>
    <td>You interact with employers directly, organization does little/no communication with clients</td>
    <td>Organization handles clients and just gives you work. You have little/no interaction with clients</td>
  </tr>
  <tr>
    <td>Control over working environment</td>
    <td>Generally you can work however, using own tools, supplies, set own hours, etc</td>
    <td>Employer controls how you work generally. Provides tools, sets hours, tasks, etc.</td>
    <td>Agency might direct you on what tasks to do but you have flexibility on how to accomplish them</td>
  </tr>
  <tr>
    <td>Payment</td>
    <td>Client pays you, but through the organization (which may takes its cut)</td>
    <td>Employer pays you salary (withholding taxes)</td>
    <td>Agency pays you</td>
  </tr>
  <tr>
    <td>Choice of Client or Project</td>
    <td>Complete control of client/project</td>
    <td>Complete control of job selection</td>
    <td>Little/no choice of project or client</td>
  </tr>
  <tr>
    <td>Vetting/Interviews</td>
    <td>Clients vets you</td>
    <td>Companies vet you</td>
    <td>Organization vets you, Client wouldn’t really vet you individually</td>
  </tr>
</table>


================================================
FILE: docs/_posts/2017-09-05-why-people-hate-upwork.md
================================================
---
layout: post
title:  "Why do people hate Upwork?"
date:   2017-09-04 10:35:01 -0700
published: true
---

My name is [Andy Chase][andychase]. I've been working as a freelance software engineer for about 5 years. When I started working I used Upwork (then called oDesk) to find clients.

See my list of [alternatives to upwork here](/)!

# Upwork is the Tinder of Freelance

Of course you could go out and in person to networking events, build up a network of random people and tell everyone you are looking for work.

The problem is, you're not going to do that . You're not a marketer or a networking expert. You just want work. So that's why you end up on Upwork.

There's a lot of competition of Upwork, competing both on price and on quality. More than likely, clients who don't know a lot about software engineering are comparing you purely based on stereotypes and marketing hype.

There's also a bit of a game to it, where putting a focused message out there to a wide range of people is more successful then only only applying to the few jobs that you're actually qualified for.

In real life, when you cold-call your friend's dad who needs someone to do data entry for his small business, he's comparing you to absolutely no one. It's presumed you can do the job (otherwise you wouldn't have come to him), and social pressures and sheer convenience will likely sway him to your favor.

That person doesn't have the feeling like they are choosing between 30 good options, they instead have the feeling like cosmic graces have smiled on them and the perfect choice has appeared in front them ready to go.

# The biggest problem with Upwork in my opinion is their customer service

Upwork is a glorified job board.

Unlike Craigslist they don't have a benevolent attitude towards their purpose.

They view customer service as a cost center and anything that can't be solved by a $5/hr wage support rep isn't going to be solved.

Michelle wrote [Someone stole my identity on Upwork and all I got was this lousy blog post][stole-my-identity], while it sounds like an exception situation in general, for Upwork customer support that's about the level of support (little to none).

# Upwork has some advantages

Here's reasons Upwork can actually be a decent deal:

* It's democratic
  * If you apply to a job, you are listed as a possibility.
  * Services like [Toptal][toptal] decides what you can work on and what you can't. While if a recruiter does like you they will try and sell you, if they don't then its a closed door. And recruiters will strongly type-cast you to a position based on your prior experience and what your profile looks like. You're full stack but mostly work on backend stuff? They're probably not going to list you for a front-end job.
* Transparent pricing
  * Unlike an agency or a spread-based network, you have complete control over your rate. You can negotiate it client-by-client taking into many factors of each client.
* They guarantee payment
  * By yourself, it can actually be hard to get clients to pay you. Personally, when I was on my own it was always a battle to have new clients to try get as much as they can before they ghosted (usually they ended up with a prototype and an estimate).
  * Upwork (if you follow the rules, hourly contracts, detailed memos, automatically tracked time, verified payment), they will pay you. I've had clients have "issues" with their method of Payment and Upwork paid me on time like always (they also told me to take a break from working until they could figure it out.)
  * Being paid on time no matter what is not something to be underestimated, it's something that turns freelancing from a hobby into a real job honestly. It's something you can depend on and plan your life around.
  * Upwork also pays fast. 10-17 days from the moment you log time each week. With [toptal][toptal] it's more like 4-6 weeks.
* Popularity
  * More popular job boards means it can be easier to find interested clients looking for someone like you.
  * Upwork is the 50th most visited site in the world according to Alexa (based on data from people who have the Alexa toolbar installed).


[andychase]: https://andychase.me

[mrdfx]: https://www.reddit.com/r/freelance/comments/6y9gn3/burned_by_upwork_make_sure_to_submit_a_complaint/dmmchwu/?utm_content=permalink&utm_medium=front&utm_source=reddit&utm_name=freelance

[stole-my-identity]: https://hackernoon.com/someone-stole-my-identity-on-upwork-and-all-i-got-was-this-lousy-blog-post-d63aab2b4c90

[toptal]: https://www.toptal.com/#amass-nothing-but-top-notch-software-architects


================================================
FILE: docs/assets/app.css
================================================
/*! tailwindcss v2.2.19 | MIT License | https://tailwindcss.com */

/*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */

/*
Document
========
*/

/**
Use a better box model (opinionated).
*/

*,
::before,
::after {
  box-sizing: border-box;
}

/**
Use a more readable tab size (opinionated).
*/

html {
  -moz-tab-size: 4;
  -o-tab-size: 4;
     tab-size: 4;
}

/**
1. Correct the line height in all browsers.
2. Prevent adjustments of font size after orientation changes in iOS.
*/

html {
  line-height: 1.15; /* 1 */
  -webkit-text-size-adjust: 100%; /* 2 */
}

/*
Sections
========
*/

/**
Remove the margin in all browsers.
*/

body {
  margin: 0;
}

/**
Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)
*/

body {
  font-family:
		system-ui,
		-apple-system, /* Firefox supports this but not yet `system-ui` */
		'Segoe UI',
		Roboto,
		Helvetica,
		Arial,
		sans-serif,
		'Apple Color Emoji',
		'Segoe UI Emoji';
}

/*
Grouping content
================
*/

/**
1. Add the correct height in Firefox.
2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
*/

hr {
  height: 0; /* 1 */
  color: inherit; /* 2 */
}

/*
Text-level semantics
====================
*/

/**
Add the correct text decoration in Chrome, Edge, and Safari.
*/

abbr[title] {
  -webkit-text-decoration: underline dotted;
          text-decoration: underline dotted;
}

/**
Add the correct font weight in Edge and Safari.
*/

b,
strong {
  font-weight: bolder;
}

/**
1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)
2. Correct the odd 'em' font sizing in all browsers.
*/

code,
kbd,
samp,
pre {
  font-family:
		ui-monospace,
		SFMono-Regular,
		Consolas,
		'Liberation Mono',
		Menlo,
		monospace; /* 1 */
  font-size: 1em; /* 2 */
}

/**
Add the correct font size in all browsers.
*/

small {
  font-size: 80%;
}

/**
Prevent 'sub' and 'sup' elements from affecting the line height in all browsers.
*/

sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}

sub {
  bottom: -0.25em;
}

sup {
  top: -0.5em;
}

/*
Tabular data
============
*/

/**
1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
*/

table {
  text-indent: 0; /* 1 */
  border-color: inherit; /* 2 */
}

/*
Forms
=====
*/

/**
1. Change the font styles in all browsers.
2. Remove the margin in Firefox and Safari.
*/

button,
input,
optgroup,
select,
textarea {
  font-family: inherit; /* 1 */
  font-size: 100%; /* 1 */
  line-height: 1.15; /* 1 */
  margin: 0; /* 2 */
}

/**
Remove the inheritance of text transform in Edge and Firefox.
1. Remove the inheritance of text transform in Firefox.
*/

button,
select { /* 1 */
  text-transform: none;
}

/**
Correct the inability to style clickable types in iOS and Safari.
*/

button,
[type='button'] {
  -webkit-appearance: button;
}

/**
Remove the inner border and padding in Firefox.
*/

::-moz-focus-inner {
  border-style: none;
  padding: 0;
}

/**
Restore the focus styles unset by the previous rule.
*/

/**
Remove the additional ':invalid' styles in Firefox.
See: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737
*/

/**
Remove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers.
*/

legend {
  padding: 0;
}

/**
Add the correct vertical alignment in Chrome and Firefox.
*/

progress {
  vertical-align: baseline;
}

/**
Correct the cursor style of increment and decrement buttons in Safari.
*/

::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
  height: auto;
}

/**
1. Correct the odd appearance in Chrome and Safari.
2. Correct the outline style in Safari.
*/

/**
Remove the inner padding in Chrome and Safari on macOS.
*/

::-webkit-search-decoration {
  -webkit-appearance: none;
}

/**
1. Correct the inability to style clickable types in iOS and Safari.
2. Change font properties to 'inherit' in Safari.
*/

::-webkit-file-upload-button {
  -webkit-appearance: button; /* 1 */
  font: inherit; /* 2 */
}

/*
Interactive
===========
*/

/*
Add the correct display in Chrome and Safari.
*/

summary {
  display: list-item;
}

/**
 * Manually forked from SUIT CSS Base: https://github.com/suitcss/base
 * A thin layer on top of normalize.css that provides a starting point more
 * suitable for web applications.
 */

/**
 * Removes the default spacing and border for appropriate elements.
 */

blockquote,
dl,
dd,
h1,
h2,
h3,
h4,
h5,
h6,
hr,
figure,
p,
pre {
  margin: 0;
}

button {
  background-color: transparent;
  background-image: none;
}

fieldset {
  margin: 0;
  padding: 0;
}

ol,
ul {
  list-style: none;
  margin: 0;
  padding: 0;
}

/**
 * Tailwind custom reset styles
 */

/**
 * 1. Use the user's configured `sans` font-family (with Tailwind's default
 *    sans-serif font stack as a fallback) as a sane default.
 * 2. Use Tailwind's default "normal" line-height so the user isn't forced
 *    to override it to ensure consistency even when using the default theme.
 */

html {
  font-family: Montserrat, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 1 */
  line-height: 1.5; /* 2 */
}

/**
 * Inherit font-family and line-height from `html` so users can set them as
 * a class directly on the `html` element.
 */

body {
  font-family: inherit;
  line-height: inherit;
}

/**
 * 1. Prevent padding and border from affecting element width.
 *
 *    We used to set this in the html element and inherit from
 *    the parent element for everything else. This caused issues
 *    in shadow-dom-enhanced elements like <details> where the content
 *    is wrapped by a div with box-sizing set to `content-box`.
 *
 *    https://github.com/mozdevs/cssremedy/issues/4
 *
 *
 * 2. Allow adding a border to an element by just adding a border-width.
 *
 *    By default, the way the browser specifies that an element should have no
 *    border is by setting it's border-style to `none` in the user-agent
 *    stylesheet.
 *
 *    In order to easily add borders to elements by just setting the `border-width`
 *    property, we change the default border-style for all elements to `solid`, and
 *    use border-width to hide them instead. This way our `border` utilities only
 *    need to set the `border-width` property instead of the entire `border`
 *    shorthand, making our border utilities much more straightforward to compose.
 *
 *    https://github.com/tailwindcss/tailwindcss/pull/116
 */

*,
::before,
::after {
  box-sizing: border-box; /* 1 */
  border-width: 0; /* 2 */
  border-style: solid; /* 2 */
  border-color: currentColor; /* 2 */
}

/*
 * Ensure horizontal rules are visible by default
 */

hr {
  border-top-width: 1px;
}

/**
 * Undo the `border-style: none` reset that Normalize applies to images so that
 * our `border-{width}` utilities have the expected effect.
 *
 * The Normalize reset is unnecessary for us since we default the border-width
 * to 0 on all elements.
 *
 * https://github.com/tailwindcss/tailwindcss/issues/362
 */

img {
  border-style: solid;
}

textarea {
  resize: vertical;
}

input::-moz-placeholder, textarea::-moz-placeholder {
  opacity: 1;
  color: #9ca3af;
}

input:-ms-input-placeholder, textarea:-ms-input-placeholder {
  opacity: 1;
  color: #9ca3af;
}

input::placeholder,
textarea::placeholder {
  opacity: 1;
  color: #9ca3af;
}

button,
[role="button"] {
  cursor: pointer;
}

/**
 * Override legacy focus reset from Normalize with modern Firefox focus styles.
 *
 * This is actually an improvement over the new defaults in Firefox in our testing,
 * as it triggers the better focus styles even for links, which still use a dotted
 * outline in Firefox by default.
 */

table {
  border-collapse: collapse;
}

h1,
h2,
h3,
h4,
h5,
h6 {
  font-size: inherit;
  font-weight: inherit;
}

/**
 * Reset links to optimize for opt-in styling instead of
 * opt-out.
 */

a {
  color: inherit;
  text-decoration: inherit;
}

/**
 * Reset form element properties that are easy to forget to
 * style explicitly so you don't inadvertently introduce
 * styles that deviate from your design system. These styles
 * supplement a partial reset that is already applied by
 * normalize.css.
 */

button,
input,
optgroup,
select,
textarea {
  padding: 0;
  line-height: inherit;
  color: inherit;
}

/**
 * Use the configured 'mono' font family for elements that
 * are expected to be rendered with a monospace font, falling
 * back to the system monospace stack if there is no configured
 * 'mono' font family.
 */

pre,
code,
kbd,
samp {
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}

/**
 * 1. Make replaced elements `display: block` by default as that's
 *    the behavior you want almost all of the time. Inspired by
 *    CSS Remedy, with `svg` added as well.
 *
 *    https://github.com/mozdevs/cssremedy/issues/14
 * 
 * 2. Add `vertical-align: middle` to align replaced elements more
 *    sensibly by default when overriding `display` by adding a
 *    utility like `inline`.
 *
 *    This can trigger a poorly considered linting error in some
 *    tools but is included by design.
 * 
 *    https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210
 */

img,
svg,
video,
canvas,
audio,
iframe,
embed,
object {
  display: block; /* 1 */
  vertical-align: middle; /* 2 */
}

/**
 * Constrain images and videos to the parent width and preserve
 * their intrinsic aspect ratio.
 *
 * https://github.com/mozdevs/cssremedy/issues/14
 */

img,
video {
  max-width: 100%;
  height: auto;
}

/**
 * Ensure the default browser behavior of the `hidden` attribute.
 */

[hidden] {
  display: none;
}

*, ::before, ::after {
  --tw-border-opacity: 1;
  border-color: rgba(229, 231, 235, var(--tw-border-opacity));
}

.container {
  width: 100%;
}

@media (min-width: 640px) {
  .container {
    max-width: 640px;
  }
}

@media (min-width: 768px) {
  .container {
    max-width: 768px;
  }
}

@media (min-width: 1024px) {
  .container {
    max-width: 1024px;
  }
}

@media (min-width: 1280px) {
  .container {
    max-width: 1280px;
  }
}

@media (min-width: 1536px) {
  .container {
    max-width: 1536px;
  }
}

.prose {
  color: #374151;
  max-width: 65ch;
}

.prose a {
  color: #111827;
  text-decoration: underline;
  font-weight: 500;
}

.prose strong {
  color: #111827;
  font-weight: 600;
}

.prose ol[type="a"] {
  --list-counter-style: lower-alpha;
}

.prose ol[type="a" s] {
  --list-counter-style: lower-alpha;
}

.prose ol[type="I"] {
  --list-counter-style: upper-roman;
}

.prose ol[type="i"] {
  --list-counter-style: lower-roman;
}

.prose ol[type="I" s] {
  --list-counter-style: upper-roman;
}

.prose ol[type="i" s] {
  --list-counter-style: lower-roman;
}

.prose ol[type="1"] {
  --list-counter-style: decimal;
}

.prose ol > li {
  position: relative;
  padding-left: 1.75em;
}

.prose ol > li::before {
  content: counter(list-item, var(--list-counter-style, decimal)) ".";
  position: absolute;
  font-weight: 400;
  color: #6b7280;
  left: 0;
}

.prose ul > li {
  position: relative;
  padding-left: 1.75em;
}

.prose ul > li::before {
  content: "";
  position: absolute;
  background-color: #d1d5db;
  border-radius: 50%;
  width: 0.375em;
  height: 0.375em;
  top: calc(0.875em - 0.1875em);
  left: 0.25em;
}

.prose hr {
  border-color: #e5e7eb;
  border-top-width: 1px;
  margin-top: 3em;
  margin-bottom: 3em;
}

.prose blockquote {
  font-weight: 500;
  font-style: italic;
  color: #111827;
  border-left-width: 0.25rem;
  border-left-color: #e5e7eb;
  quotes: "\201C""\201D""\2018""\2019";
  margin-top: 1.6em;
  margin-bottom: 1.6em;
  padding-left: 1em;
}

.prose blockquote p:first-of-type::before {
  content: open-quote;
}

.prose blockquote p:last-of-type::after {
  content: close-quote;
}

.prose h1 {
  color: #111827;
  font-weight: 800;
  font-size: 2.25em;
  margin-top: 0;
  margin-bottom: 0.8888889em;
  line-height: 1.1111111;
}

.prose h2 {
  color: #111827;
  font-weight: 700;
  font-size: 1.5em;
  margin-top: 2em;
  margin-bottom: 1em;
  line-height: 1.3333333;
}

.prose h3 {
  color: #111827;
  font-weight: 600;
  font-size: 1.25em;
  margin-top: 1.6em;
  margin-bottom: 0.6em;
  line-height: 1.6;
}

.prose h4 {
  color: #111827;
  font-weight: 600;
  margin-top: 1.5em;
  margin-bottom: 0.5em;
  line-height: 1.5;
}

.prose figure figcaption {
  color: #6b7280;
  font-size: 0.875em;
  line-height: 1.4285714;
  margin-top: 0.8571429em;
}

.prose code {
  color: #111827;
  font-weight: 600;
  font-size: 0.875em;
}

.prose code::before {
  content: "`";
}

.prose code::after {
  content: "`";
}

.prose a code {
  color: #111827;
}

.prose pre {
  color: #e5e7eb;
  background-color: #1f2937;
  overflow-x: auto;
  font-size: 0.875em;
  line-height: 1.7142857;
  margin-top: 1.7142857em;
  margin-bottom: 1.7142857em;
  border-radius: 0.375rem;
  padding-top: 0.8571429em;
  padding-right: 1.1428571em;
  padding-bottom: 0.8571429em;
  padding-left: 1.1428571em;
}

.prose pre code {
  background-color: transparent;
  border-width: 0;
  border-radius: 0;
  padding: 0;
  font-weight: 400;
  color: inherit;
  font-size: inherit;
  font-family: inherit;
  line-height: inherit;
}

.prose pre code::before {
  content: none;
}

.prose pre code::after {
  content: none;
}

.prose table {
  width: 100%;
  table-layout: auto;
  text-align: left;
  margin-top: 2em;
  margin-bottom: 2em;
  font-size: 0.875em;
  line-height: 1.7142857;
}

.prose thead {
  color: #111827;
  font-weight: 600;
  border-bottom-width: 1px;
  border-bottom-color: #d1d5db;
}

.prose thead th {
  vertical-align: bottom;
  padding-right: 0.5714286em;
  padding-bottom: 0.5714286em;
  padding-left: 0.5714286em;
}

.prose tbody tr {
  border-bottom-width: 1px;
  border-bottom-color: #e5e7eb;
}

.prose tbody tr:last-child {
  border-bottom-width: 0;
}

.prose tbody td {
  vertical-align: top;
  padding-top: 0.5714286em;
  padding-right: 0.5714286em;
  padding-bottom: 0.5714286em;
  padding-left: 0.5714286em;
}

.prose {
  font-size: 1rem;
  line-height: 1.75;
}

.prose p {
  margin-top: 1.25em;
  margin-bottom: 1.25em;
}

.prose img {
  margin-top: 2em;
  margin-bottom: 2em;
}

.prose video {
  margin-top: 2em;
  margin-bottom: 2em;
}

.prose figure {
  margin-top: 2em;
  margin-bottom: 2em;
}

.prose figure > * {
  margin-top: 0;
  margin-bottom: 0;
}

.prose h2 code {
  font-size: 0.875em;
}

.prose h3 code {
  font-size: 0.9em;
}

.prose ol {
  margin-top: 1.25em;
  margin-bottom: 1.25em;
}

.prose ul {
  margin-top: 1.25em;
  margin-bottom: 1.25em;
}

.prose li {
  margin-top: 0.5em;
  margin-bottom: 0.5em;
}

.prose > ul > li p {
  margin-top: 0.75em;
  margin-bottom: 0.75em;
}

.prose > ul > li > *:first-child {
  margin-top: 1.25em;
}

.prose > ul > li > *:last-child {
  margin-bottom: 1.25em;
}

.prose > ol > li > *:first-child {
  margin-top: 1.25em;
}

.prose > ol > li > *:last-child {
  margin-bottom: 1.25em;
}

.prose ul ul, .prose ul ol, .prose ol ul, .prose ol ol {
  margin-top: 0.75em;
  margin-bottom: 0.75em;
}

.prose hr + * {
  margin-top: 0;
}

.prose h2 + * {
  margin-top: 0;
}

.prose h3 + * {
  margin-top: 0;
}

.prose h4 + * {
  margin-top: 0;
}

.prose thead th:first-child {
  padding-left: 0;
}

.prose thead th:last-child {
  padding-right: 0;
}

.prose tbody td:first-child {
  padding-left: 0;
}

.prose tbody td:last-child {
  padding-right: 0;
}

.prose > :first-child {
  margin-top: 0;
}

.prose > :last-child {
  margin-bottom: 0;
}

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}

.absolute {
  position: absolute;
}

.relative {
  position: relative;
}

.mx-auto {
  margin-left: auto;
  margin-right: auto;
}

.mt-2 {
  margin-top: 0.5rem;
}

.mt-3 {
  margin-top: 0.75rem;
}

.mt-4 {
  margin-top: 1rem;
}

.mt-5 {
  margin-top: 1.25rem;
}

.mt-8 {
  margin-top: 2rem;
}

.mr-1 {
  margin-right: 0.25rem;
}

.mr-2 {
  margin-right: 0.5rem;
}

.block {
  display: block;
}

.inline-block {
  display: inline-block;
}

.flex {
  display: flex;
}

.table {
  display: table;
}

.grid {
  display: grid;
}

.hidden {
  display: none;
}

.h-1 {
  height: 0.25rem;
}

.h-2 {
  height: 0.5rem;
}

.h-5 {
  height: 1.25rem;
}

.h-6 {
  height: 1.5rem;
}

.h-12 {
  height: 3rem;
}

.h-16 {
  height: 4rem;
}

.h-2\.5 {
  height: 0.625rem;
}

.h-full {
  height: 100%;
}

.min-h-screen {
  min-height: 100vh;
}

.w-2 {
  width: 0.5rem;
}

.w-5 {
  width: 1.25rem;
}

.w-6 {
  width: 1.5rem;
}

.w-9 {
  width: 2.25rem;
}

.w-12 {
  width: 3rem;
}

.w-auto {
  width: auto;
}

.w-2\.5 {
  width: 0.625rem;
}

.w-full {
  width: 100%;
}

.max-w-5xl {
  max-width: 64rem;
}

.max-w-7xl {
  max-width: 80rem;
}

.flex-1 {
  flex: 1 1 0%;
}

.flex-shrink-0 {
  flex-shrink: 0;
}

.transform {
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  transform: translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}

@-webkit-keyframes spin {
  to {
    transform: rotate(360deg);
  }
}

@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}

@-webkit-keyframes ping {
  75%, 100% {
    transform: scale(2);
    opacity: 0;
  }
}

@keyframes ping {
  75%, 100% {
    transform: scale(2);
    opacity: 0;
  }
}

@-webkit-keyframes pulse {
  50% {
    opacity: .5;
  }
}

@keyframes pulse {
  50% {
    opacity: .5;
  }
}

@-webkit-keyframes bounce {
  0%, 100% {
    transform: translateY(-25%);
    -webkit-animation-timing-function: cubic-bezier(0.8,0,1,1);
            animation-timing-function: cubic-bezier(0.8,0,1,1);
  }

  50% {
    transform: none;
    -webkit-animation-timing-function: cubic-bezier(0,0,0.2,1);
            animation-timing-function: cubic-bezier(0,0,0.2,1);
  }
}

@keyframes bounce {
  0%, 100% {
    transform: translateY(-25%);
    -webkit-animation-timing-function: cubic-bezier(0.8,0,1,1);
            animation-timing-function: cubic-bezier(0.8,0,1,1);
  }

  50% {
    transform: none;
    -webkit-animation-timing-function: cubic-bezier(0,0,0.2,1);
            animation-timing-function: cubic-bezier(0,0,0.2,1);
  }
}

.cursor-pointer {
  cursor: pointer;
}

.grid-cols-2 {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

.flex-row-reverse {
  flex-direction: row-reverse;
}

.flex-col {
  flex-direction: column;
}

.items-center {
  align-items: center;
}

.justify-end {
  justify-content: flex-end;
}

.justify-center {
  justify-content: center;
}

.justify-between {
  justify-content: space-between;
}

.gap-2 {
  gap: 0.5rem;
}

.space-x-3 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-x-reverse: 0;
  margin-right: calc(0.75rem * var(--tw-space-x-reverse));
  margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));
}

.space-x-4 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-x-reverse: 0;
  margin-right: calc(1rem * var(--tw-space-x-reverse));
  margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
}

.space-x-5 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-x-reverse: 0;
  margin-right: calc(1.25rem * var(--tw-space-x-reverse));
  margin-left: calc(1.25rem * calc(1 - var(--tw-space-x-reverse)));
}

.space-x-6 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-x-reverse: 0;
  margin-right: calc(1.5rem * var(--tw-space-x-reverse));
  margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse)));
}

.space-y-5 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(1.25rem * var(--tw-space-y-reverse));
}

.overflow-hidden {
  overflow: hidden;
}

.truncate {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.rounded-md {
  border-radius: 0.375rem;
}

.rounded-full {
  border-radius: 9999px;
}

.border {
  border-width: 1px;
}

.border-r {
  border-right-width: 1px;
}

.border-b-2 {
  border-bottom-width: 2px;
}

.border-b {
  border-bottom-width: 1px;
}

.border-transparent {
  border-color: transparent;
}

.border-gray-200 {
  --tw-border-opacity: 1;
  border-color: rgba(229, 231, 235, var(--tw-border-opacity));
}

.border-gray-300 {
  --tw-border-opacity: 1;
  border-color: rgba(209, 213, 219, var(--tw-border-opacity));
}

.border-brand {
  --tw-border-opacity: 1;
  border-color: rgba(242, 182, 50, var(--tw-border-opacity));
}

.border-brand-gray-2 {
  --tw-border-opacity: 1;
  border-color: rgba(235, 238, 241, var(--tw-border-opacity));
}

.bg-white {
  --tw-bg-opacity: 1;
  background-color: rgba(255, 255, 255, var(--tw-bg-opacity));
}

.bg-gray-800 {
  --tw-bg-opacity: 1;
  background-color: rgba(31, 41, 55, var(--tw-bg-opacity));
}

.bg-brand {
  --tw-bg-opacity: 1;
  background-color: rgba(242, 182, 50, var(--tw-bg-opacity));
}

.bg-brand-light {
  --tw-bg-opacity: 1;
  background-color: rgba(255, 198, 1, var(--tw-bg-opacity));
}

.bg-brand-gray-1 {
  --tw-bg-opacity: 1;
  background-color: rgba(249, 250, 250, var(--tw-bg-opacity));
}

.bg-brand-gray-2 {
  --tw-bg-opacity: 1;
  background-color: rgba(235, 238, 241, var(--tw-bg-opacity));
}

.bg-brand-gray-10 {
  --tw-bg-opacity: 1;
  background-color: rgba(37, 40, 57, var(--tw-bg-opacity));
}

.bg-brand-green {
  --tw-bg-opacity: 1;
  background-color: rgba(91, 188, 46, var(--tw-bg-opacity));
}

.object-cover {
  -o-object-fit: cover;
     object-fit: cover;
}

.object-center {
  -o-object-position: center;
     object-position: center;
}

.p-1 {
  padding: 0.25rem;
}

.p-6 {
  padding: 1.5rem;
}

.p-12 {
  padding: 3rem;
}

.px-4 {
  padding-left: 1rem;
  padding-right: 1rem;
}

.px-6 {
  padding-left: 1.5rem;
  padding-right: 1.5rem;
}

.px-8 {
  padding-left: 2rem;
  padding-right: 2rem;
}

.py-2 {
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
}

.py-3 {
  padding-top: 0.75rem;
  padding-bottom: 0.75rem;
}

.py-6 {
  padding-top: 1.5rem;
  padding-bottom: 1.5rem;
}

.py-8 {
  padding-top: 2rem;
  padding-bottom: 2rem;
}

.py-10 {
  padding-top: 2.5rem;
  padding-bottom: 2.5rem;
}

.py-12 {
  padding-top: 3rem;
  padding-bottom: 3rem;
}

.py-14 {
  padding-top: 3.5rem;
  padding-bottom: 3.5rem;
}

.py-20 {
  padding-top: 5rem;
  padding-bottom: 5rem;
}

.text-center {
  text-align: center;
}

.font-sans {
  font-family: Montserrat, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
}

.text-xs {
  font-size: 0.75rem;
  line-height: 1rem;
}

.text-sm {
  font-size: 0.875rem;
  line-height: 1.25rem;
}

.text-base {
  font-size: 1rem;
  line-height: 1.5rem;
}

.text-lg {
  font-size: 1.125rem;
  line-height: 1.75rem;
}

.text-xl {
  font-size: 1.25rem;
  line-height: 1.75rem;
}

.text-3xl {
  font-size: 1.875rem;
  line-height: 2.25rem;
}

.font-extralight {
  font-weight: 200;
}

.font-light {
  font-weight: 300;
}

.font-medium {
  font-weight: 500;
}

.font-semibold {
  font-weight: 600;
}

.uppercase {
  text-transform: uppercase;
}

.tracking-wide {
  letter-spacing: 0.025em;
}

.text-white {
  --tw-text-opacity: 1;
  color: rgba(255, 255, 255, var(--tw-text-opacity));
}

.text-gray-100 {
  --tw-text-opacity: 1;
  color: rgba(243, 244, 246, var(--tw-text-opacity));
}

.text-gray-300 {
  --tw-text-opacity: 1;
  color: rgba(209, 213, 219, var(--tw-text-opacity));
}

.text-gray-400 {
  --tw-text-opacity: 1;
  color: rgba(156, 163, 175, var(--tw-text-opacity));
}

.text-brand {
  --tw-text-opacity: 1;
  color: rgba(242, 182, 50, var(--tw-text-opacity));
}

.text-brand-light {
  --tw-text-opacity: 1;
  color: rgba(255, 198, 1, var(--tw-text-opacity));
}

.text-brand-gray-3 {
  --tw-text-opacity: 1;
  color: rgba(114, 128, 141, var(--tw-text-opacity));
}

.text-brand-gray-4 {
  --tw-text-opacity: 1;
  color: rgba(164, 174, 183, var(--tw-text-opacity));
}

.text-brand-gray-9 {
  --tw-text-opacity: 1;
  color: rgba(35, 45, 54, var(--tw-text-opacity));
}

.text-brand-green {
  --tw-text-opacity: 1;
  color: rgba(91, 188, 46, var(--tw-text-opacity));
}

.hover\:text-gray-500:hover {
  --tw-text-opacity: 1;
  color: rgba(107, 114, 128, var(--tw-text-opacity));
}

.underline {
  text-decoration: underline;
}

.hover\:underline:hover {
  text-decoration: underline;
}

.antialiased {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

.hover\:opacity-75:hover {
  opacity: 0.75;
}

*, ::before, ::after {
  --tw-shadow: 0 0 #0000;
}

.shadow {
  --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

.shadow-md {
  --tw-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

*, ::before, ::after {
  --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: rgba(59, 130, 246, 0.5);
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow: 0 0 #0000;
}

@media (min-width: 640px) {
  .sm\:px-6 {
    padding-left: 1.5rem;
    padding-right: 1.5rem;
  }
}

@media (min-width: 768px) {
  .md\:flex {
    display: flex;
  }

  .md\:w-1\/4 {
    width: 25%;
  }

  .md\:flex-row {
    flex-direction: row;
  }

  .md\:flex-col {
    flex-direction: column;
  }

  .md\:justify-start {
    justify-content: flex-start;
  }

  .md\:justify-between {
    justify-content: space-between;
  }

  .md\:px-4 {
    padding-left: 1rem;
    padding-right: 1rem;
  }

  .md\:text-lg {
    font-size: 1.125rem;
    line-height: 1.75rem;
  }
}

@media (min-width: 1024px) {
  .lg\:mx-0 {
    margin-left: 0px;
    margin-right: 0px;
  }

  .lg\:mt-0 {
    margin-top: 0px;
  }

  .lg\:block {
    display: block;
  }

  .lg\:inline-block {
    display: inline-block;
  }

  .lg\:flex {
    display: flex;
  }

  .lg\:hidden {
    display: none;
  }

  .lg\:h-screen {
    height: 100vh;
  }

  .lg\:w-auto {
    width: auto;
  }

  .lg\:w-1\/3 {
    width: 33.333333%;
  }

  .lg\:w-2\/3 {
    width: 66.666667%;
  }

  .lg\:max-w-md {
    max-width: 28rem;
  }

  .lg\:items-center {
    align-items: center;
  }

  .lg\:justify-between {
    justify-content: space-between;
  }

  .lg\:space-x-6 > :not([hidden]) ~ :not([hidden]) {
    --tw-space-x-reverse: 0;
    margin-right: calc(1.5rem * var(--tw-space-x-reverse));
    margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse)));
  }

  .lg\:overflow-scroll {
    overflow: scroll;
  }

  .lg\:p-6 {
    padding: 1.5rem;
  }

  .lg\:px-8 {
    padding-left: 2rem;
    padding-right: 2rem;
  }

  .lg\:py-0 {
    padding-top: 0px;
    padding-bottom: 0px;
  }

  .lg\:py-1 {
    padding-top: 0.25rem;
    padding-bottom: 0.25rem;
  }

  .lg\:text-left {
    text-align: left;
  }
}

@media (min-width: 1280px) {
  .xl\:w-2\/5 {
    width: 40%;
  }

  .xl\:w-3\/5 {
    width: 60%;
  }

  .xl\:gap-4 {
    gap: 1rem;
  }
}

@media (min-width: 1536px) {
  .\32xl\:mt-6 {
    margin-top: 1.5rem;
  }

  .\32xl\:mt-10 {
    margin-top: 2.5rem;
  }

  .\32xl\:mt-16 {
    margin-top: 4rem;
  }

  .\32xl\:w-1\/2 {
    width: 50%;
  }

  .\32xl\:p-10 {
    padding: 2.5rem;
  }

  .\32xl\:text-lg {
    font-size: 1.125rem;
    line-height: 1.75rem;
  }

  .\32xl\:text-2xl {
    font-size: 1.5rem;
    line-height: 2rem;
  }

  .\32xl\:text-5xl {
    font-size: 3rem;
    line-height: 1;
  }
}

================================================
FILE: docs/assets/app.source.css
================================================
@import "tailwindcss/base";

@import "tailwindcss/components";

@import "tailwindcss/utilities";

================================================
FILE: docs/build.sh
================================================
#!/bin/sh

 NODE_ENV=production ./node_modules/.bin/postcss ./assets/app.source.css -o ./assets/app.css
 bundle exec jekyll build


================================================
FILE: docs/dev.sh
================================================
#!/bin/sh

bundle exec jekyll serve --livereload --drafts --future --port 5000 --livereload_port 35729 "$@"

================================================
FILE: docs/index.md
================================================
---
layout: home
---

================================================
FILE: docs/package.json
================================================
{
  "name": "docs",
  "version": "1.0.0",
  "devDependencies": {
    "@fullhuman/postcss-purgecss": "^4.0.2",
    "@tailwindcss/line-clamp": "^0.2.0",
    "@tailwindcss/typography": "^0.4.0",
    "autoprefixer": "^10.2.5",
    "cssnano": "^4.1.10",
    "postcss": "^8.2.10",
    "postcss-cli": "^8.3.1",
    "postcss-import": "^14.0.0",
    "tailwindcss": "^2.0.3"
  },
  "dependencies": {
    "yarn": "^1.22.17"
  }
}


================================================
FILE: docs/postcss.config.js
================================================
module.exports = {
  plugins: {
    'postcss-import': {},
    tailwindcss: {},
    autoprefixer: {},
  }
}

================================================
FILE: docs/posts.html
================================================
---
layout: posts
---

<div class="home">

    <h1 class="page-heading">Posts</h1>

    <ul class="post-list">
        {% for post in site.posts %}
        <li>
            {% assign date_format = site.minima.date_format | default: "%b %-d, %Y" %}
            <span class="post-meta">{{ post.date | date: date_format }}</span>

            <h2>
                <a class="post-link" href="{{ post.url | relative_url }}">{{ post.title | escape }}</a>
            </h2>
        </li>
        {% endfor %}
    </ul>
</div>


================================================
FILE: docs/scripts/alexa.py
================================================
import base64
import collections
import hashlib
import hmac
import os
import re
import urllib.error
import urllib.parse
import xml.etree.ElementTree as ET

import requests
from aws_requests_auth.aws_auth import AWSRequestsAuth

rank_search = re.compile("<aws:Rank>(.*?)</aws:Rank>")


def get_awi_url_info(url):
    access_key = os.environ.get("AWS_ACCESS_KEY_ID")
    secret_key = os.environ.get("AWS_SECRET_ACCESS_KEY")
    params = {
        'Action': 'UrlInfo',
        'ResponseGroup': "Rank",
        'Url': url
    }

    ordered_params = collections.OrderedDict(sorted(params.items()))

    query_params = "&".join(
        ["%s=%s" % (k, urllib.parse.quote(v, '[^A-Za-z0-9\-_.~]')) for k, v in ordered_params.items()])

    auth = AWSRequestsAuth(access_key, secret_key, "awis.us-west-1.amazonaws.com", 'us-west-1', 'awis')

    query_url = f"https://awis.us-west-1.amazonaws.com/api?{query_params}"

    result = requests.get(url=query_url, auth=auth)
    return ET.fromstring(result.content)


def download_aws_rank(url):
    result = get_awi_url_info(url).findtext(".//{http://awis.amazonaws.com/doc/2005-07-11}Rank")
    if result:
        return int(result)
    else:
        return 10_000_000


def get_rank(url):
    url_without = url.replace("www.", "")
    if "www." in url:
        return min(download_aws_rank(url_without), download_aws_rank(url))
    else:
        return download_aws_rank(url)


================================================
FILE: docs/scripts/download_favicons.py
================================================
#!python3
"""
This script downloads the favicons
Usage:

    python3 update_alexa path/to/data.csv
"""

import os
import requests

favicon_path = os.path.join(os.path.dirname(__file__), "..", "icons")


def download_favicons(links):
    for link in links:
        netloc = link['netloc']
        url = 'http://' + netloc
        new_favicon_path = os.path.join(favicon_path, netloc + ".ico")
        if not os.path.exists(new_favicon_path):
            try:
                print(url)
                response = requests.get(
                    "https://realfavicongenerator.p.rapidapi.com/favicon/icon",
                    params={'platform': 'desktop', "site": url},
                    headers={'X-Mashape-Key': os.environ.get("mashape_key")}
                )
            except:
                pass
            else:
                if response:
                    with open(new_favicon_path, 'wb') as f:
                        f.write(response.content)


================================================
FILE: docs/scripts/sites_history_script.py
================================================
from pathlib import Path

import pandas
import pydriller
from git import Repo
import io

repo_path = Path(__file__).parent.parent.parent
site_data = repo_path / "docs" / "_data" / "sites.csv"
repo = Repo(str(repo_path))
df = None


def get_change_hashes():
    for commit in pydriller.RepositoryMining(str(repo_path), filepath='docs/_data/sites.csv').traverse_commits():
        yield commit.hash, commit.author_date


for hash, date in get_change_hashes():
    commit = repo.commit(hash)
    try:
        target_file = commit.tree / "docs" / "_data" / "sites.csv"
    except KeyError:
        continue
    with io.BytesIO(target_file.data_stream.read()) as f:
        new_df = pandas.read_csv(f)
        new_df['date'] = date
        if df is None:
            df = new_df
        else:
            df = pandas.concat([df, new_df])

df.to_csv("ranking_history.csv")


================================================
FILE: docs/scripts/update.py
================================================
#!python3
"""
This script updates the alexa rankings and sort the csv file.
Usage:

    python3 update.py
"""

import csv
import sys
import os
import itertools
import math

import alexa
from download_favicons import download_favicons

sites_path = os.path.join(os.path.dirname(__file__), "..", "_data", "sites.csv")

update_blank_only = os.environ.get("update_blank_only", "false") == "true"


def add_commas_to_rank(number):
    if number:
        if isinstance(number, str):
            number = remove_commas(number)
        return "{:,}".format(number)


def round_rank(rank: int):
    return round(rank, 1 - (1 + int(math.log10(abs(rank)))))


def remove_commas(string_number):
    return int(string_number.replace(",", ""))


def update_alexa(links):
    for link in links:
        link['rank'] = add_commas_to_rank(link['rank'])
        if link['rank'] and update_blank_only:
            continue
        print("Updating {}.. ".format(link['netloc']), end="")
        sys.stdout.flush()
        rank = alexa.get_rank(link['netloc'])
        if rank:
            link['rank'] = add_commas_to_rank(round_rank(rank))
            print(link['rank'])
    return links


def get_groups(links):
    links.sort(key=lambda _: _['section'])
    for group_name, group_data in itertools.groupby(links, lambda _: _['section']):
        group_data = list(group_data)
        group_data.sort(key=lambda _: remove_commas(_['rank']))
        yield group_name, group_data


def get_groups_in_order(links):
    rank_sorted_groups = dict(get_groups(links))
    for group in ["Clients", "Tutoring", "Other", "Agency", "Jobs"]:
        yield from rank_sorted_groups[group]


def sort(links):
    return list(get_groups_in_order(links))


def main(func):
    with open(sites_path, 'r') as csvfile:
        links = list(csv.DictReader(csvfile))
    links = func(links)
    if not links:
        return
    with open(sites_path, 'w') as csvfile:
        fieldnames = list(links[0].keys())
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        writer.writeheader()
        writer.writerows(links)


if __name__ == "__main__":
    main(update_alexa)
    main(sort)
    main(download_favicons)


================================================
FILE: docs/tailwind.config.js
================================================
const defaultTheme = require("tailwindcss/defaultTheme");

module.exports = {
    purge: [
      './_includes/**/*.html',
      './_layouts/**/*.html',
      './_posts/*.md',
      './*.html',
    ],
    darkMode: false,
    theme: {
      extend: {
        colors :{
          'brand' : '#F2B632', 
          'brand-light' : '#FFC601', 
          'brand-gray' : {
            1 : '#F9FAFA',
            2 : '#EBEEF1',
            3 : '#72808D',
            4 : '#A4AEB7',
            9 : '#232D36',
            10 : '#252839',
          },
          'brand-green' : '#5BBC2E'
        },
        fontFamily: {
          sans: ["Montserrat", ...defaultTheme.fontFamily.sans]
        }
      },
    },
    variants: {},
    plugins: [
      require('@tailwindcss/typography'),
      require('@tailwindcss/line-clamp'),
    ],
  }
Download .txt
gitextract_cb2vatad/

├── .gitignore
├── LICENSE
├── README.md
└── docs/
    ├── 404.html
    ├── CNAME
    ├── Gemfile
    ├── _config.yml
    ├── _data/
    │   └── sites.csv
    ├── _includes/
    │   ├── board_listing.html
    │   ├── board_listing_item.html
    │   ├── board_listing_item_mobile.html
    │   ├── footer.html
    │   ├── google-analytics.html
    │   ├── head.html
    │   ├── header.html
    │   └── logo.html
    ├── _layouts/
    │   ├── default.html
    │   ├── home.html
    │   ├── post.html
    │   └── posts.html
    ├── _posts/
    │   ├── 2017-09-04-difference-between-types.markdown
    │   └── 2017-09-05-why-people-hate-upwork.md
    ├── assets/
    │   ├── app.css
    │   └── app.source.css
    ├── build.sh
    ├── dev.sh
    ├── index.md
    ├── package.json
    ├── postcss.config.js
    ├── posts.html
    ├── scripts/
    │   ├── alexa.py
    │   ├── download_favicons.py
    │   ├── sites_history_script.py
    │   └── update.py
    └── tailwind.config.js
Download .txt
SYMBOL INDEX (13 symbols across 4 files)

FILE: docs/scripts/alexa.py
  function get_awi_url_info (line 17) | def get_awi_url_info(url):
  function download_aws_rank (line 39) | def download_aws_rank(url):
  function get_rank (line 47) | def get_rank(url):

FILE: docs/scripts/download_favicons.py
  function download_favicons (line 15) | def download_favicons(links):

FILE: docs/scripts/sites_history_script.py
  function get_change_hashes (line 14) | def get_change_hashes():

FILE: docs/scripts/update.py
  function add_commas_to_rank (line 23) | def add_commas_to_rank(number):
  function round_rank (line 30) | def round_rank(rank: int):
  function remove_commas (line 34) | def remove_commas(string_number):
  function update_alexa (line 38) | def update_alexa(links):
  function get_groups (line 52) | def get_groups(links):
  function get_groups_in_order (line 60) | def get_groups_in_order(links):
  function sort (line 66) | def sort(links):
  function main (line 70) | def main(func):
Condensed preview — 35 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (114K chars).
[
  {
    "path": ".gitignore",
    "chars": 144,
    "preview": ".DS_Store\n_site/\n.sass-cache/\n.jekyll-metadata\n__pycache__\n.idea/\nnode_modules\n# Local Netlify folder\n.netlify\ndocs/.net"
  },
  {
    "path": "LICENSE",
    "chars": 1210,
    "preview": "This is free and unencumbered software released into the public domain.\n\nAnyone is free to copy, modify, publish, use, c"
  },
  {
    "path": "README.md",
    "chars": 17442,
    "preview": "# The Remote Freelancer\nList of community-curated resources to find topical remote freelance &amp; contract work for sof"
  },
  {
    "path": "docs/404.html",
    "chars": 413,
    "preview": "---\nlayout: default\nsitemap: false\n---\n\n<style type=\"text/css\" media=\"screen\">\n  .container {\n    margin: 10px auto;\n   "
  },
  {
    "path": "docs/CNAME",
    "chars": 23,
    "preview": "theremotefreelancer.com"
  },
  {
    "path": "docs/Gemfile",
    "chars": 74,
    "preview": "source \"https://rubygems.org\"\n\ngem 'github-pages', group: :jekyll_plugins\n"
  },
  {
    "path": "docs/_config.yml",
    "chars": 1853,
    "preview": "# Welcome to Jekyll!\n#\n# This config file is meant for settings that affect your whole blog, values\n# which you are expe"
  },
  {
    "path": "docs/_data/sites.csv",
    "chars": 5632,
    "preview": "netloc,name,url,rank,section,type,opinions,affiliate_link,screening,sdescription,support,jobterm\r\nupwork.com,Upwork,http"
  },
  {
    "path": "docs/_includes/board_listing.html",
    "chars": 6250,
    "preview": "<div class=\"flex flex-col w-full bg-brand-gray-2 lg:w-2/3 xl:w-3/5 2xl:w-1/2 lg:h-screen\">\n    <div class=\"flex items-ce"
  },
  {
    "path": "docs/_includes/board_listing_item.html",
    "chars": 4851,
    "preview": "{{ section }} {% assign listings = site.data.sites | where:'section',\ninclude.section %} {% for listing in listings %}\n<"
  },
  {
    "path": "docs/_includes/board_listing_item_mobile.html",
    "chars": 5369,
    "preview": "{{ section }} {% assign listings = site.data.sites | where:'section',\ninclude.section %} {% for listing in listings %}\n<"
  },
  {
    "path": "docs/_includes/footer.html",
    "chars": 2539,
    "preview": "<footer class=\"bg-brand-gray-10\">\n    <div class=\"max-w-7xl mx-auto py-12 md:px-4 overflow-hidden sm:px-6 lg:px-8\">\n    "
  },
  {
    "path": "docs/_includes/google-analytics.html",
    "chars": 477,
    "preview": "<script async src=\"https://www.googletagmanager.com/gtag/js?id={{ site.google_analytics }}\"></script>\n<script>\n    windo"
  },
  {
    "path": "docs/_includes/head.html",
    "chars": 593,
    "preview": "    <meta charset=\"UTF-8\" />\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n    <meta name=\"viewport\" conte"
  },
  {
    "path": "docs/_includes/header.html",
    "chars": 453,
    "preview": "<header class=\"site-header\" role=\"banner\">\n\n  <div class=\"wrapper\">\n    {% assign default_paths = site.pages | map: \"pat"
  },
  {
    "path": "docs/_includes/logo.html",
    "chars": 12108,
    "preview": "<svg\n  class=\"w-auto h-16 mx-auto lg:mx-0\"\n  viewBox=\"0 0 227 68\"\n  fill=\"none\"\n  xmlns=\"http://www.w3.org/2000/svg\"\n>\n "
  },
  {
    "path": "docs/_layouts/default.html",
    "chars": 905,
    "preview": "<!DOCTYPE html>\n<html lang=\"{{ page.lang | default: site.lang | default: 'en' }}\">\n  <head>\n    {% include head.html %}\n"
  },
  {
    "path": "docs/_layouts/home.html",
    "chars": 2875,
    "preview": "---\nlayout: default\n---\n\n<div class=\"overflow-hidden lg:flex\">\n  <div class=\"relative w-full lg:w-1/3 xl:w-2/5 2xl:w-1/2"
  },
  {
    "path": "docs/_layouts/post.html",
    "chars": 1199,
    "preview": "<!DOCTYPE html>\n<html lang=\"{{ page.lang | default: site.lang | default: 'en' }}\">\n  <head>\n    {% include head.html %}\n"
  },
  {
    "path": "docs/_layouts/posts.html",
    "chars": 1199,
    "preview": "<!DOCTYPE html>\n<html lang=\"{{ page.lang | default: site.lang | default: 'en' }}\">\n  <head>\n    {% include head.html %}\n"
  },
  {
    "path": "docs/_posts/2017-09-04-difference-between-types.markdown",
    "chars": 1597,
    "preview": "---\nlayout: post\ntitle:  \"What's the difference between the different types of boards out there?\"\ndate:   2017-09-04 10:"
  },
  {
    "path": "docs/_posts/2017-09-05-why-people-hate-upwork.md",
    "chars": 4601,
    "preview": "---\nlayout: post\ntitle:  \"Why do people hate Upwork?\"\ndate:   2017-09-04 10:35:01 -0700\npublished: true\n---\n\nMy name is "
  },
  {
    "path": "docs/assets/app.css",
    "chars": 28393,
    "preview": "/*! tailwindcss v2.2.19 | MIT License | https://tailwindcss.com */\n\n/*! modern-normalize v1.1.0 | MIT License | https://"
  },
  {
    "path": "docs/assets/app.source.css",
    "chars": 96,
    "preview": "@import \"tailwindcss/base\";\n\n@import \"tailwindcss/components\";\n\n@import \"tailwindcss/utilities\";"
  },
  {
    "path": "docs/build.sh",
    "chars": 130,
    "preview": "#!/bin/sh\n\n NODE_ENV=production ./node_modules/.bin/postcss ./assets/app.source.css -o ./assets/app.css\n bundle exec jek"
  },
  {
    "path": "docs/dev.sh",
    "chars": 107,
    "preview": "#!/bin/sh\n\nbundle exec jekyll serve --livereload --drafts --future --port 5000 --livereload_port 35729 \"$@\""
  },
  {
    "path": "docs/index.md",
    "chars": 20,
    "preview": "---\nlayout: home\n---"
  },
  {
    "path": "docs/package.json",
    "chars": 419,
    "preview": "{\n  \"name\": \"docs\",\n  \"version\": \"1.0.0\",\n  \"devDependencies\": {\n    \"@fullhuman/postcss-purgecss\": \"^4.0.2\",\n    \"@tail"
  },
  {
    "path": "docs/postcss.config.js",
    "chars": 106,
    "preview": "module.exports = {\n  plugins: {\n    'postcss-import': {},\n    tailwindcss: {},\n    autoprefixer: {},\n  }\n}"
  },
  {
    "path": "docs/posts.html",
    "chars": 519,
    "preview": "---\nlayout: posts\n---\n\n<div class=\"home\">\n\n    <h1 class=\"page-heading\">Posts</h1>\n\n    <ul class=\"post-list\">\n        {"
  },
  {
    "path": "docs/scripts/alexa.py",
    "chars": 1416,
    "preview": "import base64\nimport collections\nimport hashlib\nimport hmac\nimport os\nimport re\nimport urllib.error\nimport urllib.parse\n"
  },
  {
    "path": "docs/scripts/download_favicons.py",
    "chars": 964,
    "preview": "#!python3\n\"\"\"\nThis script downloads the favicons\nUsage:\n\n    python3 update_alexa path/to/data.csv\n\"\"\"\n\nimport os\nimport"
  },
  {
    "path": "docs/scripts/sites_history_script.py",
    "chars": 867,
    "preview": "from pathlib import Path\n\nimport pandas\nimport pydriller\nfrom git import Repo\nimport io\n\nrepo_path = Path(__file__).pare"
  },
  {
    "path": "docs/scripts/update.py",
    "chars": 2191,
    "preview": "#!python3\n\"\"\"\nThis script updates the alexa rankings and sort the csv file.\nUsage:\n\n    python3 update.py\n\"\"\"\n\nimport cs"
  },
  {
    "path": "docs/tailwind.config.js",
    "chars": 827,
    "preview": "const defaultTheme = require(\"tailwindcss/defaultTheme\");\n\nmodule.exports = {\n    purge: [\n      './_includes/**/*.html'"
  }
]

About this extraction

This page contains the full source code of the engineerapart/TheRemoteFreelancer GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 35 files (105.3 KB), approximately 35.1k tokens, and a symbol index with 13 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!