Giter Club home page Giter Club logo

pdf-generator's Introduction

CV PDF Generator

The CV PDF Generator is a React app used to build a CV and export it as a PDF.

How To Run

  1. Add your picture in src/assets/profile.jpeg
  2. Fill out your information in data.json
  3. Adapt CSS or scale in pdf.ts if needed
  4. Run the following commands in the terminal
npm install

npm run pdf

Development / Debug

If you want to tweak your CV or debug some features you are implementing, you can run the dev server using:

npm run dev

Built With

  • React + Vite
  • Puppeteer for PDF generation

pdf-generator's People

Contributors

alcpereira avatar amaimaya avatar danajeon avatar flufynarwhal avatar karsyz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

pdf-generator's Issues

Readme

Description

Find a nice readme example and implement it

Please suggest your solution here before opening a PR

ACs

  • Updated readme

Image component - Improvements

Description

The image is for now a bare image import, it should be separated into a React component and make it more reliable (accept different formats, not working with non-squared image, additional properties like: withBorder, show, etc)

Open to suggestions!

ACs

  • Suggest improvements and technical solution
  • Implement technical solution for Image component

UI - Features idea request

Description

Currently the generation is quite manual and "techy": filling the data.json, running the server and running the pdf script.
We should think about a user interface, for example inputs and a button to generate PDF ?

Open to suggestions, ideas and design!

ACs

  • Specs defined and issues created

POC Storybook

Description

Long but interesting task, investigate how to implement storybook.

Maybe auto-deploy the storybook on PR for deployment preview? ๐Ÿ‘€

ACs

  • Working POC with Storybook

Header component: fix `\n` issue

Description

The header component and data header.resume were lamely built using \n to force a new line. We can do better than this!

Tip

To find quickly type issues you can run npm run typecheck.
To force a git ignored file, you can git add ignoredfile.json -f

Acceptance criteria

  • Header component accepting an array of lines
  • Changes needed in data.json and types

design system: CSS color variables names

Description

Colors variables name are currently linked to their name (--light-grey), this should change with the introduction of templates/themes.

To prepare this change we need to change the name of those variables with more "meaning".

Acceptance criteria

  • Learn about CSS color naming (accent, values like 100 to 900, etc) and prepare a quick presentation about it to share your knowledge about it (blog post, or quick demo)
  • Change all the CSS color variable names (for example --light-grey should become may become --color-300 or --color-accent (depending on your findings)

ESLint rules

Description

ESlint has some nice rules and possible plugins/rules set, find ones that are suitable for the project.

Please suggest here before opening a PR

ACs

  • Investigate possible rules and implement them

Implement a more reliable way to do bullet points

Description

Some bullet point were added directly as a character in the data.json, we should have a better way to do it.

Feel free to suggest ideas!

  • A react component for the bullet point? To make it very customizable
  • A new property within the data.json? For example lines: string[] would become lines: { text: string; bulletPoint?: boolean }[]

ACs

  • Implement bullet points in React component that might use it
  • Update data.json and types

Implement Prettier

Description

The project doesn't have Prettier yet.

ACs

  • Install prettier as a dev dependency
  • Create a simple prettier config (it can be an empty .prettierrc file)
  • Add a command to run prettier in npm scripts

Languages component - Improvements

Description

This component is for now in Profile.tsx, it should be extracted and have some additional features (for example: showing abbreviation? showing full name? etc).

Open to suggestion for additional features

ACs

  • Single component with new features

POC implement templates

Description

Currently we have a single format (profile on the right, etc), we should be able to implement different templates.

The solution should not change the data schema (breaking change) and work with CSS variables and React components.

Open to suggestions and ideas

ACs

  • Working POC for templates

JSDoc

Description

JSDoc works very well with TypeScript, learn about it and implement it (even for props!). This could be a good topic to present (blog post, or tech presentation).

Bonus point for use of @see and similar tags.

ACs

  • Implement JSDoc

Pre commit and commitlint

Description

To enforce best practices, like conventional commits, or typechecking before commiting, we should use something like commitlint and husky.

Learn about it and suggest solutions. This could be a nice topic for a blog post or tech presentation.

Please suggest in this issue before opening a PR.

ACs

  • Implement a solution to enforce good commits

Testing & CI

Description

With the project growing, we should protect the current features with regression testing, especially for the future user interface.

Investigate possible solutions for testing and running it on CI (Github Actions).

Some libraries to investigate:

  • Playwright with UI visual regression (screenshot comparison)
  • Testing Library for simple component

The implementation will be done in another Issue once the testing strategy is defined

ACs

  • Issues with specs created

Remove `normalize.css` and refactor into `index.css`

Description

For rapid prototyping, we used a normalize.css and let the original index.css.
Normalize is targeting some things that we don't need, we should have only what is needed in index.css

ACs

  • normalize.css removed and refactored into index.css

Links component - Improvements

Description

Links is currently inside Profile.tsx, this should be extracted and with new features (for example adding website? mastodon?)

A refactor might be needed + types/data.json changes

ACs

  • Single Link component
  • Update types/data/etc

Contributing & contributors

Description

Find a nice CONTRIBUTING.md example and how to show contributors (readme?).

Please suggest here before opening a PR.

ACs

  • CONTRIBUTING.md created
  • An easy way to manage the list of contributors and show them

design system: Convert to CSS variables

Description

To change any spacing/color/etc, it's currently needed to go into the component themselves. With the introduction of the templates/themes, the only viable way would be to have CSS variables.

Note: This might be broken down into several PRs/Issues.

Example:

.bubble {
  border: 1px solid var(--light-grey);
}

should become

.bubble {
  border: var(--bubble-border);
}

with

:root {
  /* Main colors first*/
  --color-700: rgb(94, 90, 94);
  
  --bubble-border: 1px solid var(--color-700);
}

(Color variables naming will change with this issue)

Acceptance criteria

  • Every hardcoded values that could be part of a design system (borders, gaps, padding, colors, etc.. almost everything minus the alignments like flex) should be converted to CSS variables

Better variables / properties naming

Description

Native english speaker required

Probably some variables could have better names, both semantic and english.
For example Bubble may have a better name, like chip? Feel free to use Material.io for component names.

Open to suggestion, possibly do it in the Issue before opening a PR.

ACs

  • Double check variable naming and semantic

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.