Compare commits

..

68 Commits

Author SHA1 Message Date
528ac84d3b chore(release): 3.1.1 2022-03-12 15:20:01 +01:00
b515fc36e7 feat(client): add product hunt announcement banner 2022-03-12 15:19:19 +01:00
d7268423df chore(release): 3.1.0 2022-03-12 13:01:40 +01:00
bf167f81a3 feat(client): add "spanish (es)" language to i18n locales 2022-03-12 13:01:16 +01:00
9e2f22d878 Merge pull request #654 from AmruthPillai/i18n_main
New Crowdin updates
2022-03-12 12:58:17 +01:00
084b909152 New translations common.json (Hindi) 2022-03-12 12:57:47 +01:00
3955afee8d New translations common.json (German) 2022-03-12 12:57:42 +01:00
f2dd2b5fcf New translations common.json (Kannada) 2022-03-12 12:57:37 +01:00
305561955a New translations common.json (Tamil) 2022-03-12 12:57:36 +01:00
cadbd3dfe8 New translations common.json (Spanish) 2022-03-12 12:57:34 +01:00
b5cd6c412b fix(client): show "present" string if end date is not entered, also add to i18n locales
fix #653
2022-03-12 12:49:11 +01:00
799f20823e fix(server): photo uploads not working, fix save location and returned url
fix #658
2022-03-12 12:37:04 +01:00
dda42b4c6b fix(client): remove hard-coded "keywords:" in certain templates
fix #650
2022-03-12 12:32:35 +01:00
f1c260736a New translations builder.json (Spanish) 2022-03-12 12:16:43 +01:00
b5a9b26f34 New translations builder.json (German) 2022-03-12 12:06:43 +01:00
918bd555c1 New translations builder.json (Spanish) 2022-03-12 12:06:42 +01:00
9ea2775790 New translations builder.json (Kannada) 2022-03-12 12:06:38 +01:00
9d83b997f5 New translations builder.json (Hindi) 2022-03-12 12:06:36 +01:00
228fb42ba5 New translations builder.json (Tamil) 2022-03-12 12:06:35 +01:00
01da1a06b8 feat(client): disable "Toggle Page Orientation" when there's only one page on the artboard
fix #655
2022-03-12 11:59:14 +01:00
82bf44daa2 feat(client): add mm/yyyy date option to date format options
fixes #656
2022-03-12 11:48:07 +01:00
2cbc582a12 feat(client): add sitemap generation to next app 2022-03-12 11:44:51 +01:00
2b9f016b95 New translations modals.json (Spanish) 2022-03-12 09:55:25 +01:00
358c97eb71 New translations dashboard.json (Spanish) 2022-03-12 09:55:19 +01:00
76ef513b46 New translations landing.json (Spanish) 2022-03-12 09:55:18 +01:00
497c6e01f1 New translations builder.json (Spanish) 2022-03-12 09:55:14 +01:00
e78c4a9adb New translations common.json (Spanish) 2022-03-12 09:55:12 +01:00
30d0151bdb Merge pull request #646 from AmruthPillai/i18n_main
New Crowdin updates
2022-03-11 20:28:50 +01:00
4dd94c3363 Update CHANGELOG.md 2022-03-11 20:27:25 +01:00
f711b089bc New translations landing.json (German) 2022-03-11 20:25:38 +01:00
01c1125153 New translations modals.json (German) 2022-03-11 20:25:37 +01:00
fa42d82416 New translations dashboard.json (German) 2022-03-11 20:25:32 +01:00
6322d4d105 New translations builder.json (German) 2022-03-11 20:25:28 +01:00
77467929c7 New translations common.json (German) 2022-03-11 20:25:27 +01:00
3a524f9c9c fix(lang): add hi, de to next-i18next 2022-03-11 20:21:35 +01:00
63f900870b chore(release): 3.0.0 2022-03-11 20:03:50 +01:00
32f78e85f7 Merge pull request #645 from AmruthPillai/feat/add-docs-workspace
Add docs powered by Docusaurus v2
2022-03-11 20:03:29 +01:00
1cc2232730 docs(docusaurus): update docs, add languages, ready to build 2022-03-11 20:02:16 +01:00
2ff6761630 Merge branch 'main' into feat/add-docs-workspace 2022-03-11 19:48:35 +01:00
5836e55a36 docs(readme): update readme with languages section, add license badge 2022-03-11 19:42:07 +01:00
ec98c14fbd Create LICENSE 2022-03-11 19:40:38 +01:00
78c1f5a380 Delete feature_request.md 2022-03-11 19:29:10 +01:00
808fa45124 Delete bug_report.md 2022-03-11 19:29:04 +01:00
2625ed4f3d Merge pull request #644 from AmruthPillai/i18n_main
New Crowdin updates
2022-03-11 19:27:42 +01:00
40085f8d78 New translations modals.json (Hindi) 2022-03-11 19:26:50 +01:00
f4e3be178c New translations landing.json (German) 2022-03-11 19:26:48 +01:00
601f61c59a New translations dashboard.json (Hindi) 2022-03-11 19:26:47 +01:00
59049e8f77 New translations modals.json (German) 2022-03-11 19:26:45 +01:00
798e77f693 New translations landing.json (Hindi) 2022-03-11 19:26:44 +01:00
78565079e7 New translations common.json (Hindi) 2022-03-11 19:26:42 +01:00
0bec4cff05 New translations dashboard.json (German) 2022-03-11 19:26:38 +01:00
26dc0069f9 New translations common.json (German) 2022-03-11 19:26:36 +01:00
90bb80b1e2 New translations builder.json (German) 2022-03-11 19:26:35 +01:00
61ed3ff018 New translations modals.json (Kannada) 2022-03-11 19:26:34 +01:00
36a12e82a2 New translations builder.json (Hindi) 2022-03-11 19:26:26 +01:00
a3cf1752cc Merge pull request #643 from AmruthPillai/i18n_main
New Crowdin updates
2022-03-11 19:06:12 +01:00
5b79e23564 Merge branch 'main' into i18n_main 2022-03-11 19:06:05 +01:00
300e4a790d New translations modals.json (Kannada) 2022-03-11 19:04:32 +01:00
ba4666b767 New translations modals.json (Tamil) 2022-03-11 19:04:31 +01:00
b283c6ee8f New translations landing.json (Tamil) 2022-03-11 19:04:29 +01:00
316eca35ef New translations common.json (Kannada) 2022-03-11 19:04:27 +01:00
16c18de964 New translations common.json (Tamil) 2022-03-11 19:04:26 +01:00
0c23af4be8 New translations builder.json (Kannada) 2022-03-11 19:04:25 +01:00
fe1b325fdf New translations builder.json (Tamil) 2022-03-11 19:04:24 +01:00
9395a4d578 docs(style): update CHANGELOG.md 2022-03-11 15:46:49 +01:00
ef3b2c5638 docs(source-code): add docs to build project from source, docker + local build 2022-03-09 14:05:40 +01:00
6c671f2dba Merge branch 'main' into feat/add-docs-workspace 2022-03-09 11:08:17 +01:00
dc4aa0b496 feat(docs): add docusaurus workspace, initial setup of docs 2022-03-08 23:54:00 +01:00
81 changed files with 8630 additions and 374 deletions

View File

@ -1,38 +0,0 @@
---
name: Bug report
about: Create a report to help improve
title: "[BUG] "
labels: bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.

View File

@ -1,20 +0,0 @@
---
name: Feature request
about: Suggest an idea for this project
title: "[FEATURE] "
labels: enhancement
assignees: AmruthPillai
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

View File

@ -1,11 +1,18 @@
# Build Artifacts
dist
.next
# Schema
schema/dist
# Server
server/dist
# Client
client/.next
client/public/__ENV.js
# IDEs
.vscode
# Project Metadata
LICENSE
README.md
CHANGELOG.md
@ -18,4 +25,8 @@ Dockerfile
docker-compose.yml
# Android App
/app
/app
# Docs
docs/build
docs/.docusaurus

View File

