Creating a nice looking curriculum with, of course, open source:

  1. Open-Resume - No need for DB’s
  2. Reactive-Resume - Json allow us to get creative with LLMs ✨

F/OSS Curriculum Vitae

Creating a CV with Open Source

An applicant tracking system (ATS) is software used by organizations to manage the hiring process.

Some tricks to know if your CV is ATS-Friendly ⏬
  1. Export your PDF to word and see if it captures all the information properly
  2. Use the Open Resume Parser with your current template

It come sreally handy to have some templates which are easy to customize and that are seen properly by those ATS.

There are two FREE and OSS that do precisely that:

Let’s get started!

The Open Resume Project

OpenResume is a powerful open-source resume builder and resume parser.

How to Setup Open-Resume ⏬

Guess what, it uses Tailwind and React.

Clone it and run it with:

git clone https://github.com/xitanggg/open-resume.git
cd open-resume
npm install
npm run dev

You can alternatively use the container image:

docker build -t open-resume .
docker run -p 3000:3000 open-resume
docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t openresume .
#docker run -p 3000:3000 ghcr.io/jalcocert/open-resume:latest
#docker run -p 3000:3000 itsnoted/open-resume:latest

With this docker-compose for open-resume:

version: '3'
services:
  open-resume:
    container_name: openresume  
    image: itsnoted/open-resume:latest #ghcr.io/jalcocert/open-resume:latest
    ports:
      - "3000:3000" #UI

#     networks:
#       - cloudflare_tunnel
#       - nginx_default
            
# networks:
#   cloudflare_tunnel:
#     external: true
#   nginx_default:
#     external: true      

The package will be at: https://github.com/yourGHuser?tab=packages

After deployment, Open-Resume is waiting for you at: localhost:3000

The best thing? It does NOT require authentication to use it.

It is built with NextJS, btw.

Resume Builder Demo

The Reactive Resume Project

A free and open-source resume builder that simplifies managing your resume.

And the best of all? You can export the .json of your resume and continue later (without parsing it again)

Also, you can make it publicaly accesible.

Star History Chart

How to setup Reactive Resume with Docker⏬
#https://hub.docker.com/r/amruthpillai/reactive-resume
version: "3.8"

services:
  postgres:
    image: postgres:alpine
    restart: always
    ports:
      - 5432:5432
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      start_period: 15s
      interval: 30s
      timeout: 30s
      retries: 3
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres

  server:
    image: amruthpillai/reactive-resume:server-latest
    restart: always
    ports:
      - 3100:3100
    depends_on:
      - postgres
    environment:
      - PUBLIC_URL=http://localhost:3000
      - PUBLIC_SERVER_URL=http://localhost:3100
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - SECRET_KEY=change-me-to-something-secure
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
      - JWT_SECRET=change-me-to-something-secure
      - JWT_EXPIRY_TIME=604800
      
  client:
    image: amruthpillai/reactive-resume:client-latest
    restart: always
    ports:
      - 3000:3000 #UI for RR
    depends_on:
      - server
    environment:
      - PUBLIC_URL=http://localhost:3000
      - PUBLIC_SERVER_URL=http://localhost:3100
#     networks:
#       - cloudflare_tunnel
#       - nginx_default

# networks:
#   cloudflare_tunnel:
#     external: true
#   nginx_default:
#     external: true 

volumes:
  pgdata:

Visit http://localhost:3000 and use Reactive Resume

Open-source alternatives to PostgreSQL - Reactive Resume with ARM64 ⏬
  • MariaDB: MariaDB is a community-developed fork of MySQL. It’s fully open source and is developed and maintained by the original developers of MySQL.

  • CockroachDB: CockroachDB is a cloud-native SQL database for building global, scalable cloud services that survive disasters. It’s PostgreSQL compatible and offers fully-distributed ACID transactions.

  • SQLite: SQLite is a self-contained, serverless, and zero-configuration database engine. It’s very lightweight and is a good choice for small applications, embedded systems, and local storage in web browsers.

  • MySQL: MySQL is one of the most popular open-source relational databases. It’s widely used in web applications and is part of the popular LAMP (Linux, Apache, MySQL, PHP) stack.

