All projects
B
HR / Recruitment

Rails 6.1, Vue.js/Quasar, GraphQL (Ruby + Apollo), RSpec/Jest, state machines

Rails 6.1 backend with GraphQL (ruby-graphql), Vue.js/Quasar Framework frontend, state machines for the candidacy workflow, RSpec + Jest tests.

Rails 6.1 Backend
Vue.js Frontend
GraphQL API
Dev Role

GraphQL was chosen over REST because of the complexity of the relationships between entities. An assignment involves a client, a candidate, a recruiter, required skills, availabilities, hours worked and invoicing. In REST, displaying a recruiter dashboard would have required 8 to 10 API calls. In GraphQL, a single query fetches exactly the data needed.

Business workflows are handled by state machines. An assignment moves through the states draft, published, applications open, assigned, in progress, completed, invoiced. Each transition validates the preconditions and triggers side effects: notifications, availability updates, invoice generation. This approach makes the business logic explicit and testable.

The Quasar/Vue.js frontend provides a responsive interface that works on desktop for recruiters and on mobile for candidates on the go. RSpec backend and Jest frontend test coverage ensures that the complex workflows stay reliable as things evolve.

Technical architecture

Ruby on Rails 6.1 backend: implemented most of the GraphQL API (Ruby-GQL).

Vue.js frontend with Quasar Framework for rich UI components.

Contributed to the design of the state machines for the assignment and candidacy workflows.

GraphQL subscriptions for real-time notifications.

Comprehensive tests: RSpec (backend) + Jest (frontend), coverage > 80%.

Multi-role authentication, fine-grained policy-based authorization.

Technical highlights

State machines

Candidacy workflows

GraphQL

Ruby-graphql + Apollo

Tests > 80%

RSpec + Jest

Technical stack

Ruby on Rails
Vue.js
Quasar
GraphQL
PostgreSQL
RSpec
Jest
Redis
Role Full-Stack Developer
Duration 2021-2022
Engagement Contract (~1 year) (Tier B)

A similar technical engagement?

A brief, a repo, or a quick call - whatever works.