Moonlight updates
Moonlight updates

New membership plans for hiring companies





With the acquisition of Moonlight by PullRequest, we have made some updates to how pricing and payments work on Moonlight.

What the changes mean for you:

  • Membership pricing: We have consolidated pricing to two simple plans - one for hiring contractors, and another for hiring contractors + employees. Sign in to review the plans.
  • No more invoice fees: There is no longer a markup added to in-app payments. Developers keep 100% of what you pay, and their name will show up on your credit card bill (instead of Moonlight).
  • Your active jobs: You'll still have ongoing access to any jobs where you already hired someone. The developer will need to agree to our new terms and re-connect Stripe to continue getting paid.
  • Update payment method: We switched to PullRequest's Stripe account, so you need to re-add any credit cards to pay invoices on Moonlight. Add payment methods here.
  • Updated terms: We've updated our terms of service and privacy policy.

Ready try it out? Join the membership 👉

Dismiss job matches





The #1 most-requested feature by developers is now live. You can dismiss matches on the jobs page that are not a good fit!

Dismissable job post

Dismiss jobs that you are not interested in, and they will be moved to the "inactive" page. That way, you can better track your active applications and new matches. If you change your mind, you can undo the dismissal from the "Inactive jobs" page.

In the future, we plan to improve and customize your matches based on the jobs you dismiss.

Share Moonlight job posts publicly





Today we are making it easier to share job posts on Moonlight. Now you can copy the link and share outside the Moonlight app!

How this helps companies hire:

  • Get more applicants applying to your job
  • Share job posts directly from your website, in an email, or on social media
  • Depend on Moonlight's vetting process for all candidates

For developers:

  • Invite people in your network to apply and get a referral bonus
  • Apply directly to Moonlight job posts you see online

Copy the share link on any active job post to share your job post!


Web chat supports longer messages





You can now send messages up to 40,000 characters in length through the Moonlight app. The limit used to be 1,000 characters.

Why were messages limited to 1,000 characters? We were validating inputs with regular expressions, and the Go standard library only supports pattern matching up to 1,000 characters.

Removing Embedly link enrichment from chat





We're spending some time this week improving in-app chat! As a first small change, we're removing link enrichment. We used Embedly to show extra cards about links. But, we realized that the cards were taking up a lot of space, and making chat hard to use.

Before (with link enrichment):

Moonlight chat screenshot with link enrichment

Now (without link enrichment):

Moonlight chat screenshot without link enrichment

Fixes to file uploads





We've had some occasional bug reports that file uploads sometimes failed. Users would upload something like a profile photo, resume, or data file, and get this error when they went to view the file:

Screen Shot 2019-12-18 at 11.12.23 AM.png

It turned out that we were incorrectly URL encoding file names. The file was correctly uploaded, but we returned an incorrect URL to access the file!

Technical details

On the backend, we use Google Cloud's Signed URL feature to let users directly upload files to the cloud.

Here's how it works:

  1. Frontend makes a UserFileUploadRequest request with the name of the file and the MIME-type
  2. The backend returns two URLs: a ServingURL, which is the public link where the file can be accessed forever, and the UploadURL, which is a temporary, signed link where the file can be uploaded.
  3. The frontend uploads the file to UploadURL
  4. The file can be accessed at ServingURL

Moonlight's API would immediately URL-encode the file name, then generate the Serving and Upload URLs. As we analyzed what was happening, we realized that the Google Cloud API was already URL-encoding the name of the file. So, our code ended up double-encoding the file for the UploadURL, but only single-encoding the ServingURL. So, any filenames that contained URL-unsafe characters would fail. Whoops!

Recommended code for Signed URLs on Google Cloud

We deployed the below fix and added some tests.

Screen Shot 2019-12-19 at 8.53.05 AM.png

But wait, there's more!

When you upload a resume to Moonlight, we display it on your profile via the filename. We also updated this link tag component to URL-decode file names. So, links display better now 👍



Improved Job Matching





At Moonlight, we match companies and developers based on the intersection of their skills and experience. We are pushing live several improvements to make connections more relevant and effective.

Matching algorithm
We recently updated our matching algorithm to provide more relevant matches. You will see the improvements in our main app and in the weekly newsletter. We are already observing the matches based on this version of the algorithm with the intent to make ongoing improvements.

Weekly newsletter
We have trimmed down the amount of information in the Newsletter while ensuring that the matches you see are a better fit.

Sample developer job matches newsletter: developer-newsletter.png

Sample company candidate matches newsletter: company-newsletter.png

Make sure your skills and profile are up-to-date so that we can give you the best matches possible. Let us know how you like the newsletter enhancements!

Better developer onboarding





When developers sign up for Moonlight, they are also filling out a profile and applying to the community. We check to make sure they can be paid through Stripe, have at least two years of professional experience as a developer, and verify that they have worked with the skills listed.

With this new developer onboarding, we hope to capture more value for developers right away so that we don't need to request more details. This will lead to better job matches and faster job offers.

Take a look at one of the new onboarding screens, which shows a real-time preview of the profile header as it's filled out:


Please let us know if you have any requests or feedback!

Changed more icon and added refer to profile





We made some UX and UI changes to the app navigation a few weeks ago. After getting some user feedback on the discoverability of the "more" and "refer and earn" nav items, we made some updates to make it easier navigate around.

More icon

The more menu at the bottom of the application navigation now uses the same icon for both mobile and desktop. Previously, it used an ellipse icon without a label.

Add Refer and earn to profile

You can now find the "refer and earn" page from a tab on your profile or the "more" menu at the bottom of the nav. Remember - you can get paid in $$ or swag for referring new people to Moonlight!


Updated invoice PDF generation





Some companies use Moonlight for ongoing access to software contractors, paid weekly through Moonlight. To stay compliant, they need access to invoices to manage their accounting needs.

Previously, the code we were using to generate PDFs for invoices was buggy. We were pushing lots of short-term fixes to generate PDFs when the system went down.

Today, we are pushing a fix that switches to a new library. It should solve system issues moving forward so that teams have a more reliable way to download their invoice PDFs!

Please email us at if you see any issues!