CockroachDB: Build global, survivable, scalable cloud services with CockroachDB SQL database

  1. Option A) Reactive Resume + MariaDB:
version: "3.8"

services:
  mariadb:
    image: mariadb:latest
    restart: always
    ports:
      - 3306:3306
    volumes:
      - dbdata:/var/lib/mysql
    healthcheck:
      test: ["CMD-SHELL", "mysqladmin ping -u root -p$$MYSQL_ROOT_PASSWORD"]
      interval: 30s
      timeout: 20s
      retries: 3
    environment:
      - MYSQL_ROOT_PASSWORD=yourpassword
      - MYSQL_DATABASE=yourdatabase
      - MYSQL_USER=youruser
      - MYSQL_PASSWORD=yourpassword

  server:
    image: amruthpillai/reactive-resume:server-arm64-latest
    restart: always
    ports:
      - 3100:3100
    depends_on:
      - mariadb
    environment:
      - PUBLIC_URL=http://localhost:3000
      - PUBLIC_SERVER_URL=http://localhost:3100
      - MYSQL_DATABASE=yourdatabase
      - MYSQL_USER=youruser
      - MYSQL_PASSWORD=yourpassword
      - SECRET_KEY=change-me-to-something-secure
      - MYSQL_HOST=mariadb
      - MYSQL_PORT=3306
      - JWT_SECRET=change-me-to-something-secure
      - JWT_EXPIRY_TIME=604800
      
  client:
    image: amruthpillai/reactive-resume:client-arm64-latest
    restart: always
    ports:
      - 3000:3000
    depends_on:
      - server
    environment:
      - PUBLIC_URL=http://localhost:3000
      - PUBLIC_SERVER_URL=http://localhost:3100

volumes:
  dbdata:
  1. Option B) Reactive Resume + CockroachDB:
version: "3.8"

services:
  cockroachdb:
    image: cockroachdb/cockroach:latest
    command: start-single-node --insecure
    restart: always
    ports:
      - 26257:26257
      - 8080:8080
    volumes:
      - dbdata:/cockroach/cockroach-data

  server:
    image: amruthpillai/reactive-resume:server-arm64-latest
    restart: always
    ports:
      - 3100:3100
    depends_on:
      - cockroachdb
    environment:
      - PUBLIC_URL=http://localhost:3000
      - PUBLIC_SERVER_URL=http://localhost:3100
      - POSTGRES_DB=postgres
      - POSTGRES_USER=root
      - POSTGRES_PASSWORD=
      - SECRET_KEY=change-me-to-something-secure
      - POSTGRES_HOST=cockroachdb
      - POSTGRES_PORT=26257
      - JWT_SECRET=change-me-to-something-secure
      - JWT_EXPIRY_TIME=604800
      
  client:
    image: amruthpillai/reactive-resume:client-arm64-latest
    restart: always
    ports:
      - 3000:3000
    depends_on:
      - server
    environment:
      - PUBLIC_URL=http://localhost:3000
      - PUBLIC_SERVER_URL=http://localhost:3100

volumes:
  dbdata:
  1. Option C) Reactive Resume + SQLite

SQLite is an embedded database, which means it’s not a standalone server that can be accessed over a network.

Instead, it’s a library that’s linked into your application, and the database is a regular file on your filesystem. Therefore, you don’t need (and can’t use) a separate service for SQLite in your Docker Compose file.

version: "3.8"

services:
  server:
    image: amruthpillai/reactive-resume:server-arm64-latest
    restart: always
    ports:
      - 3100:3100
    volumes:
      - dbdata:/path/to
    environment:
      - PUBLIC_URL=http://localhost:3000
      - PUBLIC_SERVER_URL=http://localhost:3100
      - DATABASE_URL=sqlite:////path/to/database.db
      - SECRET_KEY=change-me-to-something-secure
      - JWT_SECRET=change-me-to-something-secure
      - JWT_EXPIRY_TIME=604800
      
  client:
    image: amruthpillai/reactive-resume:client-arm64-latest
    restart: always
    ports:
      - 3000:3000
    depends_on:
      - server
    environment:
      - PUBLIC_URL=http://localhost:3000
      - PUBLIC_SERVER_URL=http://localhost:3100