@ -2,13 +2,43 @@
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.0.0-beta.6](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.0.0-beta.5...v3.0.0-beta.6) (2022-03-11)
### [3.1.1](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.1.0...v3.1.1) (2022-03-12)
### Features
* **lang:** add language switcher on the landing page, in the footer ([8bc7d25](https://github.com/AmruthPillai/Reactive-Resume/commit/8bc7d2599ef6af7a07bfbe886c43844152b0d9f7))
* **client:** add product hunt announcement banner ([b515fc3](https://github.com/AmruthPillai/Reactive-Resume/commit/b515fc36e7f282db92e8eb509b6c5004a944fa95))
## [3.1.0](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.0.0...v3.1.0) (2022-03-12)
### Features
* **client:** add "spanish (es)" language to i18n locales ([bf167f8](https://github.com/AmruthPillai/Reactive-Resume/commit/bf167f81a3659677dada55856f5eaf0fc469e697))
* **client:** add mm/yyyy date option to date format options ([82bf44d](https://github.com/AmruthPillai/Reactive-Resume/commit/82bf44daa24422156779e9b38d3dc695176eaa09)), closes [#656](https://github.com/AmruthPillai/Reactive-Resume/issues/656)
* **client:** add sitemap generation to next app ([2cbc582](https://github.com/AmruthPillai/Reactive-Resume/commit/2cbc582a12b72b3012246022d4b518ed657d4c08))
* **client:** disable "Toggle Page Orientation" when there's only one page on the artboard ([01da1a0](https://github.com/AmruthPillai/Reactive-Resume/commit/01da1a06b802f1063a41d7a9a682e76b1daf9461)), closes [#655](https://github.com/AmruthPillai/Reactive-Resume/issues/655)
### Bug Fixes
* **client:** remove hard-coded "keywords:" in certain templates ([dda42b4](https://github.com/AmruthPillai/Reactive-Resume/commit/dda42b4c6b3bc359ac4f2bb91ca8118ddc84ec07)), closes [#650](https://github.com/AmruthPillai/Reactive-Resume/issues/650)
* **client:** show "present" string if end date is not entered, also add to i18n locales ([b5cd6c4](https://github.com/AmruthPillai/Reactive-Resume/commit/b5cd6c412b5b6b6ca7bb43c3801762de451f06b4)), closes [#653](https://github.com/AmruthPillai/Reactive-Resume/issues/653)
* **server:** photo uploads not working, fix save location and returned url ([799f208](https://github.com/AmruthPillai/Reactive-Resume/commit/799f20823e6d97a1ff0ba2c45c61d56304d0fa58)), closes [#658](https://github.com/AmruthPillai/Reactive-Resume/issues/658)
## [3.0.0](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.0.0-beta.6...v3.0.0) (2022-03-11)
### Features
* **lang**: add German, Kannada and Tamil languages to the app ([3a524f9](https://github.com/AmruthPillai/Reactive-Resume/commit/3a524f9c9c7a0e446491265b2242ad3dfeae188c))
* **docs:** add docusaurus workspace, initial setup of docs ([dc4aa0b](https://github.com/AmruthPillai/Reactive-Resume/commit/dc4aa0b496096bd59c45426bfcea6ba7db5f5c01))
## [3.0.0-beta.6](https://github.com/AmruthPillai/Reactive-Resume/compare/v3.0.0-beta.5...v3.0.0-beta.6) (2022-03-11)
### Features
* **lang:** add language switcher on the landing page, in the footer ([8bc7d25](https://github.com/AmruthPillai/Reactive-Resume/commit/8bc7d2599ef6af7a07bfbe886c43844152b0d9f7))
### Bug Fixes

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2022 Amruth Pillai
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -2,10 +2,12 @@
# Reactive Resume
![Project Version](https://img.shields.io/github/package-json/v/AmruthPillai/Reactive-Resume?style=flat-square)
![Project License](https://img.shields.io/github/license/AmruthPillai/Reactive-Resume?style=flat-square)
[![Docker Pulls](https://img.shields.io/docker/pulls/amruthpillai/reactive-resume?style=flat-square)](https://hub.docker.com/r/amruthpillai/reactive-resume)
[![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://beta.rxresu.me/)
## [Go to App](https://rxresu.me) | [Docs](https://docs.rxresu.me)
Reactive Resume is a free and open source resume builder thats built to make the mundane tasks of creating, updating and sharing your resume as easy as 1, 2, 3. With this app, you can create multiple resumes, share them with recruiters through a unique link and print as PDF, all for free, no advertisements, without losing the integrity and privacy of your data.
@ -15,13 +17,13 @@ You have complete control over what goes into your resume, how it looks, what co
- Free, forever
- No Advertising
- No Tracking (no 🍪s too)
- No User Tracking
- Sync your data across devices
- Accessible in multiple languages
- Import data from [LinkedIn](https://www.linkedin.com/), [JSON Resume](https://jsonresume.org/)
- Manage multiple resumes with one account
- Open Source (with large community support)
- Send your resume to others with a unique sharable link
- Accessible in multiple languages, [help translate here](https://translate.rxresu.me/)
- Pick any font from [Google Fonts](https://fonts.google.com/) to use on your resume
- Choose from 6 vibrant templates and more coming soon
- Export your resume to JSON or PDF format with just one click
@ -31,64 +33,28 @@ You have complete control over what goes into your resume, how it looks, what co
- Tailor-made Backend and Database, isolated from Google, Amazon etc.
- **Oh, and did I mention that it's free?**
## Docker Setup
## Languages
You can pull the prebuilt docker images right off the shelf from either [Docker Hub](https://hub.docker.com/repository/docker/amruthpillai/reactive-resume) or [GitHub Container Registry](https://ghcr.io/amruthpillai/reactive-resume). Keep in mind, you would also need a database for this to work as intended.
- English
- German (Deutsch)
- Hindi (हिन्दी)
- Kannada (ಕನ್ನಡ) (@aksh1251)
- Spanish (Español) (@seba11998)
- Tamil (தமிழ்)
```sh
# Server
docker run -p 3100:3100 --env-file .env amruthpillai/reactive-resume:server-latest
Help by [translating Reactive Resume](https://translate.rxresu.me) to your language!
# Client
docker run -p 3000:3000 --env-file .env amruthpillai/reactive-resume:client-latest
```
## Tutorial
Or, to make your life easier there's a simple `docker-compose.yml` included to help you get set up for success.
```sh
docker compose up
```
The docs include an extensive [Tutorial](https://docs.rxresu.me/tutorial) section which outline the features of Reactive Resume and help you through building your first resume on the app.
## Build from Source
If you don't want to use Docker, I understand. There's an old-school way to build the app too. This project, and these instructions rely heavily on [pnpm](https://pnpm.io/) so you might want to have that installed on your system before you continue.
1. Clone the repository locally, or use GitHub Codespaces or CodeSandbox
```
git clone https://github.com/AmruthPillai/Reactive-Resume.git
cd Reactive-Resume
```
2. Install dependencies using `pnpm`, but feel free to use any other package manager that supports npm workspaces.
```
pnpm install
```
3. Copy the `.env.example` file to `.env` in the project root and fill it with values according to your setup. You can skip the SendGrid variables if you don't want to set up mail right away.
```
cp .env.example .env
```
1. Use Docker Compose to create a PostgreSQL instance and a `reactive_resume` database, or feel free to use your own and modify the variables used in `.env`
```
docker-compose up -d postgres
```
5. Run the project and start building!
```
pnpm dev
```
For extensive information on how to build the app on your local machine, head over to the docs's [Source Code](https://docs.rxresu.me/source-code) section.
## Contributing
Please refer to the project's style and contribution guidelines for submitting pull requests.
In general, this project follows the "fork-and-pull" Git workflow.
This project makes use of [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) style and workflow for commit messages to ensure that the CHANGELOG is auto-generated. In general, this project follows the "fork-and-pull" Git workflow.
1. **Fork** the repo on GitHub
2. **Clone** the project to your own machine
@ -106,15 +72,17 @@ Use the [GitHub Issues](https://github.com/AmruthPillai/Reactive-Resume/issues/n
Reactive Resume would be nothing without the folks who supported me and kept the project alive in the beginning, and your cotinued support is what keeps me going. If you found Reactive Resume to be useful, helpful or just insightful and appreciate the effort I took to make the project, please consider donating as little or as much as your can.
[☕️ Buy me a coffee](https://www.buymeacoffee.com/AmruthPillai)
### [☕️ Buy me a coffee](https://www.buymeacoffee.com/AmruthPillai) | [💸 PayPal](https://paypal.me/RajaRajanA)
## Infrastructure
- Next.js, frontend
- NestJS, backend
- PostgreSQL, database
- DigitalOcean, infrastructure provider
- Crowdin, translation management platform
- [Next.js](https://nextjs.org/), frontend
- [NestJS](https://nestjs.com/), backend
- [PostgreSQL](https://www.postgresql.org/), database
- [DigitalOcean](https://www.digitalocean.com/), infrastructure provider
- [Crowdin](https://translate.rxresu.me/), translation management platform
 
<a href="https://pillai.xyz/digitalocean">
<img src="https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/PoweredByDO/DO_Powered_by_Badge_blue.svg" width="200px" />

View File

@ -33,6 +33,7 @@ const ArtboardController: React.FC<ReactZoomPanPinchRef> = ({ zoomIn, zoomOut, c
const resume = useAppSelector((state) => state.resume);
const isDesktop = useMediaQuery(theme.breakpoints.up('sm'));
const pages = useAppSelector((state) => state.resume.metadata.layout);
const { left, right } = useAppSelector((state) => state.build.sidebar);
const orientation = useAppSelector((state) => state.build.page.orientation);
@ -96,15 +97,17 @@ const ArtboardController: React.FC<ReactZoomPanPinchRef> = ({ zoomIn, zoomOut, c
{isDesktop && (
<>
<Tooltip arrow placement="top" title={t('builder.controller.tooltip.toggle-orientation') as string}>
<ButtonBase onClick={handleTogglePageOrientation}>
{orientation === 'vertical' ? (
<AlignHorizontalCenter fontSize="medium" />
) : (
<AlignVerticalCenter fontSize="medium" />
)}
</ButtonBase>
</Tooltip>
{pages.length > 1 && (
<Tooltip arrow placement="top" title={t('builder.controller.tooltip.toggle-orientation') as string}>
<ButtonBase onClick={handleTogglePageOrientation}>
{orientation === 'vertical' ? (
<AlignHorizontalCenter fontSize="medium" />
) : (
<AlignVerticalCenter fontSize="medium" />
)}
</ButtonBase>
</Tooltip>
)}
<Tooltip arrow placement="top" title={t('builder.controller.tooltip.toggle-page-break-line') as string}>
<ButtonBase onClick={handleTogglePageBreakLine}>

View File

@ -38,6 +38,7 @@ const Settings = () => {
const resume = useAppSelector((state) => state.resume);
const theme = useAppSelector((state) => state.build.theme);
const pages = useAppSelector((state) => state.resume.metadata.layout);
const breakLine = useAppSelector((state) => state.build.page.breakLine);
const orientation = useAppSelector((state) => state.build.page.orientation);
@ -151,10 +152,15 @@ const Settings = () => {
<ListItem>
<ListItemText
primary={t('builder.rightSidebar.sections.settings.page.orientation.primary')}
secondary={t('builder.rightSidebar.sections.settings.page.orientation.secondary')}
secondary={
pages.length === 1
? t('builder.rightSidebar.sections.settings.page.orientation.disabled')
: t('builder.rightSidebar.sections.settings.page.orientation.secondary')
}
/>
<Switch
color="secondary"
disabled={pages.length === 1}
checked={orientation === 'horizontal'}
onChange={() => dispatch(togglePageOrientation())}
/>

View File

@ -0,0 +1,7 @@
.container {
@apply z-10 fixed top-0 left-0 right-0;
strong {
@apply font-semibold;
}
}

View File

@ -0,0 +1,26 @@
import { AnnouncementOutlined } from '@mui/icons-material';
import { Alert, Collapse } from '@mui/material';
import { useState } from 'react';
import { PRODUCT_HUNT_URL } from '@/constants/index';
import styles from './Announcement.module.scss';
const Announcement = () => {
const [open, setOpen] = useState(true);
return (
<div className={styles.container}>
<Collapse in={open}>
<Alert icon={<AnnouncementOutlined />} severity="info" onClose={() => setOpen(false)}>
<a href={PRODUCT_HUNT_URL} target="_blank" rel="noreferrer">
<strong>Reactive Resume is featured on Product Hunt.</strong> If you liked this app, please show your
support by <strong>upvoting</strong>!
</a>
</Alert>
</Collapse>
</div>
);
};
export default Announcement;

View File

@ -9,12 +9,32 @@ export const languages: Language[] = [
code: 'en',
name: 'English',
},
{
code: 'de',
name: 'German',
localName: 'Deutsch',
},
{
code: 'hi',
name: 'Hindi',
localName: 'हिन्दी',
},
{
code: 'kn',
name: 'Kannada',
localName: 'ಕನ್ನಡ',
},
];
{
code: 'es',
name: 'Spanish',
localName: 'Español',
},
{
code: 'ta',
name: 'Tamil',
localName: 'தமிழ்',
},
].sort((a, b) => a.name.localeCompare(b.name));
export const languageMap: Record<string, Language> = languages.reduce(
(acc, lang) => ({

View File

@ -11,4 +11,5 @@ export const FILENAME_TIMESTAMP = 'DDMMYYYYHHmmss';
// Links
export const DONATION_URL = 'https://www.buymeacoffee.com/AmruthPillai';
export const GITHUB_URL = 'https://github.com/AmruthPillai/Reactive-Resume';
export const PRODUCT_HUNT_URL = 'https://www.producthunt.com/posts/reactive-resume-v3';
export const GITHUB_ISSUES_URL = 'https://github.com/AmruthPillai/Reactive-Resume/issues/new/choose';

View File

@ -3,7 +3,7 @@ const path = require('path');
const i18nConfig = {
i18n: {
defaultLocale: 'en',
locales: ['en', 'kn'],
locales: ['de', 'en', 'es', 'kn', 'ta', 'hi'],
},
nsSeparator: '.',
localePath: path.resolve('./public/locales'),

View File

@ -0,0 +1,6 @@
/** @type {import('next-sitemap').IConfig} */
module.exports = {
siteUrl: 'https://rxresu.me',
changefreq: 'monthly',
generateRobotsTxt: true,
};

View File

@ -2,9 +2,10 @@
"name": "@reactive-resume/client",
"scripts": {
"dev": "react-env --prefix PUBLIC -- next dev",
"build": "next build",
"build": "next build && npm run sitemap",
"start": "react-env --prefix PUBLIC -- next start",
"lint": "next lint --fix"
"lint": "next lint --fix",
"sitemap": "next-sitemap --config next-sitemap.config.js"
},
"dependencies": {
"@beam-australia/react-env": "^3.1.1",
@ -67,6 +68,7 @@
"autoprefixer": "^10.4.2",
"eslint": "^8.10.0",
"eslint-config-next": "12.1.0",
"next-sitemap": "^2.5.7",
"postcss": "^8.4.8",
"prettier": "^2.5.1",
"sass": "^1.49.9",

View File

@ -8,6 +8,7 @@ import { Trans, useTranslation } from 'next-i18next';
import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
import Testimony from '@/components/landing/Testimony';
import Announcement from '@/components/shared/Announcement';
import Footer from '@/components/shared/Footer';
import LanguageSwitcher from '@/components/shared/LanguageSwitcher';
import Logo from '@/components/shared/Logo';
@ -44,6 +45,8 @@ const Home: NextPage = () => {
return (
<main className={styles.container}>
<Announcement />
<div className={styles.header}>
<div className={styles.logo}>
<Logo size={256} />

View File

@ -0,0 +1,358 @@
{
"common": {
"actions": {
"add": "Neue {{token}} hinzufügen",
"delete": "Löschen {{token}}",
"edit": "Bearbeiten {{token}}"
},
"columns": {
"heading": "Spalten",
"tooltip": "Anzahl der Spalten ändern"
},
"form": {
"date": {
"label": "Datum"
},
"description": {
"label": "Beschreibung"
},
"email": {
"label": "E-Mail Adresse"
},
"end-date": {
"help-text": "Dieses Feld leer lassen, wenn noch vorhanden",
"label": "Enddatum"
},
"keywords": {
"label": "Stichwörter"
},
"level": {
"label": "Ebene"
},
"levelNum": {
"label": "Ebene (Anzahl)"
},
"name": {
"label": "Name"
},
"phone": {
"label": "Telefonnummer"
},
"position": {
"label": "Position"
},
"start-date": {
"label": "Startdatum"
},
"subtitle": {
"label": "Untertitel"
},
"summary": {
"label": "Zusammenfassung"
},
"title": {
"label": "Titel"
},
"url": {
"label": "Webseite"
}
},
"glossary": {
"page": "Seite"
},
"list": {
"actions": {
"delete": "Löschen",
"duplicate": "Duplizieren",
"edit": "Bearbeiten"
},
"empty-text": "Diese Liste ist leer."
},
"tooltip": {
"delete-item": "Sind Sie sicher, dass Sie dieses Element löschen möchten? Dies ist eine unumkehrbare Aktion.",
"delete-section": "Abschnitt löschen",
"rename-section": "Abschnitt umbenennen",
"toggle-visibility": "Sichtbarkeit umschalten"
}
},
"controller": {
"tooltip": {
"center-artboard": "Artboard zentrieren",
"copy-link": "Link zum Lebenslauf kopieren",
"export-pdf": "PDF exportieren",
"toggle-orientation": "Seitenausrichtung umschalten",
"toggle-page-break-line": "Pausenzeile umschalten",
"toggle-sidebars": "Seitenleisten umschalten",
"zoom-in": "Vergrößern",
"zoom-out": "Verkleinern"
}
},
"header": {
"menu": {
"delete": "Löschen",
"duplicate": "Duplizieren",
"rename": "Umbenennen",
"share-link": "Link teilen",
"tooltips": {
"delete": "Sind Sie sicher, dass Sie diesen Lebenslauf löschen möchten? Dies ist eine unumkehrbare Aktion.",
"share-link": "Du musst die Sichtbarkeit deines Lebenslaufs in die Öffentlichkeit ändern, um ihn für andere sichtbar zu machen."
}
}
},
"leftSidebar": {
"sections": {
"awards": {
"form": {
"awarder": {
"label": "Auszeichnung"
}
}
},
"basics": {
"actions": {
"photo-filters": "Fotofilter"
},
"heading": "Grundlagen",
"headline": {
"label": "Überschrift"
},
"name": {
"label": "Voller Name"
},
"photo-filters": {
"effects": {
"border": {
"label": "Grenze"
},
"grayscale": {
"label": "Graustufen"
},
"heading": "Effekte"
},
"shape": {
"heading": "Form"
},
"size": {
"heading": "Größe (in px)"
}
},
"photo-upload": {
"tooltip": {
"remove": "Foto entfernen",
"upload": "Foto hochladen"
}
}
},
"certifications": {
"form": {
"issuer": {
"label": "Aussteller"
}
}
},
"education": {
"form": {
"area-study": {
"label": "Studienbereich"
},
"courses": {
"label": "Kurse"
},
"degree": {
"label": "Grad"
},
"grade": {
"label": "Note"
},
"institution": {
"label": "Institution"
}
}
},
"location": {
"address": {
"label": "Adresse"
},
"city": {
"label": "Stadt"
},
"country": {
"label": "Land"
},
"heading": "Standort",
"postal-code": {
"label": "Postleitzahl"
},
"region": {
"label": "Region"
}
},
"profiles": {
"form": {
"network": {
"label": "Netzwerk"
},
"username": {
"label": "Benutzername"
}
},
"heading": "Profiles",
"heading_one": "Profil"
},
"publications": {
"form": {
"publisher": {
"label": "Herausgeber"
}
}
},
"references": {
"form": {
"relationship": {
"label": "Beziehung"
}
}
},
"section": {
"heading": "Abschnitt"
},
"volunteer": {
"form": {
"organization": {
"label": "Organisation"
}
}
}
}
},
"rightSidebar": {
"sections": {
"css": {
"heading": "Benutzerdefiniertes CSS"
},
"export": {
"heading": "Exportieren",
"json": {
"primary": "JSON",
"secondary": "Laden Sie eine JSON-Version Ihres Lebenslaufs herunter, die Sie wieder in Reaktives Lebenslauf importieren können."
},
"pdf": {
"loading": {
"primary": "PDF wird erstellt",
"secondary": "Bitte warten Sie, wenn Ihr PDF generiert wird, dies kann bis zu 15 Sekunden dauern."
},
"normal": {
"primary": "PDF",
"secondary": "Laden Sie sich ein PDF Ihres Lebenslaufs herunter, das Sie ausdrucken und an Ihren Traumjob senden können. Diese Datei kann nicht zur weiteren Bearbeitung importiert werden."
}
}
},
"layout": {
"heading": "Layout",
"tooltip": {
"reset-layout": "Layout zurücksetzen"
}
},
"links": {
"bugs-features": {
"body": "Hält Sie etwas davon ab, einen Lebenslauf zu erstellen? Oder haben Sie eine tolle Idee, die Sie hinzufügen möchten? Erhöhen Sie einen Eintrag auf GitHub, um loszulegen.",
"button": "GitHub Themen",
"heading": "Fehler? Feature-Anfragen?"
},
"donate": {
"body": "Wenn Ihnen Reactive Resume gefallen hat, denken Sie bitte darüber nach, so viel wie möglich zu spenden, damit die App für immer kostenlos und werbefrei bleibt.",
"button": "Kaufe mir einen Kaffee",
"heading": "Spenden an Reaktives Lebenslauf"
},
"github": "Quellcode",
"heading": "Links"
},
"settings": {
"global": {
"date": {
"primary": "Datum",
"secondary": "Datumsformat für die gesamte App"
},
"heading": "Globale",
"language": {
"primary": "Sprache",
"secondary": "Sprache anzeigen, die in der gesamten App verwendet wird"
},
"theme": {
"primary": "Thema"
}
},
"heading": "Einstellungen",
"page": {
"break-line": {
"primary": "Linie anhalten",
"secondary": "Zeile auf allen Seiten anzeigen, um die Höhe einer A4-Seite zu markieren"
},
"heading": "Seite",
"orientation": {
"disabled": "Hat keine Auswirkung, wenn nur eine Seite vorhanden ist",
"primary": "Ausrichtung",
"secondary": "Ob Seiten horizontal oder vertikal angezeigt werden sollen"
}
},
"resume": {
"heading": "Lebenslauf",
"reset": {
"primary": "Alles zurücksetzen",
"secondary": "Zu viele Fehler gemacht? Klicken Sie hier, um alle Änderungen zurückzusetzen und bei Null zu beginnen. Sei vorsichtig, diese Aktion kann nicht rückgängig gemacht werden."
},
"sample": {
"primary": "Beispieldaten laden",
"secondary": "Nicht sicher, wo man anfangen soll? Klicken Sie hier, um ein paar Beispieldaten zu laden, um zu sehen, wie ein vollständiger Lebenslauf aussieht."
}
}
},
"sharing": {
"heading": "Teilen",
"short-url": {
"label": "Kurze URL bevorzugen"
},
"visibility": {
"subtitle": "Erlaube jemandem mit einem Link deinen Lebenslauf anzusehen",
"title": "Öffentlich"
}
},
"templates": {
"heading": "Vorlagen"
},
"theme": {
"form": {
"background": {
"label": "Hintergrund"
},
"primary": {
"label": "Primär"
},
"text": {
"label": "Text"
}
},
"heading": "Thema"
},
"typography": {
"form": {
"font-family": {
"label": "Schriftfamilie"
},
"font-size": {
"label": "Schriftgröße"
}
},
"heading": "Typographie",
"widgets": {
"body": {
"label": "Körper"
},
"headings": {
"label": "Überschriften"
}
}
}
}
}
}

View File

@ -0,0 +1,32 @@
{
"avatar": {
"menu": {
"greeting": "Hallo",
"logout": "Abmelden"
}
},
"footer": {
"credit": "Ein Herzensprojekt von <1>Amruth Pillai</1>",
"language": {
"missing": "Ihre Sprache fehlt?"
},
"license": "Von der Gemeinschaft, für die Gemeinschaft."
},
"markdown": {
"help-text": "Dieser Abschnitt unterstützt <1>Markdown</1> Formatierung."
},
"date": {
"present": "Gegenwärtig"
},
"subtitle": "Ein freier und Open-Source-Lebenslauf-Builder.",
"title": "Reaktives Lebenslauf",
"toast": {
"error": {
"upload-file-size": "Bitte laden Sie nur Dateien unter 2 Megabytes hoch.",
"upload-photo-size": "Bitte laden Sie nur Fotos unter 2 Megabytes hoch, vorzugsweise quadratisch."
},
"success": {
"resume-link-copied": "Ein Link zu deinem Lebenslauf wurde in deine Zwischenablage kopiert."
}
}
}

View File

@ -0,0 +1,25 @@
{
"create-resume": {
"subtitle": "Bei Null anfangen",
"title": "Neuen Lebenslauf erstellen"
},
"import-external": {
"subtitle": "LinkedIn, JSON Resume, Reaktives Lebenslauf",
"title": "Aus externen Quellen importieren"
},
"resume": {
"menu": {
"delete": "Löschen",
"duplicate": "Duplizieren",
"open": "Öffnen",
"rename": "Umbenennen",
"share-link": "Link teilen",
"tooltips": {
"delete": "Sind Sie sicher, dass Sie diesen Lebenslauf löschen möchten? Dies ist eine unumkehrbare Aktion.",
"share-link": "Du musst die Sichtbarkeit deines Lebenslaufs in die Öffentlichkeit ändern, um ihn für andere sichtbar zu machen."
}
},
"timestamp": "Zuletzt vor {{timestamp}} aktualisiert"
},
"title": "Dashboard"
}

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "Gehe zu App",
"login": "Anmelden",
"logout": "Abmelden",
"register": "Registrieren"
},
"features": {
"heading": "Eigenschaften",
"list": {
"ads": "Keine Werbung",
"export": "Exportieren Sie Ihren Lebenslauf in JSON oder PDF Format",
"free": "Frei, für immer",
"import": "Importiere Daten von LinkedIn, JSON Lebenslauf",
"languages": "In mehreren Sprachen zugänglich",
"more": "Und viel mehr aufregende Features, <1>lesen Sie alles hier</1>",
"tracking": "Keine Benutzerverfolgung"
}
},
"links": {
"heading": "Links",
"links": {
"donate": "Spenden",
"github": "Quellcode",
"privacy": "Datenschutzerklärung",
"service": "Nutzungsbedingungen"
}
},
"screenshots": {
"heading": "Screenshots"
},
"testimonials": {
"heading": "Referenzen",
"body": "Gut oder schlecht, ich würde gerne Ihre Meinung über Reactive Resume und wie die Erfahrung war für Sie.<br/>Hier sind einige der Nachrichten, die von Benutzern auf der ganzen Welt gesendet werden.",
"contact": "Du kannst mich über <1>meine E-Mail</1> oder über das Kontaktformular auf <3>meiner Website</3>erreichen."
},
"summary": {
"body": "Reaktives Lebenslauf ist ein freier und Open-Source-Lebenslauf-Builder, der gebaut wurde, um die weltlichen Aufgaben zu machen, zu erstellen, Aktualisieren und teilen Sie Ihren Lebenslauf so einfach wie 1, 2, 3. Mit dieser App kannst du mehrere Bewerbungen erstellen, sie mit Recruitern oder Freunden über einen einzigartigen Link teilen und sie als PDF ausdrucken. alle kostenlos, keine Werbung, keine Verfolgung, ohne die Integrität und Privatsphäre Ihrer Daten zu verlieren.",
"heading": "Zusammenfassung"
}
}

View File

@ -0,0 +1,135 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "Passwort zurücksetzen E-Mail senden"
},
"body": "Geben Sie einfach die E-Mail-Adresse ein, die mit dem Konto verknüpft ist, das Sie wiederherstellen möchten.",
"form": {
"email": {
"label": "E-Mail Adresse"
}
},
"heading": "Passwort vergessen?",
"help-text": "Wenn das Konto existiert, erhalten Sie eine E-Mail mit einem Link zum Zurücksetzen Ihres Passworts."
},
"login": {
"actions": {
"login": "Anmelden",
"google": "Mit Google anmelden"
},
"body": "Bitte geben Sie Ihren Benutzernamen und Ihr Passwort ein, um sich anzumelden und zuzugreifen, Ihre Bewerbungen zu verwalten und weiterzugeben.",
"form": {
"password": {
"label": "Passwort"
},
"username": {
"help-text": "Sie können auch Ihre E-Mail-Adresse eingeben",
"label": "Benutzername"
}
},
"heading": "Bei Ihrem Konto anmelden",
"recover-text": "Falls Sie Ihr Passwort vergessen haben, können Sie <1>Ihr Konto wiederherstellen</1> hier einrichten.",
"register-text": "Wenn Sie keinen haben, können Sie hier <1>ein Konto erstellen</1> anlegen."
},
"register": {
"actions": {
"register": "Registrieren",
"google": "Mit Google registrieren"
},
"body": "Bitte geben Sie Ihre persönlichen Daten ein, um ein Konto zu erstellen.",
"form": {
"confirm-password": {
"label": "Passwort bestätigen"
},
"email": {
"label": "E-Mail Adresse"
},
"name": {
"label": "Voller Name"
},
"password": {
"label": "Passwort"
},
"username": {
"label": "Benutzername"
}
},
"heading": "Ein Konto erstellen",
"loginText": "Wenn Sie bereits ein Konto haben, können Sie sich hier <1>anmelden</1>."
},
"reset-password": {
"actions": {
"set-password": "Neues Passwort setzen"
},
"body": "Geben Sie ein neues Passwort für Ihr Konto ein.",
"form": {
"confirm-password": {
"label": "Passwort bestätigen"
},
"password": {
"label": "Passwort"
}
},
"heading": "Passwort zurücksetzen"
}
},
"dashboard": {
"create-resume": {
"actions": {
"create-resume": "Lebenslauf erstellen"
},
"body": "Erstelle deinen Lebenslauf, indem du ihm einen Namen gibst. Er könnte sich auf die Rolle beziehen, die Sie beantragen, oder nur auf Ihren Lieblings-Snack.",
"form": {
"name": {
"label": "Name"
},
"public": {
"label": "Ist öffentlich zugänglich?"
},
"slug": {
"label": "Slug"
}
},
"heading": "Neuen Lebenslauf erstellen"
},
"import-external": {
"heading": "Aus externen Quellen importieren",
"json-resume": {
"actions": {
"upload-json": "JSON hochladen"
},
"body": "Wenn du einen <1>validierten JSON Resume</1> bereit hast, kannst du damit deine Entwicklung auf reaktiven Resume beschleunigen. Klicken Sie auf den Button unten und laden Sie eine gültige JSON-Datei hoch, um zu beginnen.",
"heading": "Import vom JSON-Lebenslauf"
},
"linkedin": {
"actions": {
"upload-archive": "ZIP-Archiv hochladen"
},
"body": "Sie können Zeit sparen, indem Sie Ihre Daten aus LinkedIn exportieren und sie zum automatischen Ausfüllen von Feldern auf Reaktives Lebenslauf verwenden. Gehen Sie zum Abschnitt <1>Datenschutz </1> auf LinkedIn und fordern Sie ein Archiv Ihrer Daten an. Sobald diese verfügbar sind, laden Sie die ZIP-Datei unten hoch.",
"heading": "Aus LinkedIn importieren"
},
"reactive-resume": {
"actions": {
"upload-json": "JSON hochladen"
},
"body": "Wenn Sie ein JSON haben, das mit der aktuellen Version von Reactive Resume exportiert wurde, Sie können es hier wieder importieren um wieder eine editierbare Version zu erhalten. Vorherige Versionen von Reactive Resume werden derzeit leider nicht unterstützt.",
"heading": "Import vom Reaktives Lebenslauf"
}
},
"rename-resume": {
"actions": {
"rename-resume": "Lebenslauf umbenennen"
},
"form": {
"name": {
"label": "Name"
},
"slug": {
"label": "Slug"
}
},
"heading": "Lebenslauf umbenennen"
}
}
}

View File

@ -61,18 +61,18 @@
"page": "Page"
},
"list": {
"empty-text": "This list is empty.",
"actions": {
"edit": "Edit",
"delete": "Delete",
"duplicate": "Duplicate",
"delete": "Delete"
}
"edit": "Edit"
},
"empty-text": "This list is empty."
},
"tooltip": {
"delete-item": "Are you sure you want to delete this item? This is an irreversible action.",
"delete-section": "Delete Section",
"rename-section": "Rename Section",
"toggle-visibility": "Toggle Visibility",
"delete-item": "Are you sure you want to delete this item? This is an irreversible action."
"toggle-visibility": "Toggle Visibility"
}
},
"controller": {
@ -290,6 +290,7 @@
},
"heading": "Page",
"orientation": {
"disabled": "Has no effect when there is only one page",
"primary": "Orientation",
"secondary": "Whether to display pages horizontally or vertically"
}

View File

@ -15,6 +15,9 @@
"markdown": {
"help-text": "This section supports <1>markdown</1> formatting."
},
"date": {
"present": "Present"
},
"subtitle": "A free and open source resume builder.",
"title": "Reactive Resume",
"toast": {

View File

@ -0,0 +1,358 @@
{
"common": {
"actions": {
"add": "Agregar nuevo {{token}}",
"delete": "Eliminar {{token}}",
"edit": "Editar {{token}}"
},
"columns": {
"heading": "Columnas",
"tooltip": "Cambiar número de columnas"
},
"form": {
"date": {
"label": "Fecha"
},
"description": {
"label": "Descripción"
},
"email": {
"label": "Correo electrónico"
},
"end-date": {
"help-text": "Deje este campo en blanco, si todavía está presente",
"label": "Fecha de finalización"
},
"keywords": {
"label": "Palabras claves"
},
"level": {
"label": "Nivel"
},
"levelNum": {
"label": "Nivel (Número)"
},
"name": {
"label": "Nombre"
},
"phone": {
"label": "Número de teléfono"
},
"position": {
"label": "Puesto de trabajo"
},
"start-date": {
"label": "Fecha de inicio"
},
"subtitle": {
"label": "Subtítulo"
},
"summary": {
"label": "Resumen"
},
"title": {
"label": "Título"
},
"url": {
"label": "Sitio Web"
}
},
"glossary": {
"page": "Página"
},
"list": {
"actions": {
"delete": "Eliminar",
"duplicate": "Duplicar",
"edit": "Editar"
},
"empty-text": "Esta lista esta vacia."
},
"tooltip": {
"delete-item": "¿Estás seguro de que deseas eliminar este elemento? Esta acción es irreversible.",
"delete-section": "Eliminar sección",
"rename-section": "Renombrar sección",
"toggle-visibility": "Cambiar Visibilidad"
}
},
"controller": {
"tooltip": {
"center-artboard": "Centrar Tablero",
"copy-link": "Copiar enlace al currículum",
"export-pdf": "Exportar PDF",
"toggle-orientation": "Cambiar la orientación de la página",
"toggle-page-break-line": "Alternar línea de salto de página",
"toggle-sidebars": "Ocultar/mostrar barra lateral",
"zoom-in": "Acercar",
"zoom-out": "Alejar"
}
},
"header": {
"menu": {
"delete": "Eliminar",
"duplicate": "Duplicar",
"rename": "Renombrar",
"share-link": "Compartir enlace",
"tooltips": {
"delete": "¿Estás seguro de que deseas eliminar este elemento? Esta acción es irreversible.",
"share-link": "Debe cambiar la visibilidad de su currículum a público para que sea visible para los demás."
}
}
},
"leftSidebar": {
"sections": {
"awards": {
"form": {
"awarder": {
"label": "Otorgado por"
}
}
},
"basics": {
"actions": {
"photo-filters": "Filtro de fotos"
},
"heading": "Información básica",
"headline": {
"label": "Titular"
},
"name": {
"label": "Nombre Completo"
},
"photo-filters": {
"effects": {
"border": {
"label": "Borde"
},
"grayscale": {
"label": "Escala de grises"
},
"heading": "Efectos"
},
"shape": {
"heading": "Forma"
},
"size": {
"heading": "Tamaño (en píxeles)"
}
},
"photo-upload": {
"tooltip": {
"remove": "Eliminar foto",
"upload": "Subir foto"
}
}
},
"certifications": {
"form": {
"issuer": {
"label": "Emisor"
}
}
},
"education": {
"form": {
"area-study": {
"label": "Área de estudio"
},
"courses": {
"label": "Cursos"
},
"degree": {
"label": "Grado"
},
"grade": {
"label": "Calificación"
},
"institution": {
"label": "Institución"
}
}
},
"location": {
"address": {
"label": "Dirección"
},
"city": {
"label": "Ciudad"
},
"country": {
"label": "País"
},
"heading": "Ubicación",
"postal-code": {
"label": "Código Postal"
},
"region": {
"label": "Area"
}
},
"profiles": {
"form": {
"network": {
"label": "Red"
},
"username": {
"label": "Nombre de usario"
}
},
"heading": "Perfiles",
"heading_one": "Perfil"
},
"publications": {
"form": {
"publisher": {
"label": "Editor"
}
}
},
"references": {
"form": {
"relationship": {
"label": "Relación"
}
}
},
"section": {
"heading": "Sección"
},
"volunteer": {
"form": {
"organization": {
"label": "Organización"
}
}
}
}
},
"rightSidebar": {
"sections": {
"css": {
"heading": "CSS personalizado"
},
"export": {
"heading": "Exportar",
"json": {
"primary": "JSON",
"secondary": "Descargar una versión JSON de su currículum que se puede volver a importar a Reactive Resume."
},
"pdf": {
"loading": {
"primary": "Generando PDF",
"secondary": "Por favor, espere mientras se genera su PDF, esto puede tardar hasta 15 segundos."
},
"normal": {
"primary": "PDF",
"secondary": "Descargar un PDF de su currículum que puede imprimir y enviar al trabajo de sus sueños. Este archivo no se puede volver a importar para su posterior edición."
}
}
},
"layout": {
"heading": "Diseño",
"tooltip": {
"reset-layout": "Restablecer Diseño"
}
},
"links": {
"bugs-features": {
"body": "¿Algo que te impide hacer un currículum? ¿O tienes una idea increíble para agregar? Plantea una Propuesta en GitHub para comenzar.",
"button": "Propuesta de GitHub",
"heading": "¿Errores? ¿Solicitud de características?"
},
"donate": {
"body": "Si le gustó usar Reactive Resume, considere donar lo que pueda a la causa de mantener la aplicación en funcionamiento, sin anuncios y gratis para siempre.",
"button": "Invítame a un café",
"heading": "Donar a Reactive Resume"
},
"github": "Código Fuente",
"heading": "Enlaces"
},
"settings": {
"global": {
"date": {
"primary": "Fecha",
"secondary": "Formato de fecha para usar en toda la aplicación"
},
"heading": "Global",
"language": {
"primary": "Idioma",
"secondary": "Idioma que se utilizará en toda la aplicación"
},
"theme": {
"primary": "Tema"
}
},
"heading": "Preferencias",
"page": {
"break-line": {
"primary": "Linea de separación",
"secondary": "Mostrar una línea en todas las páginas para marcar la altura de una página A4"
},
"heading": "Página",
"orientation": {
"disabled": "No tiene efecto cuando solo hay una página",
"primary": "Orientación",
"secondary": "Visualización horizontal o vertical de las páginas"
}
},
"resume": {
"heading": "Currículum",
"reset": {
"primary": "Restablecer Todo",
"secondary": "¿Has cometido demasiados errores? Haz clic aquí para restablecer todos los cambios y empezar de cero. Ten cuidado, esta acción no se puede revertir."
},
"sample": {
"primary": "Cargar datos de muestra",
"secondary": "¿No sabe por dónde empezar? Haz clic aquí para cargar algunos datos de muestra y ver cómo es un currículum completo."
}
}
},
"sharing": {
"heading": "Compartir",
"short-url": {
"label": "Preferir URL corta"
},
"visibility": {
"subtitle": "Permitir que cualquier persona con un enlace vea su currículum",
"title": "Público"
}
},
"templates": {
"heading": "Plantillas"
},
"theme": {
"form": {
"background": {
"label": "Fondo"
},
"primary": {
"label": "Principal"
},
"text": {
"label": "Texto"
}
},
"heading": "Tema"
},
"typography": {
"form": {
"font-family": {
"label": "Familia tipográfica"
},
"font-size": {
"label": "Tamaño de fuente"
}
},
"heading": "Tipografía",
"widgets": {
"body": {
"label": "Cuerpo"
},
"headings": {
"label": "Encabezados"
}
}
}
}
}
}

View File

@ -0,0 +1,32 @@
{
"avatar": {
"menu": {
"greeting": "Hola",
"logout": "Cerrar sesión"
}
},
"footer": {
"credit": "Un proyecto apasionante de <1>Amruth Pillai</1>",
"language": {
"missing": "Idioma ausente?"
},
"license": "Por la comunidad, para la comunidad."
},
"markdown": {
"help-text": "Esta sección soporta el formato <1>markdown</1>."
},
"date": {
"present": "Regalo"
},
"subtitle": "Un generador de currículum gratuito y de código abierto.",
"title": "Reactive Resume",
"toast": {
"error": {
"upload-file-size": "Por favor, suba sólo archivos de menos de 2 megabytes.",
"upload-photo-size": "Por favor, suba sólo fotos de menos de 2 megabytes, preferiblemente cuadradas."
},
"success": {
"resume-link-copied": "Se ha copiado un enlace a su currículum en su portapapeles."
}
}
}

View File

@ -0,0 +1,25 @@
{
"create-resume": {
"subtitle": "Empezar desde cero",
"title": "Crear currículum"
},
"import-external": {
"subtitle": "LinkedIn, JSON Resume, Reactive Resume",
"title": "Importar desde fuentes externas"
},
"resume": {
"menu": {
"delete": "Eliminar",
"duplicate": "Duplicar",
"open": "Abrir",
"rename": "Renombrar",
"share-link": "Compartir enlace",
"tooltips": {
"delete": "¿Estás seguro de que deseas eliminar este elemento? Esta acción es irreversible.",
"share-link": "Debe cambiar la visibilidad de su currículum a público para que sea visible para los demás."
}
},
"timestamp": "Última actualización {{timestamp}}"
},
"title": "Panel de Control"
}

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "Ir a la aplicación",
"login": "Iniciar sesión",
"logout": "Cerrar sesión",
"register": "Registrar"
},
"features": {
"heading": "Características",
"list": {
"ads": "Sin publicidad",
"export": "Exporta tu currículum a formato JSON o PDF",
"free": "Gratis para siempre",
"import": "Importar datos de LinkedIn, JSON Resume",
"languages": "Accesible en varios idiomas",
"more": "Y funciones mucho más emocionantes, <1>lea todo sobre esto aquí</1>",
"tracking": "Sin seguimiento de usuario"
}
},
"links": {
"heading": "Enlaces",
"links": {
"donate": "Donar",
"github": "Código Fuente",
"privacy": "Política de Privacidad",
"service": "Términos de Servicio"
}
},
"screenshots": {
"heading": "Capturas de pantalla"
},
"testimonials": {
"heading": "Opiniones",
"body": "Bueno o malo, me encantaría saber tu opinión sobre Reactive Resume y cómo ha sido la experiencia para ti.<br/>Estos son algunos de los mensajes enviados por usuarios de todo el mundo.",
"contact": "Puedes comunicarte conmigo a través de <1>mi correo electrónico</1> o a través del formulario de contacto en <3>mi sitio web</3>."
},
"summary": {
"body": "Reactive Resume es un generador de currículums gratuito y de código abierto que está diseñado para hacer que las tareas mundanas de crear, actualizar y compartir su currículum sean tan fáciles como 1, 2, 3. Con esta aplicación, puede crear múltiples currículums, compartirlos con reclutadores o amigos a través de un enlace único e imprímalo como PDF, todo gratis, sin anuncios, sin seguimiento, sin perder la integridad y privacidad de sus datos.",
"heading": "Resumen"
}
}

View File

@ -0,0 +1,135 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "Enviar correo electrónico para restablecer la contraseña"
},
"body": "Simplemente ingrese la dirección de correo electrónico asociada con la cuenta que desea recuperar.",
"form": {
"email": {
"label": "Correo electrónico"
}
},
"heading": "¿Olvidó su contraseña?",
"help-text": "Si la cuenta existe, recibirá un correo electrónico con un enlace para restablecer su contraseña."
},
"login": {
"actions": {
"login": "Iniciar sesión",
"google": "Iniciar sesión con Google"
},
"body": "Por favor, introduzca su nombre de usuario y contraseña asociados a su cuenta para iniciar sesión y acceder, gestionar y compartir sus currículos.",
"form": {
"password": {
"label": "Contraseña"
},
"username": {
"help-text": "También puede ingresar su dirección de correo electrónico",
"label": "Nombre de usario"
}
},
"heading": "Ingrese en su cuenta",
"recover-text": "En caso de que hayas olvidado tu contraseña, puedes <1>recuperar tu cuenta</1> aquí.",
"register-text": "Si no tiene una, puede <1>crear una cuenta</1> aquí."
},
"register": {
"actions": {
"register": "Registrar",
"google": "Regístrese con Google"
},
"body": "Por favor ingrese su información personal para crear una cuenta.",
"form": {
"confirm-password": {
"label": "Confirmar Contraseña"
},
"email": {
"label": "Correo electrónico"
},
"name": {
"label": "Nombre Completo"
},
"password": {
"label": "Contraseña"
},
"username": {
"label": "Nombre de usario"
}
},
"heading": "Crear una cuenta",
"loginText": "Si ya tiene una cuenta, puede <1>iniciar sesión aquí</1>."
},
"reset-password": {
"actions": {
"set-password": "Establecer una nueva contraseña"
},
"body": "Introduzca una nueva contraseña para su cuenta.",
"form": {
"confirm-password": {
"label": "Confirmar Contraseña"
},
"password": {
"label": "Contraseña"
}
},
"heading": "Restablecer tu contraseña"
}
},
"dashboard": {
"create-resume": {
"actions": {
"create-resume": "Crear currículum"
},
"body": "Comience a construir su currículum dándole un nombre. Podría ser en referencia al puesto que está solicitando, o simplemente a su refrigerio favorito.",
"form": {
"name": {
"label": "Nombre"
},
"public": {
"label": "¿Es de acceso público?"
},
"slug": {
"label": "Segmento"
}
},
"heading": "Crear un nuevo currículum"
},
"import-external": {
"heading": "Importar desde fuentes externas",
"json-resume": {
"actions": {
"upload-json": "Subir JSON"
},
"body": "Si tiene un <1>JSON Resume validado</1> listo para usar, puede usarlo para acelerar su desarrollo en Reactive Resume. Haga clic en el botón a continuación y cargue un archivo JSON válido para comenzar.",
"heading": "Importar desde JSON Resume"
},
"linkedin": {
"actions": {
"upload-archive": "Subir archivo ZIP"
},
"body": "Puede ahorrar tiempo exportando sus datos de LinkedIn y usándolos para autocompletar campos en Reactive Resume. Dirígete a <1>Privacidad de datos</1> en LinkedIn y solicita un archivo de tus datos. Una vez que esté disponible, cargue el archivo ZIP a continuación.",
"heading": "Importar desde LinkedIn"
},
"reactive-resume": {
"actions": {
"upload-json": "Subir JSON"
},
"body": "Si tiene un JSON que se exportó con la versión actual de Reactive Resume, puede volver a importarlo aquí para obtener una versión editable nuevamente. Desafortunadamente, las versiones anteriores de Reactive Resume no son compatibles en este momento.",
"heading": "Importar desde Reactive Resume"
}
},
"rename-resume": {
"actions": {
"rename-resume": "Renombrar currículum"
},
"form": {
"name": {
"label": "Nombre"
},
"slug": {
"label": "Segmento"
}
},
"heading": "Renombrar tu currículum"
}
}
}

View File

@ -0,0 +1,358 @@
{
"common": {
"actions": {
"add": "नया जोड़ें {{token}}",
"delete": "हटाएं {{token}}",
"edit": "संपादित करें {{token}}"
},
"columns": {
"heading": "कॉलम",
"tooltip": "स्तंभों की संख्या बदलें"
},
"form": {
"date": {
"label": "तारीख"
},
"description": {
"label": "विवरण"
},
"email": {
"label": "ईमेल पता"
},
"end-date": {
"help-text": "इस फ़ील्ड को खाली छोड़ दें, यदि अभी भी मौजूद है",
"label": "अंतिम तिथि"
},
"keywords": {
"label": "कीवर्ड"
},
"level": {
"label": "स्तर"
},
"levelNum": {
"label": "स्तर (संख्या)"
},
"name": {
"label": "नाम"
},
"phone": {
"label": "फ़ोन नंबर"
},
"position": {
"label": "स्थान"
},
"start-date": {
"label": "आरंभ करने की तिथि"
},
"subtitle": {
"label": "उपशीर्षक"
},
"summary": {
"label": "सारांश"
},
"title": {
"label": "शीर्षक"
},
"url": {
"label": "वेबसाइट"
}
},
"glossary": {
"page": "पृष्ठ"
},
"list": {
"actions": {
"delete": "हटाएं",
"duplicate": "डुप्लिकेट",
"edit": "संपादित करें"
},
"empty-text": "यह सूची खाली है।"
},
"tooltip": {
"delete-item": "क्या आप सुनिश्चित रूप से इस आइटम को मिटाना चाहते हैं? यह एक अपरिवर्तनीय क्रिया है।",
"delete-section": "अनुभाग हटाएं",
"rename-section": "अनुभाग का नाम बदलें",
"toggle-visibility": "दृश्यता टॉगल करें"
}
},
"controller": {
"tooltip": {
"center-artboard": "केंद्र आर्टबोर्ड",
"copy-link": "फिर से शुरू करने के लिए लिंक कॉपी करें",
"export-pdf": "पीडीएफ निर्यात करें",
"toggle-orientation": "टॉगल पेज ओरिएंटेशन",
"toggle-page-break-line": "टॉगल पेज ब्रेक लाइन",
"toggle-sidebars": "साइडबार टॉगल करें",
"zoom-in": "ज़ूम इन",
"zoom-out": "ज़ूम आउट"
}
},
"header": {
"menu": {
"delete": "हटाएं",
"duplicate": "डुप्लिकेट",
"rename": "नाम बदलें",
"share-link": "लिंक शेयर करें",
"tooltips": {
"delete": "क्या आप वाकई इस रेज़्यूमे को हटाना चाहते हैं? यह एक अपरिवर्तनीय क्रिया है।",
"share-link": "आपको अपने रेज़्यूमे की दृश्यता को सार्वजनिक करने की आवश्यकता है ताकि इसे दूसरों को दिखाई दे।"
}
}
},
"leftSidebar": {
"sections": {
"awards": {
"form": {
"awarder": {
"label": "पुरस्कार देने वाला"
}
}
},
"basics": {
"actions": {
"photo-filters": "फोटो फिल्टर"
},
"heading": "मूल बातें",
"headline": {
"label": "शीर्षक"
},
"name": {
"label": "पूरा नाम"
},
"photo-filters": {
"effects": {
"border": {
"label": "बॉर्डर"
},
"grayscale": {
"label": "स्केल"
},
"heading": "प्रभाव"
},
"shape": {
"heading": "आकार"
},
"size": {
"heading": "आकार (पीएक्स में)"
}
},
"photo-upload": {
"tooltip": {
"remove": "फोटो हटाएं",
"upload": "फोटो अपलोड करें"
}
}
},
"certifications": {
"form": {
"issuer": {
"label": "जारीकर्ता"
}
}
},
"education": {
"form": {
"area-study": {
"label": "अध्ययन का क्षेत्र"
},
"courses": {
"label": "पाठ्यक्रम"
},
"degree": {
"label": "डिग्री"
},
"grade": {
"label": "ग्रेड"
},
"institution": {
"label": "संस्थान"
}
}
},
"location": {
"address": {
"label": "पता"
},
"city": {
"label": "शहर"
},
"country": {
"label": "देश"
},
"heading": "स्थान",
"postal-code": {
"label": "डाक कोड"
},
"region": {
"label": "क्षेत्र"
}
},
"profiles": {
"form": {
"network": {
"label": "नेटवर्क"
},
"username": {
"label": "उपयोगकर्ता नाम"
}
},
"heading": "प्रोफाइल",
"heading_one": "प्रोफ़ाइल"
},
"publications": {
"form": {
"publisher": {
"label": "प्रकाशक"
}
}
},
"references": {
"form": {
"relationship": {
"label": "संबंध"
}
}
},
"section": {
"heading": "अनुभाग"
},
"volunteer": {
"form": {
"organization": {
"label": "संगठन"
}
}
}
}
},
"rightSidebar": {
"sections": {
"css": {
"heading": "कस्टम सीएसएस"
},
"export": {
"heading": "निर्यात",
"json": {
"primary": "JSON",
"secondary": "अपने रेज़्यूमे का JSON संस्करण डाउनलोड करें जिसे रिएक्टिव रेज़्यूमे में वापस आयात किया जा सकता है।"
},
"pdf": {
"loading": {
"primary": "पीडीएफ उत्पन्न करना",
"secondary": "कृपया प्रतीक्षा करें क्योंकि आपका PDF जनरेट हो गया है, इसमें 15 सेकंड तक लग सकते हैं।"
},
"normal": {
"primary": "पीडीएफ",
"secondary": "अपने रिज्यूमे का एक पीडीएफ डाउनलोड करें जिसे आप प्रिंट कर सकते हैं और अपने सपनों की नौकरी के लिए भेज सकते हैं। आगे के संपादन के लिए इस फ़ाइल को वापस आयात नहीं किया जा सकता है।"
}
}
},
"layout": {
"heading": "ख़ाका",
"tooltip": {
"reset-layout": "लेआउट रीसेट करें"
}
},
"links": {
"bugs-features": {
"body": "कुछ आपको रिज्यूमे बनाने से रोक रहा है? या क्या आपके पास जोड़ने के लिए एक अद्भुत विचार है? आरंभ करने के लिए गिटहब पर एक मुद्दा उठाएं।",
"button": "गिटहब मुद्दे",
"heading": "कीड़े? सुविधा का अनुरोध?"
},
"donate": {
"body": "यदि आप रिएक्टिव रिज्यूमे का उपयोग करना पसंद करते हैं, तो कृपया ऐप को चालू रखने और विज्ञापनों के बिना और हमेशा के लिए मुक्त रखने के लिए जितना हो सके दान करने पर विचार करें।",
"button": "मेरे लिए एक कॉफी खरीदें",
"heading": "प्रतिक्रियाशील फिर से शुरू करने के लिए दान करें"
},
"github": "सोर्स कोड",
"heading": "लिंक"
},
"settings": {
"global": {
"date": {
"primary": "तारीख",
"secondary": "पूरे ऐप में उपयोग करने के लिए दिनांक प्रारूप"
},
"heading": "वैश्विक",
"language": {
"primary": "भाषा",
"secondary": "पूरे ऐप में उपयोग करने के लिए भाषा प्रदर्शित करें"
},
"theme": {
"primary": "विषय"
}
},
"heading": "समायोजन",
"page": {
"break-line": {
"primary": "अंतराल वाली लकीर",
"secondary": "A4 पृष्ठ की ऊंचाई को चिह्नित करने के लिए सभी पृष्ठों पर एक पंक्ति दिखाएं"
},
"heading": "पृष्ठ",
"orientation": {
"disabled": "केवल एक पृष्ठ होने पर कोई प्रभाव नहीं पड़ता",
"primary": "अभिविन्यास",
"secondary": "पृष्ठों को क्षैतिज या लंबवत रूप से प्रदर्शित करना है या नहीं"
}
},
"resume": {
"heading": "फिर शुरू करना",
"reset": {
"primary": "सब कुछ रीसेट करें",
"secondary": "बहुत सारी गलतियाँ कीं? सभी परिवर्तनों को रीसेट करने और नए सिरे से शुरू करने के लिए यहां क्लिक करें। सावधान रहें, इस क्रिया को उलटा नहीं किया जा सकता है।"
},
"sample": {
"primary": "नमूना डेटा लोड करें",
"secondary": "पता नहीं कहां से शुरू करना है? कुछ नमूना डेटा लोड करने के लिए यहां क्लिक करें यह देखने के लिए कि एक पूरा रिज्यूमे कैसा दिखता है।"
}
}
},
"sharing": {
"heading": "शेयरिंग",
"short-url": {
"label": "लघु URL को प्राथमिकता दें"
},
"visibility": {
"subtitle": "लिंक वाले किसी भी व्यक्ति को अपना बायोडाटा देखने की अनुमति दें",
"title": "जनता"
}
},
"templates": {
"heading": "टेम्पलेट्स"
},
"theme": {
"form": {
"background": {
"label": "पृष्ठभूमि"
},
"primary": {
"label": "मुख्य"
},
"text": {
"label": "मूलपाठ"
}
},
"heading": "विषय"
},
"typography": {
"form": {
"font-family": {
"label": "फ़ॉन्ट परिवार"
},
"font-size": {
"label": "फ़ॉन्ट आकार"
}
},
"heading": "टाइपोग्राफी",
"widgets": {
"body": {
"label": "शरीर"
},
"headings": {
"label": "शीर्षकों"
}
}
}
}
}
}

View File

@ -0,0 +1,32 @@
{
"avatar": {
"menu": {
"greeting": "नमस्ते",
"logout": "लॉग आउट"
}
},
"footer": {
"credit": "<1>अमृत पिल्लै</1> . का एक जुनूनी प्रोजेक्ट",
"language": {
"missing": "आपकी भाषा याद आ रही है?"
},
"license": "समाज के लिए, समाज के लिए।"
},
"markdown": {
"help-text": "यह अनुभाग <1>मार्कडाउन</1> स्वरूपण का समर्थन करता है।"
},
"date": {
"present": "वर्तमान"
},
"subtitle": "एक फ्री और ओपन सोर्स रिज्यूम बिल्डर।",
"title": "रिएक्टिव रिज्यूमे",
"toast": {
"error": {
"upload-file-size": "कृपया केवल 2 मेगाबाइट से कम की फ़ाइलें अपलोड करें।",
"upload-photo-size": "कृपया केवल 2 मेगाबाइट से कम के फ़ोटो अपलोड करें, अधिमानतः वर्गाकार।"
},
"success": {
"resume-link-copied": "आपके रिज्यूमे का लिंक आपके क्लिपबोर्ड पर कॉपी कर दिया गया है।"
}
}
}

View File

@ -0,0 +1,25 @@
{
"create-resume": {
"subtitle": "शून्य से शुरू करें",
"title": "नया रिज्यूमे बनाएं"
},
"import-external": {
"subtitle": "लिंक्डइन, JSON रिज्यूमे, रिएक्टिव रिज्यूमे",
"title": "बाहरी स्रोतों से आयात"
},
"resume": {
"menu": {
"delete": "हटाएं",
"duplicate": "डुप्लिकेट",
"open": "खुला हुआ",
"rename": "नाम बदलें",
"share-link": "लिंक शेयर करें",
"tooltips": {
"delete": "क्या आप वाकई इस रेज़्यूमे को हटाना चाहते हैं? यह एक अपरिवर्तनीय क्रिया है।",
"share-link": "आपको अपने रेज़्यूमे की दृश्यता को सार्वजनिक करने की आवश्यकता है ताकि इसे दूसरों को दिखाई दे।"
}
},
"timestamp": "पिछली बार अपडेट किया गया {{timestamp}} पहले"
},
"title": "डैशबोर्ड"
}

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "ऐप्स पर जाएं",
"login": "लॉग इन करें",
"logout": "लॉग आउट",
"register": "रजिस्टर करें"
},
"features": {
"heading": "विशेषताएं",
"list": {
"ads": "कोई विज्ञापन नहीं",
"export": "अपने रिज्यूमे को JSON या PDF फॉर्मेट में एक्सपोर्ट करें",
"free": "हमेशा के लिए आज़ाद",
"import": "लिंक्डइन, JSON रिज्यूमे से डेटा आयात करें",
"languages": "कई भाषाओं में सुलभ",
"more": "और भी बहुत कुछ रोमांचक विशेषताएं, <1>इसके बारे में सब कुछ यहां पढ़ें</1>",
"tracking": "कोई उपयोगकर्ता ट्रैकिंग नहीं"
}
},
"links": {
"heading": "लिंक",
"links": {
"donate": "दान करना",
"github": "सोर्स कोड",
"privacy": "गोपनीयता नीति",
"service": "सेवा की शर्तें"
}
},
"screenshots": {
"heading": "स्क्रीनशॉट"
},
"testimonials": {
"heading": "प्रशंसापत्र",
"body": "अच्छा या बुरा, मुझे रिएक्टिव रिज्यूमे पर आपकी राय और आपके लिए अनुभव कैसा रहा, यह जानकर अच्छा लगेगा।<br/>यहां दुनिया भर के उपयोगकर्ताओं द्वारा भेजे गए कुछ संदेश दिए गए हैं।",
"contact": "आप <1>मेरे ईमेल</1> के माध्यम से या <3>मेरी वेबसाइट</3> पर संपर्क फ़ॉर्म के माध्यम से मुझसे संपर्क कर सकते हैं।"
},
"summary": {
"body": "रिएक्टिव रिज्यूमे एक फ्री और ओपन सोर्स रिज्यूमे बिल्डर है जो आपके रिज्यूमे को बनाने, अपडेट करने और साझा करने के सांसारिक कार्यों को 1, 2, 3 जितना आसान बनाने के लिए बनाया गया है। इस ऐप के साथ, आप कई रिज्यूमे बना सकते हैं, उन्हें रिक्रूटर्स या दोस्तों के साथ साझा कर सकते हैं। एक अद्वितीय लिंक के माध्यम से और अपने डेटा की अखंडता और गोपनीयता को खोए बिना इसे एक पीडीएफ के रूप में प्रिंट करें, सब कुछ मुफ्त में, कोई विज्ञापन नहीं, कोई ट्रैकिंग नहीं।",
"heading": "सारांश"
}
}

View File

@ -0,0 +1,135 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "रीसेट पासवर्ड ईमेल भेजें"
},
"body": "बस उस खाते से संबद्ध ईमेल पता दर्ज करें जिसे आप पुनर्प्राप्त करना चाहते हैं।",
"form": {
"email": {
"label": "ईमेल पता"
}
},
"heading": "अपना कूट शब्द भूल गए?",
"help-text": "यदि खाता मौजूद है, तो आपको अपना पासवर्ड रीसेट करने के लिए एक लिंक के साथ एक ईमेल प्राप्त होगा।"
},
"login": {
"actions": {
"login": "लॉग इन करें",
"google": "Google के साथ लॉगिन करें"
},
"body": "लॉग इन करने और अपने रिज्यूमे को एक्सेस करने, प्रबंधित करने और साझा करने के लिए कृपया अपने खाते से संबद्ध अपना उपयोगकर्ता नाम और पासवर्ड दर्ज करें।",
"form": {
"password": {
"label": "कुंजिका"
},
"username": {
"help-text": "आप अपना ईमेल पता भी दर्ज कर सकते हैं",
"label": "उपयोगकर्ता नाम"
}
},
"heading": "अपने अकाउंट में लॉग इन करें",
"recover-text": "यदि आप अपना पासवर्ड भूल गए हैं, तो आप यहां <1>अपना खाता पुनर्प्राप्त</1> कर सकते हैं।",
"register-text": "यदि आपके पास खाता नहीं है, तो आप यहां <1>खाता बना</1> सकते हैं।"
},
"register": {
"actions": {
"register": "रजिस्टर करें",
"google": "Google के साथ रजिस्टर करें"
},
"body": "खाता बनाने के लिए कृपया अपनी व्यक्तिगत जानकारी दर्ज करें।",
"form": {
"confirm-password": {
"label": "पासवर्ड की पुष्टि कीजिये"
},
"email": {
"label": "ईमेल पता"
},
"name": {
"label": "पूरा नाम"
},
"password": {
"label": "कुंजिका"
},
"username": {
"label": "उपयोगकर्ता नाम"
}
},
"heading": "खाता बनाएं",
"loginText": "यदि आपके पास पहले से ही एक खाता है, तो आप <1>यहां लॉगिन</1> कर सकते हैं।"
},
"reset-password": {
"actions": {
"set-password": "नया पासवर्ड सेट करें"
},
"body": "अपने खाते के लिए एक नया पासवर्ड दर्ज करें।",
"form": {
"confirm-password": {
"label": "पासवर्ड की पुष्टि कीजिये"
},
"password": {
"label": "कुंजिका"
}
},
"heading": "अपना पासवर्ड रीसेट करें"
}
},
"dashboard": {
"create-resume": {
"actions": {
"create-resume": "रिज्यूमे बनाएं"
},
"body": "इसे एक नाम देकर अपना रिज्यूमे बनाना शुरू करें। यह उस भूमिका के संदर्भ में हो सकता है जिसके लिए आप आवेदन कर रहे हैं, या सिर्फ आपका पसंदीदा नाश्ता।",
"form": {
"name": {
"label": "नाम"
},
"public": {
"label": "सार्वजनिक रूप से सुलभ है?"
},
"slug": {
"label": "काउंटर"
}
},
"heading": "एक नया बायोडाटा बनाएं"
},
"import-external": {
"heading": "बाहरी स्रोतों से आयात",
"json-resume": {
"actions": {
"upload-json": "JSON अपलोड करें"
},
"body": "यदि आपके पास <1>मान्य JSON रिज्यूमे</1> जाने के लिए तैयार है, तो आप इसका उपयोग रिएक्टिव रिज्यूमे पर अपने विकास को तेजी से ट्रैक करने के लिए कर सकते हैं। शुरू करने के लिए नीचे दिए गए बटन पर क्लिक करें और एक मान्य JSON फ़ाइल अपलोड करें।",
"heading": "JSON रिज्यूमे से आयात करें"
},
"linkedin": {
"actions": {
"upload-archive": "ज़िप संग्रह अपलोड करें"
},
"body": "आप अपने डेटा को लिंक्डइन से निर्यात करके और रिएक्टिव रिज्यूमे पर ऑटो-फिल फ़ील्ड में इसका उपयोग करके समय बचा सकते हैं। लिंक्डइन पर <1>डेटा गोपनीयता</1> अनुभाग पर जाएं और अपने डेटा के संग्रह का अनुरोध करें। एक बार यह उपलब्ध हो जाने पर, नीचे ज़िप फ़ाइल अपलोड करें।",
"heading": "लिंक्डइन से आयात करें"
},
"reactive-resume": {
"actions": {
"upload-json": "JSON अपलोड करें"
},
"body": "यदि आपके पास एक JSON है जिसे रिएक्टिव रिज्यूमे के वर्तमान संस्करण के साथ निर्यात किया गया था, तो आप इसे फिर से एक संपादन योग्य संस्करण प्राप्त करने के लिए यहां वापस आयात कर सकते हैं। रिएक्टिव रिज्यूमे के पिछले संस्करण दुर्भाग्य से इस समय समर्थित नहीं हैं।",
"heading": "रिएक्टिव रिज्यूमे से आयात करें"
}
},
"rename-resume": {
"actions": {
"rename-resume": "रिज्यूमे का नाम बदलें"
},
"form": {
"name": {
"label": "नाम"
},
"slug": {
"label": "काउंटर"
}
},
"heading": "अपने रिज्यूमे का नाम बदलें"
}
}
}

View File

@ -61,9 +61,15 @@
"page": "ಪುಟ"
},
"list": {
"actions": {
"delete": "ಅಳಿಸಿ",
"duplicate": "ನಕಲು ಮಾಡಿ",
"edit": "ತಿದ್ದು"
},
"empty-text": "ಈ ಪಟ್ಟಿ ಖಾಲಿಯಾಗಿದೆ."
},
"tooltip": {
"delete-item": "ಈ ಐಟಂ ಅನ್ನು ಅಳಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ? ಇದು ಬದಲಾಯಿಸಲಾಗದ ಕ್ರಮ.",
"delete-section": "ವಿಭಾಗವನ್ನು ಅಳಿಸಿ",
"rename-section": "ವಿಭಾಗವನ್ನು ಮರುಹೆಸರಿಸಿ",
"toggle-visibility": "ಗೋಚರತೆಯನ್ನು ಟಾಗಲ್ ಮಾಡಿ"
@ -284,6 +290,7 @@
},
"heading": "ಪುಟ",
"orientation": {
"disabled": "ಒಂದು ಪುಟ ಮಾತ್ರ ಇರುವಾಗ ಯಾವುದೇ ಪರಿಣಾಮ ಬೀರುವುದಿಲ್ಲ",
"primary": "ದೃಷ್ಟಿಕೋನ",
"secondary": "ಪುಟಗಳನ್ನು ಅಡ್ಡಲಾಗಿ ಅಥವಾ ಲಂಬವಾಗಿ ಪ್ರದರ್ಶಿಸಬೇಕೆ"
}

View File

@ -7,11 +7,17 @@
},
"footer": {
"credit": "<1>ಅಮೃತ್ ಪಿಳ್ಳೈ</1> ಅವರು ಉತ್ಸಾಹದಿಂದ ಮಾಡಿರುವ ಪ್ರಾಜೆಕ್ಟ್",
"language": {
"missing": "ನಿಮ್ಮ ಭಾಷೆ ಕಾಣೆಯಾಗಿದೆಯೇ?"
},
"license": "ಸಮುದಾಯದಿಂದ, ಸಮುದಾಯಕ್ಕಾಗಿ."
},
"markdown": {
"help-text": "ಈ ವಿಭಾಗವು <1>ಮಾರ್ಕ್‌ಡೌನ್</1> ಫಾರ್ಮ್ಯಾಟಿಂಗ್ ಅನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ."
},
"date": {
"present": "ಪ್ರಸ್ತುತ"
},
"subtitle": "ಉಚಿತ ಮತ್ತು ಮುಕ್ತ ಮೂಲ ರೇಸುಮೆ ಬಿಲ್ಡರ್.",
"title": "ರಿಯಾಕ್ಟಿವ್ ರೇಸುಮೆ",
"toast": {

View File

@ -11,7 +11,7 @@
}
},
"heading": "ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ ಮರೆತಿರುವಿರಾ?",
"help-text": "ಖಾತೆಯು ಅಸ್ತಿತ್ವದಲ್ಲಿದ್ದರೆ, ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಮರುಹೊಂದಿಸಲು ಲಿಂಕ್‌ನೊಂದಿಗೆ ಇಮೇಲ್ ಅನ್ನು ನೀವು ಸ್ವೀಕರಿಸುತ್ತೀರಿ."
"help-text": "%1 ರ ಜೊತೆ ಜೋಡಣೆಯಾಗಿರುವ ಖಾತೆ ಇದ್ದಲ್ಲಿ, ನೀವು ನಿಮ್ಮ ಗುಪ್ತಪದ ಮರುಹೊಂದಿಕೆ ಕೊಂಡಿಯನ್ನು ಹೊಂದಿರುವ ಮಿಂಚೆಯನ್ನು ಪಡೆಯುವಿರಿ."
},
"login": {
"actions": {
@ -104,16 +104,16 @@
},
"linkedin": {
"actions": {
"upload-archive": "ಜಿಪ್ ಆರ್ಕೈವ್ ಅನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಿ"
"upload-archive": "ಜಿಪ್ (ZIP) ಆರ್ಕೈವ್ ಅನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಿ"
},
"body": "ಲಿಂಕ್ಡ್‌ಇನ್‌ನಿಂದ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ರಫ್ತು ಮಾಡುವ ಮೂಲಕ ಮತ್ತು ರಿಯಾಕ್ಟಿವ್ ರೆಸ್ಯೂಮ್‌ನಲ್ಲಿ ಕ್ಷೇತ್ರಗಳನ್ನು ಸ್ವಯಂ ತುಂಬಲು ಅದನ್ನು ಬಳಸುವ ಮೂಲಕ ನೀವು ಸಮಯವನ್ನು ಉಳಿಸಬಹುದು. <1>ಡೇಟಾ ಗೌಪ್ಯತೆಗೆ ಹೋಗಿ</1> ಲಿಂಕ್ಡ್‌ಇನ್‌ನಲ್ಲಿ ವಿಭಾಗ ಮತ್ತು ನಿಮ್ಮ ಡೇಟಾದ ಆರ್ಕೈವ್ ಅನ್ನು ವಿನಂತಿಸಿ. ಒಮ್ಮೆ ಅದು ಲಭ್ಯವಾದ ನಂತರ, ಕೆಳಗಿನ ಜಿಪ್ ಆರ್ಕೈವ್ ಅನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಿ.",
"heading": "ಲಿಂಕ್ಡಿನ್ ನಿಂದ ಆಮದು ಮಾಡಿಕೊಳ್ಳಿ"
"body": "ಲಿಂಕ್ಡ್‌ಇನ್‌ನಿಂದ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ರಫ್ತು ಮಾಡುವ ಮೂಲಕ ಮತ್ತು ರಿಯಾಕ್ಟಿವ್ ರೆಸ್ಯೂಮ್‌ನಲ್ಲಿ ಕ್ಷೇತ್ರಗಳನ್ನು ಸ್ವಯಂ ತುಂಬಲು ಅದನ್ನು ಬಳಸುವ ಮೂಲಕ ನೀವು ಸಮಯವನ್ನು ಉಳಿಸಬಹುದು. <1>ಡೇಟಾ ಗೌಪ್ಯತೆಗೆ ಹೋಗಿ</1> ಲಿಂಕ್ಡ್‌ಇನ್‌ನಲ್ಲಿ ವಿಭಾಗ ಮತ್ತು ನಿಮ್ಮ ಡೇಟಾದ ಆರ್ಕೈವ್ ಅನ್ನು ವಿನಂತಿಸಿ. ಒಮ್ಮೆ ಅದು ಲಭ್ಯವಾದ ನಂತರ, ಕೆಳಗಿನ ZIP ಫೈಲ್ ಅನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಿ.",
"heading": "ಲಿಂಕ್ಡಿನ್(LinkedIn) ನಿಂದ ಆಮದು ಮಾಡಿಕೊಳ್ಳಿ"
},
"reactive-resume": {
"actions": {
"upload-json": "ಜೆಸನ್ ಅನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಿ"
},
"body": "ನೀವು ರಿಯಾಕ್ಟಿವ್ ರೆಸ್ಯೂಮ್‌ನ ಪ್ರಸ್ತುತ ಆವೃತ್ತಿಯೊಂದಿಗೆ ರಫ್ತು ಮಾಡಲಾದ ಜೆಸನ್ ಅನ್ನು ಹೊಂದಿದ್ದರೆ, ಮತ್ತೆ ಸಂಪಾದಿಸಬಹುದಾದ ಆವೃತ್ತಿಯನ್ನು ಪಡೆಯಲು ನೀವು ಅದನ್ನು ಇಲ್ಲಿಗೆ ಆಮದು ಮಾಡಿಕೊಳ್ಳಬಹುದು. ರಿಯಾಕ್ಟಿವ್ ರೆಸ್ಯೂಮ್‌ನ ಹಿಂದಿನ ಆವೃತ್ತಿಗಳು ದುರದೃಷ್ಟವಶಾತ್ ಸದ್ಯಕ್ಕೆ ಬೆಂಬಲಿತವಾಗಿಲ್ಲ.",
"body": "ನೀವು ರಿಯಾಕ್ಟಿವ್ ರೆಸ್ಯೂಮ್‌ನ ಪ್ರಸ್ತುತ ಆವೃತ್ತಿಯೊಂದಿಗೆ ರಫ್ತು ಮಾಡಲಾದ ಜೆಸನ್(JSON) ಅನ್ನು ಹೊಂದಿದ್ದರೆ, ಮತ್ತೆ ಸಂಪಾದಿಸಬಹುದಾದ ಆವೃತ್ತಿಯನ್ನು ಪಡೆಯಲು ನೀವು ಅದನ್ನು ಇಲ್ಲಿಗೆ ಆಮದು ಮಾಡಿಕೊಳ್ಳಬಹುದು. ರಿಯಾಕ್ಟಿವ್ ರೆಸ್ಯೂಮ್‌ನ ಹಿಂದಿನ ಆವೃತ್ತಿಗಳು ದುರದೃಷ್ಟವಶಾತ್ ಸದ್ಯಕ್ಕೆ ಬೆಂಬಲಿತವಾಗಿಲ್ಲ.",
"heading": "ಜೆಸನ್ ರೆಸ್ಯೂಮ್‌ನಿಂದ ಆಮದು ಮಾಡಿಕೊಳ್ಳಿ"
}
},

View File

@ -61,9 +61,15 @@
"page": "பக்கம்"
},
"list": {
"actions": {
"delete": "அழி",
"duplicate": "நகல்",
"edit": "தொகு"
},
"empty-text": "இந்த பட்டியல் காலியாக உள்ளது."
},
"tooltip": {
"delete-item": "இந்த உருப்படியை நிச்சயமாக நீக்க விரும்புகிறீர்களா? இது மீள முடியாத செயல்.",
"delete-section": "பிரிவை அழிக்கவும்",
"rename-section": "பிரிவின் பெயரை மாற்றவும்",
"toggle-visibility": "தெரிவுநிலையை நிலைமாற்று"
@ -284,6 +290,7 @@
},
"heading": "பக்கம்",
"orientation": {
"disabled": "ஒரே ஒரு பக்கம் இருக்கும் போது எந்த விளைவும் இல்லை",
"primary": "நோக்குநிலை",
"secondary": "பக்கங்களை கிடைமட்டமாகவோ அல்லது செங்குத்தாகவோ காட்ட வேண்டுமா"
}

View File

@ -7,11 +7,17 @@
},
"footer": {
"credit": "<1>அம்ருத் பிள்ளை</1>யின் திட்டம்",
"language": {
"missing": "உங்கள் மொழியைக் காணவில்லையா?"
},
"license": "சமூகத்தால், சமூகத்திற்காக."
},
"markdown": {
"help-text": "இந்தப் பிரிவு <1>மார்க் டவுன்</1> வடிவமைப்பை ஆதரிக்கிறது."
},
"date": {
"present": "தற்போது"
},
"subtitle": "இலவச மற்றும் ஓப்பன் சோர்ஸ் ரெஸ்யூம் பில்டர்.",
"title": "ரியாக்டிவ் ரெசுமே",
"toast": {

View File

@ -0,0 +1,41 @@
{
"actions": {
"app": "பயன்பாட்டிற்குச் செல்லவும்",
"login": "உள்நுழைய",
"logout": "வெளியேறு",
"register": "பதிவு"
},
"features": {
"heading": "அம்சங்கள்",
"list": {
"ads": "விளம்பரம் இல்லை",
"export": "உங்கள் விண்ணப்பத்தை JSON அல்லது PDF வடிவத்திற்கு ஏற்றுமதி செய்யவும்",
"free": "இலவசம், எப்போதும்",
"import": "LinkedIn, JSON Resume இலிருந்து தரவை இறக்குமதி செய்யவும்",
"languages": "பல மொழிகளில் அணுகக்கூடியது",
"more": "மேலும் மிகவும் அற்புதமான அம்சங்கள், <1>அதைப் பற்றி இங்கே படிக்கவும்</1>",
"tracking": "பயனர் கண்காணிப்பு இல்லை"
}
},
"links": {
"heading": "இணைப்புகள்",
"links": {
"donate": "தானம் செய்",
"github": "மூல குறியீடு",
"privacy": "தனியுரிமைக் கொள்கை",
"service": "சேவை விதிமுறைகள்"
}
},
"screenshots": {
"heading": "திரைக்காட்சிகள்"
},
"testimonials": {
"heading": "சான்றுகள்",
"body": "நல்லதோ கெட்டதோ, ரியாக்டிவ் ரெஸ்யூம் பற்றிய உங்கள் கருத்தையும் உங்களுக்கு எப்படி அனுபவம் இருந்தது என்பதையும் கேட்க விரும்புகிறேன்.<br/>உலகம் முழுவதும் உள்ள பயனர்கள் அனுப்பிய சில செய்திகள் இங்கே உள்ளன.",
"contact": "<1>எனது மின்னஞ்சல்</1> மூலமாகவோ அல்லது <3>எனது இணையதளத்தில்</3> உள்ள தொடர்புப் படிவத்தின் மூலமாகவோ நீங்கள் என்னைத் தொடர்புகொள்ளலாம்."
},
"summary": {
"body": "ரியாக்டிவ் ரெஸ்யூம் என்பது ஒரு இலவச மற்றும் ஓப்பன் சோர்ஸ் ரெஸ்யூம் பில்டராகும், இது உங்கள் விண்ணப்பத்தை உருவாக்குதல், புதுப்பித்தல் மற்றும் பகிர்தல் போன்ற சாதாரண பணிகளை 1, 2, 3 என எளிதாக்கும் வகையில் உருவாக்கப்பட்டுள்ளது. இந்தப் பயன்பாட்டின் மூலம், நீங்கள் பல ரெஸ்யூம்களை உருவாக்கலாம், ஆட்சேர்ப்பு செய்பவர்கள் அல்லது நண்பர்களுடன் பகிர்ந்து கொள்ளலாம். ஒரு தனித்துவமான இணைப்பின் மூலம் அதை PDF ஆக அச்சிடுங்கள், அனைத்தும் இலவசமாக, விளம்பரங்கள் இல்லை, கண்காணிப்பு இல்லை, உங்கள் தரவின் ஒருமைப்பாடு மற்றும் தனியுரிமையை இழக்காமல்.",
"heading": "சுருக்கம்"
}
}

View File

@ -0,0 +1,135 @@
{
"auth": {
"forgot-password": {
"actions": {
"send-email": "கடவுச்சொல்லை மீட்டமைக்கும் மின்னஞ்சலை அனுப்பவும்"
},
"body": "நீங்கள் மீட்டெடுக்க விரும்பும் கணக்குடன் தொடர்புடைய மின்னஞ்சல் முகவரியை உள்ளிடவும்.",
"form": {
"email": {
"label": "மின்னஞ்சல் முகவரி"
}
},
"heading": "உங்கள் கடவுச்சொல்லை மறந்து விட்டீர்களா?",
"help-text": "கணக்கு இருந்தால், உங்கள் கடவுச்சொல்லை மீட்டமைப்பதற்கான இணைப்புடன் மின்னஞ்சலைப் பெறுவீர்கள்."
},
"login": {
"actions": {
"login": "உள்நுழைய",
"google": "Google மூலம் உள்நுழைக"
},
"body": "உள்நுழைவதற்கும் அணுகுவதற்கும், உங்கள் பயோடேட்டாக்களை நிர்வகிப்பதற்கும் பகிரவும் உங்கள் கணக்குடன் தொடர்புடைய உங்கள் பயனர்பெயர் மற்றும் கடவுச்சொல்லை உள்ளிடவும்.",
"form": {
"password": {
"label": "கடவுச்சொல்"
},
"username": {
"help-text": "உங்கள் மின்னஞ்சல் முகவரியையும் உள்ளிடலாம்",
"label": "பயனர் பெயர்"
}
},
"heading": "உங்கள் கணக்கில் உள்நுழைக",
"recover-text": "உங்கள் கடவுச்சொல்லை மறந்துவிட்டால், இங்கே <1>உங்கள் கணக்கை மீட்டெடுக்கலாம்</1>.",
"register-text": "உங்களிடம் ஒன்று இல்லையென்றால், நீங்கள் இங்கே <1>ஒரு கணக்கை உருவாக்கலாம்</1>."
},
"register": {
"actions": {
"register": "பதிவு",
"google": "Google இல் பதிவு செய்யவும்"
},
"body": "கணக்கை உருவாக்க உங்கள் தனிப்பட்ட தகவலை உள்ளிடவும்.",
"form": {
"confirm-password": {
"label": "கடவுச்சொல்லை உறுதிப்படுத்தவும்"
},
"email": {
"label": "மின்னஞ்சல் முகவரி"
},
"name": {
"label": "முழு பெயர்"
},
"password": {
"label": "கடவுச்சொல்"
},
"username": {
"label": "பயனர் பெயர்"
}
},
"heading": "ஒரு கணக்கை உருவாக்க",
"loginText": "உங்களிடம் ஏற்கனவே கணக்கு இருந்தால், நீங்கள் <1>இங்கே உள்நுழையலாம்</1>."
},
"reset-password": {
"actions": {
"set-password": "புதிய கடவுச்சொல்லை அமை"
},
"body": "உங்கள் கணக்கிற்கான புதிய கடவுச்சொல்லை உள்ளிடவும்.",
"form": {
"confirm-password": {
"label": "கடவுச்சொல்லை உறுதிப்படுத்தவும்"
},
"password": {
"label": "கடவுச்சொல்"
}
},
"heading": "உங்கள் கடவுச்சொல்லை மீட்டமைக்க"
}
},
"dashboard": {
"create-resume": {
"actions": {
"create-resume": "ரெஸ்யூமை உருவாக்கவும்"
},
"body": "ஒரு பெயரைக் கொடுத்து உங்கள் விண்ணப்பத்தை உருவாக்கத் தொடங்குங்கள். இது நீங்கள் விண்ணப்பிக்கும் பாத்திரத்தை குறிப்பதாக இருக்கலாம் அல்லது உங்களுக்கு பிடித்த சிற்றுண்டியாக இருக்கலாம்.",
"form": {
"name": {
"label": "பெயர்"
},
"public": {
"label": "பொதுவில் அணுக முடியுமா?"
},
"slug": {
"label": "ஸ்லக்"
}
},
"heading": "புதிய விண்ணப்பத்தை உருவாக்கவும்"
},
"import-external": {
"heading": "வெளி மூலங்களிலிருந்து இறக்குமதி",
"json-resume": {
"actions": {
"upload-json": "JSON ஐப் பதிவேற்றவும்"
},
"body": "உங்களிடம் <1>சரிபார்க்கப்பட்ட JSON ரெஸ்யூம்</1> தயாராக இருந்தால், ரியாக்டிவ் ரெஸ்யூமில் உங்கள் மேம்பாட்டை விரைவாகக் கண்காணிக்க அதைப் பயன்படுத்தலாம். தொடங்குவதற்கு, கீழே உள்ள பொத்தானைக் கிளிக் செய்து சரியான JSON கோப்பைப் பதிவேற்றவும்.",
"heading": "JSON ரெஸ்யூமிலிருந்து இறக்குமதி செய்யவும்"
},
"linkedin": {
"actions": {
"upload-archive": "ZIP காப்பகத்தைப் பதிவேற்றவும்"
},
"body": "LinkedIn இலிருந்து உங்கள் தரவை ஏற்றுமதி செய்து, Reactive Resume இல் புலங்களைத் தானாக நிரப்புவதற்குப் பயன்படுத்துவதன் மூலம் நேரத்தைச் சேமிக்கலாம். LinkedIn இல் <1>தரவு தனியுரிமை</1> பகுதிக்குச் சென்று உங்கள் தரவைக் காப்பகமாகக் கோரவும். அது கிடைத்ததும், ஜிப் கோப்பை கீழே பதிவேற்றவும்.",
"heading": "LinkedIn இலிருந்து இறக்குமதி செய்யவும்"
},
"reactive-resume": {
"actions": {
"upload-json": "JSON ஐப் பதிவேற்றவும்"
},
"body": "Reactive Resume இன் தற்போதைய பதிப்பில் ஏற்றுமதி செய்யப்பட்ட JSON உங்களிடம் இருந்தால், திருத்தக்கூடிய பதிப்பை மீண்டும் பெற, அதை மீண்டும் இங்கு இறக்குமதி செய்யலாம். Reactive Resume இன் முந்தைய பதிப்புகள் துரதிருஷ்டவசமாக தற்போது ஆதரிக்கப்படவில்லை.",
"heading": "Reactive Resume லிருந்து இறக்குமதி செய்யவும்"
}
},
"rename-resume": {
"actions": {
"rename-resume": "ரெஸ்யூமை மறுபெயரிடவும்"
},
"form": {
"name": {
"label": "பெயர்"
},
"slug": {
"label": "ஸ்லக்"
}
},
"heading": "ரெஸ்யூமை மறுபெயரிடவும்"
}
}
}

9
client/public/robots.txt Normal file
View File

@ -0,0 +1,9 @@
# *
User-agent: *
Allow: /
# Host
Host: https://rxresu.me
# Sitemaps
Sitemap: https://rxresu.me/sitemap.xml

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
<url><loc>https://rxresu.me</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-03-12T10:44:13.581Z</lastmod></url>
<url><loc>https://rxresu.me/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-03-12T10:44:13.581Z</lastmod></url>
<url><loc>https://rxresu.me/meta/privacy</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-03-12T10:44:13.581Z</lastmod></url>
<url><loc>https://rxresu.me/meta/service</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-03-12T10:44:13.581Z</lastmod></url>
<url><loc>https://rxresu.me/de/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-03-12T10:44:13.581Z</lastmod></url>
<url><loc>https://rxresu.me/kn/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-03-12T10:44:13.581Z</lastmod></url>
<url><loc>https://rxresu.me/ta/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-03-12T10:44:13.581Z</lastmod></url>
<url><loc>https://rxresu.me/hi/dashboard</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-03-12T10:44:13.581Z</lastmod></url>
<url><loc>https://rxresu.me/de</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-03-12T10:44:13.581Z</lastmod></url>
<url><loc>https://rxresu.me/kn</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-03-12T10:44:13.581Z</lastmod></url>
<url><loc>https://rxresu.me/ta</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-03-12T10:44:13.581Z</lastmod></url>
<url><loc>https://rxresu.me/hi</loc><changefreq>monthly</changefreq><priority>0.7</priority><lastmod>2022-03-12T10:44:13.581Z</lastmod></url>
</urlset>

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap><loc>https://rxresu.me/sitemap-0.xml</loc></sitemap>
</sitemapindex>

View File

@ -91,13 +91,7 @@ const Section: React.FC<SectionProps> = ({
</DataDisplay>
)}
{keywords && (
<div className="leading-normal">
<span className="font-semibold">Keywords:</span>
&nbsp;
{keywords.join(', ')}
</div>
)}
{keywords && <div>{keywords.join(', ')}</div>}
{(phone || email) && (
<div className="grid gap-1">

View File

@ -92,13 +92,7 @@ const Section: React.FC<SectionProps> = ({
</DataDisplay>
)}
{keywords && (
<div className="leading-normal">
<span className="font-semibold">Keywords:</span>
&nbsp;
{keywords.join(', ')}
</div>
)}
{keywords && <div>{keywords.join(', ')}</div>}
{(phone || email) && (
<div className="grid gap-1">

View File

@ -92,13 +92,7 @@ const Section: React.FC<SectionProps> = ({
</DataDisplay>
)}
{keywords && (
<div>
<span className="font-semibold">Keywords:</span>
&nbsp;
{keywords.join(', ')}
</div>
)}
{keywords && <div>{keywords.join(', ')}</div>}
{(phone || email) && (
<div className="grid gap-1">

View File

@ -84,13 +84,7 @@ const Section: React.FC<SectionProps> = ({
</DataDisplay>
)}
{keywords && (
<div className="leading-normal">
<span className="font-semibold">Keywords:</span>
&nbsp;
{keywords.join(', ')}
</div>
)}
{keywords && <div>{keywords.join(', ')}</div>}
{(phone || email) && (
<div className="grid gap-1">

View File

@ -2,6 +2,7 @@ import { DateRange } from '@reactive-resume/schema';
import dayjs from 'dayjs';
import isEmpty from 'lodash/isEmpty';
import isString from 'lodash/isString';
import { i18n } from 'next-i18next';
export const dateFormatOptions: string[] = [
'MMMM DD, YYYY',
@ -14,12 +15,15 @@ export const dateFormatOptions: string[] = [
'YYYY/MM/DD',
'MMMM YYYY',
'MMM YYYY',
'MM/YYYY',
'YYYY',
];
export const getRelativeTime = (timestamp: dayjs.ConfigType): string => dayjs(timestamp).toNow(true);
export const formatDateString = (date: string | DateRange, formatStr: string): string | null => {
const presentString = i18n?.t('common.date.present') ?? '';
if (isEmpty(date)) return null;
// If `date` is a string
@ -38,5 +42,5 @@ export const formatDateString = (date: string | DateRange, formatStr: string): s
return `${dayjs(date.start).format(formatStr)} - ${dayjs(date.end).format(formatStr)}`;
}
return dayjs(date.start).format(formatStr);
return `${dayjs(date.start).format(formatStr)} - ${presentString}`;
};

View File

@ -10,7 +10,11 @@ const DateWrapper: React.FC = ({ children }) => {
dayjs.extend(relativeTime);
// Locales
require('dayjs/locale/es');
require('dayjs/locale/de');
require('dayjs/locale/hi');
require('dayjs/locale/kn');
require('dayjs/locale/ta');
locale && dayjs.locale(locale);
}, [locale]);

4
docs/.eslintrc.json Normal file
View File

@ -0,0 +1,4 @@
{
"extends": "../.eslintrc.json",
"ignorePatterns": ["build", ".docusaurus"]
}

20
docs/.gitignore vendored Normal file
View File

@ -0,0 +1,20 @@
# Dependencies
/node_modules
# Production
/build
# Generated files
.docusaurus
.cache-loader
# Misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*

3
docs/babel.config.js Normal file
View File

@ -0,0 +1,3 @@
module.exports = {
presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
};

69
docs/docs/index.mdx Normal file
View File

@ -0,0 +1,69 @@
---
sidebar_position: 1
sidebar_label: Introduction
---
import TOCInline from '@theme/TOCInline';
# Reactive Resume
![Project Version](https://img.shields.io/github/package-json/v/AmruthPillai/Reactive-Resume?style=flat-square)
![Project License](https://img.shields.io/github/license/AmruthPillai/Reactive-Resume?style=flat-square)
[![Docker Pulls](https://img.shields.io/docker/pulls/amruthpillai/reactive-resume?style=flat-square)](https://hub.docker.com/r/amruthpillai/reactive-resume)
[![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)
## Summary
Reactive Resume is a free and open source resume builder that's built to make the mundane tasks of creating, updating and sharing your resume as easy as 1, 2, 3. With this app, you can create multiple resumes, share them with recruiters through a unique link and print as PDF, all for free, no advertisements, without losing the integrity and privacy of your data.
You have complete control over what goes into your resume, how it looks, what colors, what templates, even the layout in which sections placed. Want a dark mode resume? It's as easy as editing 3 values and you're done. You don't need to wait to see your changes either. Everything you type, everything you change, appears immediately on your resume and gets updated in real time.
## Features
- Free, forever
- No Advertising
- No User Tracking
- Sync your data across devices
- Import data from [LinkedIn](https://www.linkedin.com/), [JSON Resume](https://jsonresume.org/)
- Manage multiple resumes with one account
- Open Source (with large community support)
- Send your resume to others with a unique sharable link
- Accessible in multiple languages, [help translate here](https://translate.rxresu.me/)
- Pick any font from [Google Fonts](https://fonts.google.com/) to use on your resume
- Choose from 6 vibrant templates and more coming soon
- Export your resume to JSON or PDF format with just one click
- Create an account using your email, or just Sign in with Google
- Mix and match colors to any degree, even a dark mode resume?
- Add sections, add pages and change layouts the way you want to
- Tailor-made Backend and Database, isolated from Google, Amazon etc.
- **Oh, and did I mention that it's free?**
## Languages
- English
- German (Deutsch)
- Hindi (हिन्दी)
- Kannada (ಕನ್ನಡ) (@aksh1251)
- Spanish (Español) (@seba11998)
- Tamil (தமிழ்)
Help by [translating Reactive Resume](https://translate.rxresu.me) to your language!
## Report Issues
Use the [GitHub Issues](https://github.com/AmruthPillai/Reactive-Resume/issues/new/choose) platform to notify me about bugs or new features that you would like to see in Reactive Resume. Please check before creating new issues as there might already be one.
## Donations
Reactive Resume would be nothing without the folks who supported me and kept the project alive in the beginning, and your cotinued support is what keeps me going. If you found Reactive Resume to be useful, helpful or just insightful and appreciate the effort I took to make the project, please consider donating as little or as much as your can.
#### [☕️ Buy me a coffee](https://www.buymeacoffee.com/AmruthPillai) | [💸 PayPal](https://paypal.me/RajaRajanA)
## License
Reactive Resume is packaged and distributed using the [MIT License](https://choosealicense.com/licenses/mit/) which allows for commercial use, distribution, modification and private use provided that all copies of the software contain the same license and copyright.
_By the community, for the community._
A passion project by [Amruth Pillai](https://amruthpillai.com/)

View File

@ -0,0 +1,2 @@
position: 3
label: Source Code

View File

@ -0,0 +1,38 @@
---
sidebar_position: 1
---
# Docker
This is probably the easiest method to build the source code on your machine if you already have Docker and Docker Compose installed. If you don't have Docker on your machine, I'll let you figure that out on your own.
1. Once you have Docker set up, you can pull the source code from GitHub and dive into the repository.
```bash
git clone git@github.com:AmruthPillai/Reactive-Resume.git
cd Reactive-Resume
```
2. Install dependencies using [pnpm](https://pnpm.io/), but feel free to use any other package manager that supports [npm workspaces](https://docs.npmjs.com/cli/v8/using-npm/workspaces).
```bash
pnpm install
```
3. Copy the `.env.example` file to `.env` in the project root and fill it with values according to your setup. To know which environment variables are required, and about what they do, head over [this section](env-vars).
```bash
cp .env.example .env
```
4. Use Docker Compose to create a PostgreSQL instance and a `reactive_resume` database, or feel free to use your own and modify the variables used in `.env`
```bash
docker-compose up -d postgres
```
5. Run the project and start building!
```bash
pnpm dev
```

View File

@ -0,0 +1,163 @@
---
sidebar_position: 3
---
import TOCInline from '@theme/TOCInline';
# Environment Variables
The project source code requires certain envrionment variables to be pre-set in order to work as expected. You can get a copy of what the `.env` file should look like from the `.env.example` file in the root of the project's [source code](https://github.com/AmruthPillai/Reactive-Resume/blob/main/.env.example).
Here, I'll be explaining what each of the environment variables are for, and which ones are actually **required** and which ones aren't.
### Sections
<TOCInline toc={toc} minHeadingLevel="2" maxHeadingLevel="2" />
## App
### `TZ`
**Required**: `no`
**Default Value:** `UTC`
**Description:** Server Timezone
This field is just to indicate the timezone that the server should follow. This is just so that the date time information should be unified and all timestamps should follow the same suit.
### `SECRET_KEY`
**Required**: `yes`
**Description:** Secret Key for Client-Server Communication
The secret key can be a unique key, a randomly generated string that is used for client-server communication. You can use this [random.org](https://www.random.org/strings/?num=10&len=20&digits=on&upperalpha=on&loweralpha=on&unique=on&format=html&rnd=new) configuration to generate a long unique string.
## URLs
### `PUBLIC_URL`
**Required**: `yes`
**Description:** URL through which app is accessible
**Default Value:** `http://localhost:3000`
This URL would be used in features like link sharing functionality and authentication redirection. This points only to the client app, as the server would be running on `PORT 3100` always.
### `PUBLIC_SERVER_URL`
**Required**: `yes`
**Description:** URL through which server is accessible
**Default Value:** `http://localhost:3100`
This URL is used when export PDF functionality is used within the app and has to reach out to the server.
## Database
### `POSTGRES_HOST`
**Required**: `yes`
**Default Value:** `localhost`
**Description:** Hostname for the PostgreSQL Server
### `POSTGRES_PORT`
**Required**: `yes`
**Default Value:** `5432`
**Description:** Port of the PostgreSQL Server
### `POSTGRES_USERNAME`
**Required**: `yes`
**Default Value:** `postgres`
**Description:** Username of the PostgreSQL Server
### `POSTGRES_PASSWORD`
**Required**: `yes`
**Default Value:** `postgres`
**Description:** Password of the PostgreSQL Server
### `POSTGRES_DATABASE`
**Required**: `yes`
**Default Value:** `reactive_resume`
**Description:** Name of the Database in PostgreSQL Server
### `POSTGRES_SSL_CERT`
**Required**: `no`
**Description:** Base64 Encoded String of the SSL CA Certificate
Some production-grade managed databases require the need to pass a CA certificate along with the options. You can encode the contents of the `.crt` file sent to you by your cloud provider in _Base64_ and provide it as a environment variable.
## Authentication
### `JWT_SECRET`
**Required**: `yes`
**Description:** Secret to Sign and Extract JWT Payloads
Similar to the `SECRET_KEY`, this can also be a unique generated string. This is used for email/password authentication, to hash + salt passwords stored in the database so they are unreadable.
### `JWT_EXPIRY_TIME`
**Required**: `yes`
**Default Value:** `604800`
**Description:** How long should the JWT be valid for?
This value, in milliseconds, denotes the validity of the JWT token. A shorter value would make the user have to login more frequently.
## Google
As much as I'd like to keep Google out of the picture, they do provide a few services that are actually useful. Namely, Google OAuth (for Login with Google) and Google Fonts (to list all fonts and use them on a resume).
### `PUBLIC_GOOGLE_CLIENT_ID`
**Required**: `no`
**Description:** Google Client ID for Google Login
This field is only required if the Google Login functionality is important to you.
### `GOOGLE_CLIENT_SECRET`
**Required**: `no`
**Description:** Google Client Secret for Google Login
This field is only required if the Google Login functionality is important to you.
### `GOOGLE_API_KEY`
**Required**: `yes`
**Description:** Google API Key used for fetching Google Fonts
Within the resume builder, there's a section where you can pick any font from the Google Fonts Library. To fetch the names and IDs of these fonts, we depend on the Google Fonts API. It does not cost any payment, or the need to enter credit card information to create or use this API.
You can get your own key here: https://developers.google.com/fonts/docs/developer_api
## SendGrid
The server makes use of SendGrid to send the password reset email to those who have forgotten their password. **This section is completely optional for those who do not require this functionality.**
### `SENDGRID_API_KEY`
**Required**: `no`
**Description:** SendGrid API Key
Does not require any payment or credit card information to obtain an API key.
You can get your own key here: https://docs.sendgrid.com/ui/account-and-settings/api-keys
### `SENDGRID_FORGOT_PASSWORD_TEMPLATE_ID`
**Required**: `no`
**Description:** Dynamic Template ID for Forgot Password
### `SENDGRID_FROM_NAME`
**Required**: `no`
**Description:** Sender's Name
### `SENDGRID_FROM_EMAIL`
**Required**: `no`
**Description:** Sender's Email Address

View File

@ -0,0 +1,14 @@
---
sidebar_position: 3
---
# Source Code
No, I'm not going to be talking about [the 2011 movie](https://www.imdb.com/title/tt0945513/) here.
The source code to Reactive Resume is available on [GitHub](https://github.com/AmruthPillai) for you to poke, prod, pull and publish. It is distributed under the [MIT License](https://choosealicense.com/licenses/mit/) which allows you to do **anything you want** with it, including commercial use.
In this section, I'll be going through the steps on how you can build the project on your local machine (or the cloud). You can choose one of two paths from here:
- [Docker](docker)
- [Local Build](local-build)

View File

@ -0,0 +1,48 @@
---
sidebar_position: 2
---
# Local Build
This might not be the most versatile, but it's quite easy and my recommended way of getting the project set up. This project is heavily dependent on [pnpm](https://pnpm.io) and it's monorepo workspaces feature, so I'd pick that up if I were you.
1. Once you have `pnpm` set up, you can pull the source code from GitHub and dive into the repository.
```bash
git clone git@github.com:AmruthPillai/Reactive-Resume.git
cd Reactive-Resume
```
2. Install dependencies using [pnpm](https://pnpm.io/), and it should take just a few minutes.
```bash
pnpm install
```
3. Copy the `.env.example` file to `.env` in the project root and fill it with values according to your setup. To know which environment variables are required, and about what they do, head over [this section](env-vars).
```bash
cp .env.example .env
```
4. Run the app locally by using the command:
```bash
pnpm dev
```
Now, your **frontend** client should be running on [`http://localhost:3000`](http://localhost:3000), your **backend** server on [`http://localhost:3100`](http://localhost:3100) and this **documentation** on [`http://localhost:3200`](http://localhost:3200).
5. Build the project before deploying by running the command:
```bash
pnpm build
```
6. Finally, start the production servers for all three workspaces by running:
```bash
pnpm start
```
Additionally, you can check the `package.json` for some additional scripts on how to run commands for a specific workspace. For more information on pnpm workspaces, head over to [their documentation](https://pnpm.io/workspaces).

View File

@ -0,0 +1,2 @@
position: 2
label: Tutorial

View File

@ -0,0 +1,5 @@
---
sidebar_position: 4
---
# Playing with the artboard

View File

@ -0,0 +1,5 @@
---
sidebar_position: 1
---
# Creating an account

View File

@ -0,0 +1,5 @@
---
sidebar_position: 2
---
# Create a new resume

View File

@ -0,0 +1,5 @@
---
sidebar_position: 6
---
# Create a custom section

View File

@ -0,0 +1,5 @@
---
sidebar_position: 7
---
# Exporting the resume

View File

@ -0,0 +1,5 @@
---
sidebar_position: 3
---
# Import from external sources

View File

@ -0,0 +1,8 @@
---
sidebar_position: 2
sidebar_label: Tutorial
---
# Tutorial
In this section, we go through the features of Reactive Resume and figure out how to navigate through the user interface.

View File

@ -0,0 +1,5 @@
---
sidebar_position: 5
---
# Filling resume data

124
docs/docusaurus.config.js Normal file
View File

@ -0,0 +1,124 @@
// @ts-check
// Note: type annotations allow type checking and IDEs autocompletion
const lightCodeTheme = require('prism-react-renderer/themes/github');
const darkCodeTheme = require('prism-react-renderer/themes/dracula');
/** @type {import('@docusaurus/types').Config} */
const config = {
title: 'Reactive Resume',
tagline: 'A free and open source resume builder.',
url: 'https://docs.rxresu.me',
baseUrl: '/',
onBrokenLinks: 'throw',
onBrokenMarkdownLinks: 'warn',
favicon: 'img/favicon.ico',
organizationName: 'AmruthPillai',
projectName: 'Reactive-Resume',
presets: [
[
'classic',
/** @type {import('@docusaurus/preset-classic').Options} */
({
blog: false,
docs: {
routeBasePath: '/',
sidebarPath: require.resolve('./sidebars.js'),
editUrl: 'https://github.com/AmruthPillai/Reactive-Resume/tree/main/docs',
},
sitemap: {
changefreq: 'weekly',
priority: 0.5,
},
theme: {
customCss: require.resolve('./styles/custom.css'),
},
}),
],
],
themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
({
navbar: {
title: 'Reactive Resume',
logo: {
alt: 'Reactive Resume',
src: 'img/logo.svg',
},
items: [
{
href: 'https://github.com/AmruthPillai/Reactive-Resume',
position: 'right',
label: 'GitHub',
},
],
},
footer: {
style: 'dark',
links: [
{
title: 'Sections',
items: [
{
label: 'Tutorial',
to: '/tutorial',
},
{
label: 'Source Code',
to: '/source-code',
},
],
},
{
title: 'Community',
items: [
{
label: 'GitHub',
href: 'https://github.com/AmruthPillai/Reactive-Resume',
},
{
label: 'Twitter',
href: 'https://twitter.com/AmruthPillai',
},
],
},
{
title: 'Support',
items: [
{
label: 'Donate',
href: 'https://buymeacoffee.com/AmruthPillai',
},
{
label: 'Translate',
href: 'https://translate.rxresu.me',
},
],
},
],
copyright: `Copyright © ${new Date().getFullYear()} Amruth Pillai. Licensed under MIT. Built with Docusaurus.`,
},
metadata: [
{
name: 'keywords',
content: [
'reactive resume',
'resume builder',
'free resumes',
'resume templates',
'free resume templates',
'open source resume builder',
'resume builder source code',
].join(', '),
},
],
prism: {
theme: lightCodeTheme,
darkTheme: darkCodeTheme,
},
}),
};
module.exports = config;

45
docs/package.json Normal file
View File

@ -0,0 +1,45 @@
{
"name": "@reactive-resume/docs",
"scripts": {
"docusaurus": "docusaurus",
"start": "docusaurus start --port 3200 --no-open",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"clear": "docusaurus clear",
"serve": "docusaurus serve --host 0.0.0.0 --port 3200",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids",
"typecheck": "tsc"
},
"dependencies": {
"@algolia/client-search": "^4.9.1",
"@docusaurus/core": "2.0.0-beta.17",
"@docusaurus/preset-classic": "2.0.0-beta.17",
"@docusaurus/theme-classic": "^2.0.0-beta.17",
"@mdx-js/react": "^1.6.22",
"clsx": "^1.1.1",
"prism-react-renderer": "^1.2.1",
"react": "^17.0.1",
"react-dom": "^17.0.1"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "2.0.0-beta.17",
"@docusaurus/types": "^2.0.0-beta.17",
"@tsconfig/docusaurus": "^1.0.4",
"@types/react": ">=16.8.0 <18.0.0",
"typescript": "^4.6.2"
},
"browserslist": {
"production": [
">0.5%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}

31
docs/sidebars.js Normal file
View File

@ -0,0 +1,31 @@
/**
* Creating a sidebar enables you to:
- create an ordered group of docs
- render a sidebar for each doc of that group
- provide next/previous navigation
The sidebars can be generated from the filesystem, or explicitly defined here.
Create as many sidebars as you want.
*/
// @ts-check
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
const sidebars = {
// By default, Docusaurus generates a sidebar from the docs folder structure
tutorialSidebar: [{ type: 'autogenerated', dirName: '.' }],
// But you can create a sidebar manually
/*
tutorialSidebar: [
{
type: 'category',
label: 'Tutorial',
items: ['hello'],
},
],
*/
};
module.exports = sidebars;

0
docs/static/.nojekyll vendored Normal file
View File

BIN
docs/static/img/favicon.ico vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

17
docs/static/img/logo.svg vendored Normal file
View File

@ -0,0 +1,17 @@
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M0 10C0 4.47715 4.47715 0 10 0H502C507.523 0 512 4.47715 512 10V502C512 507.523 507.523 512 502 512H10C4.47715 512 0 507.523 0 502V10Z"
fill="white" />
<path
d="M209.701 220L197.079 201.522L183.546 220H156.74L183.546 184.736L157.521 149.472H185.367L197.859 167.299L210.872 149.472H237.027L211.002 183.825L237.938 220H209.701Z"
fill="#444444" />
<path
d="M108.927 165.797H94.8735V190H69.1088V98.9125H110.749C118.99 98.9125 126.147 100.3 132.219 103.076C138.292 105.766 142.976 109.669 146.273 114.788C149.569 119.819 151.218 125.762 151.218 132.615C151.218 139.208 149.656 144.977 146.533 149.921C143.497 154.779 139.116 158.596 133.391 161.372L153.039 190H125.453L108.927 165.797ZM125.193 132.615C125.193 128.364 123.848 125.068 121.159 122.725C118.47 120.383 114.479 119.212 109.187 119.212H94.8735V145.888H109.187C114.479 145.888 118.47 144.76 121.159 142.504C123.848 140.162 125.193 136.866 125.193 132.615Z"
fill="#444444" />
<path
d="M94.08 273.12H85.44V288H69.6V232H95.2C100.267 232 104.667 232.853 108.4 234.56C112.133 236.213 115.013 238.613 117.04 241.76C119.067 244.853 120.08 248.507 120.08 252.72C120.08 256.773 119.12 260.32 117.2 263.36C115.333 266.347 112.64 268.693 109.12 270.4L121.2 288H104.24L94.08 273.12ZM104.08 252.72C104.08 250.107 103.253 248.08 101.6 246.64C99.9467 245.2 97.4933 244.48 94.24 244.48H85.44V260.88H94.24C97.4933 260.88 99.9467 260.187 101.6 258.8C103.253 257.36 104.08 255.333 104.08 252.72ZM172.419 266.4C172.419 266.507 172.339 267.76 172.179 270.16H140.659C141.299 272.4 142.525 274.133 144.339 275.36C146.205 276.533 148.525 277.12 151.299 277.12C153.379 277.12 155.165 276.827 156.659 276.24C158.205 275.653 159.752 274.693 161.299 273.36L169.299 281.68C165.085 286.373 158.925 288.72 150.819 288.72C145.752 288.72 141.299 287.76 137.459 285.84C133.619 283.92 130.632 281.253 128.499 277.84C126.419 274.427 125.379 270.56 125.379 266.24C125.379 261.973 126.392 258.16 128.419 254.8C130.499 251.387 133.352 248.72 136.979 246.8C140.605 244.88 144.685 243.92 149.219 243.92C153.539 243.92 157.459 244.827 160.979 246.64C164.499 248.4 167.272 250.987 169.299 254.4C171.379 257.76 172.419 261.76 172.419 266.4ZM149.299 254.72C146.952 254.72 144.979 255.387 143.379 256.72C141.832 258.053 140.845 259.867 140.419 262.16H158.179C157.752 259.867 156.739 258.053 155.139 256.72C153.592 255.387 151.645 254.72 149.299 254.72ZM195.187 288.72C191.56 288.72 187.987 288.32 184.467 287.52C180.947 286.667 178.12 285.573 175.987 284.24L180.547 273.84C182.52 275.067 184.867 276.053 187.587 276.8C190.307 277.493 193 277.84 195.667 277.84C198.12 277.84 199.854 277.6 200.867 277.12C201.934 276.587 202.467 275.84 202.467 274.88C202.467 273.92 201.827 273.253 200.547 272.88C199.32 272.453 197.347 272.053 194.627 271.68C191.16 271.253 188.2 270.693 185.747 270C183.347 269.307 181.267 268.027 179.507 266.16C177.747 264.293 176.867 261.68 176.867 258.32C176.867 255.547 177.694 253.093 179.347 250.96C181 248.773 183.4 247.067 186.547 245.84C189.747 244.56 193.56 243.92 197.987 243.92C201.134 243.92 204.254 244.24 207.347 244.88C210.44 245.52 213.027 246.427 215.107 247.6L210.547 257.92C206.707 255.787 202.547 254.72 198.067 254.72C195.667 254.72 193.907 255.013 192.787 255.6C191.667 256.133 191.107 256.853 191.107 257.76C191.107 258.773 191.72 259.493 192.947 259.92C194.174 260.293 196.2 260.693 199.027 261.12C202.6 261.653 205.56 262.267 207.907 262.96C210.254 263.653 212.28 264.933 213.987 266.8C215.747 268.613 216.627 271.173 216.627 274.48C216.627 277.2 215.8 279.653 214.147 281.84C212.494 283.973 210.04 285.653 206.787 286.88C203.587 288.107 199.72 288.72 195.187 288.72ZM268.777 244.64V288H254.297V283.36C252.697 285.12 250.777 286.453 248.537 287.36C246.297 288.267 243.924 288.72 241.417 288.72C235.817 288.72 231.337 287.067 227.977 283.76C224.67 280.453 223.017 275.493 223.017 268.88V244.64H238.217V266.4C238.217 269.653 238.83 272.027 240.057 273.52C241.284 275.013 243.07 275.76 245.417 275.76C247.817 275.76 249.764 274.933 251.257 273.28C252.804 271.573 253.577 268.987 253.577 265.52V244.64H268.777ZM335.048 243.92C340.381 243.92 344.621 245.52 347.768 248.72C350.968 251.92 352.568 256.747 352.568 263.2V288H337.368V265.68C337.368 262.64 336.781 260.4 335.608 258.96C334.488 257.52 332.888 256.8 330.808 256.8C328.514 256.8 326.674 257.6 325.288 259.2C323.901 260.8 323.208 263.227 323.208 266.48V288H308.008V265.68C308.008 259.76 305.821 256.8 301.448 256.8C299.101 256.8 297.234 257.6 295.848 259.2C294.461 260.8 293.768 263.227 293.768 266.48V288H278.568V244.64H293.048V249.2C294.648 247.44 296.541 246.133 298.728 245.28C300.968 244.373 303.394 243.92 306.008 243.92C309.048 243.92 311.768 244.48 314.168 245.6C316.568 246.72 318.514 248.427 320.008 250.72C321.714 248.533 323.874 246.853 326.488 245.68C329.101 244.507 331.954 243.92 335.048 243.92ZM407.106 266.4C407.106 266.507 407.026 267.76 406.866 270.16H375.346C375.986 272.4 377.213 274.133 379.026 275.36C380.893 276.533 383.213 277.12 385.986 277.12C388.066 277.12 389.853 276.827 391.346 276.24C392.893 275.653 394.44 274.693 395.986 273.36L403.986 281.68C399.773 286.373 393.613 288.72 385.506 288.72C380.44 288.72 375.986 287.76 372.146 285.84C368.306 283.92 365.32 281.253 363.186 277.84C361.106 274.427 360.066 270.56 360.066 266.24C360.066 261.973 361.08 258.16 363.106 254.8C365.186 251.387 368.04 248.72 371.666 246.8C375.293 244.88 379.373 243.92 383.906 243.92C388.226 243.92 392.146 244.827 395.666 246.64C399.186 248.4 401.96 250.987 403.986 254.4C406.066 257.76 407.106 261.76 407.106 266.4ZM383.986 254.72C381.64 254.72 379.666 255.387 378.066 256.72C376.52 258.053 375.533 259.867 375.106 262.16H392.866C392.44 259.867 391.426 258.053 389.826 256.72C388.28 255.387 386.333 254.72 383.986 254.72Z"
fill="#444444" />
<line x1="60" y1="358" x2="360" y2="358" stroke="#DDDDDD" stroke-width="20" stroke-miterlimit="16" />
<line x1="60" y1="398" x2="300" y2="398" stroke="#BBBBBB" stroke-width="20" stroke-miterlimit="16" />
<line x1="60" y1="438" x2="240" y2="438" stroke="#DDDDDD" stroke-width="20" stroke-miterlimit="16" />
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

39
docs/styles/custom.css Normal file
View File

@ -0,0 +1,39 @@
/**
* Any CSS included here will be global. The classic template
* bundles Infima by default. Infima is a CSS framework designed to
* work well for content-centric websites.
*/
/* You can override the default Infima variables here. */
:root {
--ifm-color-primary: #2e8555;
--ifm-color-primary-dark: #29784c;
--ifm-color-primary-darker: #277148;
--ifm-color-primary-darkest: #205d3b;
--ifm-color-primary-light: #33925d;
--ifm-color-primary-lighter: #359962;
--ifm-color-primary-lightest: #3cad6e;
--ifm-code-font-size: 95%;
}
/* For readability concerns, you should choose a lighter palette in dark mode. */
[data-theme='dark'] {
--ifm-color-primary: #25c2a0;
--ifm-color-primary-dark: #21af90;
--ifm-color-primary-darker: #1fa588;
--ifm-color-primary-darkest: #1a8870;
--ifm-color-primary-light: #29d5b0;
--ifm-color-primary-lighter: #32d8b4;
--ifm-color-primary-lightest: #4fddbf;
}
.docusaurus-highlight-code-line {
background-color: rgba(0, 0, 0, 0.1);
display: block;
margin: 0 calc(-1 * var(--ifm-pre-padding));
padding: 0 var(--ifm-pre-padding);
}
[data-theme='dark'] .docusaurus-highlight-code-line {
background-color: rgba(0, 0, 0, 0.3);
}

6
docs/tsconfig.json Normal file
View File

@ -0,0 +1,6 @@
{
"extends": "@tsconfig/docusaurus/tsconfig.json",
"compilerOptions": {
"baseUrl": "."
}
}

View File

@ -1,11 +1,12 @@
{
"name": "reactive-resume",
"version": "3.0.0-beta.6",
"version": "3.1.1",
"private": true,
"workspaces": [
"schema",
"client",
"server"
"server",
"docs"
],
"config": {
"commitizen": {
@ -20,13 +21,16 @@
"dev:schema": "pnpm -F schema dev",
"dev:server": "pnpm -F server start:debug",
"dev:client": "pnpm -F client dev",
"dev:docs": "pnpm -F docs start",
"dev": "env-cmd --silent concurrently --kill-others \"pnpm run dev:*\"",
"build:schema": "pnpm -F schema build",
"build:server": "pnpm -F server build",
"build:client": "pnpm -F client build",
"build:docs": "pnpm -F docs build",
"build": "env-cmd --silent concurrently \"pnpm run build:*\"",
"start:server": "pnpm -F server start:prod",
"start:client": "pnpm -F client start",
"start:docs": "pnpm -F docs serve",
"start": "env-cmd --silent concurrently --kill-others \"pnpm run start:*\""
},
"dependencies": {

5929
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -2,3 +2,4 @@ packages:
- 'schema'
- 'server'
- 'client'
- 'docs'

View File

@ -19,7 +19,7 @@ import { UsersModule } from './users/users.module';
@Module({
imports: [
ServeStaticModule.forRoot({
serveRoot: '/api',
serveRoot: '/assets',
rootPath: join(__dirname, 'assets'),
}),
ConfigModule,

View File

@ -38,10 +38,7 @@ export class AuthService {
throw new HttpException('A user with that username and/or email already exists.', HttpStatus.UNAUTHORIZED);
}
throw new HttpException(
'Something went wrong. Please try again later, or raise an issue on GitHub if the problem persists.',
HttpStatus.INTERNAL_SERVER_ERROR
);
throw new HttpException(error, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@ -124,7 +121,7 @@ export class AuthService {
return user;
} catch (error: any) {
if (error.status !== HttpStatus.NOT_FOUND) {
throw new Error('Something went wrong, please try again later.');
throw new HttpException(error, HttpStatus.BAD_GATEWAY);
}
const UserInfoClient = google.oauth2('v2').userinfo;

View File

@ -219,7 +219,7 @@ export class ResumeService {
async uploadPhoto(id: number, userId: number, filename: string) {
const resume = await this.findOne(id, userId);
const url = `/api/uploads/${userId}/${id}/${filename}`;
const url = `/api/assets/uploads/${userId}/${id}/${filename}`;
const updatedResume = set(resume, 'basics.photo.url', url);
return this.resumeRepository.save<Resume>(updatedResume);