add LinkTree like links page
All checks were successful
/ image_build (push) Successful in 5m41s

This commit is contained in:
2026-09-25 11:15:40 -04:00
parent b094a72a4e
commit 1c78e959f6
13 changed files with 300 additions and 9 deletions

View File

@@ -0,0 +1 @@
<svg version="1.1" id="main_outline" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" style="enable-background:new 0 0 640 640;" xml:space="preserve" viewBox="5.67 143.05 628.65 387.55"> <g> <path id="teabag" style="fill:#FFFFFF" d="M395.9,484.2l-126.9-61c-12.5-6-17.9-21.2-11.8-33.8l61-126.9c6-12.5,21.2-17.9,33.8-11.8 c17.2,8.3,27.1,13,27.1,13l-0.1-109.2l16.7-0.1l0.1,117.1c0,0,57.4,24.2,83.1,40.1c3.7,2.3,10.2,6.8,12.9,14.4 c2.1,6.1,2,13.1-1,19.3l-61,126.9C423.6,484.9,408.4,490.3,395.9,484.2z"/> <g> <g> <path style="fill:#609926" d="M622.7,149.8c-4.1-4.1-9.6-4-9.6-4s-117.2,6.6-177.9,8c-13.3,0.3-26.5,0.6-39.6,0.7c0,39.1,0,78.2,0,117.2 c-5.5-2.6-11.1-5.3-16.6-7.9c0-36.4-0.1-109.2-0.1-109.2c-29,0.4-89.2-2.2-89.2-2.2s-141.4-7.1-156.8-8.5 c-9.8-0.6-22.5-2.1-39,1.5c-8.7,1.8-33.5,7.4-53.8,26.9C-4.9,212.4,6.6,276.2,8,285.8c1.7,11.7,6.9,44.2,31.7,72.5 c45.8,56.1,144.4,54.8,144.4,54.8s12.1,28.9,30.6,55.5c25,33.1,50.7,58.9,75.7,62c63,0,188.9-0.1,188.9-0.1s12,0.1,28.3-10.3 c14-8.5,26.5-23.4,26.5-23.4s12.9-13.8,30.9-45.3c5.5-9.7,10.1-19.1,14.1-28c0,0,55.2-117.1,55.2-231.1 C633.2,157.9,624.7,151.8,622.7,149.8z M125.6,353.9c-25.9-8.5-36.9-18.7-36.9-18.7S69.6,321.8,60,295.4 c-16.5-44.2-1.4-71.2-1.4-71.2s8.4-22.5,38.5-30c13.8-3.7,31-3.1,31-3.1s7.1,59.4,15.7,94.2c7.2,29.2,24.8,77.7,24.8,77.7 S142.5,359.9,125.6,353.9z M425.9,461.5c0,0-6.1,14.5-19.6,15.4c-5.8,0.4-10.3-1.2-10.3-1.2s-0.3-0.1-5.3-2.1l-112.9-55 c0,0-10.9-5.7-12.8-15.6c-2.2-8.1,2.7-18.1,2.7-18.1L322,273c0,0,4.8-9.7,12.2-13c0.6-0.3,2.3-1,4.5-1.5c8.1-2.1,18,2.8,18,2.8 l110.7,53.7c0,0,12.6,5.7,15.3,16.2c1.9,7.4-0.5,14-1.8,17.2C474.6,363.8,425.9,461.5,425.9,461.5z"/> <path style="fill:#609926" d="M326.8,380.1c-8.2,0.1-15.4,5.8-17.3,13.8c-1.9,8,2,16.3,9.1,20c7.7,4,17.5,1.8,22.7-5.4 c5.1-7.1,4.3-16.9-1.8-23.1l24-49.1c1.5,0.1,3.7,0.2,6.2-0.5c4.1-0.9,7.1-3.6,7.1-3.6c4.2,1.8,8.6,3.8,13.2,6.1 c4.8,2.4,9.3,4.9,13.4,7.3c0.9,0.5,1.8,1.1,2.8,1.9c1.6,1.3,3.4,3.1,4.7,5.5c1.9,5.5-1.9,14.9-1.9,14.9 c-2.3,7.6-18.4,40.6-18.4,40.6c-8.1-0.2-15.3,5-17.7,12.5c-2.6,8.1,1.1,17.3,8.9,21.3c7.8,4,17.4,1.7,22.5-5.3 c5-6.8,4.6-16.3-1.1-22.6c1.9-3.7,3.7-7.4,5.6-11.3c5-10.4,13.5-30.4,13.5-30.4c0.9-1.7,5.7-10.3,2.7-21.3 c-2.5-11.4-12.6-16.7-12.6-16.7c-12.2-7.9-29.2-15.2-29.2-15.2s0-4.1-1.1-7.1c-1.1-3.1-2.8-5.1-3.9-6.3c4.7-9.7,9.4-19.3,14.1-29 c-4.1-2-8.1-4-12.2-6.1c-4.8,9.8-9.7,19.7-14.5,29.5c-6.7-0.1-12.9,3.5-16.1,9.4c-3.4,6.3-2.7,14.1,1.9,19.8 C343.2,346.5,335,363.3,326.8,380.1z"/> </g> </g> </g> </svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

