9 | {projects?.map(({ image, title, about, link, sourcelink }, index) => (
10 |
11 |
12 | {title}
13 | {about}
14 |
15 |
16 |
17 | Visit →
18 |
19 |
20 | Source
21 |
22 |
23 |
24 |
25 |
26 | ))}
27 |
28 | >
29 | );
30 | };
31 | export default PortfolioItems;
32 |
--------------------------------------------------------------------------------
/src/components/UI/Title/styles.tsx:
--------------------------------------------------------------------------------
1 | import styled, { css } from "styled-components";
2 | import { fromBottom } from "styles/keyframes/keyframes";
3 |
4 | export const Title = styled.h2`
5 | ${({ theme }) => css`
6 | color: ${theme.colors.white};
7 | font-size: ${theme.font.sizes.xlarge};
8 | position: relative;
9 | opacity: 0;
10 |
11 |
12 | &:before {
13 | transition: all .8s ease;
14 | content: '';
15 | display: block;
16 | width: 0px;
17 | height: 18px;
18 | background-color: ${theme.colors.secondary};
19 | position: absolute;
20 | bottom: 13px;
21 | z-index: -1;
22 | border-radius: 1px;
23 | }
24 |
25 |
26 | &.active {
27 | animation: ${fromBottom} .5s backwards;
28 | opacity: 1;
29 |
30 | &:before {
31 | width: 91px;
32 | }
33 | }
34 |
35 | @media(max-width: ${theme.media.md}) {
36 | font-size: ${theme.font.sizes.small};
37 |
38 | &:before {
39 | height: 10px;
40 | bottom: 8px;
41 | }
42 |
43 | &.active:before {
44 | width: 61px;
45 | }
46 | }
47 | `}
48 | `;
49 |
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Caio Augusto | Front-end Developer",
3 | "short_name": "Caio Augusto",
4 | "start_url": "/",
5 | "background_color": "#040413",
6 | "theme_color": "#4C30F5",
7 | "display": "fullscreen",
8 | "icons": [
9 | {
10 | "src": "/img/logo48.png",
11 | "type": "image/png",
12 | "sizes": "48x48"
13 | },
14 | {
15 | "src": "/img/logo72.png",
16 | "type": "image/png",
17 | "sizes": "72x72"
18 | },
19 | {
20 | "src": "/img/logo96.png",
21 | "type": "image/png",
22 | "sizes": "96x96"
23 | },
24 | {
25 | "src": "/img/logo144.png",
26 | "type": "image/png",
27 | "sizes": "144x144"
28 | },
29 | {
30 | "src": "/img/logo192.png",
31 | "type": "image/png",
32 | "sizes": "192x192"
33 | },
34 | {
35 | "src": "/img/logo256.png",
36 | "type": "image/png",
37 | "sizes": "256x256"
38 | },
39 | {
40 | "src": "/img/logo384.png",
41 | "type": "image/png",
42 | "sizes": "384x384"
43 | },
44 | {
45 | "src": "/img/logo512.png",
46 | "type": "image/png",
47 | "sizes": "512x512"
48 | }
49 | ]
50 | }
--------------------------------------------------------------------------------
/src/pages/_document.tsx:
--------------------------------------------------------------------------------
1 | import Document, {
2 | DocumentContext,
3 | Html,
4 | Head,
5 | Main,
6 | NextScript,
7 | } from "next/document";
8 | import { ServerStyleSheet } from "styled-components";
9 |
10 | export default class MyDocument extends Document {
11 | static async getInitialProps(ctx: DocumentContext) {
12 | const sheet = new ServerStyleSheet();
13 | const originalRenderPage = ctx.renderPage;
14 |
15 | try {
16 | ctx.renderPage = () =>
17 | originalRenderPage({
18 | enhanceApp: (App) => (props) =>
19 | sheet.collectStyles(