volumes:
  dbdata:

A lightweight next-gen database explorer - Postgres, MySQL, SQLite, MongoDB, Redis, MariaDB & Elastic Search

Now you are free to use this resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free


Conclusions

Alternatively you can use SSG’s to create a public CV

Looking for something more?

An AI Based Free & Open Source Tool. To tailor your resume to a job description. Find the matching keywords, improve the readability and gain deep insights into your resume.

Document Analytics Tools

Mass document analytics platform based on LlamaIndex, Pgvector, React and Django.

What Does it Do? It provides several key features:

  • Manage Documents - Manage document collections (Corpuses)
  • Layout Parser - Automatically extracts layout features from PDFs
  • Automatic Vector Embeddings - generated for uploaded PDFs and extracted layout blocks
  • Data Extract - ask multiple questions across hundreds of documents using complex LLM-powered 8 querying behavior. Our sample implementation uses LlamaIndex + Marvin.

FAQ

Preparing a Python Environment to Parse CV’s ⏬

I used Python 3.8 as per the Dockerfile:

FROM python:3.8-slim

# Install git and nano (I find them useful)
RUN apt-get update && apt-get install -y git nano

# Will copy your local folder to the container
COPY . ./

# Install production dependencies.
RUN pip install -r requirements.txt

# Set the entrypoint to a bash shell
CMD ["/bin/bash"]

#docker build -t pythondev .
#podman build -t pythondev .

#podman exec -it python_container_for_dev /bin/bash

Once built, use the stack:

version: '3.8'

services:
  pythondev_service:
    image: pythondev #podman  build -t pythondev .
    container_name: python_container_for_dev
    ports:
      - "8502:8501"    
    #command: streamlit run app.py
    command: tail -f /dev/null
#     networks:
#       - cloudflare_tunnel
            
# networks:
#   cloudflare_tunnel:
#     external: true  

#docker run -d --name python_container_for_dev -p 8502:8501 pythondev tail -f /dev/null
docker build -t pythondev .
#podman build -t pythondev .
podman exec -it python_container_for_dev /bin/bash
python --version
pip list

Checking how readable is a CV Template

Resume Parsing with Python (spaCy) ⏬

spaCy is a library for advanced Natural Language Processing in Python and Cython. It’s built on the very latest research, and was designed from day one to be used in real products.

Resume Parsing with Python (Pyresparser) ⏬
pip install pyresparser

A simple resume parser used for extracting information from resumes

Resume Parsing with Python (PDFMiner) ⏬

https://github.com/pdfminer/pdfminer.six - MIT Licensed https://pypi.org/project/pdfminer.six/ https://pdfminersix.readthedocs.io/en/latest/

pip install pdfminer.six

#from CLI
pdf2txt.py example.pdf
pdf2txt.py example.pdf > output.txt

podman exec -it python_container_for_dev /bin/bash

The library works like this:

#FROM PYTHON 

# from pdfminer.high_level import extract_text

# text = extract_text("sample.pdf")
# print(text)

###pdf2txt.py example.pdf

from pdfminer.high_level import extract_text

text = extract_text("sample.pdf")
print(text)

# Write the extracted text to a file
with open("output.txt", "w", encoding="utf-8") as f:
    f.write(text)
podman exec -it python_container_for_dev /bin/bash
docker cp python_container_for_dev:/output.txt C:\Users\testuser\Desktop
Resume Parsing with Python (NLTK) ⏬

The Natural Language Toolkit (NLTK) is a Python package for natural language processing.

NLTK is a leading platform for building Python programs to work with human language data. It provides easy-to-use interfaces to over 50 corpora and lexical resources such as WordNet, along with a suite of text processing libraries for classification, tokenization, stemming, tagging, parsing, and semantic reasoning, wrappers for industrial-strength NLP libraries, and an active discussion forum.

https://github.com/nltk/nltk - Apache v2 https://pypi.org/project/nltk/ https://www.nltk.org/

NLTK requires Python 3.7, 3.8, 3.9, 3.10 or 3.11/12.

How to create a F/OSS CV with Astro

You can use with Astro -SSG for websites (and not only):

How to manage SQLite

A free, open source, multi-platform SQLite database manager.