Deployment (#88)
This commit is contained in:
parent
5f492b8be5
commit
1c8c93e3c4
29 changed files with 54 additions and 636 deletions
20
.github/workflows/check-code-quality.yml
vendored
20
.github/workflows/check-code-quality.yml
vendored
|
|
@ -12,15 +12,12 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
node-version: 16
|
||||||
cache: "npm"
|
cache: "npm"
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm ci
|
run: npm ci
|
||||||
|
|
||||||
- name: Run ESLint
|
- name: Run ESLint
|
||||||
run: npm run lint
|
run: npm run lint
|
||||||
|
|
||||||
|
|
@ -29,14 +26,25 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
node-version: 16
|
||||||
cache: "npm"
|
cache: "npm"
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm ci
|
run: npm ci
|
||||||
|
|
||||||
- name: Run TypeScript types check
|
- name: Run TypeScript types check
|
||||||
run: npm run lint:ts
|
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
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,14 @@
|
||||||
|
|
||||||
Template for creating a comprehensive virtual CV for developers.
|
Template for creating a comprehensive virtual CV for developers.
|
||||||
|
|
||||||
|
|
||||||
|
## 🚀 How to use
|
||||||
|
Just click this button 👇
|
||||||
|
|
||||||
|
[](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
|
## 🧞 Commands
|
||||||
|
|
||||||
All commands are run from the root of the project, from a terminal:
|
All commands are run from the root of the project, from a terminal:
|
||||||
|
|
|
||||||
135
package-lock.json
generated
135
package-lock.json
generated
|
|
@ -44,9 +44,7 @@
|
||||||
"postcss": "8.4.19",
|
"postcss": "8.4.19",
|
||||||
"prettier": "2.8.0",
|
"prettier": "2.8.0",
|
||||||
"tailwindcss": "3.2.4",
|
"tailwindcss": "3.2.4",
|
||||||
"typescript": "4.9.3",
|
"typescript": "4.9.3"
|
||||||
"vite": "3.2.4",
|
|
||||||
"vite-tsconfig-paths": "3.6.0"
|
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14",
|
"node": ">=14",
|
||||||
|
|
@ -628,12 +626,6 @@
|
||||||
"node": ">=6.9.0"
|
"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": {
|
"node_modules/@emmetio/abbreviation": {
|
||||||
"version": "2.2.3",
|
"version": "2.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.2.3.tgz",
|
||||||
|
|
@ -4642,12 +4634,6 @@
|
||||||
"node": ">=10.13.0"
|
"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": {
|
"node_modules/global-agent": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz",
|
||||||
|
|
@ -8094,33 +8080,6 @@
|
||||||
"node": ">=0.10.0"
|
"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": {
|
"node_modules/regenerator-runtime": {
|
||||||
"version": "0.13.9",
|
"version": "0.13.9",
|
||||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
|
"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": {
|
"node_modules/vite/node_modules/@esbuild/linux-loong64": {
|
||||||
"version": "0.15.14",
|
"version": "0.15.14",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.14.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.14.tgz",
|
||||||
|
|
@ -11030,12 +10960,6 @@
|
||||||
"to-fast-properties": "^2.0.0"
|
"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": {
|
"@emmetio/abbreviation": {
|
||||||
"version": "2.2.3",
|
"version": "2.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.2.3.tgz",
|
||||||
|
|
@ -13890,12 +13814,6 @@
|
||||||
"is-glob": "^4.0.3"
|
"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": {
|
"global-agent": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz",
|
"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": {
|
"regenerator-runtime": {
|
||||||
"version": "0.13.9",
|
"version": "0.13.9",
|
||||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
|
"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": {
|
"vitefu": {
|
||||||
"version": "0.2.1",
|
"version": "0.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.1.tgz",
|
||||||
|
|
|
||||||
|
|
@ -55,8 +55,6 @@
|
||||||
"postcss": "8.4.19",
|
"postcss": "8.4.19",
|
||||||
"prettier": "2.8.0",
|
"prettier": "2.8.0",
|
||||||
"tailwindcss": "3.2.4",
|
"tailwindcss": "3.2.4",
|
||||||
"typescript": "4.9.3",
|
"typescript": "4.9.3"
|
||||||
"vite": "3.2.4",
|
|
||||||
"vite-tsconfig-paths": "3.6.0"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,11 +18,12 @@ const BookTile = 'a';
|
||||||
>
|
>
|
||||||
<Image
|
<Image
|
||||||
class:list={['rounded-lg', 'shadow-md', 'aspect-[3/4]', 'object-cover']}
|
class:list={['rounded-lg', 'shadow-md', 'aspect-[3/4]', 'object-cover']}
|
||||||
src={value.cover}
|
|
||||||
aspectRatio={3 / 4}
|
|
||||||
width="auto"
|
|
||||||
alt={value.title}
|
|
||||||
format="webp"
|
format="webp"
|
||||||
|
fit={'cover'}
|
||||||
|
aspectRatio={3 / 4}
|
||||||
|
quality={100}
|
||||||
|
src={value.cover}
|
||||||
|
alt={value.title}
|
||||||
/>
|
/>
|
||||||
<div class:list={['tile-content', 'gap-1', 'w-full']}>
|
<div class:list={['tile-content', 'gap-1', 'w-full']}>
|
||||||
<Typography class:list={['leading-5', 'hover:text-gray-900']} variant="tile-title">
|
<Typography class:list={['leading-5', 'hover:text-gray-900']} variant="tile-title">
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,7 @@
|
||||||
---
|
---
|
||||||
|
import Icon from '@/atoms/icon';
|
||||||
import type { IconName } from '@/types/icon';
|
import type { IconName } from '@/types/icon';
|
||||||
|
|
||||||
import Icon from './icon';
|
|
||||||
|
|
||||||
type IconButtonSize = 'small' | 'large';
|
type IconButtonSize = 'small' | 'large';
|
||||||
|
|
||||||
export interface Props {
|
export interface Props {
|
||||||
|
|
|
||||||
|
|
@ -18,11 +18,12 @@ const MediaTile = 'a';
|
||||||
>
|
>
|
||||||
<Image
|
<Image
|
||||||
class:list={['rounded-lg', 'shadow-md', 'aspect-square', 'object-cover']}
|
class:list={['rounded-lg', 'shadow-md', 'aspect-square', 'object-cover']}
|
||||||
src={value.image}
|
fit={'cover'}
|
||||||
width="auto"
|
|
||||||
aspectRatio={1 / 1}
|
|
||||||
alt={value.title}
|
|
||||||
format="webp"
|
format="webp"
|
||||||
|
aspectRatio={1 / 1}
|
||||||
|
quality={100}
|
||||||
|
src={value.image}
|
||||||
|
alt={value.title}
|
||||||
/>
|
/>
|
||||||
<div class:list={['tile-content', 'gap-1']}>
|
<div class:list={['tile-content', 'gap-1']}>
|
||||||
<Typography class:list={['leading-5', 'hover:text-gray-900']} variant="tile-title">
|
<Typography class:list={['leading-5', 'hover:text-gray-900']} variant="tile-title">
|
||||||
|
|
|
||||||
|
|
@ -18,11 +18,12 @@ const PersonTile = 'a';
|
||||||
>
|
>
|
||||||
<Image
|
<Image
|
||||||
class:list={['rounded-lg', 'shadow-md', 'transition', 'duration-300', 'aspect-square', 'object-cover']}
|
class:list={['rounded-lg', 'shadow-md', 'transition', 'duration-300', 'aspect-square', 'object-cover']}
|
||||||
width="auto"
|
format="webp"
|
||||||
|
fit={'cover'}
|
||||||
|
quality={100}
|
||||||
aspectRatio={1 / 1}
|
aspectRatio={1 / 1}
|
||||||
src={value.image}
|
src={value.image}
|
||||||
alt={value.name}
|
alt={value.name}
|
||||||
format="webp"
|
|
||||||
/>
|
/>
|
||||||
<div class:list={['tile-content', 'gap-1']}>
|
<div class:list={['tile-content', 'gap-1']}>
|
||||||
<Typography class:list={['leading-5', 'hover:text-gray-900']} variant="tile-title">
|
<Typography class:list={['leading-5', 'hover:text-gray-900']} variant="tile-title">
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
import { useLocation } from 'react-use';
|
import { useLocation } from 'react-use';
|
||||||
|
|
||||||
|
import Icon from '@/atoms/icon';
|
||||||
import { MAIN_SECTION } from '@/constants/section';
|
import { MAIN_SECTION } from '@/constants/section';
|
||||||
import type { Section } from '@/types/data';
|
import type { Section } from '@/types/data';
|
||||||
import type { IconName } from '@/types/icon';
|
import type { IconName } from '@/types/icon';
|
||||||
|
|
||||||
import Icon from './icon';
|
|
||||||
import Tooltip from './tooltip';
|
import Tooltip from './tooltip';
|
||||||
|
|
||||||
export interface SidebarItemProps {
|
export interface SidebarItemProps {
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,7 @@
|
||||||
---
|
---
|
||||||
|
import Icon from '@/atoms/icon';
|
||||||
import type { IconName } from '@/types/icon';
|
import type { IconName } from '@/types/icon';
|
||||||
|
|
||||||
import Icon from './icon';
|
|
||||||
|
|
||||||
export interface Props {
|
export interface Props {
|
||||||
name?: IconName;
|
name?: IconName;
|
||||||
color?: string;
|
color?: string;
|
||||||
|
|
|
||||||
|
|
@ -8,29 +8,31 @@ export interface Props extends astroHTML.JSX.HTMLAttributes {
|
||||||
value: Video;
|
value: Video;
|
||||||
}
|
}
|
||||||
|
|
||||||
const { value, ...props } = Astro.props;
|
const {
|
||||||
const VideoTile = 'a';
|
value: { title, url },
|
||||||
|
...props
|
||||||
|
} = Astro.props;
|
||||||
|
|
||||||
const getVideoThumbnail = (url: string) => {
|
const VideoTile = 'a';
|
||||||
return `https://img.youtube.com/vi/${url.split('/').pop()}/0.jpg`;
|
const id = url.split('/').pop();
|
||||||
};
|
const thumbnail = `https://img.youtube.com/vi/${id}/0.jpg`;
|
||||||
---
|
---
|
||||||
|
|
||||||
<VideoTile
|
<VideoTile
|
||||||
href={value.url}
|
href={url}
|
||||||
class:list={['flex', 'flex-col', 'gap-3', 'transition', 'duration-300', 'hover:translate-y-2', 'w-full', props.class]}
|
class:list={['flex', 'flex-col', 'gap-3', 'transition', 'duration-300', 'hover:translate-y-2', 'w-full', props.class]}
|
||||||
>
|
>
|
||||||
<Image
|
<Image
|
||||||
class:list={['rounded-lg', 'shadow-md', 'aspect-video', 'object-cover']}
|
class:list={['rounded-lg', 'shadow-md', 'aspect-video', 'object-cover']}
|
||||||
src={getVideoThumbnail(value.url)}
|
|
||||||
width="auto"
|
|
||||||
aspectRatio={16 / 9}
|
|
||||||
alt={value.title}
|
|
||||||
format="webp"
|
format="webp"
|
||||||
|
width={240}
|
||||||
|
height={180}
|
||||||
|
src={thumbnail}
|
||||||
|
alt={title}
|
||||||
/>
|
/>
|
||||||
<div class:list={['tile-content', 'gap-1']}>
|
<div class:list={['tile-content', 'gap-1']}>
|
||||||
<Typography class:list={['leading-5', 'hover:text-gray-900']} variant="tile-title">
|
<Typography class:list={['leading-5', 'hover:text-gray-900']} variant="tile-title">
|
||||||
{value.title}
|
{title}
|
||||||
</Typography>
|
</Typography>
|
||||||
</div>
|
</div>
|
||||||
</VideoTile>
|
</VideoTile>
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ const IconWrapper = url ? 'a' : 'div';
|
||||||
{
|
{
|
||||||
description && (
|
description && (
|
||||||
<IconWithTooltip
|
<IconWithTooltip
|
||||||
client:load
|
client:only="react"
|
||||||
name={'akar-icons:info-fill' as IconName}
|
name={'akar-icons:info-fill' as IconName}
|
||||||
color="#D1D5DB"
|
color="#D1D5DB"
|
||||||
size={14}
|
size={14}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
import Button from '@/atoms/button.astro';
|
|
||||||
---
|
|
||||||
|
|
||||||
<div class="p-5">
|
|
||||||
<Button href="#">Button text</Button>
|
|
||||||
</div>
|
|
||||||
|
|
@ -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>
|
|
||||||
|
|
@ -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>
|
|
||||||
|
|
@ -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>
|
|
||||||
|
|
@ -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>
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
import LabelledValue from '@/atoms/labelled-value.astro';
|
|
||||||
---
|
|
||||||
|
|
||||||
<div class="p-5">
|
|
||||||
<LabelledValue label="Label" value="value" />
|
|
||||||
</div>
|
|
||||||
|
|
@ -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>
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
import SectionCard from '@/atoms/section-card.astro';
|
|
||||||
---
|
|
||||||
|
|
||||||
<div class="p-5">
|
|
||||||
<SectionCard>SectionCard text</SectionCard>
|
|
||||||
</div>
|
|
||||||
|
|
@ -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>
|
|
||||||
|
|
@ -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>
|
|
||||||
|
|
@ -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} />
|
|
||||||
|
|
@ -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>
|
|
||||||
|
|
@ -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>
|
|
||||||
|
|
@ -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>
|
|
||||||
|
|
@ -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>
|
|
||||||
|
|
@ -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>
|
|
||||||
|
|
@ -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>
|
|
||||||
Loading…
Reference in a new issue