Giter Site home page Giter Site logo

rtotala / plutomi Goto Github PK

View Code? Open in Web Editor NEW

This project forked from plutomi/plutomi

0.0 0.0 0.0 20.92 MB

Applicant management at any scale. Currently undergoing maintenance! :D

Home Page: https://plutomi.com

License: Apache License 2.0

JavaScript 0.49% TypeScript 98.68% CSS 0.44% HTML 0.33% Dockerfile 0.06%

plutomi's Introduction

โš ๏ธ This repository is currently undergoing maintenance and many breaking changes. These changes are necessary to enhance the long term stability of the project. Use at your own risk as long as this banner is here - things will be broken!


Plutomi

PRs Welcome License All Contributors

Plutomi is a multi-tenant applicant tracking system that streamlines your entire application process with automated workflows at any scale.

infra

Motivation

Having worked at a company that needed to recruit thousands of contractors every month, improving our acquisition flow at that scale became a challenge. Many processes had to be done manually because there just wasn't an API available for it. We often hit limits and had to work around them with a myriad of webhooks, queues, and batch jobs to keep things running smoothly. It would have benefited us to have an open platform to contribute to and build upon and this project is our attempt to do just that.

Summary

You can create openings which people can apply to. An opening can be anything from a job, a location for a delivery company, or a program like a summer camp.

In these openings, you can create stages which are individual steps for your application. You can add questions for applicants to answer, and setup automatic move rules that determine where applicants go next depending on their answers or after a certain time period.

An opening for a delivery company might look like this:

Opening name: New York City

Stage order:

  1. Questionnaire - Collect basic information of an applicant. If an applicant does not complete this stage in 30 days, move them to the Waiting List.
  2. Waiting List - An idle pool of applicants
  3. Document Upload - Collect an applicant's license
  4. Final Review - Manually review an applicant's license for compliance
  5. Ready to Drive - Applicants that have completed your application

Prerequisites

Useful commands

Command Function
npm run dev Will deploy a copy of most the backend to AWS (Dynamo, Event Bridge, SQS, Step Functions, etc). The frontend & Express server run in localhost
npm run test Will run tests
npm run deploy-prod Will deploy everything to your production environment
npx cross-env NODE_ENV=(development or production) cdk deploy -e (development or production)-STACK_NAME Will deploy a specific stack in the desired environment

Language, Tooling, & Infrastructure

All infrastructure is managed by CDK and we use Jest for testing. Everything is written TypeScript and we would appreciate any assistance on types or tests as we're definitely not the best ๐Ÿ˜…

The frontend is using NextJS and we have an Express app serving it from AWS Fargate.

DynamoDB

We're using a single table design for this project. If you're new to DynamoDB, I created a playlist that will help you get accustomed to it. There are videos from Alex Debrie, Rick Houlihan, Pete Naylor, and an awesome talk by Kai Zhao on adaptive capacity.

There are some asynchronous events that are made possible by the Dynamo streams:

  1. Cascading deletions - When deleting an entity that has child items such as an org and its openings or an opening and its stages, the parent is deleted right away but the children will be deleted asynchronously with a state machine. At the top of the workflow there is a choice state which figures out which entity was deleted. It then retrieves all of the top-level child items for that entity (deleting an opening only retrieves the stages, but not the applicants in those stages). The state machine maps through each item and deletes them. This causes the state machine to be called again: Dynamo stream -> EventBridge -> StepFunction with the newly deleted entity.

  2. Webhooks - Any applicant events (INSERT, MODIFY, or DELETE) trigger another state machine that sends the entire event payload that we received from Dynamo to your configured URL.

We're also using Athena to query Dynamo with plain old SQL using Federated Queries - (video). We haven't figured out how to add a data source using CDK but this is very simple. Once deployed, click Connect Data Source and select DynamoDB. Choose a name and then select the lambda function that is created in the stack: NODE_ENV-athena-dynamo-query-function

Other useful repos:

Contributing

To make a contribution, submit a pull request into the main branch. You will be asked to sign a Contributor License Agreement for your PR. You'll only have to do this once.

This project tries to follow Semantic Pull Requests some what. Your PR title should have the following format:

Type Description
feat: OR enhancement: Added a new feature or enhancement
fix: Squashed some bugs!
docs: Updated documentation, readme, examples
test: Added / modified tests
chore: Maintenance, refactoring, etc. If it doesn't fit above, it goes here

Example: fix: Removed the double modals popping up on login

License

This project is licensed under the Apache 2.0 license

Contributors โœจ

Thanks goes to these wonderful people (emoji key):


Jose Valerio

๐Ÿ’ป ๐Ÿš‡ ๐Ÿšง

praguru14

๐Ÿ’ป ๐Ÿšง

Jose Valerio

๐Ÿ’ป ๐Ÿšง ๐Ÿ›

Jeremy Trenchard

๐Ÿ’ป

This project follows the all-contributors specification. Contributions of any kind welcome!

plutomi's People

Contributors

joswayski avatar dependabot[bot] avatar allcontributors[bot] avatar mazupicua avatar jeremyjay121 avatar praguru14 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.