3
src/img/links/github.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8C0 11.54 2.29 14.53 5.47 15.59C5.87 15.66 6.02 15.42 6.02 15.21C6.02 15.02 6.01 14.39 6.01 13.72C4 14.09 3.48 13.23 3.32 12.78C3.23 12.55 2.84 11.84 2.5 11.65C2.22 11.5 1.82 11.13 2.49 11.12C3.12 11.11 3.57 11.7 3.72 11.94C4.44 13.15 5.59 12.81 6.05 12.6C6.12 12.08 6.33 11.73 6.56 11.53C4.78 11.33 2.92 10.64 2.92 7.58C2.92 6.71 3.23 5.99 3.74 5.43C3.66 5.23 3.38 4.41 3.82 3.31C3.82 3.31 4.49 3.1 6.02 4.13C6.66 3.95 7.34 3.86 8.02 3.86C8.7 3.86 9.38 3.95 10.02 4.13C11.55 3.09 12.22 3.31 12.22 3.31C12.66 4.41 12.38 5.23 12.3 5.43C12.81 5.99 13.12 6.7 13.12 7.58C13.12 10.65 11.25 11.33 9.47 11.53C9.76 11.78 10.01 12.26 10.01 13.01C10.01 14.08 10 14.94 10 15.21C10 15.42 10.15 15.67 10.55 15.59C13.71 14.53 16 11.53 16 8C16 3.58 12.42 0 8 0Z" transform="scale(64)" fill="#1B1F23"/>
</svg>

After

Width:  |  Height:  |  Size: 970 B

7
src/img/links/gmail.svg Normal file
View File

@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="52 42 88 66">
<path fill="#4285f4" d="M58 108h14V74L52 59v43c0 3.32 2.69 6 6 6"/>
<path fill="#34a853" d="M120 108h14c3.32 0 6-2.69 6-6V59l-20 15"/>
<path fill="#fbbc04" d="M120 48v26l20-15v-8c0-7.42-8.47-11.65-14.4-7.2"/>
<path fill="#ea4335" d="M72 74V48l24 18 24-18v26L96 92"/>
<path fill="#c5221f" d="M52 51v8l20 15V48l-5.6-4.2c-5.94-4.45-14.4-.22-14.4 7.2"/>
</svg>

After

Width:  |  Height:  |  Size: 430 B

View File

