Deployment (#88)

This commit is contained in:
Marcin Woś 2022-11-28 20:19:19 +01:00 committed by GitHub
parent 5f492b8be5
commit 1c8c93e3c4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
29 changed files with 54 additions and 636 deletions

View file

@ -12,15 +12,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
cache: "npm"
- name: Install dependencies
run: npm ci
- name: Run ESLint
run: npm run lint
@ -29,14 +26,25 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
cache: "npm"
- name: Install dependencies
run: npm ci
- name: Run TypeScript types check
run: npm run lint:ts
build:
name: Build project
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
cache: "npm"
- name: Install dependencies
run: npm ci
- name: Run TypeScript types check
run: npm run build

View file

@ -2,6 +2,14 @@
Template for creating a comprehensive virtual CV for developers.
## 🚀 How to use
Just click this button 👇
[![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/CaptainObjective/devscard#NODE_VERSION=16)
This will create your own copy of this repository and trigger the deployment. All you need to do now is to go to your repository, populate `src/data.ts` with your own resume and push the changes 🔼
## 🧞 Commands
All commands are run from the root of the project, from a terminal:

135
package-lock.json generated
View file

@ -44,9 +44,7 @@
"postcss": "8.4.19",
"prettier": "2.8.0",
"tailwindcss": "3.2.4",
"typescript": "4.9.3",
"vite": "3.2.4",
"vite-tsconfig-paths": "3.6.0"
"typescript": "4.9.3"
},
"engines": {
"node": ">=14",
@ -628,12 +626,6 @@
"node": ">=6.9.0"
}
},
"node_modules/@cush/relative": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@cush/relative/-/relative-1.0.0.tgz",
"integrity": "sha512-RpfLEtTlyIxeNPGKcokS+p3BZII/Q3bYxryFRglh5H3A3T8q9fsLYm72VYAMEOOIBLEa8o93kFLiBDUWKrwXZA==",
"dev": true
},
"node_modules/@emmetio/abbreviation": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.2.3.tgz",
@ -4642,12 +4634,6 @@
"node": ">=10.13.0"
}
},
"node_modules/glob-regex": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/glob-regex/-/glob-regex-0.3.2.tgz",
"integrity": "sha512-m5blUd3/OqDTWwzBBtWBPrGlAzatRywHameHeekAZyZrskYouOGdNB8T/q6JucucvJXtOuyHIn0/Yia7iDasDw==",
"dev": true
},
"node_modules/global-agent": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz",
@ -8094,33 +8080,6 @@
"node": ">=0.10.0"
}
},
"node_modules/recrawl-sync": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/recrawl-sync/-/recrawl-sync-2.2.2.tgz",
"integrity": "sha512-E2sI4F25Fu2nrfV+KsnC7/qfk/spQIYXlonfQoS4rwxeNK5BjxnLPbWiRXHVXPwYBOTWtPX5765kTm/zJiL+LQ==",
"dev": true,
"dependencies": {
"@cush/relative": "^1.0.0",
"glob-regex": "^0.3.0",
"slash": "^3.0.0",
"tslib": "^1.9.3"
}
},
"node_modules/recrawl-sync/node_modules/slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/recrawl-sync/node_modules/tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
"dev": true
},
"node_modules/regenerator-runtime": {
"version": "0.13.9",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
@ -9876,35 +9835,6 @@
}
}
},
"node_modules/vite-tsconfig-paths": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-3.6.0.tgz",
"integrity": "sha512-UfsPYonxLqPD633X8cWcPFVuYzx/CMNHAjZTasYwX69sXpa4gNmQkR0XCjj82h7zhLGdTWagMjC1qfb9S+zv0A==",
"dev": true,
"dependencies": {
"debug": "^4.1.1",
"globrex": "^0.1.2",
"recrawl-sync": "^2.0.3",
"tsconfig-paths": "^4.0.0"
},
"peerDependencies": {
"vite": ">2.0.0-0"
}
},
"node_modules/vite-tsconfig-paths/node_modules/tsconfig-paths": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.0.tgz",
"integrity": "sha512-AHx4Euop/dXFC+Vx589alFba8QItjF+8hf8LtmuiCwHyI4rHXQtOOENaM8kvYf5fR0dRChy3wzWIZ9WbB7FWow==",
"dev": true,
"dependencies": {
"json5": "^2.2.1",
"minimist": "^1.2.6",
"strip-bom": "^3.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/vite/node_modules/@esbuild/linux-loong64": {
"version": "0.15.14",
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.14.tgz",
@ -11030,12 +10960,6 @@
"to-fast-properties": "^2.0.0"
}
},
"@cush/relative": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@cush/relative/-/relative-1.0.0.tgz",
"integrity": "sha512-RpfLEtTlyIxeNPGKcokS+p3BZII/Q3bYxryFRglh5H3A3T8q9fsLYm72VYAMEOOIBLEa8o93kFLiBDUWKrwXZA==",
"dev": true
},
"@emmetio/abbreviation": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.2.3.tgz",
@ -13890,12 +13814,6 @@
"is-glob": "^4.0.3"
}
},
"glob-regex": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/glob-regex/-/glob-regex-0.3.2.tgz",
"integrity": "sha512-m5blUd3/OqDTWwzBBtWBPrGlAzatRywHameHeekAZyZrskYouOGdNB8T/q6JucucvJXtOuyHIn0/Yia7iDasDw==",
"dev": true
},
"global-agent": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz",
@ -16268,32 +16186,6 @@
}
}
},
"recrawl-sync": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/recrawl-sync/-/recrawl-sync-2.2.2.tgz",
"integrity": "sha512-E2sI4F25Fu2nrfV+KsnC7/qfk/spQIYXlonfQoS4rwxeNK5BjxnLPbWiRXHVXPwYBOTWtPX5765kTm/zJiL+LQ==",
"dev": true,
"requires": {
"@cush/relative": "^1.0.0",
"glob-regex": "^0.3.0",
"slash": "^3.0.0",
"tslib": "^1.9.3"
},
"dependencies": {
"slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
},
"tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
"dev": true
}
}
},
"regenerator-runtime": {
"version": "0.13.9",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
@ -17730,31 +17622,6 @@
}
}
},
"vite-tsconfig-paths": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-3.6.0.tgz",
"integrity": "sha512-UfsPYonxLqPD633X8cWcPFVuYzx/CMNHAjZTasYwX69sXpa4gNmQkR0XCjj82h7zhLGdTWagMjC1qfb9S+zv0A==",
"dev": true,
"requires": {
"debug": "^4.1.1",
"globrex": "^0.1.2",
"recrawl-sync": "^2.0.3",
"tsconfig-paths": "^4.0.0"
},
"dependencies": {
"tsconfig-paths": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.0.tgz",
"integrity": "sha512-AHx4Euop/dXFC+Vx589alFba8QItjF+8hf8LtmuiCwHyI4rHXQtOOENaM8kvYf5fR0dRChy3wzWIZ9WbB7FWow==",
"dev": true,
"requires": {
"json5": "^2.2.1",
"minimist": "^1.2.6",
"strip-bom": "^3.0.0"
}
}
}
},
"vitefu": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.1.tgz",

