Y.A.J.S. (kind of, but not really)

This is Yet Another Job Site, but only kind of, and not really, so bear with me.

I wanted to offer a provisional, small contribution in the battle for an ATProto
professional networking site. Big shout out to Sifa, Atmos, Xptracker, and all
the other great projects that are working in this direction.

I am going to take a slightly different tack here than those projects. When it
comes down to it, the real value for me in a professional networking site is
finding a job. Conversely, for recruiters, it is finding job candidates (I’m
guessing).

Thus, for any such site, you must have résumés, job posts, and a way to match
them
. It is that question of matching that I wanted to try and scratch the
surface of with this project.

Hopefully, it feels pretty obvious when I say that a résumé matches a job post
well when the experience encoded in the résumé matches the requirements for the
job.

That suggests an easy way to make matches: chop up a résumé into experiences and
a job post into requirements, use semantic embedding to vectorize those texts,
then compute matches by looking for vectors that are close to one another.

That is more or less what I have done. For the moment, I just made up some
schemas for job posts and résumés (jsonresume more or less), but it certainly
could be used for lexicons that already exist.

So how might this be useful to you right now? Maybe in a couple ways.

First, like I said, I have just taken jsonresume and extended it to include
media and dids. If you want, you can take your existing (or modified)
jsonresume and add it to your PDS for viewing here: https://res.blueres.org.
(Do you remember the episode of Parks & Rec where Tom creates like 26 different
profiles for a dating site? This is sort of similar in that you can post as
many résumés as you want.)

Second, if you want to test out searching over text for a résumé or job post,
matching one against the other (I added a bunch of fake data), or even matching
your résumé against a job post (I added some functionality to turn plain-text
job posts or résumés into structured versions), then you can do that here:
https://search.blueres.org.

If for some reason you are a recruiter and you want to play around with this,
then you can also check out https://jobs.blueres.org - job posts stored to
your PDS.

Lastly, if you are a developer, and you want to create a semantic search over
data from your lexicon, then you might want to check out the ‘backend/docsearch’
package here: https://github.com/jwindle/blueressearch. Currently, it is
geared towards a single schema. Given that, you can build a system that allows
you to do semantic search on text within a json document alongside standard
filtering criteria on data from a json document.

2 Likes

Hey, this sounds really cool !

Maybe add a link to https://jsonresume.org , just to safe others something in Googling this ?

Keep up the good work !

Hey, thx for the Sifa mention :folded_hands: A job-matching axis is definitely what I think Sifa profiles could feed into.

Q: I can see the records on your PDS, but no com.atproto.lexicon.schema definitions for them. Are they published somewhere? If not, even a v0.1 schema would make it a lot easier for other tools to write conformant records against your namespace.

If you want to read Sifa profiles into your pipeline: the four id.sifa.profile.* collections (self, position, education, skill) should cover everything your current extractors use. The shapes are close enough to JSONResume that the mapping should be trivial. If multi-collection ingest is more work than you want: I plan on serving a /profile/{did}/jsonresume endpoint on the Sifa AppView that returns a single JSONResume document per DID.

(JSONResume import/export is on the Sifa roadmap as well, issue #151, but for file-level use, primary interop path with other atproto apps should of course be done through the lexicon directly)

On job listings, I think there’s an interop convo worth having. Three Atmosphere namespaces in the wild now (that I know of):

  • place.atwork.listing
  • app.xptracker.job.listing
  • org.blueres.jobs.jobPost
  • …?

These shapes don’t neatly line up today. Separately, I’ve been talking with @dave.atmos.cv about a related split: rough idea is Sifa on the profile side (work history, education, skills, endorsements) and atmos on the photo/creative side (the work itself, attribution, media). Dave
hasn’t published lexicons yet either (atmos is still pre-launch), so the namespace boundaries are still movable. If you’d be up for joining a four-way conversation with xptracker, Dave, and me, I’d be glad to set it up. :handshake:

Either way: nice work, looking forward to seeing where it goes :flexed_biceps:

1 Like

Thanks for the suggestion, added the link!

1 Like

Thanks for the comments, @gui.do. I have not published anything, I need to look into that. And I also need to look into the Sifa lexicon, because, as you say, it should be pretty straightforward to adapt to that.

Regarding, the job posts, from the job sites I have looked at (e.g. LinkedIn, Wellfound), the job posts are typically not as structured as a résumé. There is a Google / Microsoft associated job post schema, which I have looked at as well, but I found it to be a bit rigid and unhelpful.

I would be happy to discuss all this further with whomever!

1 Like

For context, at.work has shut down. It was an experiment and served it’s purpose to demonstrate attested recommendations and an atproto job board.