@@ -0,0 +1,20 @@
<svg xmlns="http://www.w3.org/2000/svg" width="132.004" height="132" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="b">
<stop offset="0" stop-color="#3771c8"/>
<stop stop-color="#3771c8" offset=".128"/>
<stop offset="1" stop-color="#60f" stop-opacity="0"/>
</linearGradient>
<linearGradient id="a">
<stop offset="0" stop-color="#fd5"/>
<stop offset=".1" stop-color="#fd5"/>
<stop offset=".5" stop-color="#ff543e"/>
<stop offset="1" stop-color="#c837ab"/>
</linearGradient>
<radialGradient id="c" cx="158.429" cy="578.088" r="65" xlink:href="#a" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0 -1.98198 1.8439 0 -1031.402 454.004)" fx="158.429" fy="578.088"/>
<radialGradient id="d" cx="147.694" cy="473.455" r="65" xlink:href="#b" gradientUnits="userSpaceOnUse" gradientTransform="matrix(.17394 .86872 -3.5818 .71718 1648.348 -458.493)" fx="147.694" fy="473.455"/>
</defs>
<path fill="url(#c)" d="M65.03 0C37.888 0 29.95.028 28.407.156c-5.57.463-9.036 1.34-12.812 3.22-2.91 1.445-5.205 3.12-7.47 5.468C4 13.126 1.5 18.394.595 24.656c-.44 3.04-.568 3.66-.594 19.188-.01 5.176 0 11.988 0 21.125 0 27.12.03 35.05.16 36.59.45 5.42 1.3 8.83 3.1 12.56 3.44 7.14 10.01 12.5 17.75 14.5 2.68.69 5.64 1.07 9.44 1.25 1.61.07 18.02.12 34.44.12 16.42 0 32.84-.02 34.41-.1 4.4-.207 6.955-.55 9.78-1.28 7.79-2.01 14.24-7.29 17.75-14.53 1.765-3.64 2.66-7.18 3.065-12.317.088-1.12.125-18.977.125-36.81 0-17.836-.04-35.66-.128-36.78-.41-5.22-1.305-8.73-3.127-12.44-1.495-3.037-3.155-5.305-5.565-7.624C116.9 4 111.64 1.5 105.372.596 102.335.157 101.73.027 86.19 0H65.03z" transform="translate(1.004 1)"/>
<path fill="url(#d)" d="M65.03 0C37.888 0 29.95.028 28.407.156c-5.57.463-9.036 1.34-12.812 3.22-2.91 1.445-5.205 3.12-7.47 5.468C4 13.126 1.5 18.394.595 24.656c-.44 3.04-.568 3.66-.594 19.188-.01 5.176 0 11.988 0 21.125 0 27.12.03 35.05.16 36.59.45 5.42 1.3 8.83 3.1 12.56 3.44 7.14 10.01 12.5 17.75 14.5 2.68.69 5.64 1.07 9.44 1.25 1.61.07 18.02.12 34.44.12 16.42 0 32.84-.02 34.41-.1 4.4-.207 6.955-.55 9.78-1.28 7.79-2.01 14.24-7.29 17.75-14.53 1.765-3.64 2.66-7.18 3.065-12.317.088-1.12.125-18.977.125-36.81 0-17.836-.04-35.66-.128-36.78-.41-5.22-1.305-8.73-3.127-12.44-1.495-3.037-3.155-5.305-5.565-7.624C116.9 4 111.64 1.5 105.372.596 102.335.157 101.73.027 86.19 0H65.03z" transform="translate(1.004 1)"/>
<path fill="#fff" d="M66.004 18c-13.036 0-14.672.057-19.792.29-5.11.234-8.598 1.043-11.65 2.23-3.157 1.226-5.835 2.866-8.503 5.535-2.67 2.668-4.31 5.346-5.54 8.502-1.19 3.053-2 6.542-2.23 11.65C18.06 51.327 18 52.964 18 66s.058 14.667.29 19.787c.235 5.11 1.044 8.598 2.23 11.65 1.227 3.157 2.867 5.835 5.536 8.503 2.667 2.67 5.345 4.314 8.5 5.54 3.054 1.187 6.543 1.996 11.652 2.23 5.12.233 6.755.29 19.79.29 13.037 0 14.668-.057 19.788-.29 5.11-.234 8.602-1.043 11.656-2.23 3.156-1.226 5.83-2.87 8.497-5.54 2.67-2.668 4.31-5.346 5.54-8.502 1.18-3.053 1.99-6.542 2.23-11.65.23-5.12.29-6.752.29-19.788 0-13.036-.06-14.672-.29-19.792-.24-5.11-1.05-8.598-2.23-11.65-1.23-3.157-2.87-5.835-5.54-8.503-2.67-2.67-5.34-4.31-8.5-5.535-3.06-1.187-6.55-1.996-11.66-2.23-5.12-.233-6.75-.29-19.79-.29zm-4.306 8.65c1.278-.002 2.704 0 4.306 0 12.816 0 14.335.046 19.396.276 4.68.214 7.22.996 8.912 1.653 2.24.87 3.837 1.91 5.516 3.59 1.68 1.68 2.72 3.28 3.592 5.52.657 1.69 1.44 4.23 1.653 8.91.23 5.06.28 6.58.28 19.39s-.05 14.33-.28 19.39c-.214 4.68-.996 7.22-1.653 8.91-.87 2.24-1.912 3.835-3.592 5.514-1.68 1.68-3.275 2.72-5.516 3.59-1.69.66-4.232 1.44-8.912 1.654-5.06.23-6.58.28-19.396.28-12.817 0-14.336-.05-19.396-.28-4.68-.216-7.22-.998-8.913-1.655-2.24-.87-3.84-1.91-5.52-3.59-1.68-1.68-2.72-3.276-3.592-5.517-.657-1.69-1.44-4.23-1.653-8.91-.23-5.06-.276-6.58-.276-19.398s.046-14.33.276-19.39c.214-4.68.996-7.22 1.653-8.912.87-2.24 1.912-3.84 3.592-5.52 1.68-1.68 3.28-2.72 5.52-3.592 1.692-.66 4.233-1.44 8.913-1.655 4.428-.2 6.144-.26 15.09-.27zm29.928 7.97c-3.18 0-5.76 2.577-5.76 5.758 0 3.18 2.58 5.76 5.76 5.76 3.18 0 5.76-2.58 5.76-5.76 0-3.18-2.58-5.76-5.76-5.76zm-25.622 6.73c-13.613 0-24.65 11.037-24.65 24.65 0 13.613 11.037 24.645 24.65 24.645C79.617 90.645 90.65 79.613 90.65 66S79.616 41.35 66.003 41.35zm0 8.65c8.836 0 16 7.163 16 16 0 8.836-7.164 16-16 16-8.837 0-16-7.164-16-16 0-8.837 7.163-16 16-16z"/>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -0,0 +1 @@
<svg height="72" viewBox="0 0 72 72" width="72" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path d="M8,72 L64,72 C68.418278,72 72,68.418278 72,64 L72,8 C72,3.581722 68.418278,-8.11624501e-16 64,0 L8,0 C3.581722,8.11624501e-16 -5.41083001e-16,3.581722 0,8 L0,64 C5.41083001e-16,68.418278 3.581722,72 8,72 Z" fill="#007EBB"/><path d="M62,62 L51.315625,62 L51.315625,43.8021149 C51.315625,38.8127542 49.4197917,36.0245323 45.4707031,36.0245323 C41.1746094,36.0245323 38.9300781,38.9261103 38.9300781,43.8021149 L38.9300781,62 L28.6333333,62 L28.6333333,27.3333333 L38.9300781,27.3333333 L38.9300781,32.0029283 C38.9300781,32.0029283 42.0260417,26.2742151 49.3825521,26.2742151 C56.7356771,26.2742151 62,30.7644705 62,40.051212 L62,62 Z M16.349349,22.7940133 C12.8420573,22.7940133 10,19.9296567 10,16.3970067 C10,12.8643566 12.8420573,10 16.349349,10 C19.8566406,10 22.6970052,12.8643566 22.6970052,16.3970067 C22.6970052,19.9296567 19.8566406,22.7940133 16.349349,22.7940133 Z M11.0325521,62 L21.769401,62 L21.769401,27.3333333 L11.0325521,27.3333333 L11.0325521,62 Z" fill="#FFF"/></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

84
src/img/links/scroll.svg Normal file
View File

@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="scroll" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 128 128" style="enable-background:new 0 0 128 128;" xml:space="preserve">
<g>
<rect x="22.13" y="18.65" style="fill:#D68B52;" width="23.19" height="15.08"/>
<ellipse style="fill:#F2BD72;" cx="114.59" cy="108.83" rx="9.41" ry="12.65"/>
<path style="fill:#FFD8A1;" d="M114.59,96.18c-0.14,0-5.18,0-5.18,0s0.04-63.41,0.04-74.11S101.84,6.52,99.03,6.52
c-2.8,0-76.9,0-76.9,0s10.1,1.21,10.23,15.55c0.09,10.21,0,62.8,0,79.61s6.37,19.79,6.37,19.79s65.93,0,75.38,0
c0.07,0,0.14-0.01,0.21-0.02c0.09,0,0.18,0.02,0.27,0.02c5.2,0,9.41-5.66,9.41-12.65C124,101.85,119.79,96.18,114.59,96.18z"/>
<path style="fill:#FFD8A1;" d="M114.59,96.18c-0.14,0-5.18,0-5.18,0s0.04-63.41,0.04-74.11S101.84,6.52,99.03,6.52
c-2.8,0-76.9,0-76.9,0s10.1,1.21,10.23,15.55c0.09,10.21,0,62.8,0,79.61s6.37,19.79,6.37,19.79s65.93,0,75.38,0
c0.07,0,0.14-0.01,0.21-0.02c0.09,0,0.18,0.02,0.27,0.02c5.2,0,9.41-5.66,9.41-12.65C124,101.85,119.79,96.18,114.59,96.18z"/>
<path style="fill:#F2BD72;" d="M32.26,100.75l0.09-9.1c0,0,59.53,6.46,77.04-14.12v22.99L32.26,100.75z"/>
<g style="opacity:0.6;">
<g>
<path style="opacity:0.77;fill:none;stroke:#9E673C;stroke-width:3.0045;stroke-linecap:round;stroke-miterlimit:10;" d="
M45.52,30.1c1.17,0,2.35-0.02,3.52,0c0.89,0.02,1.72,0.14,2.63,0.05c0.98-0.1,1.96-0.29,2.96-0.26c1.22,0.04,2.39,0.41,3.62,0.41
c0.6,0,1.14-0.17,1.73-0.2c0.68-0.03,1.36,0,2.04,0c1.43,0,2.87,0,4.3,0"/>
<path style="opacity:0.77;fill:none;stroke:#9E673C;stroke-width:3.0045;stroke-linecap:round;stroke-miterlimit:10;" d="
M79.01,30.1c0.73,0,1.49,0.06,2.21-0.05c1.12-0.17,2.19-0.63,3.36-0.53c1.25,0.11,2.31,0.84,3.54,1.03
c1.99,0.29,3.86-0.9,5.87-1.09c0.64-0.06,1.28-0.02,1.92,0.03c1.45,0.12,2.88,0.3,4.31,0.53"/>
</g>
<g>
<path style="opacity:0.77;fill:none;stroke:#9E673C;stroke-width:3.0045;stroke-linecap:round;stroke-miterlimit:10;" d="
M45.52,53.51c1,0,2.04,0.1,3.03,0c1.39-0.14,2.73-0.63,4.16-0.56c1.44,0.07,2.76,0.7,4.17,0.95c1.94,0.33,3.89-0.08,5.81-0.33
c2.05-0.27,4-0.05,6.06-0.05c2.57,0,5.13,0,7.7,0"/>
<path style="opacity:0.77;fill:none;stroke:#9E673C;stroke-width:3.0045;stroke-linecap:round;stroke-miterlimit:10;" d="
M86.77,53.51c0.74,0,1.48-0.01,2.22,0c1.25,0.02,2.18-0.38,3.37-0.61c1.69-0.33,3.38,0.19,5.05,0.36
c1.23,0.12,2.52,0.26,3.75,0.25"/>
</g>
<g>
<path style="opacity:0.77;fill:none;stroke:#9E673C;stroke-width:3.0045;stroke-linecap:round;stroke-miterlimit:10;" d="
M68.56,76.96c1.34,0,2.74-0.09,4.05,0.09c2.27,0.32,4.18-0.39,6.41-0.62c2.09-0.22,4.18,0.2,6.28,0.37
c2.18,0.18,4.37,0.1,6.56,0.02c2.27-0.08,4.54,0.13,6.83,0.13"/>
<path style="opacity:0.77;fill:none;stroke:#9E673C;stroke-width:3.0045;stroke-linecap:round;stroke-miterlimit:10;" d="
M44.58,76.96c1.96,0,3.89,0.37,5.85,0.23c0.66-0.05,1.32-0.14,1.99-0.17c1.33-0.07,2.67,0.23,3.98,0.08
c0.87-0.1,1.7-0.14,2.58-0.14"/>
</g>
<g>
<path style="opacity:0.77;fill:none;stroke:#9E673C;stroke-width:3.0045;stroke-linecap:round;stroke-miterlimit:10;" d="
M68.56,18.48c1.34,0,2.74-0.09,4.05,0.09c2.27,0.32,4.18-0.39,6.41-0.62c2.09-0.22,4.18,0.2,6.28,0.37
c2.18,0.18,4.37,0.1,6.56,0.02c2.27-0.08,4.54,0.13,6.83,0.13"/>
<path style="opacity:0.77;fill:none;stroke:#9E673C;stroke-width:3.0045;stroke-linecap:round;stroke-miterlimit:10;" d="
M44.58,18.48c1.96,0,3.89,0.37,5.85,0.23c0.66-0.05,1.32-0.14,1.99-0.17c1.33-0.07,2.67,0.23,3.98,0.08
c0.87-0.1,1.7-0.14,2.58-0.14"/>
</g>
<path style="opacity:0.77;fill:none;stroke:#9E673C;stroke-width:3.0045;stroke-linecap:round;stroke-miterlimit:10;" d="
M45.52,41.87c0.96,0,1.89,0.04,2.83,0.11c1.68,0.12,3.24-0.64,4.87-0.81c2.05-0.21,4.07,0.45,6.1,0.75c2.01,0.3,4.05,0.12,6.07,0
c0.92-0.06,1.88-0.14,2.8-0.12c0.99,0.02,1.93,0.33,2.92,0.32c1.27-0.01,2.44-0.57,3.69-0.76c2.78-0.43,5.55,0.97,8.36,0.78
c0.92-0.06,1.81-0.29,2.72-0.38c1.12-0.11,2.25-0.01,3.37,0.09c1.66,0.15,3.32,0.3,4.98,0.45"/>
<path style="opacity:0.77;fill:none;stroke:#9E673C;stroke-width:3.0045;stroke-linecap:round;stroke-miterlimit:10;" d="
M45.52,65.26c0.96,0,1.89,0.04,2.83,0.11c1.68,0.12,3.24-0.64,4.87-0.81c2.05-0.21,4.07,0.45,6.1,0.75c2.01,0.3,4.05,0.12,6.07,0
c0.92-0.06,1.88-0.14,2.8-0.12c0.99,0.02,1.93,0.33,2.92,0.32c1.27-0.01,2.44-0.57,3.69-0.76c2.78-0.43,5.55,0.97,8.36,0.78
c0.92-0.06,1.81-0.29,2.72-0.38c1.12-0.11,2.25-0.01,3.37,0.09c1.66,0.15,3.32,0.3,4.98,0.45"/>
<path style="opacity:0.77;fill:none;stroke:#9E673C;stroke-width:3.0045;stroke-linecap:round;stroke-miterlimit:10;" d="
M58.39,88.62c0.52,0.01,0.99-0.11,1.5-0.13c0.74-0.04,1.47,0.17,2.2,0.28c1.75,0.26,3.58,0.39,5.32,0.01
c0.98-0.22,1.91-0.59,2.91-0.73c2.51-0.36,4.99,0.76,7.54,0.75c2.2-0.02,4.56-1.02,6.73-0.44c1.42,0.37,2.88,0.28,4.38,0.28"/>
</g>
<path style="fill:#FCEBCD;" d="M38.25,96.18v6.17h84.41c-1.64-3.69-4.64-6.17-8.07-6.17c-0.14,0-5.18,0-5.18,0H38.25z"/>
<ellipse style="fill:#F2BD72;" cx="38.73" cy="108.83" rx="9.41" ry="12.65"/>
<g>
<path style="fill:#784D30;" d="M45.71,108.17c0,5.33-3.34,8.35-6.92,9.33c-4.61,1.26-6.53,0.16-6.53,0.16V98.68
c0,0,3.25-0.82,6.72,0.16C42.52,99.83,45.71,102.84,45.71,108.17z"/>
<ellipse style="fill:#784D30;" cx="33.48" cy="108.17" rx="6.72" ry="9.65"/>
<ellipse style="fill:#784D30;" cx="33.48" cy="108.18" rx="6.72" ry="9.65"/>
<ellipse style="fill:#BA793E;" cx="24.86" cy="108.18" rx="4.46" ry="4.5"/>
<path style="fill:#BA793E;" d="M33.02,105.44c1.27,0.39,2.82,3.08,0.18,5.66c-0.67,0.65,0.02,2.09,0.48,3.3
c0.58,1.54,1,2.37,2.34,1.45c1.8-1.22,3.51-4.71,3.51-7.67c0-4.79-2.71-8.68-6.05-8.68c-1.72,0-3.06,0.55-4.19,2.88
c-0.5,1.04-0.55,2.37,1.04,2.53C30.33,104.92,32.11,105.17,33.02,105.44z"/>
</g>
<ellipse style="fill:#F2BD72;" cx="22.34" cy="20.09" rx="10.09" ry="13.57"/>
<g>
<path style="fill:#784D30;" d="M29.32,19.43c0,5.33-3.34,8.35-6.92,9.33c-4.61,1.26-6.53,0.16-6.53,0.16V9.94
c0,0,3.25-0.82,6.72,0.16C26.12,11.08,29.32,14.1,29.32,19.43z"/>
<ellipse style="fill:#784D30;" cx="17.09" cy="19.43" rx="6.72" ry="9.65"/>
<ellipse style="fill:#784D30;" cx="17.09" cy="19.44" rx="6.72" ry="9.65"/>
<ellipse style="fill:#BA793E;" cx="8.46" cy="19.44" rx="4.46" ry="4.5"/>
<path style="fill:#BA793E;" d="M16.62,16.7c1.27,0.39,2.82,3.08,0.18,5.66c-0.67,0.65,0.02,2.09,0.48,3.3
c0.58,1.54,1,2.37,2.34,1.45c1.8-1.22,3.51-4.71,3.51-7.67c0-4.79-2.71-8.68-6.05-8.68c-1.72,0-3.06,0.55-4.19,2.88
c-0.5,1.04-0.55,2.37,1.04,2.53C13.93,16.18,15.72,16.42,16.62,16.7z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.6 KiB

