Compare commits

...

49 Commits

Author SHA1 Message Date
beb418bd5d chore(release): 3.2.11 2022-03-28 16:43:35 +02:00
2b3d9533b0 Merge pull request #797 from chandiwalaaadhar/fix/#795-No-Scrollbar-on-overflow
Fix-#795 No Scoll Behaviour on Overflow
2022-03-28 16:42:52 +02:00
b061f139bd Fix-#795 No Scoll Behaviour on Overflow 2022-03-28 19:56:54 +05:30
5eed1186ff chore(release): 3.2.10 2022-03-24 11:59:03 +01:00
a87a9b3247 revert changes made to unreleased v3.2.10 2022-03-24 11:58:44 +01:00
7f1c82cd91 feat(i18n): add portuguese (pt) language to i18n locales 2022-03-24 11:57:16 +01:00
048c1ed3ed Merge pull request #764 from AmruthPillai/i18n_main
New Crowdin updates
2022-03-24 11:54:48 +01:00
9a2570d7e7 New translations builder.json (Portuguese) 2022-03-24 11:46:44 +01:00
00b9c2156d chore(release): 3.2.10 2022-03-24 11:33:14 +01:00
ff8b22274f ci(docker): use docker compose yaml anchor values and extension fields 2022-03-24 11:32:57 +01:00
786937f847 ci(gh): add .devcontainer for GitHub Codespaces 2022-03-24 09:16:54 +00:00
c95efee8ec perf(security): generate random salt rounds integer 2022-03-24 08:45:22 +01:00
776d2f79a6 ci(dependabot): upgrade npm dependencies manually, using local chore 2022-03-24 08:38:54 +01:00
25a6b8cce6 chore(deps): update dependencies to latest 2022-03-24 08:37:57 +01:00
f6d7cae17b Merge pull request #789 from AmruthPillai/dependabot/npm_and_yarn/typeorm-0.3.3
Bump typeorm from 0.2.45 to 0.3.3
2022-03-24 08:16:39 +01:00
944a0b5fb1 Bump typeorm from 0.2.45 to 0.3.3
Bumps [typeorm](https://github.com/typeorm/typeorm) from 0.2.45 to 0.3.3.
- [Release notes](https://github.com/typeorm/typeorm/releases)
- [Changelog](https://github.com/typeorm/typeorm/blob/master/CHANGELOG.md)
- [Commits](https://github.com/typeorm/typeorm/compare/0.2.45...0.3.3)

---
updated-dependencies:
- dependency-name: typeorm
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 07:15:35 +00:00
7769653224 Merge pull request #782 from AmruthPillai/dependabot/npm_and_yarn/server/nestjs/config-2.0.0
Bump @nestjs/config from 1.2.1 to 2.0.0 in /server
2022-03-24 08:15:25 +01:00
ccdc5b5fae Merge pull request #781 from AmruthPillai/dependabot/npm_and_yarn/docs/types/react-17.0.42
Bump @types/react from 17.0.40 to 17.0.42 in /docs
2022-03-24 08:15:20 +01:00
20158f573e Merge pull request #779 from AmruthPillai/dependabot/npm_and_yarn/client/types/node-17.0.23
Bump @types/node from 17.0.21 to 17.0.23 in /client
2022-03-24 08:15:10 +01:00
87c60729b5 Merge branch 'main' into dependabot/npm_and_yarn/client/types/node-17.0.23 2022-03-24 08:14:59 +01:00
a03a50b7c6 Merge pull request #777 from AmruthPillai/dependabot/npm_and_yarn/server/googleapis-98.0.0
Bump googleapis from 97.0.0 to 98.0.0 in /server
2022-03-24 08:14:35 +01:00
fb85ccf501 Merge pull request #776 from AmruthPillai/dependabot/npm_and_yarn/client/types/react-17.0.42
Bump @types/react from 17.0.40 to 17.0.42 in /client
2022-03-24 08:14:31 +01:00
3179442d8f Merge pull request #773 from AmruthPillai/dependabot/github_actions/docker/build-push-action-2.10.0
Bump docker/build-push-action from 2.9.0 to 2.10.0
2022-03-24 08:14:27 +01:00
33d3c52cd9 Merge pull request #772 from AmruthPillai/dependabot/github_actions/digitalocean/action-doctl-2.1.1
Bump digitalocean/action-doctl from 2.1.0 to 2.1.1
2022-03-24 08:14:22 +01:00
1d33e01a43 Merge pull request #771 from AmruthPillai/dependabot/docker/client/node-17-alpine
Bump node from 16-alpine to 17-alpine in /client
2022-03-24 08:14:17 +01:00
52ff221dd1 Merge pull request #770 from AmruthPillai/dependabot/docker/server/node-17-alpine
Bump node from 16-alpine to 17-alpine in /server
2022-03-24 08:13:57 +01:00
5afe178e23 Update dependabot.yml 2022-03-24 08:13:38 +01:00
9118b76084 Bump @nestjs/config from 1.2.1 to 2.0.0 in /server
Bumps [@nestjs/config](https://github.com/nestjs/config) from 1.2.1 to 2.0.0.
- [Release notes](https://github.com/nestjs/config/releases)
- [Changelog](https://github.com/nestjs/config/blob/master/.release-it.json)
- [Commits](https://github.com/nestjs/config/compare/1.2.1...2.0.0)

---
updated-dependencies:
- dependency-name: "@nestjs/config"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 07:04:09 +00:00
5a62b527b9 Bump @types/react from 17.0.40 to 17.0.42 in /docs
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 17.0.40 to 17.0.42.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 07:04:08 +00:00
2e9e14dc72 Bump @types/node from 17.0.21 to 17.0.23 in /client
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 17.0.21 to 17.0.23.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 07:03:51 +00:00
0a0b4893aa Bump googleapis from 97.0.0 to 98.0.0 in /server
Bumps [googleapis](https://github.com/googleapis/google-api-nodejs-client) from 97.0.0 to 98.0.0.
- [Release notes](https://github.com/googleapis/google-api-nodejs-client/releases)
- [Changelog](https://github.com/googleapis/google-api-nodejs-client/blob/main/CHANGELOG.md)
- [Commits](https://github.com/googleapis/google-api-nodejs-client/compare/googleapis-v97.0.0...googleapis-v98.0.0)

---
updated-dependencies:
- dependency-name: googleapis
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 07:03:37 +00:00
6277f81e26 Bump @types/react from 17.0.40 to 17.0.42 in /client
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 17.0.40 to 17.0.42.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 07:03:35 +00:00
d550150787 Bump docker/build-push-action from 2.9.0 to 2.10.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 2.9.0 to 2.10.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v2.9.0...v2.10.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 07:02:41 +00:00
7626b2153f Bump digitalocean/action-doctl from 2.1.0 to 2.1.1
Bumps [digitalocean/action-doctl](https://github.com/digitalocean/action-doctl) from 2.1.0 to 2.1.1.
- [Release notes](https://github.com/digitalocean/action-doctl/releases)
- [Commits](https://github.com/digitalocean/action-doctl/compare/v2.1.0...v2.1.1)

---
updated-dependencies:
- dependency-name: digitalocean/action-doctl
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 07:02:38 +00:00
6d17d1001d Bump node from 16-alpine to 17-alpine in /client
Bumps node from 16-alpine to 17-alpine.

---
updated-dependencies:
- dependency-name: node
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 07:02:34 +00:00
0273738d7a Bump node from 16-alpine to 17-alpine in /server
Bumps node from 16-alpine to 17-alpine.

---
updated-dependencies:
- dependency-name: node
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 07:02:34 +00:00
322df25ecc Merge pull request #769 from modem7/dependabot-changes
Dependabot
2022-03-24 08:02:15 +01:00
ab3867d9a8 Merge pull request #768 from modem7/DockerChanges
Docker changes
2022-03-24 08:01:07 +01:00
9bf8ec88f4 Merge pull request #767 from modem7/readme-update
Update README
2022-03-24 07:58:58 +01:00
685f4d37a6 Merge pull request #766 from modem7/image-size
Reduced image sizes
2022-03-24 07:58:19 +01:00
f3b3fe8ac9 Update dependabot.yml
added gradle
2022-03-24 00:47:21 +00:00
d5fa49172a Create dependabot.yml
This will assist with version updates and vulnerability scans.

Dependabot scans will need to be enabled in the repo itself under https://github.com/AmruthPillai/Reactive-Resume/settings/security_analysis

It would also be worthwhile pairing this with Snyk (https://app.snyk.io/) for vulnerability monitoring.
2022-03-23 23:04:47 +00:00
b8303b9977 Update .env.example
Updated env variables to be clearer about which service requires it.
2022-03-23 23:03:29 +00:00
16d06c6356 Update README.md
As the logo is already in the repo, might as well utilise it.

Added Docker build status
2022-03-23 22:54:33 +00:00
79ddd887d9 Docker changes
Added:
Healthchecks
Changed Postgres to Alpine + pinned
Pinned Traefik Version
Made Env Vars easier to see + change/reference for those using their own env file.
2022-03-23 22:52:30 +00:00
c394bc6725 Reduced image sizes
This reduces images size from a total of 9.22mb to 6.11mb.
2022-03-23 22:41:24 +00:00
9e6d7630f4 New translations landing.json (Portuguese) 2022-03-23 23:06:12 +01:00
e2fbdd3c2f New translations modals.json (Portuguese) 2022-03-23 21:57:14 +01:00
849171af8f New translations dashboard.json (Portuguese) 2022-03-23 21:01:36 +01:00
83 changed files with 1084 additions and 454 deletions

5
.devcontainer/Dockerfile Normal file
View File

@ -0,0 +1,5 @@
ARG VARIANT="16-bullseye"
FROM mcr.microsoft.com/vscode/devcontainers/javascript-node:0-${VARIANT}
RUN curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm

View File

@ -0,0 +1,27 @@
{
"name": "Node.js",
"build": {
"dockerfile": "Dockerfile",
"args": { "VARIANT": "16-bullseye" }
},
// Set *default* container specific settings.json values on container create.
"settings": {},
// Add the IDs of extensions you want installed when the container is created.
"extensions": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode", "lokalise.i18n-ally"],
// Use 'forwardPorts' to make a list of ports inside the container available locally.
"forwardPorts": [80, 5432],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "pnpm install",
// Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
"remoteUser": "node",
"features": {
"docker-from-docker": "latest"
}
}

View File

@ -1,33 +1,26 @@
# App
# Shared
TZ=UTC
PUBLIC_URL=http://localhost
PUBLIC_SERVER_URL=http://localhost/api
PUBLIC_GOOGLE_CLIENT_ID=
# Server
SECRET_KEY=
# URLs
PUBLIC_URL=http://<SERVER-IP>
PUBLIC_SERVER_URL=http://<SERVER-IP>/api
# Database
POSTGRES_HOST=localhost
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_USERNAME=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DATABASE=postgres
POSTGRES_SSL_CERT=
# Auth
JWT_SECRET=
JWT_EXPIRY_TIME=604800
# Google
PUBLIC_GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_API_KEY=
# SendGrid (Optional)
SENDGRID_API_KEY=
SENDGRID_FORGOT_PASSWORD_TEMPLATE_ID=
SENDGRID_FROM_NAME=
SENDGRID_FROM_EMAIL=
# Flags (Optional)
# Flags
PUBLIC_FLAG_DISABLE_SIGNUPS=false

22
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,22 @@
version: 2
updates:
- package-ecosystem: 'docker'
directory: '/server'
schedule:
interval: 'weekly'
- package-ecosystem: 'docker'
directory: '/client'
schedule:
interval: 'weekly'
- package-ecosystem: 'gradle'
directory: '/app'
schedule:
interval: 'weekly'
- package-ecosystem: 'github-actions'
directory: '/'
schedule:
interval: 'weekly'

View File

@ -13,7 +13,7 @@ jobs:
steps:
- name: Install DigitalOcean CLI
uses: digitalocean/action-doctl@v2.1.0
uses: digitalocean/action-doctl@v2.1.1
with:
token: ${{ secrets.DIGITALOCEAN_TOKEN }}

View File

@ -24,7 +24,7 @@ jobs:
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and Push Client Image
uses: docker/build-push-action@v2.9.0
uses: docker/build-push-action@v2.10.0
with:
context: .
push: true
@ -52,7 +52,7 @@ jobs:
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and Push Server Image
uses: docker/build-push-action@v2.9.0
uses: docker/build-push-action@v2.10.0
with:
context: .
push: true
@ -81,7 +81,7 @@ jobs:
password: ${{ secrets.GH_TOKEN }}
- name: Build and Push Client Image
uses: docker/build-push-action@v2.9.0
uses: docker/build-push-action@v2.10.0
with:
context: .
push: true
@ -110,7 +110,7 @@ jobs:
password: ${{ secrets.GH_TOKEN }}
- name: Build and Push Server Image
uses: docker/build-push-action@v2.9.0
uses: docker/build-push-action@v2.10.0
with:
context: .
push: true

View File

@ -2,6 +2,15 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
### [3.2.11](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.10...v3.2.11) (2022-03-28)
### [3.2.10](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.9...v3.2.10) (2022-03-24)
### Features
* **i18n:** add portuguese (pt) language to i18n locales ([7f1c82c](https://github.com/AmruthPillai/Reactive-Resume/commit/7f1c82cd9185ebb44486a16132eb44d5c2fb747a))
### [3.2.9](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.2.8...v3.2.9) (2022-03-21)

View File

@ -1,4 +1,4 @@
<img src="https://i.imgur.com/pc8Ingg.png" alt="Reactive Resume" width="256px" height="256px" />
<img src="https://github.com/AmruthPillai/Reactive-Resume/blob/main/docs/static/logo.svg" alt="Reactive Resume" width="256px" height="256px" />
# Reactive Resume
@ -6,6 +6,7 @@
[![Project License](https://img.shields.io/github/license/AmruthPillai/Reactive-Resume?style=flat-square)](https://github.com/AmruthPillai/Reactive-Resume/blob/main/LICENSE)
[![Crowdin](https://badges.crowdin.net/reactive-resume/localized.svg)](https://translate.rxresu.me)
[![Docker Pulls](https://img.shields.io/docker/pulls/amruthpillai/reactive-resume?style=flat-square)](https://hub.docker.com/r/amruthpillai/reactive-resume)
![GitHub Workflow Status](https://img.shields.io/github/workflow/status/AmruthPillai/Reactive-Resume/Build%20and%20Push%20Docker%20Image?label=docker%20build&style=flat-square)
[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FAmruthPillai%2FReactive-Resume.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FAmruthPillai%2FReactive-Resume?ref=badge_shield)
## [Go to App](https://rxresu.me) | [Docs](https://docs.rxresu.me)
@ -49,6 +50,7 @@ You have complete control over what goes into your resume, how it looks, what co
- Kannada (ಕನ್ನಡ)
- Malayalam (മലയാളം)
- Polish (Polski)
- Portuguese (Português)
- Russian (русский)
- Spanish (Español)
- Tamil (தமிழ்)

View File

@ -1,4 +1,4 @@
FROM node:16-alpine as dependencies
FROM node:17-alpine as dependencies
RUN apk add --no-cache curl g++ make python3 \
&& curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
@ -11,7 +11,7 @@ COPY ./client/package.json ./client/package.json
RUN pnpm install --frozen-lockfile
FROM node:16-alpine as builder
FROM node:17-alpine as builder
RUN apk add --no-cache curl g++ make python3 \
&& curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
@ -27,7 +27,7 @@ COPY --from=dependencies /app/client/node_modules ./client/node_modules
RUN pnpm run build:schema
RUN pnpm run build:client
FROM node:16-alpine as production
FROM node:17-alpine as production
WORKDIR /app
@ -49,4 +49,7 @@ EXPOSE 3000
ENV PORT 3000
HEALTHCHECK --interval=30s --timeout=20s --retries=3 --start-period=15s \
CMD curl -fSs 127.0.0.1:3000 || exit 1
CMD [ "pnpm", "run", "start:client" ]

View File

@ -1,10 +1,16 @@
.content {
@apply rounded p-6 text-sm shadow lg:w-1/2 xl:w-2/5;
@apply rounded px-6 text-sm shadow lg:w-1/2 xl:w-2/5;
@apply absolute inset-4 sm:inset-x-4 sm:inset-y-auto lg:inset-auto;
@apply overflow-scroll bg-neutral-50 dark:bg-neutral-900 lg:overflow-auto;
@apply max-h-[90vh] min-h-fit;
&::-webkit-scrollbar {
display: none;
}
}
.header {
@apply sticky top-0 left-0 right-0 z-50 pt-6 bg-neutral-50 dark:bg-neutral-900;
@apply flex items-center justify-between;
@apply w-full border-b pb-5 dark:border-white/10;
@ -27,6 +33,7 @@
}
.footer {
@apply sticky bottom-0 left-0 right-0 z-50 pb-6 bg-neutral-50 dark:bg-neutral-900;
@apply flex items-center justify-end gap-x-4;
@apply w-full border-t pt-5 dark:border-white/10;
}

View File

@ -18,6 +18,7 @@ export const languages: Language[] = [
{ code: 'ml', name: 'Malayalam', localName: 'മലയാളം' },
{ code: 'nl', name: 'Dutch', localName: 'Nederlands' },
{ code: 'pl', name: 'Polish', localName: 'Polski' },
{ code: 'pt', name: 'Portuguese', localName: 'Português' },
{ code: 'ru', name: 'Russian', localName: 'русский' },
{ code: 'ta', name: 'Tamil', localName: 'தமிழ்' },
{ code: 'tr', name: 'Turkish', localName: 'Türkçe' },

View File

@ -17,6 +17,7 @@ const i18nConfig = {
'ml',
'nl',
'pl',
'pt',
'ru',
'ta',
'tr',

View File

@ -15,8 +15,8 @@
"@hookform/resolvers": "2.8.8",
"@monaco-editor/react": "^4.3.1",
"@mui/icons-material": "^5.5.1",
"@mui/lab": "^5.0.0-alpha.73",
"@mui/material": "^5.5.1",
"@mui/lab": "^5.0.0-alpha.74",
"@mui/material": "^5.5.2",
"@reduxjs/toolkit": "^1.8.0",
"axios": "^0.26.1",
"clsx": "^1.1.1",
@ -36,7 +36,7 @@
"react-dnd-html5-backend": "^15.1.2",
"react-dom": ">=17",
"react-google-login": "^5.2.2",
"react-hook-form": "^7.28.0",
"react-hook-form": "^7.28.1",
"react-hot-toast": "2.2.0",
"react-hotkeys-hook": "^3.4.4",
"react-icons": "^4.3.1",
@ -53,23 +53,23 @@
"webfontloader": "^1.6.28"
},
"devDependencies": {
"@babel/core": "^7.17.7",
"@babel/core": "^7.17.8",
"@reactive-resume/schema": "workspace:*",
"@tailwindcss/typography": "^0.5.2",
"@types/downloadjs": "^1.4.3",
"@types/lodash": "^4.14.180",
"@types/node": "17.0.21",
"@types/react": "17.0.40",
"@types/node": "17.0.23",
"@types/react": "17.0.42",
"@types/react-beautiful-dnd": "^13.1.2",
"@types/react-redux": "^7.1.23",
"@types/tailwindcss": "^3.0.9",
"@types/uuid": "^8.3.4",
"@types/webfontloader": "^1.6.34",
"autoprefixer": "^10.4.3",
"autoprefixer": "^10.4.4",
"eslint": "^8.11.0",
"eslint-config-next": "12.1.0",
"next-sitemap": "^2.5.10",
"postcss": "^8.4.11",
"next-sitemap": "^2.5.13",
"postcss": "^8.4.12",
"prettier": "^2.6.0",
"sass": "^1.49.9",
"tailwindcss": "^3.0.23",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 265 KiB

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 215 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 KiB

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 KiB

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 181 KiB

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 274 KiB

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 KiB

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 KiB

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 314 KiB

After

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 KiB

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 319 KiB

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 329 KiB

After

Width:  |  Height:  |  Size: 202 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 217 KiB

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 323 KiB

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 267 KiB

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 KiB

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 255 KiB

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 KiB

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 279 KiB

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 165 KiB

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 382 KiB

After

Width:  |  Height:  |  Size: 240 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 KiB

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 163 KiB

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 311 KiB

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 KiB

After

Width:  |  Height:  |  Size: 103 KiB

View File

@ -0,0 +1,358 @@
{
"common": {
"actions": {
"add": "Adicionar {{token}}",
"delete": "Remover {{token}}",
"edit": "Editar {{token}}"
},
"columns": {
"heading": "Colunas",
"tooltip": "Alterar o número de colunas"
},
"form": {
"date": {
"label": "Data"
},
"description": {
"label": "Descrição"
},
"email": {
"label": "Endereço de e-mail"
},
"end-date": {
"help-text": "Deixe este campo em branco se for até o presente",
"label": "Data de Término"
},
"keywords": {
"label": "Palavras-chave"
},
"level": {
"label": "Nível"
},
"levelNum": {
"label": "Nível (Número)"
},
"name": {
"label": "Nome"
},
"phone": {
"label": "Número de telefone"
},
"position": {
"label": "Cargo"
},
"start-date": {
"label": "Data de Início"
},
"subtitle": {
"label": "Subtítulo"
},
"summary": {
"label": "Resumo"
},
"title": {
"label": "Título"
},
"url": {
"label": "Site"
}
},
"glossary": {
"page": "Página"
},
"list": {
"actions": {
"delete": "Excluir",
"duplicate": "Duplicar",
"edit": "Editar"
},
"empty-text": "Essa lista está vazia."
},
"tooltip": {
"delete-item": "Tem certeza de que deseja excluir este item? Esta ação é irreversível.",
"delete-section": "Excluir Seção",
"rename-section": "Renomear Seção",
"toggle-visibility": "Alternar Visibilidade"
}
},
"controller": {
"tooltip": {
"center-artboard": "Prancheta central",
"copy-link": "Copiar link do currículo",
"export-pdf": "Exportar PDF",
"toggle-orientation": "Alternar orientação da página",
"toggle-page-break-line": "Alternar linha de quebra de página",
"toggle-sidebars": "Alternar barra lateral",
"zoom-in": "Mais Zoom",
"zoom-out": "Menos Zoom"
}
},
"header": {
"menu": {
"delete": "Deletar",
"duplicate": "Duplicar",
"rename": "Renomear",
"share-link": "Compartilhar Link",
"tooltips": {
"delete": "Tem certeza de que deseja excluir este currículo? Esta ação é irreversível.",
"share-link": "Você precisa alterar a visibilidade do seu currículo para público para torná-lo visível para outras pessoas."
}
}
},
"leftSidebar": {
"sections": {
"awards": {
"form": {
"awarder": {
"label": "Concedente"
}
}
},
"basics": {
"actions": {
"photo-filters": "Filtros da foto"
},
"heading": "Informações básicas",
"headline": {
"label": "Título"
},
"name": {
"label": "Nome Completo"
},
"photo-filters": {
"effects": {
"border": {
"label": "Borda"
},
"grayscale": {
"label": "Escala de cinza"
},
"heading": "Efeitos"
},
"shape": {
"heading": "Forma"
},
"size": {
"heading": "Tamanho (em px)"
}
},
"photo-upload": {
"tooltip": {
"remove": "Excluir Foto",
"upload": "Enviar Foto"
}
}
},
"certifications": {
"form": {
"issuer": {
"label": "Emissor"
}
}
},
"education": {
"form": {
"area-study": {
"label": "Área de estudo"
},
"courses": {
"label": "Cursos"
},
"degree": {
"label": "Grau"
},
"grade": {
"label": "Nota"
},
"institution": {
"label": "Instituição"
}
}
},
"location": {
"address": {
"label": "Endereço"
},
"city": {
"label": "Cidade"
},
"country": {
"label": "País"
},
"heading": "Localização",
"postal-code": {
"label": "Código Postal"
},
"region": {
"label": "Região"
}
},
"profiles": {
"form": {
"network": {
"label": "Rede Social"
},
"username": {
"label": "Nome de Usuário"
}
},
"heading": "Perfis",
"heading_one": "Perfil"
},
"publications": {
"form": {
"publisher": {
"label": "Editor"
}
}
},
"references": {
"form": {
"relationship": {
"label": "Relação"
}
}
},
"section": {
"heading": "Seção"
},
"volunteer": {
"form": {
"organization": {
"label": "Organização"
}
}
}
}
},
"rightSidebar": {
"sections": {
"css": {
"heading": "CSS Personalizado"
},
"export": {
"heading": "Exportar",
"json": {
"primary": "JSON",
"secondary": "Baixe uma versão JSON do seu currículo que poderá ser importada de volta ao Reactive Resume."
},
"pdf": {
"loading": {
"primary": "Gerando PDF",
"secondary": "Por favor aguarde enquanto o seu PDF é gerado, isso pode levar até 15 segundos."
},
"normal": {
"primary": "PDF",
"secondary": "Baixe um PDF do seu currículo que você pode imprimir e enviar para o emprego dos seus sonhos. Este arquivo não pode ser importado de volta para edição posterior."
}
}
},
"layout": {
"heading": "Layout",
"tooltip": {
"reset-layout": "Redefinir Layout"
}
},
"links": {
"bugs-features": {
"body": "Alguma coisa te impede de fazer um currículo? Ou você tem uma ideia incrível para adicionar? Crie uma issue no GitHub para começar.",
"button": "GitHub Issues",
"heading": "Bugs? Sugestões de recursos?"
},
"donate": {
"body": "Se você gostou de usar o Reactive Resume, considere doar o máximo possível para manter o aplicativo em funcionamento, sem anúncios e gratuito para sempre.",
"button": "Pague-me um café",
"heading": "Faça uma doação ao Reactive Resume"
},
"github": "Código Fonte",
"heading": "Links"
},
"settings": {
"global": {
"date": {
"primary": "Data",
"secondary": "Formato de data usado em todo o aplicativo"
},
"heading": "Global",
"language": {
"primary": "Idioma",
"secondary": "Idioma de exibição usado em todo o aplicativo"
},
"theme": {
"primary": "Tema"
}
},
"heading": "Configurações",
"page": {
"break-line": {
"primary": "Linha de quebra",
"secondary": "Mostrar uma linha em todas as páginas para marcar a altura de uma página A4"
},
"heading": "Página",
"orientation": {
"disabled": "Não tem efeito quando há somente uma página",
"primary": "Orientação",
"secondary": "Se as páginas devem ser exibidas horizontalmente ou verticalmente"
}
},
"resume": {
"heading": "Currículo",
"reset": {
"primary": "Limpar Tudo",
"secondary": "Cometeu muitos erros? Clique aqui para redefinir todas as alterações e começar do zero. Tenha cuidado, esta ação não pode ser revertida."
},
"sample": {
"primary": "Carregar dados de exemplo",
"secondary": "Não sabe por onde começar? Clique aqui para carregar alguns dados de exemplo para ver como é um currículo completo."
}
}
},
"sharing": {
"heading": "Compartilhamento",
"short-url": {
"label": "Prefiro um URL curto"
},
"visibility": {
"subtitle": "Permitir que qualquer um com um link veja seu currículo",
"title": "Público"
}
},
"templates": {
"heading": "Modelos"
},
"theme": {
"form": {
"background": {
"label": "Plano de fundo"
},
"primary": {
"label": "Primário"
},
"text": {
"label": "Texto"
}
},
"heading": "Tema"
},
"typography": {
"form": {
"font-family": {
"label": "Família da fonte"
},
"font-size": {
"label": "Tamanho da fonte"
}
},
"heading": "Tipografia",
"widgets": {
"body": {
"label": "Corpo"
},
"headings": {
"label": "Cabeçalho"
}
}
}
}
}
}

View File

@ -0,0 +1,25 @@
{
"create-resume": {
"subtitle": "Começar do zero",
"title": "Criar Novo Currículo"
},
"import-external": {
"subtitle": "LinkedIn, currículo em JSON, Reactive Resume",
"title": "Importar de fontes externas"
},
"resume": {
"menu": {
"delete": "Deletar",
"duplicate": "Duplicar",
"open": "Abrir",
"rename": "Renomear",
"share-link": "Compartilhar Link",
"tooltips": {
"delete": "Tem certeza de que deseja excluir este currículo? Esta ação é irreversível.",
"share-link": "Você precisa alterar a visibilidade do seu currículo para público para torná-lo visível para outras pessoas."
}
},
"timestamp": "Última atualização há {{timestamp}}"
},
"title": "Painel de Controle"
}

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "Ir para o App",
"login": "Entrar",
"logout": "Sair",
"register": "Registrar-se"
},
"features": {
"heading": "Características",
"list": {
"ads": "Sem publicidade",
"export": "Exporte seu currículo para o formato JSON ou PDF",
"free": "Gratuito, para sempre",
"import": "Importe dados do LinkedIn, ou de um currículo em JSON",
"languages": "Acessível em vários idiomas",
"more": "E muito mais recursos interessantes, <1>leia tudo sobre isso aqui</1>",
"tracking": "Sem rastreamento de usuários"
}
},
"links": {
"heading": "Links",
"links": {
"donate": "Doar",
"github": "Código Fonte",
"privacy": "Política de privacidade",
"service": "Termos de serviço"
}
},
"screenshots": {
"heading": "Capturas de tela"
},
"testimonials": {
"heading": "Depoimentos",
"body": "Boa ou ruim, eu adoraria saber sua opinião sobre o Reactive Resume e como tem sido a experiência para você.<br/>Aqui estão algumas das mensagens enviadas por usuários em todo o mundo.",
"contact": "Você pode entrar em contato comigo pelo <1>meu e-mail</1> ou por meio do formulário de contato no <3>meu site</3>."
},
"summary": {
"body": "O Reactive Resume é um construtor de currículos gratuito e de código aberto criado para tornar as tarefas mundanas de criar, atualizar e compartilhar seu currículo tão fáceis quanto 1, 2, 3. Com este aplicativo, você pode criar vários currículos, compartilhá-los com recrutadores ou amigos através de um link exclusivo e imprimi-los como PDF, tudo de graça, sem anúncios, sem rastreamento, sem perder a integridade e privacidade dos seus dados.",
"heading": "Resumo"
}
}

View File

@ -0,0 +1,136 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "Enviar e-mail de redefinição de senha"
},
"body": "Basta inserir o endereço de e-mail associado à conta que você gostaria de recuperar.",
"form": {
"email": {
"label": "Endereço de e-mail"
}
},
"heading": "Esqueceu sua senha?",
"help-text": "Se a conta existir, você receberá um e-mail com um link para redefinir sua senha."
},
"login": {
"actions": {
"login": "Entrar",
"google": "Entrar com o Google"
},
"body": "Por favor, digite seu nome de usuário e senha associados à sua conta para fazer login e acessar, gerenciar e compartilhar seus currículos.",
"form": {
"password": {
"label": "Senha"
},
"username": {
"help-text": "Você também pode inserir seu endereço de e-mail",
"label": "Nome de Usuário"
}
},
"heading": "Acesse a sua conta",
"recover-text": "Caso tenha esquecido sua senha, você pode <1>recuperar sua conta</1> aqui.",
"register-text": "Se não tiver, você pode <1>criar uma conta</1> aqui."
},
"register": {
"actions": {
"register": "Registre-se",
"google": "Registre-se com o Google"
},
"body": "Por favor, insira suas informações pessoais para criar uma conta.",
"form": {
"confirm-password": {
"label": "Confirme a senha"
},
"email": {
"label": "Endereço de e-mail"
},
"name": {
"label": "Nome completo"
},
"password": {
"label": "Senha"
},
"username": {
"label": "Nome de usuário"
}
},
"heading": "Criar uma conta",
"loginText": "Se já tem uma conta, você pode <1>entrar aqui</1>."
},
"reset-password": {
"actions": {
"set-password": "Definir nova senha"
},
"body": "Digite uma nova senha para sua conta.",
"form": {
"confirm-password": {
"label": "Confirme a senha"
},
"password": {
"label": "Senha"
}
},
"heading": "Redefinir sua senha"
}
},
"dashboard": {
"create-resume": {
"actions": {
"create-resume": "Criar Currículo"
},
"body": "Comece a construir seu currículo dando-lhe um nome. Pode ser em referência ao cargo para o qual você está se candidatando ou apenas ao seu lanche favorito.",
"form": {
"name": {
"label": "Nome"
},
"public": {
"label": "É publicamente acessível?"
},
"slug": {
"label": "Endereço amigável"
}
},
"heading": "Criar um novo currículo"
},
"import-external": {
"heading": "Importar de fontes externas",
"json-resume": {
"actions": {
"upload-json": "Carregar JSON"
},
"body": "Se você possui um <1>currículo JSON válido</1>, poderá usá-lo para acelerar seu desenvolvimento no Reactive Resume. Clique no botão abaixo e carregue um arquivo JSON válido para começar.",
"heading": "Importar de um currículo JSON"
},
"linkedin": {
"actions": {
"upload-archive": "Carregar arquivo ZIP"
},
"body": "Você pode economizar tempo exportando seus dados do LinkedIn e usando-os para preencher automaticamente os campos no Reactive Resume. Vá para a seção <1>Privacidade dos Dados</1> no LinkedIn e solicite um arquivo com seus dados. Assim que estiver disponível, faça upload do arquivo ZIP abaixo.",
"heading": "Importar do LinkedIn"
},
"reactive-resume": {
"actions": {
"upload-json": "Carregar JSON",
"upload-json-v2": "Carregar JSON do v2"
},
"body": "Se você possuir um JSON que foi exportado com a versão atual do Reactive Resume, poderá importá-lo de volta aqui para obter uma versão editável novamente.",
"heading": "Importe do Reactive Resume"
}
},
"rename-resume": {
"actions": {
"rename-resume": "Renomear currículo"
},
"form": {
"name": {
"label": "Nome"
},
"slug": {
"label": "Endereço amigável"
}
},
"heading": "Renomear o seu currículo"
}
}
}

View File

@ -23,6 +23,7 @@ const DateWrapper: React.FC = ({ children }) => {
require('dayjs/locale/ml');
require('dayjs/locale/nl');
require('dayjs/locale/pl');
require('dayjs/locale/pt');
require('dayjs/locale/ru');
require('dayjs/locale/ta');
require('dayjs/locale/tr');

View File

@ -1,64 +0,0 @@
version: '3'
services:
postgres:
image: postgres
container_name: postgres
ports:
- 5432:5432
env_file: .env
volumes:
- ./scripts/database/initialize.sql:/docker-entrypoint-initdb.d/initialize.sql
- pgdata:/var/lib/postgresql/data
traefik:
image: traefik
container_name: traefik
command:
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --entrypoints.web.address=:80
ports:
- 80:80
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
server:
build:
context: .
dockerfile: server/Dockerfile
container_name: server
env_file: .env
environment:
- PUBLIC_URL=http://localhost
- POSTGRES_HOST=postgres
- POSTGRES_DATABASE=reactive_resume
depends_on:
- traefik
- postgres
labels:
- traefik.enable=true
- traefik.http.routers.server.entrypoints=web
- traefik.http.routers.server.rule=Host(`localhost`) && PathPrefix(`/api/`)
- traefik.http.routers.server.middlewares=server-stripprefix
- traefik.http.middlewares.server-stripprefix.stripprefix.prefixes=/api
- traefik.http.middlewares.server-stripprefix.stripprefix.forceslash=true
client:
build:
context: .
dockerfile: client/Dockerfile
container_name: client
env_file: .env
environment:
- PUBLIC_SERVER_URL=http://localhost/api
depends_on:
- traefik
- server
labels:
- traefik.enable=true
- traefik.http.routers.client.rule=Host(`localhost`)
- traefik.http.routers.client.entrypoints=web
volumes:
pgdata:

View File

@ -1,17 +1,51 @@
version: '3'
x-env-shared: &env-shared
environment:
- TZ=UTC
- PUBLIC_URL=http://localhost
- PUBLIC_SERVER_URL=http://localhost/api
- PUBLIC_GOOGLE_CLIENT_ID=
x-env-server: &env-server
environment:
- SECRET_KEY=
- POSTGRES_HOST=postgres
- POSTGRES_PORT=5432
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DATABASE=postgres
- POSTGRES_SSL_CERT=
- JWT_SECRET=
- JWT_EXPIRY_TIME=604800
- PUBLIC_GOOGLE_CLIENT_ID=
- GOOGLE_CLIENT_SECRET=
- GOOGLE_API_KEY=
- SENDGRID_API_KEY=
- SENDGRID_FORGOT_PASSWORD_TEMPLATE_ID=
- SENDGRID_FROM_NAME=
- SENDGRID_FROM_EMAIL=
x-env-flags: &env-flags
environment:
- PUBLIC_FLAG_DISABLE_SIGNUPS=false
services:
postgres:
image: postgres
image: postgres:14.2-alpine
container_name: postgres
ports:
- 5432:5432
env_file: .env
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U postgres" ]
start_period: 15s
interval: 30s
timeout: 30s
retries: 3
restart: always
traefik:
image: traefik
image: traefik:rocamadour
container_name: traefik
command:
- --providers.docker=true
@ -25,31 +59,33 @@ services:
server:
image: amruthpillai/reactive-resume:server-latest
container_name: server
env_file: .env
environment:
- POSTGRES_HOST=postgres
<<: *env-shared
<<: *env-server
depends_on:
- traefik
- postgres
labels:
- traefik.enable=true
- traefik.http.routers.server.entrypoints=web
- traefik.http.routers.server.rule=Host(`<SERVER-IP>`) && PathPrefix(`/api/`)
- traefik.http.routers.server.rule=Host(`localhost`) && PathPrefix(`/api/`)
- traefik.http.routers.server.middlewares=server-stripprefix
- traefik.http.middlewares.server-stripprefix.stripprefix.prefixes=/api
- traefik.http.middlewares.server-stripprefix.stripprefix.forceslash=true
restart: always
client:
image: amruthpillai/reactive-resume:client-latest
container_name: client
env_file: .env
<<: *env-shared
<<: *env-flags
depends_on:
- traefik
- server
labels:
- traefik.enable=true
- traefik.http.routers.client.rule=Host(`<SERVER-IP>`)
- traefik.http.routers.client.rule=Host(`localhost`)
- traefik.http.routers.client.entrypoints=web
restart: always
volumes:
pgdata:

View File

@ -57,6 +57,7 @@ You have complete control over what goes into your resume, how it looks, what co
- Kannada (ಕನ್ನಡ)
- Malayalam (മലയാളം)
- Polish (Polski)
- Portuguese (Português)
- Russian (русский)
- Spanish (Español)
- Tamil (தமிழ்)

View File

@ -65,7 +65,7 @@ This URL is used when export PDF functionality is used within the app and has to
**Default Value:** `5432`
**Description:** Port of the PostgreSQL Server
### `POSTGRES_USERNAME`
### `POSTGRES_USER`
**Required**: `yes`
**Default Value:** `postgres`

View File

@ -36,6 +36,6 @@
]
},
"devDependencies": {
"@types/react": "17.0.40"
"@types/react": "17.0.42"
}
}

View File

@ -1,6 +1,6 @@
{
"name": "reactive-resume",
"version": "3.2.9",
"version": "3.2.11",
"private": true,
"workspaces": [
"schema",
@ -38,8 +38,8 @@
"env-cmd": "^10.1.0"
},
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^5.15.0",
"@typescript-eslint/parser": "^5.15.0",
"@typescript-eslint/eslint-plugin": "^5.16.0",
"@typescript-eslint/parser": "^5.16.0",
"cz-conventional-changelog": "^3.3.0",
"eslint": "^8.11.0",
"eslint-config-prettier": "^8.5.0",

668
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
FROM node:16-alpine as dependencies
FROM node:17-alpine as dependencies
RUN apk add --no-cache g++ curl make python3 \
&& curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
@ -11,7 +11,7 @@ COPY ./server/package.json ./server/package.json
RUN pnpm install --frozen-lockfile
FROM node:16-alpine as builder
FROM node:17-alpine as builder
RUN apk add --no-cache g++ curl make python3 \
&& curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
@ -47,4 +47,7 @@ EXPOSE 3100
ENV PORT 3100
HEALTHCHECK --interval=30s --timeout=20s --retries=3 --start-period=15s \
CMD curl -fSs localhost:3100/health || exit 1
CMD [ "pnpm", "run", "start:server" ]

View File

@ -11,16 +11,16 @@
},
"dependencies": {
"@nestjs/axios": "^0.0.7",
"@nestjs/common": "^8.4.1",
"@nestjs/config": "^1.2.0",
"@nestjs/core": "^8.4.1",
"@nestjs/common": "^8.4.2",
"@nestjs/config": "^2.0.0",
"@nestjs/core": "^8.4.2",
"@nestjs/jwt": "^8.0.0",
"@nestjs/mapped-types": "^1.0.1",
"@nestjs/passport": "^8.2.1",
"@nestjs/platform-express": "^8.4.1",
"@nestjs/platform-express": "^8.4.2",
"@nestjs/schedule": "^1.0.2",
"@nestjs/serve-static": "^2.2.2",
"@nestjs/terminus": "^8.0.4",
"@nestjs/terminus": "^8.0.6",
"@nestjs/typeorm": "^8.0.3",
"@sendgrid/mail": "^7.6.2",
"@types/passport": "^1.0.7",
@ -31,7 +31,7 @@
"cookie-parser": "^1.4.6",
"csvtojson": "^2.0.10",
"dayjs": "^1.11.0",
"googleapis": "^97.0.0",
"googleapis": "^98.0.0",
"joi": "^17.6.0",
"lodash": "^4.17.21",
"multer": "^1.4.4",
@ -42,7 +42,7 @@
"passport-local": "^1.0.0",
"pdf-lib": "^1.17.1",
"pg": "^8.7.3",
"playwright-chromium": "^1.20.0",
"playwright-chromium": "^1.20.1",
"reflect-metadata": "^0.1.13",
"rimraf": "^3.0.2",
"rxjs": "^7.5.5",
@ -50,20 +50,20 @@
"uuid": "^8.3.2"
},
"devDependencies": {
"@nestjs/cli": "^8.2.3",
"@nestjs/cli": "^8.2.4",
"@nestjs/schematics": "^8.0.8",
"@reactive-resume/schema": "workspace:*",
"@types/bcrypt": "^5.0.0",
"@types/cookie-parser": "^1.4.2",
"@types/express": "^4.17.13",
"@types/multer": "^1.4.7",
"@types/node": "^17.0.21",
"@types/node": "^17.0.23",
"eslint": "^8.11.0",
"prettier": "^2.6.0",
"source-map-support": "^0.5.21",
"ts-loader": "^9.2.8",
"ts-node": "^10.7.0",
"tsconfig-paths": "^3.14.0",
"tsconfig-paths": "^3.14.1",
"typescript": "<4.6.0",
"webpack": "^5.70.0"
}

View File

@ -3,6 +3,7 @@ import { ConfigService } from '@nestjs/config';
import { JwtService } from '@nestjs/jwt';
import { SchedulerRegistry } from '@nestjs/schedule';
import bcrypt from 'bcrypt';
import { randomInt } from 'crypto';
import { google } from 'googleapis';
import { PostgresErrorCode } from '@/database/errorCodes.enum';
@ -23,7 +24,7 @@ export class AuthService {
) {}
async register(registerDto: RegisterDto) {
const hashedPassword = await bcrypt.hash(registerDto.password, 10);
const hashedPassword = await bcrypt.hash(registerDto.password, randomInt(8, 12));
try {
const createdUser = await this.usersService.create({
@ -74,7 +75,7 @@ export class AuthService {
async resetPassword(resetPasswordDto: ResetPasswordDto) {
const user = await this.usersService.findByResetToken(resetPasswordDto.resetToken);
const hashedPassword = await bcrypt.hash(resetPasswordDto.password, 10);
const hashedPassword = await bcrypt.hash(resetPasswordDto.password, randomInt(8, 12));
await this.usersService.update(user.id, {
password: hashedPassword,

View File

@ -21,7 +21,7 @@ const validationSchema = Joi.object({
// Database
POSTGRES_HOST: Joi.string().required(),
POSTGRES_PORT: Joi.number().default(5432),
POSTGRES_USERNAME: Joi.string().required(),
POSTGRES_USER: Joi.string().required(),
POSTGRES_PASSWORD: Joi.string().required(),
POSTGRES_DATABASE: Joi.string().required(),
POSTGRES_SSL_CERT: Joi.string().allow(''),

View File

@ -3,7 +3,7 @@ import { registerAs } from '@nestjs/config';
export default registerAs('postgres', () => ({
host: process.env.POSTGRES_HOST,
port: parseInt(process.env.POSTGRES_PORT, 10) || 5432,
username: process.env.POSTGRES_USERNAME,
username: process.env.POSTGRES_USER,
password: process.env.POSTGRES_PASSWORD,
database: process.env.POSTGRES_DATABASE,
certificate: process.env.POSTGRES_SSL_CERT,