Giter Site home page Giter Site logo

Plutomi

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 my attempt to do just that.

Summary

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

In these applications, you can create stages which are individual steps that need to be completed by your applicants. You can add questions and setup automatic move rules that determine where applicants go next depending on their responses or after a certain time period.

An application for a delivery company might look like this:

New York City

Stages:

  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

Tech Stack

Plutomi is deployed to any VPS you can get your hands on (we recommend Hetzner). The frontend is a Remix app and the API is written in Rust using the Axum web framework. We use Traefik as ingress with cert-manager + Let's Encrypt for TLS certificates. We use MongoDB for our main transactional database and try to follow patterns like this where we store everything in a single collection. We use NATS + Jetstream as a message broker for async events.

We use AWS CDK to deploy a couple of resources like setting up SES for emails, SNS to receive email events like opens, clicks, bounces, etc., and a queue to put those events in.

We also use Cloudflare for DNS, CDN, WAF and R2 for storage, and Axiom for logging although this is optional.

We plan to add:

  • An events consumer to process NATS and SQS messages
  • MeiliSearch for full text search
  • ClickHouse for analytics

Running Locally

Simply make a copy of .env.example to a .env file and run ./scripts/run.sh. This will:

  1. Setup MongoDB

  2. Setup NATS + Jetstream

Credentials for all datasources when testing locally are admin and password. The NATS server will be created with a sys user to manage it, and an admin user for creating streams & publishing/subscribing to messages. You can create a NATS context to switch between them easily:

$ nats context add admin --server nats://localhost:4222 --user admin --password "password"  --description "Admin user" --select
  1. Start the Web app in development mode on port 3000

  2. Start the API on port 8080

  • Because the majority of our backend is in Rust, and due to the infamous compile times of Rust, we are running them outside of Docker
  • The API along with the events consumer will run with cargo watch which might take some time to initially start but will have hot reloading after that

You can also run any stack individually:

$ ./scripts/run.sh --stack <web|api|datasources>
Local Docker

If you decide to run any of the Rust services in Docker, make sure you run them from the /services directory and pass the service Dockerfile as context as we need the /shared library to be included:

# Running the API example in /services
docker build -t plutomi/api:latest-local -f api/Dockerfile . && \
docker run -p 8080:8080 plutomi/api:latest-local

Deploying

To deploy Plutomi, you'll want to deploy to AWS for setting up SES first and then the rest of the backend with Kubernetes (K3S). Check out DEPLOYING.md for more information.

License

This project is licensed under the Apache 2.0 license. Here is a TLDR.

Contributing

See CONTRIBUTING.md

Useful Links

Questions / Troubleshooting

Some common issues you might run into are documented in TROUBLESHOOTING.md, be sure to look there first :)

If you're wondering why certain architectural decisions were made, check the decisions folder as you might find it in there.

If you have any other questions, open a discussion / issue and we can talk about it or reach out to me on Twitter @notjoswayski or email [email protected]!

plutomi's Projects

plutomi icon plutomi

Applicant Management at Any Scale. Currently undergoing maintenance! :D

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.