37
src/links/LinkTree.tsx Normal file
View File

@@ -0,0 +1,37 @@
import "./links.sass";
import {Link as LinkBase} from "../router/Link";
import {Path} from "../router/router";
import {Link} from "./link";
import {LINKS} from "./links";
import {motion} from "motion/react";
import {AnimateFade} from "../animations";
export default function LinkTree() {
return <motion.main className="link-tree" {...AnimateFade()}>
<section className="link-ctr">
{
LINKS.map(link => <LinkBox key={link.name} {...link}/>)
}
</section>
</motion.main>
}
function LinkBox(props: Link) {
const {name, desc, img, href} = props;
return <section className="link-box">
<LinkBase target="_blank" className="link-box-ctr" href={href as Path}>
<div className="link-img-ctr">
{
img && <img className="link-img" src={img.href} alt={img.alt} width={100} height={100}/>
}
</div>
<div className="content-ctr">
<div className="link-title">
<h2>{name}</h2>
</div>
<div className="link-desc">{desc}</div>
</div>
</LinkBase>
</section>
}

9
src/links/link.ts Normal file
View File

@@ -0,0 +1,9 @@
export interface Link {
name: string,
desc: string,
href: string,
img?: {
href: string,
alt: string
}
}

63
src/links/links.sass Normal file
View File

