Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
64218fd
Delete vite.config.js.timestamp-1680346109161.mjs
rodrigsmor Apr 1, 2023
48bfda2
Update gitignore
rodrigsmor Apr 1, 2023
b7e4a58
Develop content display logic
rodrigsmor Apr 2, 2023
efc9b53
Finish Home Section
rodrigsmor Apr 2, 2023
9a3e6ad
Finish developing home section
rodrigsmor Apr 2, 2023
3fce237
Desvelops mobile and tablet version
rodrigsmor Apr 2, 2023
99d29d7
Merge pull request #1 from rodrigsmor/home-section
rodrigsmor Apr 2, 2023
fe294bd
Create redirects file
rodrigsmor Apr 2, 2023
0df9bcf
Develops contact section
rodrigsmor Apr 2, 2023
4855d5e
Develops AboutMe Home section
rodrigsmor Apr 2, 2023
c0e5f9d
Merge pull request #2 from rodrigsmor/contact-section
rodrigsmor Apr 2, 2023
664bf5c
Develops project section
rodrigsmor Apr 4, 2023
fb4652d
Merge pull request #3 from rodrigsmor/projects-section
rodrigsmor Apr 4, 2023
2d9672e
Develops content animation
rodrigsmor Apr 4, 2023
0204828
Merge pull request #4 from rodrigsmor/modal-animation
rodrigsmor Apr 4, 2023
7f1999a
Fix Content transition animation and see more button behaviour
rodrigsmor Apr 5, 2023
9e936a7
Develops filterby
rodrigsmor Apr 9, 2023
a49ca8a
Develops selected filters bar
rodrigsmor Apr 9, 2023
d3c87e1
Develops basic structure of project card
rodrigsmor Apr 9, 2023
208a175
Develops project section
rodrigsmor Apr 9, 2023
32dbffb
Merge pull request #5 from rodrigsmor/projects-section-content
rodrigsmor Apr 9, 2023
d71a0b7
Develops About Me Content section
rodrigsmor Apr 9, 2023
67ec3cb
Merge pull request #6 from rodrigsmor/about-me-section-content
rodrigsmor Apr 9, 2023
6f55e84
Adds CV link to about me modal
rodrigsmor Apr 9, 2023
d20b041
Create portfólio README
rodrigsmor Apr 11, 2023
8f80761
Write a little bit about me
rodrigsmor Apr 11, 2023
ff166fe
Add technologies section
rodrigsmor Apr 12, 2023
56f3894
Create readme
rodrigsmor Apr 20, 2023
7c6b04d
Merge pull request #7 from rodrigsmor/readme
rodrigsmor Apr 20, 2023
615b25f
adds package-lock.json
rodrigsmor Aug 23, 2023
94b936b
basic README.md
rodrigsmor Aug 23, 2023
3b16e75
how to view and how to run sections
rodrigsmor Aug 23, 2023
abca645
previews of portfolio
rodrigsmor Aug 23, 2023
65d0835
Merge pull request #8 from rodrigsmor/README
rodrigsmor Aug 23, 2023
8b3933c
Update README.md
rodrigsmor Aug 23, 2023
8fbdc55
add preview image
rodrigsmor Aug 23, 2023
848e99b
adds author section
rodrigsmor Aug 23, 2023
108677a
Merge pull request #9 from rodrigsmor/preview-image
rodrigsmor Aug 23, 2023
f515ef2
:sparkles: feat: adds new knowledges
rodrigsmor Aug 28, 2023
e192d6a
:bruck: chore: deletes calculate percentage file
rodrigsmor Aug 28, 2023
806db8e
:bug: fix: scroll bar progress
rodrigsmor Aug 28, 2023
d79d66a
:broom: style: remove progress percentage import
rodrigsmor Aug 28, 2023
cbb7e4a
:bug: fix: progress bar initial state
rodrigsmor Aug 28, 2023
9fc6b1a
:pencil: feat: updates link of CV
rodrigsmor Aug 28, 2023
3a50d96
:pencil: feat: updates profile text
rodrigsmor Aug 28, 2023
aaae4fe
:sparkles: feat: style text paragraphs
rodrigsmor Aug 28, 2023
1c0ffd9
Merge pull request #10 from rodrigsmor/update-portfolio
rodrigsmor Aug 28, 2023
fc1fc90
:lipstick: fix: projects listing template columns
rodrigsmor Sep 19, 2023
6338ad7
:sparkles: feat: removes 'fews-results' classname
rodrigsmor Sep 19, 2023
1cc74b5
Merge pull request #11 from rodrigsmor/projects-layout
rodrigsmor Sep 19, 2023
2b89e1a
:books: docs: set quote style to side detail
rodrigsmor Sep 29, 2023
2086a21
:sparkles: feat: adds the currency converter to projects
rodrigsmor Oct 29, 2023
3d85735
Merge pull request #12 from rodrigsmor/projects-currency-converter
rodrigsmor Oct 29, 2023
f0de1a6
:wastebasket: remove: delete all project files (hard reset)
rodrigsmor Dec 14, 2025
9853a7e
:heavy_plus_sign: chore: update .gitignore
rodrigsmor Dec 14, 2025
44d5dac
:tada: init: initialize new project
rodrigsmor Dec 14, 2025
2f4c383
:heavy_plus_sign: build: add phosphor icons library
rodrigsmor Dec 14, 2025
03f4b8e
:sparkles: feat: create Logo component
rodrigsmor Dec 14, 2025
3873b36
:construction: feat: creates buttons components
rodrigsmor Dec 14, 2025
748466c
:construction: feat: creating home section
rodrigsmor Dec 14, 2025
0e52e11
:construction: feat: creates header base layout
rodrigsmor Dec 14, 2025
dad0d76
:heavy_plus_sign: build: add react-icons library
rodrigsmor Dec 16, 2025
894edc9
:lipstick: feat: add text-shadow style to global.css
rodrigsmor Dec 16, 2025
d07f098
:sparkles: feat: develops home page section
rodrigsmor Dec 16, 2025
2e804a4
:heavy_plus_sign: build: add cookies and negotiator libraries
rodrigsmor Dec 17, 2025
b6200da
:truck: chore: move portfolio files to views
rodrigsmor Dec 17, 2025
36da4d9
:wrench: chore: add path patterns to tsconfig.json
rodrigsmor Dec 17, 2025
574191c
:sparkles: feat: creates the i18n configuration
rodrigsmor Dec 17, 2025
b62df8a
:sparkles: feat: creates the useTranslate (i18n) hook
rodrigsmor Dec 17, 2025
dd8f8d8
:construction: feat: translate home section
rodrigsmor Dec 17, 2025
ac811c3
:sparkles: feat: add translations to home page
rodrigsmor Dec 17, 2025
deed4fe
:sparkles: feat: add carousel divider section
rodrigsmor Dec 17, 2025
2ddace1
:dizzy: feat: adds scroll transition to header
rodrigsmor Dec 17, 2025
c57ed4c
:wrench: chore: adds section alias to tsconfig
rodrigsmor Dec 17, 2025
db49691
:dizzy: feat: finishes infinite auto scroll animation
rodrigsmor Dec 17, 2025
aecf188
:truck: chore: move portfolio views to sections components
rodrigsmor Dec 17, 2025
3fdfc71
:construction: feat: start creating about me section
rodrigsmor Dec 17, 2025
ea800bc
:lipstick: feat: add border radius to gradient button
rodrigsmor Dec 17, 2025
ebbb45f
:sparkles: feat: translate about me section
rodrigsmor Dec 17, 2025
6774195
:sparkles: feat: switch style of header when scrolling
rodrigsmor Dec 17, 2025
7abda01
:sparkles: feat: finish first part of about me section
rodrigsmor Dec 17, 2025
11c2bac
:sparkles: feat: create getObject function to useTranslate hook
rodrigsmor Dec 17, 2025
8149364
:lipstick: feat: add typography gradient to globall.css
rodrigsmor Dec 19, 2025
2874126
:construction: feat: create skills subsection
rodrigsmor Dec 19, 2025
0796094
:sparkles: feat: add translation to skills subsection
rodrigsmor Dec 19, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 45 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,9 +1,51 @@
# Logs
logs
*.log

# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/versions

# testing
/coverage

# next.js
/.next/
/out/

# production
/build

.vscode

# misc
.DS_Store
*.pem

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*

# env files (can opt-in for committing if needed)
.env*

# vercel
.vercel

# typescript
*.tsbuildinfo
next-env.d.ts

pnpm-debug.log*
lerna-debug.log*

Expand All @@ -23,4 +65,6 @@ dist-ssr
*.sln
*.sw?
.env
yarn.lock
yarn.lock

vite.config.js.*
7 changes: 7 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"semi": true,
"singleQuote": true,
"printWidth": 80,
"tabWidth": 2,
"bracketSpacing": true
}
134 changes: 134 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).

## Getting Started

First, run the development server:

```bash
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev
```

Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.

You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.

This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.

## Learn More

To learn more about Next.js, take a look at the following resources:

- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.

You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!

## Deploy on Vercel

The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.

Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.

-------

<div align="center">
<img src="./public/Logo.svg" height="68px" width="68px" alt="portfolio logo" align="center"/>
</div>

<h1 align="center">Rodrigo's Portfolio</h1>

## 👋🏽 Introduction

Welcome to my portfolio! I’m a full-stack software developer who uses programming to develop innovative solutions and attractive user interfaces. In this portfolio you’ll be able to see an overview of my work and some personal projects I’ve developed in order to improve my skills and expand my knowledges.

## 📚 Table of contents

- [👋🏽 Introduction](#-introduction)
- [📚 Table of contents](#-table-of-contents)
- [👨🏽‍💻 About me](#-about-me)
- [🛠 Technologies](#-technologies)
- [📺 How to view](#-how-to-view)
- [🚀 How to run](#-how-to-run)
- [🖼 Previews](#-previews)
- [👨🏽‍🦱 Author](#-author)

## 👨🏽‍💻 About me

As mentioned earlier, I’m a full-stack software developer with a strong emphasis on front-end web development. Although my specialisation lies in creating engaging user interfaces, I am equally adept at back-end development and creating mobile applications. My passion for technology is marked by a sincere appreciation for the world of UI/UX design, where I do some work using Figma.

## 🛠 Technologies

<div>
<img src="https://img.shields.io/badge/react-%2320232a.svg?style=for-the-badge&logo=react&logoColor=%2361DAFB" alt="React">
<img src="https://img.shields.io/badge/html5-%23E34F26.svg?style=for-the-badge&logo=html5&logoColor=white" alt="HTML">
<img src="https://img.shields.io/badge/css3-%231572B6.svg?style=for-the-badge&logo=css3&logoColor=white" alt="CSS">
<img src="https://img.shields.io/badge/styled--components-DB7093?style=for-the-badge&logo=styled-components&logoColor=white" alt="Styled components">
<img src="https://img.shields.io/badge/React_Router-CA4245?style=for-the-badge&logo=react-router&logoColor=white" alt="React router">
<img src="https://img.shields.io/badge/vite-%23646CFF.svg?style=for-the-badge&logo=vite&logoColor=white" alt="VITE">
<img src="https://img.shields.io/badge/javascript-%23323330.svg?style=for-the-badge&logo=javascript&logoColor=%23F7DF1E" alt="JavaScript">
<img src="https://img.shields.io/badge/SASS-hotpink.svg?style=for-the-badge&logo=SASS&logoColor=white" alt="SASS">
</div>

## 📺 How to view

In case you want to take a look at the application, you can access the project at the official link just by [clicking here](https://rm-portfoliof.netlify.app/).

## 🚀 How to run

To install the application, you first need to clone the project to your local device. To do this, simply run the following command in your terminal:

```
git clone https://github.com/rodrigsmor/my-portfolio.git
```

With the application cloned on your local device, go to the portfolio directory and with the package manager of your choice, run the command to install the project packages.

```
# go to the cloned project directory
cd my-portfolio

# install dependencies
npm install
```

Once the dependencies are effectively installed, you are now fully able to run the application, so just run the following command:

```
npm run dev
```

> 💭 DETAIL: The application will probably be running on `http://localhost:5173/`.

## 🖼 Previews

![A preview of the portfolio](./public/preview-1.gif)

## 👨🏽‍🦱 Author

<img height="100px" src="https://avatars.githubusercontent.com/u/78985382?v=4" alt="Rodrigo profile picture">
<p>Developed with love by <b size="48px">Rodrigo Moreira</b>
💜🚀</p>

---

<div>
<a href="mailto:rodrigsmor.pf@gmail.com">
<img src="https://img.shields.io/badge/Gmail-D14836?style=for-the-badge&logo=gmail&logoColor=white" alt="gmail">
</a>
<a href="https://www.linkedin.com/in/psrodrigomoreira/">
<img src="https://img.shields.io/badge/linkedin-%230077B5.svg?style=for-the-badge&logo=linkedin&logoColor=white" alt="LinkedIn">
</a>
<a href="https://www.behance.net/rodrigsmor">
<img src="https://img.shields.io/badge/Behance-1769ff?style=for-the-badge&logo=behance&logoColor=white" alt="behance">
</a>
<a href="https://dev.to/psrodrigs">
<img src="https://img.shields.io/badge/dev.to-0A0A0A?style=for-the-badge&logo=devdotto&logoColor=white" alt="dev.to">
</a>
</div>

47 changes: 47 additions & 0 deletions app/[lang]/layout.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import { ReactNode } from "react";
import { LangPageProps } from "./page";
import { notFound } from "next/navigation";
import { LanguageProvider } from "@/utils/hooks/useTranslate";
import { getDictionary, hasLocale } from "@/utils/functions/dictionaries";
import { Prompt, Turret_Road } from "next/font/google";

const prompt = Prompt({
variable: '--font-prompt',
subsets: ["latin"],
weight: ['100', '200', '300', '400', '500', '600', '700', '800', '900']
});

const turret = Turret_Road({
variable: '--font-turret_road',
subsets: ["latin"],
weight: ['400']
});

export async function generateStaticParams() {
return [{ lang: 'en-US' }, { lang: 'pt-BR' }, { lang: 'es-149' }]
}

type LayoutProps = LangPageProps & {
children: ReactNode;
};

export default async function LangLayout({
children,
params,
}: LayoutProps) {
const { lang } = await params;

if (!hasLocale(lang)) notFound()

const dictionary = await getDictionary(lang);

return (
<html lang={lang}>
<body className={`${prompt.variable} ${turret.variable} antialiased`}>
<LanguageProvider initialLocale={lang} dictionary={dictionary}>
{children}
</LanguageProvider>
</body>
</html>
)
}
40 changes: 40 additions & 0 deletions app/[lang]/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
// You now have access to the current locale

import { Metadata } from "next";
import Portfolio from "@/views/portfolio"
import { LanguageCode } from "@/utils/@types/lang";
import { getDictionary } from "../../utils/functions/dictionaries";

export type LangPageProps = {
params: Promise<{ lang: LanguageCode }>;
};

export async function generateMetadata({ params }: LangPageProps): Promise<Metadata> {
const { lang } = await params;

const dict = await getDictionary(lang);

return {
title: dict.Metadata.title,
description: dict.Metadata.description,
openGraph: {
title: dict.Metadata.title,
description: dict.Metadata.description,
locale: lang,
},
alternates: {
canonical: `/${lang}`,
languages: {
'en-US': '/en-US',
'pt-BR': '/pt-BR',
'es-149': '/es-149',
},
},
};
}

export default async function Page() {
return (
<Portfolio />
);
}
Binary file added app/favicon.ico
Binary file not shown.
83 changes: 83 additions & 0 deletions app/globals.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
@import url('https://fonts.googleapis.com/css2?family=Prompt:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');

:root {
/* background colors */
--background-extradark: #0C0816;
--background-dark: #1B1231;
--background-main: #291B4B;
--background-light: #372565;
--background-extralight: #493187;

/* typography colors */
--typography-extradark: #B2A2DD;
--typography-dark: #C2B4E4;
--typography-main: #D1C7EB;
--typography-light: #E0DAF1;
--typography-extralight: #F0ECF8;

/* primary colors */
--primary-extradark: #23024B;
--primary-dark: #450396;
--primary-main: #6805E0;
--primary-light: #8F33FF;
--primary-extralight: #C799FF;

/* secondary colors */
--secondary-extradark: #760A60;
--secondary-dark: #BC109A;
--secondary-main: #ED2BC6;
--secondary-light: #F372D9;
--secondary-extralight: #F9B8EC;

/* ----------- */

/* font sizes */
--font-h1: 3rem;
--font-h2: 2.25rem;
--font-h3: 1.5rem;
--font-h4: 1.25rem;
--font-h5: 1.125rem;
--font-h6: 1rem;
--font-h7: .875rem;

/* font weights */
--font-light: 200;
--font-regular: 300;
--font-medium: 400;
--font-semibold: 500;
--font-bold: 600;
--font-extrabold: 700;

/* shadows */
--shadow-header: 0px 0px 8px 1px rgba(0,0,0,0.4);
--shadow-primary-main: 0 0 1.75rem .5rem rgba(104, 5, 224, .4);
--text-shadow-primary-main: 0px 0px 28px rgba(104, 5, 224, .4);

/* gradients */
--gradient-primaryToSecondary-x-main: linear-gradient(90deg, #6805E0 0%, #ED2BC6 100%);
--gradient-primaryToSecondary-y-main: linear-gradient(180deg, #6805E0 0%, #ED2BC6 100%);
--gradient-primaryToSecondary-x-dark: linear-gradient(90deg, #450396 0%, #BC109A 100%);
--gradient-metalic-style: linear-gradient(90deg, #0C0816 0%, #231A3C 50%, #0C0816 100%);
--gradient-typographyToOpacity-x: linear-gradient(90deg, #F0ECF8 0%, rgba(240, 236, 248, 0) 100%);
/* media sizes */
/* --media-mobile: 320px;
--media-tablet: 768px;
--media-desktop: 1024px; */
}

html {
scroll-behavior: smooth;
}

body {
background: var(--background-extradark);
color: var(--typography-extralight);
font-family: "Prompt", Helvetica, sans-serif;
}

* {
padding: 0;
margin: 0;
box-sizing: border-box;
font-family: "Prompt", Helvetica, sans-serif;
}
Loading