My resume (or yours) as a TUI application

Overview

Resume TUI

This project is an attempt to make an interactive resume as a TUI application similar to efforts like This 2d animation portfolio.

demo gif

Installation

Github Releases

How it works

The application itself is built with the data needed, to achieve this I've setup a build script to generate a rust module that is only present at built time named source_data.rs

In a build.rs, the DATABASE static variable is generated by parsing a handful of toml files in a specific directory layout corrisponding to the details of each view. The layout is outlined below. The default location for this is a data directory in the current working directory when building, this can be overridden by using the RESUME_DATA_PATH environment variable.

Directory Layout

./data
├── edu.toml
├── info.toml
├── job_details
│   └── <Job Name or Id>
│       ├── bullet-1.toml
│       └── bullet-2.toml
├── jobs.toml
├── oss.toml
└── oss_details
    └── <Project Name or Id>
        ├── subproject-1.toml
        ├── subproject-2.toml
        └── subproject-4.toml

info.toml

The primary entrypoint for the Home page is the info.toml file where the base information is stored; it includes a name and a "tag line".

JSON Schema
{
    "title": "Info",
    "description": "Basic information",
    "type": "object",
    "properties": {
        "name": {
            "description": "The name displayed on the Home page.",
            "type": "string",
        },
        "tag_line": {
            "description": "The tagline to display below the name on the Home page.",
            "type": "string"
        }
    }
}

jobs.toml

This file is the entry point for the professional experience portion of the resume. The top level is an array of Job objects under the key job or jobs 1.

JSON Schema
{
    "title": "Jobs",
    "description": "List of job details",
    "type": "object",
    "properties": {
        "jobs": {
            "description": "list of jobs",
            "type": "array",
            "items": {
                "type": "Job"
            },
        }
    }
}

Each Job object contains some basic information about the position including company name, title, start date, optional end date, a list of details and an optional id. The list of details can either be included directly in the toml file or can be stored in the job_details directory. job_details is layed as directories, each directory will be named have either the company or id. The job details when in the TOML file should be rendered in the order they are defined and any additional details in teh job_details directory will be appended to this list in the order they are returned from read_dir.

JSON Schema
{
    "title": "Job",
    "description": "Overview of each job",
    "type": "object",
    "patternProperties": {
        "id": {
            "description": "An optional unique ID for a job used for file based details when representing multiple jobs at the same company.",
            "type": "string"
        },
        "company": {
            "description": "The name of the company",
            "type": "string"
        },
        "title": {
            "description": "Job title at this company",
            "type": "string"
        },
        "start": {
            "description": "The date this position started",
            "type": "string"
        }
        ,
        "end": {
            "description": "The date this position ended, if not provided it will display 'current'",
            "type": "string"
        },
        "details?": {
            "description": "A list of job details",
            "type": "array",
            "items": {
                "type": "JobDetail"
            },
        }
    },
    "required": [ "company", "title", "start" ]
}

Each Detail is essentially a bullet point for this job, it will contain a headline, snippet and long form description.

JSON Schema
{
    "title": "JobDetail",
    "description": "A highlight from a job",
    "type": "object",
    "properties": {
        "headline": {
            "description": "The headline",
            "type": "string"
        },
        "snippet": {
            "description": "A snippet describing this detail",
            "type": "string"
        },
        "detail": {
            "description": "The long form description, Commonmark markdown can be used to style this content",
            "type": "string"
        }
    }
}

oss.toml

This file is the entry point for the open source work portion of the resume. The top level is an array of Project objects under the key projects or project 1.

JSON Schema
{
    "title": "Projects",
    "description": "List of oss projects",
    "type": "object",
    "patternProperties": {
        "projects?": {
            "type": "array",
            "items": {
                "type": "Project"
            },
        }
    }
}

A Project is a recursive data structure for describing open source contribution it contains a project name, short description, long description and a list of sub projects. This structure makes it easier to represent GitHub Organizations and their repositories and/or crates that have workspace crates that deserve additional details.

JSON Schema
{
    "title": "Project",
    "description": "A Project outline",
    "type": "object",
    "properties": {
        "name": {
            "description": "The name of the project",
            "type": "string",
        },
        "short_desc": {
            "description": "A snippet about this project",
            "type": "string"
        },
        "long_desc": {
            "description": "A long form overview of this project, Commonmark markdown can be used to style this content",
            "type": "string"
        },
        "sub_projects": {
            "description": "A list of sub-projects related to this project, this is recursive in nature so these sub projects can also have sub-projects",
            "type": "array",
            "items": {
                "type": "Project"
            }
        }
    },
    "required": ["name", "short_desc", "long_desc"]
}

edu.toml

This file is the entry point for the open source work portion of the resume. The top level is an array of School objects under the key schools or school 1.

JSON Schema
{
    "title": "Education",
    "description": "List of school details",
    "type": "object",
    "patternProperties": {
        "schools?": {
            "type": "array"
            "items": {
                "type": "School"
            },
        },
    }
}

A School is a breif description of an educational experience including the name of the institution a description of the course of study and an optional graduation date.

