Skip to content

upstash/purple-squirrel

Repository files navigation

AI Powered Open-Source Applicant Tracking System and Search Engine


purple-squirrel

Overview

Key Features

Live Demo

Check out the live demo here.

Natural Language Queries query
Complex Filtering

Filter applicants based on location, application status, years of experience or given stars.
filtering

Alternative Scoring Systems

Choose among different scoring systems to rank applicants:

  • Flash Mode: Fast, cheap semantic search with filtering.
  • Deep Mode: LLM assisted scoring of top applicants.
    flash-mode deep-mode
Applicant Tracking System

Status
Track the application status of candidates.
status

Notes
Take notes on candidates to keep track of your thoughts.
notes

Star Ratings
Rate candidates with stars to easily filter them later.
stars

Resumes
Easily view resumes of candidates via uploadthing.

Socials
Reach out to candidates via their email or social media profiles.
socials

Role Based Authentication

Protect your app with role based authentication via Clerk.

  • Recruiter: Manage applicants.
  • Admin: Manage positions, application methods and users.
    roles
Admin Dashboard

Manage Positions
Open, close or delete positions. Share application links with candidates.
positions

Manage Application Methods
Enable or disable applications via email or through the app.
application-methods

Manage Users
Change roles of users or delete them.
users

Tech Stack

Deploy your own

Step 1: Deploying with Vercel
  1. Click the button below.
  2. Connect your GitHub account & create a Git repository as described.
  3. Fill the environment variables as described in the next steps.

Deploy with Vercel

Step 2: Connect your mailbox

Note: This tutorial will be based on Gmail, but you can set up an IMAP connection with any other provider.

  1. Complete the following steps described in this tutorial.
    • Turn on Less secure apps.
    • Create and use App Passwords.
    • Turn on IMAP in Gmail.
  2. Fill the following environment variables in Vercel:
    • IMAP_USERNAME: Your mail address
    • IMAP_PASSWORD: App Password you generated
    • IMAP_HOST: imap.gmail.com
    • IMAP_PORT: 993
Step 3: Set up Upstash
  1. Open an Upstash account.

  2. Switch to Redis tab in Console.

  3. Click Create database.

  4. Think of a name and select a primary region close to your users.
    create-redis-database

  5. Click Next -> Click Create.

  6. Fill the following environment variables in Vercel, which can be found and copied in your database page:

    • UPSTASH_REDIS_REST_URL
    • UPSTASH_REDIS_REST_TOKEN

    redis-tokens
  7. Switch to Vector tab in Console.

  8. Click Create Index.

  9. Think of a name and select a region close to your users, Embedding Model, Dimensions and Metric should be set like below.
    create-index

  10. Click Next -> Click Create.

  11. Fill the following environment variables in Vercel, which can be found and copied in your index page:

    • UPSTASH_VECTOR_REST_URL: Your endpoint
    • UPSTASH_VECTOR_REST_TOKEN

    vector-token
  12. Switch to QStash tab in Console

  13. Fill the following environment variables in Vercel, which can be found and copied in your QStash page:

    • QSTASH_URL
    • QSTASH_TOKEN
    • QSTASH_CURRENT_SIGNING_KEY
    • QSTASH_NEXT_SIGNING_KEY

      qstash-tokens

QStash free plan has a limit of 500 messages per day. This will limit your mail pipeline to approximately 200 applicants per day. We recommend upgrading to the pay as you go plan. See QStash Pricing for more information.

Step 4: Set up uploadthing
  1. Sign in to uploadthing.

  2. Click Create a new app.

  3. Think of a name and select an app default region close to your users.
    uploadthing-create

  4. Fill the following environment variables in Vercel, which can be found and copied in the API Keys tab (use the Legacy tab):

    • UPLOADTHING_SECRET
    • UPLOADTHING_APP_ID

    uploadthing-keys
Step 5: Set OpenAI API key
  1. Go to OpenAI Platform -> API keys and login to your account.

  2. Click Create new secret key.

  3. Enter a name and click Create secret key.
    openai-key

  4. Don't forget to copy and save your key. Fill the following environment variable in Vercel:

    • OPENAI_API_KEY
Step 6: Set up Clerk
  1. Sign in to Clerk and create an application.
  2. Select a project name and your preferred sign in options.
  3. Fill the following environment variables in Vercel, which can be found and copied in the API keys tab:
    • NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY
    • CLERK_SECRET_KEY
    • NEXT_PUBLIC_CLERK_SIGN_IN_URL: /sign-in
    • NEXT_PUBLIC_CLERK_SIGN_UP_URL: /sign-up clerk-keys

Now we will create ourselves user and make it admin. We will only need to do this once as Recruiter and Admin roles can easily be given in Admin Dashboard inside our application.

  1. Switch to Users tab.
  2. Click Create user.
  3. Set up an email and a password, click Create.
clerk-user-create
  1. Click on the created user to go its page.
  2. Scroll down to see Metadata section, Edit public metadata.
clerk-before
  1. Give admin role as shown below, click Save.
{
  "role": "admin"
}
clerk-json
  1. You should see something like this:
clerk-after
  1. Finally, switch to Sessions tab and edit session token.
clerk-session-before
  1. Set it as shown below:
{
  "metadata": "{{user.public_metadata}}"
}
clerk-session-after
Step 7: Set your application URL
  1. Fill the following environment variables in Vercel:
    • NEXT_PUBLIC_URL: URL of your application (e.g. purple-squirrel.vercel.app)

→ Step 8: Click deploy & visit your site, it will guide you through the rest of your setup!

Local development

A local tunnel is required in local development since QStash requires a publicly available API to send messages to. This tutorial is based on localtunnel.me but you can use any service of your choice.

Step 1: Create a local tunnel
npx localtunnel --port 3000
Step 2: Fill environment variables

Copy the output URL and fill the following environment variable in .env.local

LOCAL_TUNNEL_URL=<YOUR_URL>

Fill the rest of the environment variables in .env.local as described in the Deploy your own section.

Step 3: Install dependencies & run the project
npm install
npm run dev

→ Step 4: Visit your site at http://localhost:3000

In local development, mail pipeline is triggered only once instead of creating a schedule since local server is not expected to be always available.

Contributing

We welcome contributions to improve this project. Please feel free to submit issues or pull requests.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages