Skip to content

Commit

Permalink
chore: add workout planner project
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelbrusegard committed Jan 13, 2025
1 parent 77891a0 commit fb720a4
Show file tree
Hide file tree
Showing 5 changed files with 123 additions and 44 deletions.
Binary file added public/photos/projects/workoutplanner.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
33 changes: 32 additions & 1 deletion src/constants/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import {
AffinityPhoto,
Figma,
Neovim,
JavaFx,
} from '@/constants/tech-icons';

import {
Expand Down Expand Up @@ -129,10 +130,15 @@ const skills = [
link: 'https://www.djangoproject.com',
},
{
name: 'Springboot',
name: 'Spring Boot',
Icon: SpringBoot,
link: 'https://docs.spring.io/spring-boot/index.html',
},
{
name: 'JavaFX',
Icon: JavaFx,
link: 'https://openjfx.io',
},
{
name: 'Jetpack Compose',
Icon: JetpackCompose,
Expand Down Expand Up @@ -593,6 +599,31 @@ const projects = [
prodLink: 'https://globehub.michaelbrusegard.com',
srcLink: 'https://github.com/michaelbrusegard/Globehub',
},
{
name: 'Workout Planner',
description:
'A workout planner app made with JavaFX and Spring Boot. You can add exercices and sets, reorder exercices and save workouts on the backend.',
techstack: [
{
name: 'Java',
Icon: Java,
link: 'https://www.java.com',
},
{
name: 'Spring Boot',
Icon: SpringBoot,
link: 'https://docs.spring.io/spring-boot/index.html',
},
{
name: 'JavaFX',
Icon: JavaFx,
link: 'https://openjfx.io',
},
],
imageSrc: '/photos/projects/workoutplanner.jpg',
prodLink: '',
srcLink: 'https://github.com/michaelbrusegard/WorkoutPlanner',
},
{
name: 'Niclas Nordlund Photography',
description:
Expand Down
82 changes: 39 additions & 43 deletions src/constants/tech-icons/FireStore.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,50 +8,46 @@ function FireStore({ ...props }: React.SVGProps<SVGSVGElement>) {
xmlns='http://www.w3.org/2000/svg'
{...props}
>
<g>
<rect x='0' y='0' width='256' height='256' />
<g>
<clipPath id='_clip1'>
<path d='M191.213,63.12c-0.434,-2.553 -2.668,-4.44 -5.258,-4.44c-1.412,0 -2.769,0.562 -3.768,1.56l-27.68,27.76l-21.787,-41.48c-0.921,-1.75 -2.742,-2.85 -4.72,-2.85c-1.978,-0 -3.799,1.1 -4.72,2.85l-11.907,22.667l-29.866,-55.694c-0.927,-1.731 -2.738,-2.816 -4.702,-2.816c-2.621,0 -4.873,1.932 -5.272,4.523l-28.866,184.8l77.2,43.28c4.842,2.704 10.757,2.704 15.6,-0l77.866,-43.28l-22.12,-136.88Z' />
</clipPath>
<g clipPath='url(#_clip1)'>
<path
d='M42.667,200l28.88,-184.813c0.402,-2.586 2.652,-4.513 5.269,-4.513c1.966,0 3.778,1.086 4.704,2.819l29.867,55.707l11.906,-22.667c0.921,-1.75 2.743,-2.85 4.72,-2.85c1.978,0 3.8,1.1 4.72,2.85l80.6,153.467l-170.666,0Z'
fill='#ffa000'
/>
<path
d='M141.333,12l-141.333,-12l0,256l42.667,-56l98.666,-188Z'
fill='url(#_Linear15)'
/>
<path
d='M142.44,128.013l-31.067,-58.826l-68.706,130.813l99.773,-71.987Z'
fill='#f57c00'
/>
<rect x='0' y='0' width='256' height='256' fill='url(#_Linear16)' />
<path
d='M213.333,200l-22.12,-136.88c-0.434,-2.553 -2.668,-4.44 -5.258,-4.44c-1.412,0 -2.769,0.562 -3.768,1.56l-139.52,139.76l77.2,43.293c4.842,2.704 10.757,2.704 15.6,0l77.866,-43.293Z'
fill='#ffca28'
/>
<path
d='M191.213,63.12c-0.434,-2.553 -2.668,-4.44 -5.258,-4.44c-1.412,0 -2.769,0.562 -3.768,1.56l-27.68,27.76l-21.787,-41.48c-0.921,-1.75 -2.742,-2.85 -4.72,-2.85c-1.978,-0 -3.799,1.1 -4.72,2.85l-11.907,22.667l-29.866,-55.694c-0.927,-1.731 -2.738,-2.816 -4.702,-2.816c-2.621,0 -4.873,1.932 -5.272,4.523l-28.866,184.8l-0.107,-0l0.093,0.107l0.76,0.373l111.027,-111.147l27.707,-27.733c1,-1.005 2.362,-1.571 3.78,-1.571c2.594,-0 4.831,1.893 5.26,4.451l21.933,135.653l0.213,-0.133l-22.12,-136.88Zm-148.293,136.627l28.627,-183.227c0.398,-2.591 2.65,-4.523 5.271,-4.523c1.964,0 3.775,1.085 4.702,2.816l29.867,55.707l11.906,-22.667c0.921,-1.75 2.743,-2.85 4.72,-2.85c1.978,0 3.8,1.1 4.72,2.85l21.334,40.574l-111.147,111.32Z'
fill='#ffffff'
/>
<path
d='M135.467,241.987c-4.843,2.703 -10.758,2.703 -15.6,-0l-77.014,-43.2l-0.186,1.213l77.2,43.28c4.842,2.704 10.757,2.704 15.6,0l77.866,-43.28l-0.2,-1.227l-77.666,43.214Z'
fill='#a52714'
/>
<path
d='M191.213,63.12c-0.434,-2.553 -2.668,-4.44 -5.258,-4.44c-1.412,0 -2.769,0.562 -3.768,1.56l-27.68,27.76l-21.787,-41.48c-0.921,-1.75 -2.742,-2.85 -4.72,-2.85c-1.978,-0 -3.799,1.1 -4.72,2.85l-11.907,22.667l-29.866,-55.694c-0.927,-1.731 -2.738,-2.816 -4.702,-2.816c-2.621,0 -4.873,1.932 -5.272,4.523l-28.866,184.8l77.2,43.28c4.842,2.704 10.757,2.704 15.6,-0l77.866,-43.28l-22.12,-136.88Z'
fill='url(#_Linear17)'
/>
</g>
</g>
<circle cx='192' cy='192' r='53.333' fill='#ffffff' />
<rect x='0' y='0' width='256' height='256' />
<clipPath id='_clip1'>
<path d='M191.213,63.12c-0.434,-2.553 -2.668,-4.44 -5.258,-4.44c-1.412,0 -2.769,0.562 -3.768,1.56l-27.68,27.76l-21.787,-41.48c-0.921,-1.75 -2.742,-2.85 -4.72,-2.85c-1.978,-0 -3.799,1.1 -4.72,2.85l-11.907,22.667l-29.866,-55.694c-0.927,-1.731 -2.738,-2.816 -4.702,-2.816c-2.621,0 -4.873,1.932 -5.272,4.523l-28.866,184.8l77.2,43.28c4.842,2.704 10.757,2.704 15.6,-0l77.866,-43.28l-22.12,-136.88Z' />
</clipPath>
<g clipPath='url(#_clip1)'>
<path
d='M192,194.667l-24,10.666l0,-10.666l24,-10.667l24,10.667l0,9.333l0,-2l0,3.333l-24,-10.666Zm0,-29.334l24,10.667l0,10.667l-24,-10.667l-24,10.667l0,-10.667l24,-10.667Zm9,38.667l12,5.333l-21,9.334l0,-10.667l9,-4Z'
fillOpacity='0.54'
d='M42.667,200l28.88,-184.813c0.402,-2.586 2.652,-4.513 5.269,-4.513c1.966,0 3.778,1.086 4.704,2.819l29.867,55.707l11.906,-22.667c0.921,-1.75 2.743,-2.85 4.72,-2.85c1.978,0 3.8,1.1 4.72,2.85l80.6,153.467l-170.666,0Z'
fill='#ffa000'
/>
<path
d='M141.333,12l-141.333,-12l0,256l42.667,-56l98.666,-188Z'
fill='url(#_Linear15)'
/>
<path
d='M142.44,128.013l-31.067,-58.826l-68.706,130.813l99.773,-71.987Z'
fill='#f57c00'
/>
<rect x='0' y='0' width='256' height='256' fill='url(#_Linear16)' />
<path
d='M213.333,200l-22.12,-136.88c-0.434,-2.553 -2.668,-4.44 -5.258,-4.44c-1.412,0 -2.769,0.562 -3.768,1.56l-139.52,139.76l77.2,43.293c4.842,2.704 10.757,2.704 15.6,0l77.866,-43.293Z'
fill='#ffca28'
/>
<path
d='M191.213,63.12c-0.434,-2.553 -2.668,-4.44 -5.258,-4.44c-1.412,0 -2.769,0.562 -3.768,1.56l-27.68,27.76l-21.787,-41.48c-0.921,-1.75 -2.742,-2.85 -4.72,-2.85c-1.978,-0 -3.799,1.1 -4.72,2.85l-11.907,22.667l-29.866,-55.694c-0.927,-1.731 -2.738,-2.816 -4.702,-2.816c-2.621,0 -4.873,1.932 -5.272,4.523l-28.866,184.8l-0.107,-0l0.093,0.107l0.76,0.373l111.027,-111.147l27.707,-27.733c1,-1.005 2.362,-1.571 3.78,-1.571c2.594,-0 4.831,1.893 5.26,4.451l21.933,135.653l0.213,-0.133l-22.12,-136.88Zm-148.293,136.627l28.627,-183.227c0.398,-2.591 2.65,-4.523 5.271,-4.523c1.964,0 3.775,1.085 4.702,2.816l29.867,55.707l11.906,-22.667c0.921,-1.75 2.743,-2.85 4.72,-2.85c1.978,0 3.8,1.1 4.72,2.85l21.334,40.574l-111.147,111.32Z'
fill='#ffffff'
/>
<path
d='M135.467,241.987c-4.843,2.703 -10.758,2.703 -15.6,-0l-77.014,-43.2l-0.186,1.213l77.2,43.28c4.842,2.704 10.757,2.704 15.6,0l77.866,-43.28l-0.2,-1.227l-77.666,43.214Z'
fill='#a52714'
/>
<path
d='M191.213,63.12c-0.434,-2.553 -2.668,-4.44 -5.258,-4.44c-1.412,0 -2.769,0.562 -3.768,1.56l-27.68,27.76l-21.787,-41.48c-0.921,-1.75 -2.742,-2.85 -4.72,-2.85c-1.978,-0 -3.799,1.1 -4.72,2.85l-11.907,22.667l-29.866,-55.694c-0.927,-1.731 -2.738,-2.816 -4.702,-2.816c-2.621,0 -4.873,1.932 -5.272,4.523l-28.866,184.8l77.2,43.28c4.842,2.704 10.757,2.704 15.6,-0l77.866,-43.28l-22.12,-136.88Z'
fill='url(#_Linear17)'
/>
</g>
<circle cx='192' cy='192' r='53.333' fill='#ffffff' />
<path
d='M192,194.667l-24,10.666l0,-10.666l24,-10.667l24,10.667l0,9.333l0,-2l0,3.333l-24,-10.666Zm0,-29.334l24,10.667l0,10.667l-24,-10.667l-24,10.667l0,-10.667l24,-10.667Zm9,38.667l12,5.333l-21,9.334l0,-10.667l9,-4Z'
fillOpacity='0.54'
/>
<defs>
<linearGradient
id='_Linear15'
Expand Down Expand Up @@ -89,8 +85,8 @@ function FireStore({ ...props }: React.SVGProps<SVGSVGElement>) {
gradientUnits='userSpaceOnUse'
gradientTransform='matrix(178.249,178.249,-178.249,178.249,36.2507,53.708)'
>
<stop offset='0' stopColor='#fff' stopOpacity='0.1' />
<stop offset='1' stopColor='#fff' stopOpacity='0' />
<stop offset='0' stopColor='#ffffff' stopOpacity='0.1' />
<stop offset='1' stopColor='#ffffff' stopOpacity='0' />
</linearGradient>
</defs>
</svg>
Expand Down
51 changes: 51 additions & 0 deletions src/constants/tech-icons/JavaFx.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
function JavaFx({ ...props }: React.SVGProps<SVGSVGElement>) {
return (
<svg
width='100%'
height='100%'
viewBox='0 0 256 256'
version='1.1'
xmlns='http://www.w3.org/2000/svg'
{...props}
>
<path
d='M238.206,178.647c-4.736,6.757 -9.559,13.127 -15.273,18.766c-6.989,6.898 -14.55,13.054 -23.101,17.932c-0.928,0.53 -1.779,1.368 -3.029,1.185c-0.718,-0.986 0.129,-1.652 0.482,-2.395c0.951,-2.005 2.364,-3.903 2.814,-6.011c1.3,-6.09 5.332,-9.767 10.009,-13.393c7.214,-5.593 13.58,-12.132 18.704,-19.783c2.95,-4.406 4.994,-9.159 5.714,-14.422c0.271,-1.979 0.552,-4.233 -1.317,-5.546c-1.871,-1.314 -3.651,0.139 -5.206,1.095c-6.707,4.125 -11.836,10.031 -17.298,15.557c-0.825,0.835 -1.478,1.917 -3.222,2.362c-0.054,-4.26 -1.091,-8.241 1.706,-11.931c3.696,-4.877 7.301,-9.813 12.281,-13.511c4.849,-3.6 10.05,-5.675 16.455,-3.642c0.281,11.159 0.281,22.292 0.281,33.737Z'
fill='#577993'
/>
<path
d='M32.957,137.774c12.622,-7.948 26.409,-12.098 40.62,-14.997c5.529,-1.128 11.158,-1.765 16.751,-2.563c1.519,-0.217 3.082,-0.426 4.585,0.167c-0.307,4.586 -2.015,6.282 -6.166,6.805c-18.043,2.274 -35.76,5.711 -51.593,15.391c-3.043,1.861 -5.822,4.084 -8.239,6.731c-6.661,7.296 -6.767,15.546 -0.278,23.002c4.021,4.62 9.128,7.774 14.541,10.424c13.01,6.368 26.935,9.438 41.188,11.43c8.708,1.217 17.473,1.68 26.21,1.79c9.968,0.124 19.969,-0.471 29.867,-1.921c12.772,-1.872 25.327,-4.613 37.159,-9.986c5.899,-2.678 11.508,-5.845 16.136,-10.476c8.068,-8.074 8.071,-17.49 -0.171,-25.41c-8.163,-7.844 -18.411,-11.807 -28.997,-15.09c-2.255,-0.699 -4.783,-0.775 -6.913,-2.586c3.491,-2.903 6.561,-4.762 11.46,-2.934c9.764,3.644 19.16,7.778 27.116,14.635c5.807,5.005 9.043,10.973 8.994,19.122c-0.093,15.43 -1.18,30.589 -6.701,45.166c-8.264,21.817 -23.69,36.107 -45.677,43.47c-12.524,4.194 -25.425,5.878 -38.624,6.039c-15.537,0.189 -30.827,-1.126 -45.626,-6.108c-28.924,-9.738 -44.664,-30.326 -49.492,-60.039c-1.779,-10.952 -1.241,-21.923 -1.221,-32.901c0.006,-3.333 1.577,-6.216 3.521,-8.842c3.082,-4.163 6.95,-7.476 11.55,-10.319Z'
fill='#577993'
/>
<path
d='M209.666,112.978c-7.684,9.582 -18.262,12.479 -30.097,14.547c1.08,-1.834 2.261,-2.236 3.256,-2.833c4.7,-2.82 8.983,-6.157 12.632,-10.259c5.8,-6.522 7.604,-13.932 4.602,-22.252c-2.165,-6 -5.698,-11.2 -9.786,-16.437c-2.02,2.524 -2.546,5.248 -3.243,7.856c-3.222,12.043 -7.978,23.309 -16.208,32.882c-10.287,11.964 -23.354,18.066 -39.07,18.587c-2.214,0.074 -2.217,-0.012 -4.743,-1.363c5.467,-1.496 10.364,-3.477 14.939,-6.213c11.317,-6.769 18.666,-16.879 24.227,-28.529c2.639,-5.528 4.68,-11.272 6.435,-17.131c1.761,-5.879 4.236,-11.461 7.409,-16.707c0.958,-1.584 1.188,-2.905 0.325,-4.616c-4.127,-8.179 -5.89,-17.001 -6.11,-26.045c-0.179,-7.358 0.949,-14.638 4.409,-21.308c5.641,-10.875 15.466,-15.104 28.421,-12.33c5.756,1.232 11.039,3.379 15.033,7.942c1.093,1.248 2.053,2.576 2.141,4.288c-1.5,1.009 -2.476,-0.105 -3.532,-0.509c-6.117,-2.343 -12.286,-3.811 -18.808,-1.657c-7.054,2.329 -11.751,6.802 -13.67,14.156c-2.129,8.162 -1.261,19.221 2.518,25.041c10.785,-11.304 23.007,-20.375 38.215,-25.479c0.076,1.727 -1.082,2.109 -1.864,2.729c-11.05,8.756 -20.777,18.719 -28.46,30.626c-1.399,2.169 -1.297,3.468 0.367,5.439c7.555,8.951 13.32,18.805 15.004,30.696c0.967,6.829 -0.346,13.006 -4.342,18.879Z'
fill='#e76e01'
/>
<path
d='M144.339,84.484c-6.147,3.954 -12.555,6.788 -19.434,8.287c-3.157,0.688 -4.56,2.102 -5.421,5.214c-4.023,14.523 -11.178,27.281 -22.257,37.676c-3.99,3.744 -8.445,6.859 -13.124,9.668c-0.48,0.288 -0.961,0.563 -2.118,-0.056c11.074,-14.498 20.748,-29.715 25.114,-48.771c-14.338,3.505 -24.381,11.021 -30.783,23.613c-0.808,-4.684 0.631,-8.846 2.375,-12.827c5.114,-11.67 14.023,-19.287 26.033,-23.21c3.379,-1.104 4.815,-2.744 5.354,-6.45c1.767,-12.145 4.931,-23.937 11.87,-34.327c6.437,-9.639 14.991,-15.588 27.11,-15.324c10.43,0.226 16.01,6.279 15.124,16.713c-0.176,2.06 -0.524,4.104 -0.798,6.194c-1.829,-0.156 -1.86,-1.642 -2.39,-2.622c-4.568,-8.442 -12.219,-10.44 -20.054,-4.904c-9.323,6.587 -13.82,16.289 -16.483,26.98c-0.756,3.034 -2.145,6.118 -0.73,9.784c16.358,-2.309 29.828,-10.61 42.946,-20.006c-4.935,10.376 -12.664,18.095 -22.334,24.368Z'
fill='#e76e01'
/>
<path
d='M54.958,178.103c9.015,2.183 17.201,0.478 25.043,-3.559c10.73,-5.524 19.48,-13.514 27.69,-22.192c3.601,-3.807 14.374,-4.766 18.907,-1.787c0.124,1.154 -0.67,1.856 -1.365,2.537c-12.647,12.38 -26.369,23.308 -43.301,29.187c-17.406,6.044 -32.883,1.596 -46.097,-10.612c-8.96,-8.279 -8.047,-17.182 1.904,-24.2c10.48,-7.39 22.602,-10.672 34.883,-13.401c5.251,-1.167 10.592,-1.932 16.233,-2.94c-0.251,4.054 -2.794,4.813 -5.411,5.222c-5.606,0.875 -11.095,2.205 -16.461,4.013c-6.993,2.356 -13.637,5.42 -19.194,10.413c-4.669,4.194 -8.243,9.18 -6.624,15.752c1.671,6.782 7.308,9.671 13.793,11.567Z'
fill='#713b0d'
/>
<path
d='M179.428,167.477c3.607,-6.757 3.021,-12.063 -1.985,-17.571c-5.928,-6.522 -13.664,-10.124 -21.732,-13.149c-0.988,-0.371 -2.255,-0.275 -2.878,-1.776c3.259,-0.11 6.143,1.036 9.022,1.899c9.284,2.783 18.43,5.913 25.721,12.74c0.728,0.682 1.426,1.405 2.067,2.168c6.192,7.373 5.445,14.832 -2.183,20.751c-7.019,5.446 -15.024,9.036 -23.395,11.785c-13.546,4.447 -27.403,7.112 -41.715,7.681c-5.233,0.208 -10.401,-0.418 -15.602,-0.182c-1.066,0.048 -2.22,0.127 -3.354,-1.218c1.993,-0.792 3.836,-0.396 5.599,-0.5c19.36,-1.143 38.392,-3.855 56.227,-12.058c5.379,-2.474 10.441,-5.472 14.208,-10.57Z'
fill='#713b0d'
/>
<path
d='M143.559,121.6c1.961,0.667 1.66,1.377 0.436,2.285c-3.057,2.268 -6.067,3.874 -10.278,3.376c-7.892,-0.934 -15.865,-1.178 -23.816,-1.709c0.838,-4.559 2.683,-6.125 6.969,-6.178c8.884,-0.109 17.651,1.172 26.689,2.226Z'
fill='#577993'
/>
<path
d='M125.979,139.049c2.451,0.42 4.713,0.271 6.774,1.216c0.922,0.423 1.828,0.944 1.987,2.05c0.188,1.297 -0.679,2.148 -1.68,2.609c-5.86,2.698 -11.893,3.122 -18.041,1.069c-1.097,-0.367 -1.955,-1.127 -1.95,-2.411c0.004,-1.132 0.815,-1.78 1.716,-2.26c3.411,-1.818 7.158,-2.097 11.194,-2.273Z'
fill='#713b0d'
/>
<path
d='M113.385,130.058c2.937,-0.02 5.466,0.504 7.986,1.243c-5.599,1.222 -11.263,1.09 -16.994,1.402c0.862,-2.686 0.862,-2.686 9.008,-2.645Z'
fill='#713b0d'
/>
</svg>
);
}

export { JavaFx };
1 change: 1 addition & 0 deletions src/constants/tech-icons/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,4 @@ export * from './AffinityDesigner';
export * from './AffinityPhoto';
export * from './Figma';
export * from './Neovim';
export * from './JavaFx';

0 comments on commit fb720a4

Please sign in to comment.