@@ -0,0 +1,63 @@
@use "../about/about"
@use "../nav/nav"
.link-tree
display: flex
flex-direction: column
flex-grow: 1
background: about.$reader-bg
padding-top: 150px
.link-ctr
margin: auto
display: flex
flex-direction: column
justify-content: center
.link-box
display: flex
flex-direction: column
border-radius: 15px
margin: 15px
max-width: 400px
.link-box-ctr
display: flex
.link-img-ctr
background: white
display: flex
justify-content: center
align-items: center
border-radius: 15px 0 0 15px
.link-img
padding: 15px
.content-ctr
display: flex
flex-direction: column
flex-grow: 1
&>*
display: flex
flex-direction: column
.link-title
background: nav.$menu
border-radius: 0 15px 0 0
padding: 10px
font-weight: bold
font-family: Neuton, serif
border-bottom: white 2px solid
h2
margin: 0
.link-desc
background: black
color: white
font-family: Inter, sans-serif
padding: 10px
flex-grow: 1
justify-content: center
align-items: center
border-radius: 0 0 15px 0

65
src/links/links.ts Normal file
View File

@@ -0,0 +1,65 @@
import {Link} from "./link";
import ResumePdf from "../img/resume.pdf";
import GiteaLogo from "../img/links/gitea-logo.svg";
import LinkedInLogo from "../img/links/linkedin.svg";
import GitHubLogo from "../img/links/github.svg";
import InstagramLogo from "../img/links/instagram.svg";
import GmailLogo from "../img/links/gmail.svg";
import ResumeLogo from "../img/links/scroll.svg";
export const LINKS: Link[] = [
{
name: "Gitea Profile",
desc: "Personal Gitea instance hosting this blog's source code with Gitea CI/CD and artifact storage",
href: "https://gitea.tymur999.com/tymur999",
img: {
alt: "Gitea logo",
href: GiteaLogo
}
},
{
name: "LinkedIn",
desc: "Personal LinkedIn Account with work experiences and resume",
href: "https://www.linkedin.com/in/tymurarsent/",
img: {
alt: "LinkedIn logo",
href: LinkedInLogo
}
},
{
name: "Github (Deprecated)",
desc: "GitHub account with old projects **moved to Gitea",
href: "https://github.com/tymur999",
img: {
alt: "GitHub logo",
href: GitHubLogo
}
},
{
name: "Instagram",
desc: "Welcome to the aura factory.",
href: "https://www.instagram.com/_tymur999_/",
img: {
alt: "Instagram logo",
href: InstagramLogo
}
},
{
name: "Email",
desc: "Please reach out with any questions or offers (tymur.arsent@gmail.com)",
href: "mailto:tymur.arsent@gmail.com",
img: {
alt: "Gmail logo",
href: GmailLogo
}
},
{
name: "Resume",
desc: "Work experiences, current knowledge, education credentials",
href: ResumePdf,
img: {
alt: "Scroll of antique paper",
href: ResumeLogo
}
}
];

