Yayabels – Designing The Domain

Yayabels and DDD

What better way to spend the weekend than to do some rewrite of one of your side projects?

I wrote the first version of yayabels.com using JAM stack.

The Markup, generated by NuxtJS is hosted in github pages (SSL and all), and the API (ASP.NET core WebAPI) is hosted in a free-tier app service in Azure. Yes, I am cheap that way.

I was scratching my itch back then.

Now I want to get serious with yayabels.com.

I decided to go with a boring technology stack and DDD the hell out this shit.

Let’s get started:

Hiring Bounded Context

This is the Hiring bounded context. The other possible bounded contexts are Application and Referrals but that may still change as we continue to improve on all the domains.

The Domain

An employer posts a Job.

This job post will expire in a month, and a notification will be sent prior to that.

All candidates who match the criteria are notified of the new job post.

A candidate can click on the link and confirm their intent to apply.

A candidate cannot apply to a job that he/she is not qualified for (missing police clearance for example).

The employer gets notified. Employer can now view candidate documents and details. If candidate is not qualified, employer gives the reason. If qualified, employer can now call the candidate.

When candidate does not get hired, employer tells the recruiter if any, the reason.

When candidate does get hired, the recruiter (if any) is informed.

Every month, employer evaluates the candidate. Likewise, employer gets evaluated by Candidate.


Based on the story above I have identified the following events:

  • JobPosted
  • JobExpired
  • CandidateApplied
  • CandidateRejected
  • CandidateHired
  • CandidateEvaluated
  • EmployerEvaluated


Likewise, here are the commands:

  • PostJob
  • MarkJobAsExpired
  • ApplyCandidate
  • MarkCandidateAsRejected
  • MarkCandidateAsHired
  • EvaluateCandidate
  • EvaluateEmployer


  • MissingApplicantDocuments
  • CannotEvaluateNotHired


This bounded context revolves around a Job. So that’s what we will set as the root.

  • Job (root)
  • Employer
  • Candidate
  • Evaluation
  • Recruiter

Read Model

We need a few read models

  • candidates that monitor job posts
  • employers looking for candidates
  • recruiters that monitor candidates’ status

To be continued…

Hey I got a life too. Just kidding, but I still got time to binge watch some Netflix or play that Witcher 2 game I keep putting of for many years. Oh hey OpenTTT is great!

Next time maybe I will post about the tools I finally decide to go with. There’s so many of them. So far the ones I’m looking at are:

Published by jfaquinojr

C# and VueJS Fanboy

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: