read.cv is an easy way to share your resume or CV on the open web. It’s presentation is much cleaner than LinkedIn.

Unfortunately for users, the business behind read.cv was acquired, and the service began shutting down last week. In this blog post I’ll describe a positive privacy aspect of the shutdown, and some fiddly notes on moving read.cv/foote to NextJS on Vercel.

read.cv shutdown message “Our Incredible Journey”

About read.cv

read.cv serves resumes, CVs, or professional profiles of its users. It’s similar to LinkedIn. But the UX is much cleaner, and it’s on the open web. read.cv is the flagship product in a suite of similarly clean and web-friendly social media tools that the read.cv team developed.

I didn’t find any VC funding news about read.cv or its related products. The effort may have been bootstrapped.

It appears that the team was acquihired into perplexity.ai. All of the products are being shut down, a la “Our Incredible Journey”. The developers have excellent design skills; I wonder if that is what they’ll do at Perplexity.

Privacy in the read.cv shut down

Privacy and interop

Engineers work on data privacy a lot. But an end goal of overall privacy is individual agency: being able to make self-directed decisions in the future. Not being hindered, blocked, or tricked out of them.

In that way making it easy to change between products in pro-privacy. Users can make self-directed decision about the content they’ve contributed to the product.

FTC DTG logo FTC Workshop logo circa 2020

It’s hard to do in practice. Making a complete user data export is effort that could be spent on features. And when users have the data, what are they supposed to do with it? The schema is unlikely to be the same as those of competing products. Sometimes it is practical for products to support data import, but it is generally quite limited. Overall, despite some efforts, there are commercial incentives against end user data interoperability.

read.cv’s friendly shutdown

But, read.cv has done well in this regard. They allow you to export your profile data as .zip including a JSON blob and rich media. But they also allow you to export an entire NextJS project corresponding to the page that hosts your profile. This avoids the issue of data interoperability between professional profile sites, for technically savvy users at least.

So now those users can much more easily make a self-directed decision regarding the content they developed for read.cv. More agency, more privacy.

I’ve been reading about the local-first development pattern, since some apps that I really like use it. It seems to be gaining a little momentum in the UK and EU. While read.cv is not local-first, this approach is described as part of the path to it in the local-first conference keynote from Martin Kleppman.

Local-first conference keynote slide

In this case the open-source server is commercially funded by Vercel, who provides first-class hosting support for it.

Re-hosting read.cv on NextJS

I’m not an expert on NextJS or Vercel, but I managed to work through setting up a free account and re-hosting read.cv/foote pretty quickly.

1. Export NextJS project from read.cv

I could do this via Manage Account | Data Export after signing into read.cv

Export UI Exporting NextJS from read.cv

2. Create a free Vercel account and create a project

I’m not going to describe how to do this here since Vercel has extensive documentation on it. In a nutshell this is what I had to do.

  1. Sign up for a Vercel account
  2. Link your Vercel account to your Github or source-control system
  3. Create a repository in Github (or whatever) for your read.cv NextJS project

3. Set Vercel project type to NextJS

I needed to switch the project type for my read.cv project to NextJS in Vercel.

Vercel project type Changing project type

4. Fix the read.cv code

Broken read.cv site read.cv export with broken image code

The read.cv export has two issues as of this writing:

  1. It expects a JPG copy of your profile photo to exist in the /public/content/media directory in your repo.
  2. The profile photo is self-hosted, which isn’t supported by default in Vercel projects.

You can fix #1 by creating a JPG conversion of the supplied PNG in the directory above.

Vercel IO error read.cv export with broken image code

You can fix #2 by either using Vercel Blobs or self-hosting the image. Self-hosting was easier for me, so that is what I did:

aws s3 cp ./images/rsa-profile-photo.png s3://foote.pub/images/rsa-profile-photo.png

You also need to modify app/opengraph-image.tsx so that it fetches the external image. It is a hack-job but you can see how I did it here.

git diff Modification to app/opengraph-image.tx

5. Push and publish

Then I pushed my code so that Vercel would deploy it. I actually did this many times as I was debugging all of this, of course.

Disabling authentication in Vercel Disabling authentication in Vercel

I also needed to turn off authentication for my project so that my read.cv could be viewed on the open web.

My exported version of read.cv/foote is here.

Conclusion

To recap, the read.cv shutdown is a bummer but the silver-lining is that they made it easy to re-host your content. Which supports user agency and privacy. Thanks for reading!

Exported site Exported, fixed and hosted version of read.cv/foote