I got pretty sick and tired of having to upload my resume to a million places (LinkedIn, CareerBuzz, Handshake, Google Drive, recruiters who one is in conversation with, the jobs that I applied to online that allowed resume updating...) whenever I had to update my resume. Often, these changes would be a small typo I notice, which take a couple seconds to fix in a text editor, but a block of time to deploy everywhere.
What it does
Runway will take your resume and upload it to LinkedIn (as media under your profile description), CareerBuzz, and Handshake. Some planned future integrations are any Workday/Greenhouse.io job, Google Drive, and even CI/CD for git-happy folks who use LaTeX.
How I built it
Browser automation (Selenium) scripts run within a Node/ExpressJS server with a UI layer (ReactJS) on top.
Challenges I ran into
My original plan was to use these services (LinkedIn, CareerBuzz, Drive, workday job apps, etc)'s public APIs to accomplish most of the resume updates. When I discovered most of the companies don't offer public APIs, I endeavored for a couple hours trying to crack their private APIs, which was really hard; the folks who secured the giant LinkedIn's private API are probably a tad bit smarter than I am. Eventually, I pivoted towards a more practical alternative (browser automation).
Accomplishments that I'm proud of
Building something that I'd actually use, and that I'm excited to continue working on when I get home.
What I learned
- how to sniff high-level network traffic (past using the Network tab in your browser)
- gained familiarity with browser automation and testing frameworks--super useful! Can think of plenty of uses for these for any future personal project or job.
What's next for runway
I'm never satisfied with a project. Runway needs:
- actual linting, testing, and pipelines set up. Testing especially important, as browser UI-based automation is vulnerable to breaking due to website updates.
- authentication built into Runway--more elegant process for the user than expecting the user to sign in ahead of time. For my personal use, this is fine; for deployment this is annoying. Unfortunately, most of the services Runway integrates with do not have public APIs and/or are not very friendly towards OAuth, so we shall see what happens...
- other deployment and scaling thoughts. Using a Desktop app (Electron?) rather than a webapp, especially since Runway needs access to the user's filesystem (to access browser cookies that have authentication state).
- This sounds preeeettttty baaad, I know, but the alternative is that the user does the equivalent of ZIPing up all their passwords in plaintext and uploading it to a website I manage. Which is probably way worse.