{"id":17496853,"url":"https://github.com/annedorko/highlight","last_synced_at":"2025-03-04T18:31:21.214Z","repository":{"id":54413737,"uuid":"337555250","full_name":"annedorko/highlight","owner":"annedorko","description":"Static Site Generator (SSG) for creating multiple targeted portfolios and resumes with one website.","archived":false,"fork":false,"pushed_at":"2023-11-12T08:20:55.000Z","size":494,"stargazers_count":24,"open_issues_count":3,"forks_count":0,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-10-19T18:27:49.907Z","etag":null,"topics":["jinja","portfolio-template","python","python3","resume-builder","resume-creator","resume-template","resume-website","ssg","static-site-generator"],"latest_commit_sha":null,"homepage":"https://highlight.dorko.dev","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/annedorko.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-02-09T22:37:01.000Z","updated_at":"2024-10-18T16:21:35.000Z","dependencies_parsed_at":"2022-08-13T15:00:17.910Z","dependency_job_id":null,"html_url":"https://github.com/annedorko/highlight","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/annedorko%2Fhighlight","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/annedorko%2Fhighlight/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/annedorko%2Fhighlight/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/annedorko%2Fhighlight/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/annedorko","download_url":"https://codeload.github.com/annedorko/highlight/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241899347,"owners_count":20039276,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["jinja","portfolio-template","python","python3","resume-builder","resume-creator","resume-template","resume-website","ssg","static-site-generator"],"created_at":"2024-10-19T15:01:40.023Z","updated_at":"2025-03-04T18:31:21.201Z","avatar_url":"https://github.com/annedorko.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eHighlight: a Static Site Generator\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003eHighlight is a lightweight, opinionated Static Site Generator (SSG) for quickly creating a beautiful resume and portfolio site that targets multiple ideal roles.\u003c/p\u003e\n\n![Highlight Site Preview](https://user-images.githubusercontent.com/1281008/107776426-d93eb780-6d41-11eb-85b9-c3954b4fe843.png)\n\n[Landing Page](https://highlight.dorko.dev) | [Demo](https://demo.highlight.dorko.dev/) | [Live Usage](https://hire.annedorko.com)\n\nIf you are using Highlight and wish to be featured, please [contact me](https://github.com/annedorko/highlight#contact).\n\n**Note:** \u003cmark\u003eThis project is experimental.\u003c/mark\u003e Updates may introduce breaking changes. [Please follow these instructions for upgrading your Highlight installation.](https://github.com/annedorko/highlight/wiki/Updating-Highlight-Versions) Keep backups of your data and implement Highlight at your own risk!\n\n## Who is it for?\n\nHighlight is built by and for generalists who often need tweaked versions of their resume and portfolio to be appealing for different opportunities. This SSG is built to help you _highlight_ the right parts of your diverse skill-set and experiences to the right people, quickly and elegantly.\n\nHighlight is a Static Site Generator, which means the output can be hosted anywhere as plain HTML and CSS. By default it is configured to deploy to Github Pages automatically.\n\nThis repo uses dummy data (which still features much of my own resume) and the results of the auto-deployment through Github Pages can be viewed here: [Highlight Demo Site](https://demo.highlight.dorko.dev).\n\n## Built With\n\n- [TailwindCSS](https://github.com/tailwindlabs/tailwindcss)\n- [Jinja](https://palletsprojects.com/p/jinja/)\n\n## Getting Started\n\nIf you use this project base, modify this project to suit your own resume and portfolio activities!\n\n### Prerequisites\n\nBuilt using:\n\n- Python 3+\n- Node.js 21+\n- NPM 10+\n\nThe program may work on lower versions of Node or NPM but has not been thoroughly tested.\n\n### Installation\n\nPlease [check the wiki](https://github.com/annedorko/highlight/wiki/Installation/) for more detailed installation instructions.\n\n#### 1. Clone this repo into a clean project folder.\n```shell\ngit clone https://github.com/annedorko/highlight.git\n```\n\nAlternatively, you can [create a new project using Highlight as a Template](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-repository-from-a-template#creating-a-repository-from-a-template) and checkout your new project before proceeding.\n\n#### 2. Navigate into your project folder using the console.\n\n```shell\ncd highlight\n```\n\n#### 3. Install NPM packages.\n```shell\nnpm install\n```\n\n#### 4. Install Python package requirements.\n\nDepending on your preference, you can use pip, pipenv, or conda to install the requirements using the convenient npm scripts provided:\n\n```shell\nnpm run install-pip\n```\n```shell\nnpm run install-pipenv\n```\n```shell\nnpm run install-conda\n```\n\n#### 4. Get started!\n\nGet started developing! The following command will use `python3` to execute the start-up script which generates your Highlight site, watches for changes, and makes them available in the browser at http://localhost:4242\n\n```shell\nnpm run develop\n```\n\nLearn more about [available scripts in the wiki](https://github.com/annedorko/highlight/wiki/Installation/).\n\n## Usage\n\nThis repo is full of example data. Currently, that data is mostly from my own resume. You can use it as a reference to create your own site.\n\nData in Highlight is managed through [YAML](https://yaml.org/refcard.html). If you receive errors it is likely because the YAML got mis-formatted. Be sure to follow the same indentations and patterns as provided in the example data!\n\nAs Highlight is so young, the YAML formatting may slightly change from update to update without backward compatibility, so be sure to check for any special notes before updating to use new Highlight features.\n\n### Step 1. Configure Site\n\n1. Open `src/config.yaml`\n2. Change the `url` setting to the root domain your site will be published at.\n\nThis URL controls:\n- The root of your links throughout the site\n- The CNAME for Github Pages to support custom domains\n\nNote: Highlight automatically generates a [.nojekyll file](https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/) to support Github Page deployment.\n\n### Step 2. Start Site for Local Editing\n\nIf you haven’t already, you can start the development server using the following command:\n\n```shell\nnpm run develop\n```\n\n### Step 3. Update Your Bio\n\n1. Open `src/resume/about.yaml`\n2. Edit the data to reflect your name, contact information, skills, and more.\n\nThis document contains the data that is the same across all your resume and portfolio items.\n\n- Name\n- Tagline\n- Work availability\n- Skills grouped by category\n- Important links\n- Contact information\n- Education\n\n\nBy default, your email will also be used to pull your Gravatar image, so I recommend ensuring you have an account there associated with your work email. Set up a professional photo that looks great on the homepage.\n\nAlternatively, you can set `avatar` to `github` in the `src/config.yaml` file and ensure that your Github username is set under `contact` in the `src/resume/about.yaml` file.\n\nSomething like this:\n\n```yaml\navatar: github\n```\n\n```yaml\ncontact:\n  email: you@example.com\n  phone: +1 555 321 5432\n  timezone: Pacific\n  github: yourusername\n```\n\n#### Skills\n\nCategories can be written using alphanumeric values followed by a colon. If you need to include a colon in your category name, be sure to surround it with quotes.\n\nFor example:\n\n- Good: `Music Production:`\n- Good: `'Music: Production':`\n- Bad: `Music: Production:`\n\n#### Links\n\nLinks can be plain text, like so:\n\n`Homepage: 'https://www.annedorko.com'`\n\nOr, you can optionally provide a URL, anchor text, and even a [FontAwesome icon](https://fontawesome.com/icons?d=gallery\u0026m=free). This makes your resume look much cleaner and enables you to include icons for Twitter, LinkedIn, or whatever sites you may be referencing.\n\n_Without icon:_\n```\nHomepage:\n  url: 'https://www.annedorko.com'\n  text: 'annedorko.com'\n```\n\n_With icon:_\n```\nHomepage:\n  url: 'https://www.annedorko.com'\n  text: 'annedorko.com'\n  icon: '\u003ci class=\"fas fa-home\"\u003e\u003c/i\u003e'\n```\n\n#### about.yaml Template\n\nHere is a blank template with a few required stand-ins if you’d like to start from scratch. Feel free to cross-reference these values with the default about.yaml to better understand how to use them.\n\n```\n---\n  name: ''\n  taglines:\n    default: ''\n  open:\n    available: true\n    seeking: ''\n    location: ''\n  skills:\n    Your Category Here:\n      - skill: Write a Skill\n        years: 1\n      - skill: Another Skill\n        years: 4\n    Your 2nd Category Here:\n      - skill: Another Skill\n        years: 2\n  links:\n    Homepage:\n      url: ''\n      text: ''\n    LinkedIn: 'https://linkedin.com'\n  contact:\n    email: ''\n    phone: ''\n    timezone: ''\n  education:\n    Degree Name Here:\n      school: ''\n      degree: ''\n      study: ''\n      graduation: ''\n```\n\n### Step 4. Add Your Target Roles\n\n1. Open `src/resume/roles.yaml`\n2. Edit the values to reflect your target roles.\n\nThis document is the root of all your generated resumes. There is no limit to the number of target roles you can add, as long as you follow the YAML format! **Every role you add will generate a new resume page targeted towards that role.**\n\nEvery role requires:\n\n- Role/Title Name\n- Professional Summary\n- List of Essential Skills (Multiples of 3 work best)\n\n#### Preview Role Summary\n\u003cp align=\"center\"\u003e\u003cimg style=\"max-width: 250px; height: auto;\" src=\"https://user-images.githubusercontent.com/1281008/107766163-5ca4dc80-6d33-11eb-9448-33310821f2f0.png\" width=\"600\" /\u003e\u003c/p\u003e\n\nThis information will appear at the top of your resume, as shown above.\n\n#### role.yaml Template\n\nHere is a blank template with a few required stand-ins if you’d like to start from scratch. Feel free to cross-reference these values with the default role.yaml to better understand how to use them.\n\n```\n---\n  - role: Role Name\n    summary: Professional summary.\n    skills:\n      - Skill 1\n      - Skill 2\n      - Skill 3\n  - role: 2nd Role Name\n    summary: Professional summary.\n    skills:\n      - Skill 1\n      - Skill 2\n      - Skill 3\n```\n\n### Step 5. Add Your Work History\n\nWithout adding any career history, your generated resumes will look a bit empty. You will need to add work history to your `src/resume/history/` folder.\n\nEach file represents a single element that will show up on your resumes. You will need to add a new file per work history item.\n\nThe file names don’t matter, so long as they are unique. I use a `YYYY-company-name.yaml` format so it’s easier to find what I’m looking for later.\n\nThese documents define:\n\n- Which resumes to include the experience on.\n- The role you played, adjustable per target resume role.\n- Company name\n- Company location\n- Company URL\n- Type of work (Full-time, part-time, freelance, etc.)\n- Dates: Start and end. Requires a 'YYYY-MM' format for both values, or you can use 'Present' for end date.\n- Skills used on the job. Base is for all target roles, default is used by default, or you can add target-role-specific lists as well. Will be relevant on portfolio pages in the future.\n- Description, adjustable per target resume role.\n\nTitles and descriptions all both required, and both require default values.\n\nSkills are not required. If included, skills require both base and default values. (Currently, skills are not necessary to add here but will be helpful for when portfolio pages are available in the app.)\n\nIf you do not follow the required date format, the script will not run correctly. The script will automatically supply the number of years and months.\n\n#### Adding and Customizing Work Experience to a Target Role Resume\n\nTo add a work experience to all resumes, use:\n```\ninclude:\n  - All\n```\n\nTo add a work experience to specific resumes, list them under include in a list.\n\n```\ninclude:\n  - Target Role\n  - Target Role 2\n  - Target Role 3\n```\n\n**Since v0.1.0:** To add a work experience to all *except* specific resumes, use the All keyword under include, and use an exclude list to remove it from only those roles:\n\n```\nexclude:\n  - Target Role\n  - Target Role 2\n  - Target Role 3\n```\n\nTitles and descriptions need a default title, to start. If you would like to change your title role for specific resumes, you can do so by listing the name of the target role followed by the name of your changed title.\n\nThis is particularly helpful if you played many roles within a company, and want to highlight one role over another for a specific resume.\n\n```\ntitles:\n  default: Job Title\n  Target Role: Adjusted Job Title\n  Target Role 3: Secondary Job Title\n```\n\nIn the above example, \"Job Title\" will show by default on any resume you include it on. Resumes for \"Target Role\" and \"Target Role 3\" will be customized to use the provided titles.\n\nThe same goes for descriptions!\n\n```\ndescriptions:\n  default: Job Title\n  Target Role 2: Adjusted Job Title\n```\n\nYou can add as many or few customizations as necessary. The default will always be used if you have not provided a specific version. I recommend starting with just the default, and adding customizations as needed when you generate new resumes.\n\n#### history/*.yaml Template\n\nHere is a blank template with a few required stand-ins if you’d like to start from scratch. Feel free to cross-reference these values with the example history files to better understand how to use them.\n\n```\n---\n  include:\n    - All\n  titles:\n    default: Job Title\n  company: Company Name\n  location: Company City, Country\n  url: https://www.example.com/\n  type: ''\n  dates:\n    start: 2010-03\n    end: Present\n  skills:\n    base:\n      - Skills\n    default:\n      - Other Skills\n  descriptions:\n    default: Default description of experience.\n```\n\n### Step 6. Edit, Add, and Delete Site Pages\n\nFinally, you will need to adjust your site pages! You can add as many or few pages as you’d like. These will be linked to at the top of your site in the navigation bar. These will be useful if you plan to send the web versions of your resumes to people.\n\nYour site pages are managed in markdown files under `src/pages/`. Here is an [introduction to markdown](https://www.markdownguide.org/getting-started/) if you are not familiar with it.\n\nSince your homepage is generated automatically based on the `about.yaml` and `roles.yaml` files, do not create an `index.md` page. Otherwise, you can create whatever pages you like.\n\nI have included a simple About and Contact page.\n\nYou can customize the order the pages show up in your navigation by changing the order value in the meta data. Lower numbers will show first, higher numbers will show later. In the example pages you can see that the About page shows first, with an order of `0`, and the contact page shows second, with an order of `2`.\n\nYou can set `title`, `slug`, and `order` in the markdown metadata.\n\n### Step 7. Optional: Compile Your Site for Uploading Manually\n\nHighlight now supports Github Page deployment automatically. This means you can store the entire project using Github and it will deploy to a gh-pages branch from which you can serve your shiny new resume site.\n\nIf you wish to host else where you can use this command to generate the site under the `site/` folder:\n\n```shell\nnpm run build\n```\n\nThe contents of the `site/` folder can then be uploaded wherever you would like to host the website.\n\n### Step 8: Print to PDF Using Chrome\n\nHighlight comes with custom print styles to ensure your resume can easily be saved as a PDF using the \"Print to PDF\" feature.\n\nSimply navigate to your desired resume page on the website and _Print to PDF_. I recommend using Chrome if you experience any formatting issues. Note, in Firefox you will have to manually disable the header and footer text output as this cannot be overridden in the CSS automatically.\n\nLearn more about [customizing fonts and other theme styles](https://github.com/annedorko/highlight/wiki/Customizing-the-Theme) in the wiki.\n\n## Roadmap\n\nSee [open issues](https://github.com/annedorko/highlight/issues) for a list of proposed features and known issues.\n\n## License\n\nDistributed under the `GNU GPLv3` license. See `LICENSE` for more information.\n\n## Contact\n\nAnne Dorko - [LinkedIn](https://www.linkedin.com/in/annedorko) - [@annedorko](https://twitter.com/annedorko) - [anne@dorko.tv](mailto:anne@dorko.tv)\n\nProject Link: [github.com/annedorko/highlight](https://github.com/annedorko/highlight)\n\n## Acknowledgements\n\nThis project was to get my own flexible resume and portfolio running as well as experiment with Python in a new environment. Below are packages I used and resources I referenced along the way.\n\n### Packages\n- [Python-Markdown](https://github.com/Python-Markdown/markdown)\n- [PyYAML](https://pyyaml.org/wiki/PyYAMLDocumentation)\n- [Jinja](https://palletsprojects.com/p/jinja/)\n- [watchdog](https://pypi.org/project/watchdog/)\n- [unicode_slugify](https://pypi.org/project/unicode-slugify/)\n\n### Resources\n- [othneildrew’s Best README Template](https://github.com/othneildrew/Best-README-Template)\n- [nqcm’s Static Site Generator Tutorial](https://github.com/nqcm/static-site-generator)\n- [Ansible YAML Syntax Documentation](https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html)\n\n### Contributors \n\n\u003cdiv style=\"display: flex; gap: 1.5em; text-align: center;\"\u003e\n\n[\u003cimg src=\"https://github.com/annedorko.png\" width=\"60px;\" style=\"border-radius:100%;\" /\u003e\u003cbr /\u003e\u003csub\u003e\u003ca href=\"https://github.com/annedorko\"\u003e@annedorko\u003c/a\u003e\u003c/sub\u003e](https://github.com/annedorko/)\n\n[\u003cimg src=\"https://github.com/Stedders.png\" width=\"60px;\" style=\"border-radius:100%;\" /\u003e\u003cbr /\u003e\u003csub\u003e\u003ca href=\"https://github.com/Stedders\"\u003e@Stedders\u003c/a\u003e\u003c/sub\u003e](https://github.com/Stedders/)\n\n\u003c/div\u003e\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fannedorko%2Fhighlight","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fannedorko%2Fhighlight","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fannedorko%2Fhighlight/lists"}