JSON Schema
{
    "title": "School",
    "description": "Description of schooling",
    "type": "object",
    "properties": {
        "name": {
            "description": "The name of the institution",
            "type": "string"
        },
        "desc": {
            "description": "A description of this course of study",
            "type": "string"
        },
        "graduation_date": {
            "description": "If completed, when that happened",
            "type": "string",
        }
    },
    "required": ["name", "desc"]
}

Footnotes

  1. Because toml allows for 2 array syntaxes, array properties have a serde alias to allow them to be formatted as either an inline array (<list-name> = []) or with the [[<list-name>]] syntax. I personally find it to be more plesent to use the plural name for the former and non-plural for the latter. 2 3

You might also like...
2048 in `tui`, just for fun
2048 in `tui`, just for fun

TUI 2048 - Have a relax at anytime - 😎 ^_^ How to run repo clone this repo, git clone https://github.com/WanderHuang/game-2048-tui.git cd game-2048-t

FastSSH is a TUI that allows you to quickly connect to your services by navigating through your SSH config.
FastSSH is a TUI that allows you to quickly connect to your services by navigating through your SSH config.

Connect quickly to your services 🚀 FastSSH is a TUI that allows you to quickly connect to your services by navigating through your SSH config. Instal

Lemurs - A lightweight TUI display/login manager written in Rust 🐒
Lemurs - A lightweight TUI display/login manager written in Rust 🐒

Lemurs 🐒 A TUI Display/Login Manager written in Rust WIP: Whilst the project is working and installable, there are still a lot of bugs and limitation

Playground for 2D EKF-SLAM as TUI in Rust

SLAMme.RS Playground for 2D EKF-SLAM as TUI in Rust Installation $ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # install RUST $ su

TimeKnight is a neat little TUI-based timer app I use in conjunction with a task tracker
TimeKnight is a neat little TUI-based timer app I use in conjunction with a task tracker

TimeKnight is a neat little TUI-based timer app I use in conjunction with a task tracker. It's kind of a secret sauce for productivity (particularly if you have ADHD or have a ridiculously overactive brain).

Rust TUI library - Clipping region is a set of min/max x/y values applied to the existing region

TinyBit Clipping region is a set of min/max x/y values applied to the existing region A TUI lib This is not yet production ready T O D O TODO: bugs: T

An easy-to-use TUI crate for Rust, based off of the Elm architecture.

Rustea An easy-to-use TUI crate for Rust, based off of the Elm architecture. This is a re-implementation of Go's Tea, created by TJ Holowaychuk. Featu

Show active TCP connections on a TUI world map.
Show active TCP connections on a TUI world map.

Maperick Show active TCP connections on a TUI world map. Still WIP, but it's gonna be good. Setup git clone [email protected]:schlunsen/maperick.git cd m

Simple TUI frontend for paru,
Simple TUI frontend for paru,

parui Simple TUI frontend for paru. Images Keybinds parui adopts vim-like keybinds. Key Mode Action Escape Insert Enter Select Mode Return Insert

Releases(v0.0.3)
Owner
Robert Masen
I love parsers and dev tools and silly experiments
Robert Masen
Tiny color conversion library for TUI application builders

Definition of ANSI, RGB and HSL color types and all the conversions between them. There are many other color conversion crates. This one may be useful

Canop 8 Dec 15, 2022
A hackable, minimal, fast TUI file explorer, stealing ideas from nnn and fzf.

xplr A hackable, minimal, fast TUI file explorer, stealing ideas from nnn and fzf. [Quickstart] [Features] [Plugins] [Documentation] [Upgrade Guide] [

Arijit Basu 2.6k Jan 1, 2023
Rust TUI client for steamcmd

Steam TUI About Just a simple TUI client for steamcmd. Allows for the graphical launching, updating, and downloading of steam games through a simple t

Dylan Madisetti 599 Jan 9, 2023
Another TUI based system monitor, this time in Rust!

Another TUI based system monitor, this time in Rust!

Caleb Bassi 2.1k Jan 3, 2023
A user-friendly TUI client for Matrix written in Rust!

Konoha A user-friendly TUI client for Matrix written in Rust! Notice: The client is currently not usable and is only hosted on GitHub for version cont

L3af 9 Jan 5, 2022
TUI image viewer

Picterm TUI image viewer install $ cargo install picterm or $ git clone https://github.com/ksk001100/picterm $ cd picterm $ cargo install --path . usa

Keisuke Toyota 41 Dec 31, 2022
A cli prepared with TUI that facilitates your operations.

⚠️ For linux only ⚠️ Helper CLI A cli prepared with TUI that facilitates your operations. Click me to learn more about the theme system. If you just w

Yiğit 4 Feb 1, 2022
A tui to test regexes on the rust regex crate

regex-tui Structure src/ ├── app.rs -> holds the states and renders the widgets ├── event.rs -> handles the terminal events (key press, mouse cl

null 1 Oct 21, 2021
Parse hex colors to tui::style::Color

Color -> Tui Parse hex colors to tui rgb colors #c3f111 -> Color::Rgb(195,241,17) Note that the indexed colors are NOT HEX #142 -> Color::Indexed(142)

Uttarayan Mondal 1 Nov 8, 2021
TUI input library supporting multiple backends

tui-input WARNING: Most of the functionality is only human tested. A TUI input library supporting multiple backends. This crate can be used with tui-r

Arijit Basu 36 Dec 19, 2022