Skip to content

Commit 33aa132

Browse files
committed
Initial commit
1 parent d2b36b2 commit 33aa132

20 files changed

+551
-1
lines changed

.DS_Store

8 KB
Binary file not shown.

README.md

+38-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,38 @@
1-
# arndt-portfolio
1+
This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
2+
3+
## Getting Started
4+
5+
First, run the development server:
6+
7+
```bash
8+
npm run dev
9+
# or
10+
yarn dev
11+
# or
12+
pnpm dev
13+
```
14+
15+
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
16+
17+
You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
18+
19+
[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`.
20+
21+
The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
22+
23+
This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
24+
25+
## Learn More
26+
27+
To learn more about Next.js, take a look at the following resources:
28+
29+
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
30+
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
31+
32+
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
33+
34+
## Deploy on Vercel
35+
36+
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.
37+
38+
Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.

locales/br.json

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"jobTitle": "Desenvolvedor Web Front-End",
3+
"summary": "Apaixonado por projetar experiências web dinâmicas com tecnologia.",
4+
"resume": "Currículo",
5+
"scrollDown": "Clique aqui para rolar para baixo",
6+
"quote": "Código é como humor. Quando você precisa explicar, é ruim.",
7+
"handcrafted": "Feito à mão por mim"
8+
}

locales/de.json

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"jobTitle": "Front-End Webentwickler",
3+
"summary": "Leidenschaftlich daran interessiert, dynamische Web-Erlebnisse mit Technologie zu gestalten.",
4+
"resume": "Lebenslauf",
5+
"scrollDown": "Klicken Sie hier, um nach unten zu scrollen",
6+
"quote": "Code ist wie Humor. Wenn man ihn erklären muss, ist er schlecht.",
7+
"handcrafted": "Handgefertigt von mir"
8+
}

locales/en.json

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"jobTitle": "Front-End Web Developer",
3+
"summary": "Passionate about designing dynamic web experiences with technology.",
4+
"resume": "Resume",
5+
"scrollDown": "Click here to scroll down",
6+
"quote": "Code is like humor. When you have to explain it, it’s bad.",
7+
"handcrafted": "Handcrafted by me"
8+
}

locales/es.json

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"jobTitle": "Desarrollador web Front-End",
3+
"summary": "Apasionado por diseñar experiencias web dinámicas con tecnología.",
4+
"resume": "Currículum",
5+
"scrollDown": "Haz clic aquí para desplazarte hacia abajo",
6+
"quote": "El código es como el humor. Cuando tienes que explicarlo, es malo.",
7+
"handcrafted": "Hecho a mano por mí"
8+
}

next.config.js

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/** @type {import('next').NextConfig} */
2+
3+
const nextConfig = {
4+
reactStrictMode: true,
5+
swcMinify: true,
6+
i18n: {
7+
locales: ['en', 'br', 'es', 'de'],
8+
defaultLocale: 'en',
9+
},
10+
};
11+
12+
module.exports = nextConfig;

package.json

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"name": "rectify",
3+
"version": "0.1.0",
4+
"private": true,
5+
"scripts": {
6+
"dev": "next dev",
7+
"build": "next build",
8+
"start": "next start",
9+
"lint": "next lint"
10+
},
11+
"dependencies": {
12+
"moment": "^2.29.4",
13+
"next": "12.3.1",
14+
"next-i18next": "^13.1.5",
15+
"react": "18.2.0",
16+
"react-dom": "18.2.0",
17+
"react-flags-select": "^2.2.3",
18+
"react-icons": "^4.4.0",
19+
"react-scroll": "^1.8.9"
20+
},
21+
"devDependencies": {
22+
"autoprefixer": "^10.4.12",
23+
"eslint": "8.24.0",
24+
"eslint-config-next": "12.3.1",
25+
"postcss": "^8.4.16",
26+
"tailwindcss": "^3.1.8"
27+
}
28+
}

pages/_app.js

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { useRouter } from 'next/router';
2+
3+
import en from '../locales/en.json';
4+
import es from '../locales/es.json';
5+
import br from '../locales/br.json';
6+
import de from '../locales/de.json';
7+
8+
import '../styles/globals.css';
9+
10+
const translation = {
11+
en,
12+
br,
13+
es,
14+
de
15+
};
16+
17+
const countryCodes = {
18+
en: 'CA',
19+
br: 'BR',
20+
es: 'ES',
21+
de: 'DE'
22+
};
23+
24+
const customLabels = {
25+
CA: 'English',
26+
BR: 'Português',
27+
ES: 'Español',
28+
DE: 'Deutsch'
29+
};
30+
31+
function ArndtPortfolio({ Component, pageProps }) {
32+
const { locale, push } = useRouter();
33+
pageProps = { ...pageProps, countryCodes, customLabels, translation, locale, push };
34+
35+
return <Component {...pageProps} />;
36+
}
37+
38+
export default ArndtPortfolio;

pages/_document.js

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { Html, Head, Main, NextScript } from 'next/document';
2+
3+
export default function Document() {
4+
return (
5+
<Html>
6+
<Head>
7+
<link rel='preconnect' href='https://fonts.gstatic.com' crossorigin />
8+
<link
9+
href='https://fonts.googleapis.com/css2?family=League+Spartan&family=Titillium+Web:wght@900&display=swap'
10+
rel='stylesheet'
11+
/>
12+
</Head>
13+
<body className='font-poppins'>
14+
<Main />
15+
<NextScript />
16+
</body>
17+
</Html>
18+
);
19+
}

pages/index.js

+164
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
import Head from 'next/head';
2+
import Image from 'next/image';
3+
import Link from 'next/link';
4+
import { AiFillLinkedin } from 'react-icons/ai';
5+
import {
6+
BsFillMoonStarsFill,
7+
BsFillSunFill,
8+
BsChevronDoubleDown,
9+
} from 'react-icons/bs';
10+
import { useEffect, useState } from 'react';
11+
import myself from '../public/myself.jpg';
12+
import logo from '../public/da-logo.png';
13+
import YearInWords from '../utils/yearInWords';
14+
import HandleDownload from '../utils/handleDownload';
15+
import ReactFlagsSelect from 'react-flags-select';
16+
17+
export default function Home(props) {
18+
const [darkMode, setDarkMode] = useState(true);
19+
useEffect(() => setDarkMode(true), []);
20+
const icon = darkMode ? <BsFillSunFill /> : <BsFillMoonStarsFill />;
21+
22+
const handleChangeLanguage = (countryCode) => {
23+
const locale = Object.keys(props.countryCodes).find(
24+
(key) => props.countryCodes[key] === countryCode
25+
);
26+
props.push('/', undefined, { locale });
27+
};
28+
29+
const translation = props.translation[props.locale];
30+
31+
return (
32+
<div className={`flex flex-col min-h-screen ${darkMode ? 'dark' : ''}`}>
33+
<Head>
34+
<title>Diego Arndt Portfolio</title>
35+
<meta name='description' content='Generated by create next app' />
36+
<link rel='icon' href='/favicon.ico' />
37+
</Head>
38+
<nav className='py-10 px-20 flex justify-between sticky top-0 z-20 bg-gray-200 dark:bg-black dark:text-white'>
39+
<a href='#' className='relative sm:h-16 sm:w-16'>
40+
<Image
41+
src={logo}
42+
alt='profile-picture'
43+
layout='fill'
44+
objectFit='cover'
45+
className='border-t-8-4 border-green-600'
46+
/>
47+
</a>
48+
<ul className='flex items-center'>
49+
<li>
50+
<ReactFlagsSelect
51+
countries={Object.values(props.countryCodes)}
52+
customLabels={props.customLabels}
53+
selected={props.countryCodes[props.locale]}
54+
onSelect={handleChangeLanguage}
55+
showSelectedLabel={false}
56+
showSecondarySelectedLabel={false}
57+
fullWidth={false}
58+
placeholder='Language'
59+
className='react-flags-select px-4 py-2'
60+
/>
61+
</li>
62+
<li>
63+
<div className='transform hover:scale-110 px-4 py-2'>
64+
<span
65+
onClick={() => setDarkMode(!darkMode)}
66+
className='cursor-pointer text-2xl hover:text-blue-600 dark:hover:text-yellow-400'
67+
>
68+
{icon}
69+
</span>
70+
</div>
71+
</li>
72+
<li>
73+
<div className='pl-4 py-2'>
74+
<a
75+
className='cursor-pointer bg-gradient-to-r from-red-600 to-orange-600 hover:from-orange-600 hover:to-red-600 text-white px-4 py-2 border-none rounded-md'
76+
onClick={HandleDownload}
77+
tooltip='Download resume'
78+
>
79+
{translation.resume}
80+
</a>
81+
</div>
82+
</li>
83+
</ul>
84+
</nav>
85+
86+
<main className='bg-gray-200 px-10 dark:bg-black md:px-20 lg:px-20'>
87+
<section
88+
className='min-h-screen'
89+
id='landing-page'
90+
style={{ minHeight: 'calc(100vh - 9rem)' }}
91+
>
92+
<div className='text-center bg-blue-500 p-10 py-10 absolute inset-0 flex flex-col items-center justify-center'>
93+
<h2 className='relative py-3 font-bold text-4xl md:text-6xl lg:text-8xl group cursor-default mx-auto w-1/2 lg:w-1/2 max-w-lg'>
94+
<span className='relative z-10 px-3 text-orange-500 dark:text-black group-hover:text-black dark:group-hover:text-orange-500 pointer-events-none'>
95+
DIEGO ARNDT
96+
</span>
97+
<span className='absolute inset-0 w-full skew-x-12 transition duration-300 ease-in-out origin-right bg-gray-300 dark:bg-orange-500 group-hover:bg-orange-500 dark:group-hover:bg-gray-300'></span>
98+
</h2>
99+
<h3 className='text-lg py-2 dark:text-gray-300 lg:text-xl tracking-widest'>
100+
{translation.jobTitle}
101+
</h3>
102+
</div>
103+
</section>
104+
105+
<section
106+
className='min-h-screen pt-36 bg-red-600'
107+
id='about-page'
108+
style={{ minHeight: 'calc(100vh - 9rem)' }}
109+
>
110+
<div className='mx-auto mt-20 lg:mt-16 border-2 border-orange-500 rounded-full relative overflow-hidden h-80 w-80 lg:h-96 lg:w-96'>
111+
<Image
112+
src={myself}
113+
alt='profile-picture'
114+
layout='fill'
115+
objectFit='cover'
116+
priority={true}
117+
className='border-t-8-4 border-black pointer-events-none'
118+
/>
119+
</div>
120+
<h3 className='mx-auto text-3xl py-20 lg:py-16 font-bold text-orange-500 dark:text-white max-w-2xl lg:text-4xl'>
121+
{translation.summary}
122+
</h3>
123+
<button className='text-gray-600 hover:text-gray-500 transition duration-500 transform hover:translate-y-1'>
124+
<BsChevronDoubleDown className='inline-block mr-2' />
125+
{translation.scrollDown}
126+
</button>
127+
</section>
128+
129+
<section
130+
className='min-h-screen bg-green-600'
131+
id='skills-page'
132+
style={{ minHeight: 'calc(100vh - 9rem)' }}
133+
>
134+
<h2>test skills</h2>
135+
</section>
136+
</main>
137+
138+
<footer className='mt-auto border-t-2 border-orange-600 text-center py-10 text-gray-600 bg-gray-200 dark:bg-black dark:text-gray-400'>
139+
<div className='mx-auto max-w-3xl'>
140+
<blockquote className='text-lg text-gray-600 italic my-1 mx-6 pl-4 px-4 border-l-4 border-orange-500'>
141+
&quot;{translation.quote}&quot; &ndash; Cory House
142+
</blockquote>
143+
</div>
144+
<div className='text-5xl py-5 flex justify-center gap-16 text-gray-600 dark:text-gray-400'>
145+
<Link href='https://www.linkedin.com/in/diegoarndt/' passHref={true}>
146+
<a
147+
target='_blank'
148+
rel='noopener noreferrer'
149+
className='hover:scale-110 hover:text-blue-600'
150+
>
151+
<AiFillLinkedin />
152+
</a>
153+
</Link>
154+
</div>
155+
<p>
156+
{translation.handcrafted} ©&nbsp;
157+
<span>
158+
<YearInWords language={props.locale} />
159+
</span>
160+
</p>
161+
</footer>
162+
</div>
163+
);
164+
}

postcss.config.js

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
module.exports = {
2+
plugins: {
3+
tailwindcss: {},
4+
autoprefixer: {},
5+
},
6+
}

public/Diego_Arndt_Resume.pdf

52.6 KB
Binary file not shown.

public/da-logo.png

30.6 KB
Loading

public/favicon.ico

15 KB
Binary file not shown.

public/myself.jpg

67.2 KB
Loading

styles/globals.css

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
@tailwind base;
2+
@tailwind components;
3+
@tailwind utilities;
4+
5+
html,
6+
body {
7+
padding: 0;
8+
margin: 0;
9+
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans,
10+
Helvetica Neue, sans-serif;
11+
}
12+
13+
h2 {
14+
font-family: "Titillium Web", sans-serif;
15+
}
16+
17+
h3 {
18+
font-family: "League Spartan", sans-serif;
19+
}
20+
21+
a {
22+
color: inherit;
23+
text-decoration: none;
24+
}
25+
26+
* {
27+
box-sizing: border-box;
28+
}
29+
30+
.react-flags-select ul {
31+
background-color: white;
32+
}
33+
34+
.dark .react-flags-select ul{
35+
background-color: black;
36+
border: thin solid rgba(77, 77, 77, 0.3);
37+
}
38+
39+
.dark .react-flags-select li:hover{
40+
color: black;
41+
}

0 commit comments

Comments
 (0)