View file

@ -55,8 +55,6 @@
"postcss": "8.4.19",
"prettier": "2.8.0",
"tailwindcss": "3.2.4",
"typescript": "4.9.3",
"vite": "3.2.4",
"vite-tsconfig-paths": "3.6.0"
"typescript": "4.9.3"
}
}

View file

@ -18,11 +18,12 @@ const BookTile = 'a';
>
<Image
class:list={['rounded-lg', 'shadow-md', 'aspect-[3/4]', 'object-cover']}
src={value.cover}
aspectRatio={3 / 4}
width="auto"
alt={value.title}
format="webp"
fit={'cover'}
aspectRatio={3 / 4}
quality={100}
src={value.cover}
alt={value.title}
/>
<div class:list={['tile-content', 'gap-1', 'w-full']}>
<Typography class:list={['leading-5', 'hover:text-gray-900']} variant="tile-title">

View file

@ -1,8 +1,7 @@
---
import Icon from '@/atoms/icon';
import type { IconName } from '@/types/icon';
import Icon from './icon';
type IconButtonSize = 'small' | 'large';
export interface Props {

View file

@ -18,11 +18,12 @@ const MediaTile = 'a';
>
<Image
class:list={['rounded-lg', 'shadow-md', 'aspect-square', 'object-cover']}
src={value.image}
width="auto"
aspectRatio={1 / 1}
alt={value.title}
fit={'cover'}
format="webp"
aspectRatio={1 / 1}
quality={100}
src={value.image}
alt={value.title}
/>
<div class:list={['tile-content', 'gap-1']}>
<Typography class:list={['leading-5', 'hover:text-gray-900']} variant="tile-title">

View file

@ -18,11 +18,12 @@ const PersonTile = 'a';
>
<Image
class:list={['rounded-lg', 'shadow-md', 'transition', 'duration-300', 'aspect-square', 'object-cover']}
width="auto"
format="webp"
fit={'cover'}
quality={100}
aspectRatio={1 / 1}
src={value.image}
alt={value.name}
format="webp"
/>
<div class:list={['tile-content', 'gap-1']}>
<Typography class:list={['leading-5', 'hover:text-gray-900']} variant="tile-title">

View file

@ -1,10 +1,10 @@
import { useLocation } from 'react-use';
import Icon from '@/atoms/icon';
import { MAIN_SECTION } from '@/constants/section';
import type { Section } from '@/types/data';
import type { IconName } from '@/types/icon';
import Icon from './icon';
import Tooltip from './tooltip';
export interface SidebarItemProps {

View file

@ -1,8 +1,7 @@
---
import Icon from '@/atoms/icon';
import type { IconName } from '@/types/icon';
import Icon from './icon';
export interface Props {
name?: IconName;
color?: string;

View file

@ -8,29 +8,31 @@ export interface Props extends astroHTML.JSX.HTMLAttributes {
value: Video;
}
const { value, ...props } = Astro.props;
const VideoTile = 'a';
const {
value: { title, url },
...props
} = Astro.props;
const getVideoThumbnail = (url: string) => {
return `https://img.youtube.com/vi/${url.split('/').pop()}/0.jpg`;
};
const VideoTile = 'a';
const id = url.split('/').pop();
const thumbnail = `https://img.youtube.com/vi/${id}/0.jpg`;
---
<VideoTile
href={value.url}
href={url}
class:list={['flex', 'flex-col', 'gap-3', 'transition', 'duration-300', 'hover:translate-y-2', 'w-full', props.class]}
>
<Image
class:list={['rounded-lg', 'shadow-md', 'aspect-video', 'object-cover']}
src={getVideoThumbnail(value.url)}
width="auto"
aspectRatio={16 / 9}
alt={value.title}
format="webp"
width={240}
height={180}
src={thumbnail}
alt={title}
/>
<div class:list={['tile-content', 'gap-1']}>
<Typography class:list={['leading-5', 'hover:text-gray-900']} variant="tile-title">
{value.title}
{title}
</Typography>
</div>
</VideoTile>

View file

@ -28,7 +28,7 @@ const IconWrapper = url ? 'a' : 'div';
{
description && (
<IconWithTooltip
client:load
client:only="react"
name={'akar-icons:info-fill' as IconName}
color="#D1D5DB"
size={14}

View file

@ -1,7 +0,0 @@
---
import Button from '@/atoms/button.astro';
---
<div class="p-5">
<Button href="#">Button text</Button>
</div>

View file

@ -1,51 +0,0 @@
---
import BookTile from '@/atoms/book-tile.astro';
import MediaTile from '@/atoms/media-tile.astro';
import PersonTile from '@/atoms/person-tile.astro';
import Typography from '@/atoms/typography.astro';
import VideoTile from '@/atoms/video-tile.astro';
import type { Book, Media, Person, Video } from '@/types/favorites-section';
const book: Book = {
cover: import('@/assets/favorites/books/book-1.jpeg'),
title: 'The Pragmatic Programmer: From Journeyman to Master',
author: 'Andy Hunt, Dave Thomas',
url: 'https://www.goodreads.com/book/show/4099.The_Pragmatic_Programmer',
};
const person: Person = {
image: import('@/assets/favorites/people/person-1.jpg'),
name: 'Kent C. Dodds',
url: 'https://kentcdodds.com/',
};
const video: Video = {
thumbnail: import('@/assets/favorites/videos/video-1.jpeg'),
title: 'Building Resilient Frontend Architecture - Monica Lent - GOTO 2019',
url: 'https://youtu.be/TqfbAXCCVwE',
};
const media: Media = {
image: import('@/assets/favorites/media/media-1.jpeg'),
title: 'Fireship.io',
type: 'YouTube channel',
url: 'https://www.youtube.com/c/Fireship',
};
---
<Typography class="m-2 font-mono" variant="item-title">Favourite Book</Typography>
<div class="m-4 grid grid-cols-8">
<BookTile value={book} />
</div>
<Typography class="m-2 font-mono" variant="item-title">Favourite Person</Typography>
<div class="m-4 grid grid-cols-12">
<PersonTile value={person} />
</div>
<Typography class="m-2 font-mono" variant="item-title">Favourite Video</Typography>
<div class="m-4 grid grid-cols-6">
<VideoTile value={video} />
</div>
<Typography class="m-2 font-mono" variant="item-title">Favourite Media</Typography>
<div class="m-4 grid grid-cols-12">
<MediaTile value={media} />
</div>

View file

@ -1,10 +0,0 @@
---
import IconButton from '@/atoms/icon-button.astro';
---
<div class:list={['p-5', 'flex', 'flex-col', 'gap-2']}>
<IconButton icon="fa6-brands:facebook-f" size="small" href="#" />
<IconButton icon="fa6-brands:github" size="small" href="#" />
<IconButton icon="fa6-brands:linkedin-in" size="large" href="#" />
<IconButton icon="fa6-brands:twitter" size="large" href="#" />
</div>

View file

@ -1,9 +0,0 @@
---
import Icon from '@/atoms/icon';
---
<div class="p-5">
<!-- Available icon names here: https://icon-sets.iconify.design -->
<!-- Colors for simple icons here: https://simpleicons.org -->
<Icon client:load name="simple-icons:react" size={24} color="#61DAFB" />
</div>

View file

@ -1,7 +0,0 @@
---
import { Image } from '@astrojs/image/components';
---
<div class="p-5">
<Image src={import('@/assets/my-image.jpeg')} alt="My image" width={120} height={120} format="webp" />
</div>

View file

@ -1,7 +0,0 @@
---
import LabelledValue from '@/atoms/labelled-value.astro';
---
<div class="p-5">
<LabelledValue label="Label" value="value" />
</div>

View file

@ -1,41 +0,0 @@
---
import MainSection from '@/sections/main-section.astro';
import type { MainSection as MainSectionData } from '@/types/main-section';
const mainSectionData: MainSectionData = {
config: {
title: 'Main Section',
icon: 'fa6-solid:user',
},
image: import('@/assets/my-image.jpeg'),
fullName: 'Mark Freeman',
role: 'Senior React Developer',
details: [
{ label: 'Phone', value: '+48 604 343 212' },
{ label: 'Email', value: 'veeeery.long.email.address@gmail.com' },
{ label: 'From', value: 'Warsaw, Poland' },
{ label: 'Salary range', value: '18 000 - 25 000 PLN' },
],
description:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sodales ac dui at vestibulum. In condimentum metus id dui tincidunt, in blandit mi vehicula. Nulla lacinia, erat sit amet elementum vulputate, lectus mauris volutpat mi, vitae accumsan metus elit ut nunc. Vestibulum lacinia enim eget eros fermentum scelerisque. Proin augue leo, posuere ut imperdiet vitae, fermentum eu ipsum. Sed sed neque sagittis, posuere urna nec, commodo leo. Pellentesque posuere justo vitae massa volutpat maximus.',
tags: [{ name: 'Open for freelance' }, { name: 'Available for mentoring' }, { name: 'Working on side project' }],
action: {
label: 'Download CV',
url: '#',
},
socials: [
{ name: 'Facebook', icon: 'fa6-brands:facebook-f', url: '#' },
{ name: 'GitHub', icon: 'fa6-brands:github', url: '#' },
{ name: 'LinkedIn', icon: 'fa6-brands:linkedin-in', url: '#' },
{ name: 'Twitter', icon: 'fa6-brands:twitter', url: '#' },
],
};
---
<body class="flex justify-center bg-gray-50">
<div class="flex gap-8 w-full max-w-6xl px-2 py-3 sm:px-8 sm:py-12 lg:px-16 lg:py-20 lg:ml-22">
<main class="w-full space-y-4 sm:space-y-6 lg:space-y-8">
<MainSection {...mainSectionData} />
</main>
</div>
</body>

View file

@ -1,7 +0,0 @@
---
import SectionCard from '@/atoms/section-card.astro';
---
<div class="p-5">
<SectionCard>SectionCard text</SectionCard>
</div>

View file

@ -1,7 +0,0 @@
---
import SidebarItem from '@/atoms/sidebar-item';
---
<div class="p-5">
<SidebarItem client:only="react" icon="fa6-solid:bars-progress" section="experience" />
</div>

View file

@ -1,12 +0,0 @@
---
import SidebarItem from '@/atoms/sidebar-item';
import Sidebar from '@/organisms/sidebar.astro';
---
<div class="relative p-5">
<Sidebar>
<SidebarItem client:only="react" icon="fa6-solid:bars-progress" section="skills" />
<SidebarItem client:only="react" icon="fa6-solid:suitcase" section="experience" />
<SidebarItem client:only="react" icon="fa6-solid:rocket" section="portfolio" />
</Sidebar>
</div>

View file

@ -1,14 +0,0 @@
---
import Skill from '@/organisms/skill.astro';
import type { LevelledSkill } from '@/types/skills-section';
const levelledSkill: LevelledSkill = {
icon: 'simple-icons:react',
iconColor: '#61DAFB',
name: 'React.js',
level: 3,
url: 'https://reactjs.org/',
};
---
<Skill {...levelledSkill} />

View file

@ -1,160 +0,0 @@
---
import SkillsSection from '@/sections/skills-section.astro';
import type { SkillsSection as SkillsSectionData } from '@/types/skills-section';
const skills: SkillsSectionData = {
config: {
title: 'Skills',
icon: 'fa6-solid:bars-progress',
},
skillSets: [
{
title: 'I already know',
skills: [
{
icon: 'simple-icons:react',
iconColor: '#61DAFB',
name: 'React.js',
level: 5,
url: 'https://reactjs.org/',
description:
'Proin ut erat sed massa tempus suscipit. Mauris efficitur nunc sem, nec scelerisque ligula bibendum ut.',
},
{
icon: 'simple-icons:typescript',
iconColor: '#3178C6',
name: 'TypeScript',
level: 4,
url: 'https://www.typescriptlang.org/',
description: 'Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.',
},
{
icon: 'simple-icons:sass',
iconColor: '#CC6699',
name: 'SASS',
level: 4,
url: 'https://sass-lang.com/',
description: 'Nulla interdum pellentesque ultricies. Ut id eros commodo, ultrices ligula eu, elementum ante.',
},
{
icon: 'simple-icons:chakraui',
iconColor: '#319795',
name: 'Chakra UI',
level: 5,
url: 'https://chakra-ui.com/',
},
{
icon: 'simple-icons:tailwindcss',
iconColor: '#06B6D4',
name: 'Tailwind CSS',
level: 2,
url: 'https://tailwindcss.com/',
},
{
icon: 'simple-icons:prettier',
iconColor: '#F7B93E',
name: 'Prettier',
level: 5,
url: 'https://prettier.io/',
},
{
icon: 'simple-icons:eslint',
iconColor: '#4B32C3',
name: 'ESLint',
level: 4,
url: 'https://eslint.org/',
description:
'Nulla tempor turpis at vehicula pharetra. Vestibulum tellus tortor, commodo et suscipit id, lobortis id nunc.',
},
{
icon: 'simple-icons:nestjs',
iconColor: '#E0234E',
name: 'NestJS',
level: 2,
url: 'https://nestjs.com/',
description:
'Praesent feugiat ultricies iaculis. In posuere vehicula odio, sed consequat velit porta viverra.',
},
{
icon: 'simple-icons:postgresql',
iconColor: '#4169E1',
name: 'PostgreSQL',
level: 2,
url: 'https://www.postgresql.org/',
},
{
icon: 'simple-icons:mongodb',
iconColor: '#47A248',
name: 'MongoDB',
level: 1,
url: 'https://www.mongodb.com/',
},
{
icon: 'simple-icons:firebase',
iconColor: '#FFCA28',
name: 'Firebase',
level: 1,
url: 'https://firebase.google.com/',
},
{
icon: 'simple-icons:pnpm',
iconColor: '#F69220',
name: 'pnpm',
level: 3,
url: 'https://pnpm.io/',
},
],
},
{
title: 'I want to learn',
skills: [
{
icon: 'simple-icons:apollographql',
iconColor: '#311C87',
name: 'Apollo GraphQL',
},
{
icon: 'simple-icons:astro',
iconColor: '#FF5D01',
name: 'Astro',
},
{
icon: 'simple-icons:supabase',
iconColor: '#3ECF8E',
name: 'Supabase',
},
{
icon: 'simple-icons:cypress',
iconColor: '#17202C',
name: 'Cypress',
},
],
},
{
title: 'I speak',
skills: [
{
icon: 'circle-flags:pl',
name: 'Polish - native',
},
{
icon: 'circle-flags:us',
name: 'English - C1',
},
{
icon: 'circle-flags:es-variant',
name: 'Spanish - B1',
},
],
},
],
};
---
<body class="flex justify-center bg-gray-50">
<div class="flex gap-8 w-full max-w-6xl px-2 py-3 sm:px-8 sm:py-12 lg:px-16 lg:py-20 lg:ml-22">
<main class="w-full space-y-4 sm:space-y-6 lg:space-y-8">
<SkillsSection config={skills.config} skillSets={skills.skillSets} />
</main>
</div>
</body>

View file

@ -1,11 +0,0 @@
---
import Tag from '@/atoms/tag.astro';
---
<div class="p-5">
<Tag>Tag text</Tag>
</div>
<div class="p-5">
<Tag name="simple-icons:react" color="#61DAFB">Tag text</Tag>
</div>

View file

@ -1,20 +0,0 @@
---
import Testimonial from '@/organisms/testimonial.astro';
import type { Testimonial as TestimonialData } from '@/types/testimonials-section';
const testimonial: TestimonialData = {
author: 'Howard Stewart',
relation: 'We work together as front-end developers at Google',
content:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed euismod, nisl vel tincidunt aliquam, nunc nisl aliquet nisl, eget aliquet nunc nisl euismod nisl. Sed euismod, nisl vel tincidunt aliquam, nunc nisl aliquet nisl, eget aliquet nunc nisl euismod nisl.',
image: import('@/assets/testimonials/testimonial-1.jpeg'),
socials: [
{ name: 'GitHub', icon: 'fa6-brands:github', url: '#' },
{ name: 'LinkedIn', icon: 'fa6-brands:linkedin-in', url: '#' },
],
};
---
<div class:list={['flex', 'flex-col', 'gap-2', 'max-w-[896px]']}>
<Testimonial testimonial={testimonial} />
</div>

View file

@ -1,45 +0,0 @@
---
import TestimonialsSection from '@/sections/testimonials-section.astro';
import type { Testimonial } from '@/types/testimonials-section';
const testimonials: Testimonial[] = [
{
image: import('@/assets/testimonials/testimonial-1.jpeg'),
author: 'Howard Stewart',
relation: 'We work together as front-end developers at Google',
content:
'In nec mattis sem. Morbi purus lorem, euismod ac varius at, aliquet vitae augue. Pellentesque ut facilisis felis. In sed dui blandit, aliquet odio eu, elementum leo. In facilisis dapibus tortor ac volutpat. Cras cursus nec odio maximus elementum.',
socials: [
{ name: 'GitHub', icon: 'fa6-brands:github', url: '#' },
{ name: 'LinkedIn', icon: 'fa6-brands:linkedin-in', url: '#' },
],
},
{
image: import('@/assets/testimonials/testimonial-2.jpeg'),
author: 'Jean Richards',
relation: 'My project manager at GitLab',
content:
'Praesent nec congue elit. Vestibulum lobortis congue ipsum, a gravida mi tempus ac. Mauris aliquet purus nibh, vel varius turpis tempus non. Nullam eget ultricies orci. Quisque nulla ante, auctor eget varius ac, imperdiet nec magna.',
socials: [{ name: 'LinkedIn', icon: 'fa6-brands:linkedin-in', url: '#' }],
},
{
image: import('@/assets/testimonials/testimonial-3.jpeg'),
author: 'Jason Fisher',
relation: 'My customer for sidewing.com website',
content:
'Mauris tincidunt at purus vehicula porta. Mauris eget mollis turpis. Sed iaculis rutrum pharetra. Vivamus risus quam, suscipit et semper ut, aliquet ut tellus. Donec quis auctor nunc.',
socials: [
{ name: 'GitHub', icon: 'fa6-brands:github', url: '#' },
{ name: 'Website', icon: 'fa6-solid:globe', url: '#' },
],
},
];
---
<body class="flex justify-center bg-gray-50">
<div class="flex gap-8 w-full max-w-6xl px-2 py-3 sm:px-8 sm:py-12 lg:px-16 lg:py-20 lg:ml-22">
<main class="w-full space-y-4 sm:space-y-6 lg:space-y-8">
<TestimonialsSection testimonials={testimonials} config={{ title: 'Testimonials', icon: 'fa6-solid:comment' }} />
</main>
</div>
</body>

View file

@ -1,10 +0,0 @@
---
import SidebarItem from '@/atoms/sidebar-item';
import Tooltip from '@/atoms/tooltip';
---
<div class="p-10">
<Tooltip client:only="react" content="siemano">
<SidebarItem client:load section="experience" icon="fa6-solid:user" />
</Tooltip>
</div>

View file

@ -1,48 +0,0 @@
---
import Typography from '@/atoms/typography.astro';
const text = 'A quick brown fox jumps over the lazy dog';
---
<div class="p-5 space-y-10">
<div>
<p class="mb-2 font-mono">paragraph (default)</p>
<Typography>{text}</Typography>
</div>
<div>
<p class="mb-2 font-mono">main-title</p>
<Typography variant="main-title">{text}</Typography>
</div>
<div>
<p class="mb-2 font-mono">main-subtitle</p>
<Typography variant="main-subtitle">{text}</Typography>
</div>
<div>
<p class="mb-2 font-mono">section-title</p>
<Typography variant="section-title">{text}</Typography>
</div>
<div>
<p class="mb-2 font-mono">section-subtitle</p>
<Typography variant="section-subtitle">{text}</Typography>
</div>
<div>
<p class="mb-2 font-mono">item-title</p>
<Typography variant="item-title">{text}</Typography>
</div>
<div>
<p class="mb-2 font-mono">item-title-suffix</p>
<Typography variant="item-title-suffix">{text}</Typography>
</div>
<div>
<p class="mb-2 font-mono">item-subtitle</p>
<Typography variant="item-subtitle">{text}</Typography>
</div>
<div>
<p class="mb-2 font-mono">tile-title</p>
<Typography variant="tile-title">{text}</Typography>
</div>
<div>
<p class="mb-2 font-mono">tile-subtitle</p>
<Typography variant="tile-subtitle">{text}</Typography>
</div>
</div>