View File

@@ -2,7 +2,6 @@ import {Link} from "../router/Link";
import {ROUTES} from "../router/Route";
import ResumePdf from "../img/resume.pdf";
import {motion} from "motion/react";
import {Path} from "../router/router";
export function Links() {
@@ -20,8 +19,5 @@ export function Links() {
<Link key={ResumePdf} href={ResumePdf} target="_blank">
<h3>Resume</h3>
</Link>
<Link key="Github" href={"https://github.com/tymur999" as Path} target="_blank">
<h3>GitHub</h3>
</Link>
</div>
}

View File

@@ -3,11 +3,12 @@ import {useRouter} from "./RouterContext";
import {Path} from "./router";
type Route = [Path, string];
type Routes = [Route, Route, Route];
type Routes = [Route, Route, Route, Route];
export const ROUTES: Routes = [
["/", "Home"],
["/about", "About"],
["/articles", "Articles"]
["/articles", "Articles"],
["/links", "Links"]
];
function Route(props: PropsWithChildren & {route: Route}) {
@@ -23,9 +24,10 @@ function Route(props: PropsWithChildren & {route: Route}) {
const Canvas = React.lazy(() => import("../index/Canvas"));
const About = React.lazy(() => import("../about/AboutPage"));
const ArticlesList = React.lazy(() => import("../articles/ArticlesList"));
const LinkTree = React.lazy(() => import("../links/LinkTree"));
export function Routes() {
const [index, about, articles] = ROUTES;
const [index, about, articles, links] = ROUTES;
return <>
<Route route={index}>
@@ -37,5 +39,8 @@ export function Routes() {
<Route route={articles}>
<ArticlesList/>
</Route>
<Route route={links}>
<LinkTree/>
</Route>
</>
}

View File

@@ -139,7 +139,7 @@ const config: webpack.Configuration = {
plugins: [
new HtmlWebpackPlugin({
template: path.resolve(import.meta.dirname, "public/index.html"),
favicon: "./src/img/favicon.ico",
favicon: path.resolve(import.meta.dirname, "src/img/favicon.ico"),
inject: true,
}),
new webpack.DefinePlugin({