From e062b44e1c64c2d692314eeae08a87eb144497d6 Mon Sep 17 00:00:00 2001 From: Guusvanmeerveld Date: Wed, 12 Oct 2022 16:45:30 +0200 Subject: [PATCH] refactor(v3): Initial revamp --- .dockerignore | 8 + .env | 6 +- .eslintrc.json | 67 + .github/dependabot.yml | 11 + .github/workflows/auto-merge.yml | 20 + .github/workflows/build.yml | 45 + .github/workflows/deploy.yml | 42 - .gitignore | 26 +- .prettierrc | 27 - .prettierrc.json | 7 + .stylelintrc.json | 9 + .vscode/settings.json | 3 - Dockerfile | 32 + README.md | 5 - docker-compose.yml | 8 + index.html | 20 - next-env.d.ts | 5 + next.config.js | 7 + package.json | 77 +- public/favicon.ico | Bin 0 -> 3726 bytes public/logo-dark.png | Bin 4271 -> 0 bytes public/logo-light.png | Bin 7168 -> 0 bytes public/topography.svg | 3 - src/components/BestRepository.tsx | 40 + src/components/CssBaseline.tsx | 24 - src/components/Dots.tsx | 290 -- src/components/Footer.tsx | 96 +- src/components/Header.tsx | 10 - src/components/Image.tsx | 11 - src/components/Intro.tsx | 46 + src/components/Layout.tsx | 6 +- src/components/Link.tsx | 7 - src/components/Paragraph.tsx | 9 - src/components/Project/Item.tsx | 153 - src/components/Project/List.tsx | 76 - src/components/RecentRepositories.tsx | 66 + src/components/ThemeChanger.tsx | 30 + src/components/footer.module.scss | 6 + src/components/intro.module.scss | 3 + src/components/repositories.module.scss | 7 + src/components/themeChanger.module.scss | 7 + src/interfaces/pinnedRepo.d.ts | 12 - src/interfaces/{repo.d.ts => repository.ts} | 28 +- src/main.tsx | 10 - src/next-seo.config.ts | 9 + src/pages/404.module.scss | 8 + src/pages/404.tsx | 34 +- src/pages/_app.tsx | 19 + src/pages/app.tsx | 40 - src/pages/index.tsx | 200 +- src/preact.d.ts | 1 - src/styled.d.ts | 21 - src/styles/_dark.scss | 66 + src/styles/_variables.scss | 13 + src/styles/globals.scss | 6 + src/utils/createConfigCatClient.ts | 21 + src/utils/multipleClassNames.ts | 5 + src/utils/socials.tsx | 34 - src/utils/theme.ts | 33 - src/vite-env.d.ts | 11 - tsconfig.json | 39 +- tsconfig.node.json | 9 - vite.config.ts | 48 - yarn.lock | 5158 ++++++++----------- 64 files changed, 3038 insertions(+), 4102 deletions(-) create mode 100644 .dockerignore create mode 100644 .eslintrc.json create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/auto-merge.yml create mode 100644 .github/workflows/build.yml delete mode 100644 .github/workflows/deploy.yml delete mode 100644 .prettierrc create mode 100644 .prettierrc.json create mode 100644 .stylelintrc.json delete mode 100644 .vscode/settings.json create mode 100644 Dockerfile delete mode 100644 README.md create mode 100644 docker-compose.yml delete mode 100644 index.html create mode 100644 next-env.d.ts create mode 100644 next.config.js create mode 100644 public/favicon.ico delete mode 100644 public/logo-dark.png delete mode 100644 public/logo-light.png delete mode 100644 public/topography.svg create mode 100644 src/components/BestRepository.tsx delete mode 100644 src/components/CssBaseline.tsx delete mode 100644 src/components/Dots.tsx delete mode 100644 src/components/Header.tsx delete mode 100644 src/components/Image.tsx create mode 100644 src/components/Intro.tsx delete mode 100644 src/components/Link.tsx delete mode 100644 src/components/Paragraph.tsx delete mode 100644 src/components/Project/Item.tsx delete mode 100644 src/components/Project/List.tsx create mode 100644 src/components/RecentRepositories.tsx create mode 100644 src/components/ThemeChanger.tsx create mode 100644 src/components/footer.module.scss create mode 100644 src/components/intro.module.scss create mode 100644 src/components/repositories.module.scss create mode 100644 src/components/themeChanger.module.scss delete mode 100644 src/interfaces/pinnedRepo.d.ts rename src/interfaces/{repo.d.ts => repository.ts} (84%) delete mode 100644 src/main.tsx create mode 100644 src/next-seo.config.ts create mode 100644 src/pages/404.module.scss create mode 100644 src/pages/_app.tsx delete mode 100644 src/pages/app.tsx delete mode 100644 src/preact.d.ts delete mode 100644 src/styled.d.ts create mode 100644 src/styles/_dark.scss create mode 100644 src/styles/_variables.scss create mode 100644 src/styles/globals.scss create mode 100644 src/utils/createConfigCatClient.ts create mode 100644 src/utils/multipleClassNames.ts delete mode 100644 src/utils/socials.tsx delete mode 100644 src/utils/theme.ts delete mode 100644 src/vite-env.d.ts delete mode 100644 tsconfig.node.json delete mode 100644 vite.config.ts diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..8232be8 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +** + +!next.config.js +!tsconfig.json +!package.json +!yarn.lock +!public +!src \ No newline at end of file diff --git a/.env b/.env index 50e1332..873ff8e 100644 --- a/.env +++ b/.env @@ -1,5 +1 @@ -VITE_GITHUB_USERNAME=Guusvanmeerveld -VITE_TWITTER_USERNAME=Guusvanmeerveld -VITE_KOFI_USERNAME=Guusvanmeerveld -VITE_YOUTUBE_CHANNEL_ID=UCYuqpoMay5SezCBrA_HKVWQ -VITE_MASTODON_URL=https://c.im/web/@guusvanmeerveld \ No newline at end of file +NEXT_PUBLIC_GITHUB_USERNAME=Guusvanmeerveld \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..33ff97e --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,67 @@ +{ + "root": true, + "env": { + "node": true, + "es6": true + }, + "parserOptions": { + "ecmaVersion": 8 + }, + "plugins": [ + "prettier", + "css-modules" + ], + "ignorePatterns": [ + "node_modules/*", + ".next/*", + ".out/*" + ], + "extends": [ + "eslint:recommended", + "plugin:css-modules/recommended" + ], + "overrides": [ + { + "files": [ + "**/*.ts", + "**/*.tsx" + ], + "parser": "@typescript-eslint/parser", + "settings": { + "react": { + "version": "detect" + } + }, + "env": { + "browser": true, + "node": true, + "es6": true + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:react/recommended", + "plugin:react-hooks/recommended", + "plugin:jsx-a11y/recommended" + ], + "rules": { + "prettier/prettier": "error", + "react/prop-types": "off", + "react/react-in-jsx-scope": "off", + "jsx-a11y/anchor-is-valid": "off", + "jsx-a11y/no-autofocus": "off", + "@typescript-eslint/no-unused-vars": [ + "error" + ], + "@typescript-eslint/explicit-function-return-type": [ + "warn", + { + "allowExpressions": true, + "allowConciseArrowFunctionExpressionsStartingWithVoid": true, + "allowTypedFunctionExpressions": true + } + ] + } + } + ] +} \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..3a3cce5 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "npm" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "weekly" diff --git a/.github/workflows/auto-merge.yml b/.github/workflows/auto-merge.yml new file mode 100644 index 0000000..d10dbec --- /dev/null +++ b/.github/workflows/auto-merge.yml @@ -0,0 +1,20 @@ +name: Auto-merge dependabot + +on: + pull_request: + +permissions: + pull-requests: write + +jobs: + auto-merge: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + name: Checkout + + - uses: ahmadnassri/action-dependabot-auto-merge@v2 + name: Auto merge + with: + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..63b66c3 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,45 @@ +name: deploy + +on: + push: + branches: + - master + +jobs: + typescript: + runs-on: ubuntu-latest + steps: + - name: Setup checkout + uses: actions/checkout@v2 + - name: Setup NodeJS v12 + uses: actions/setup-node@v1 + with: + node-version: 16 + - name: Install Dependencies + run: yarn install + - name: Check for syntax errors + run: yarn test-build + - name: ESlint check + run: yarn lint + + docker: + runs-on: ubuntu-latest + needs: typescript + steps: + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Build Dockerfile and push + id: docker_build + uses: docker/build-push-action@v2 + with: + push: true + tags: guusvanmeerveld/portfolio:latest + - name: Image digest + run: echo ${{ steps.docker_build.outputs.digest }} diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml deleted file mode 100644 index 9707178..0000000 --- a/.github/workflows/deploy.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: "Deploy website" - -on: - push: - branches: - - main - paths: - - src/** - - package.json - - yarn.lock - - tsconfig.* - - vite.config.ts - - .env - - index.html - - public - -jobs: - deploy_to_pages: - name: Build pages - runs-on: ubuntu-latest - steps: - - name: Setup - uses: actions/checkout@v2 - - - name: Setup Node.js - uses: actions/setup-node@v2 - with: - node-version: "16.x" - cache: "yarn" - - - name: Install NPM dependencies - run: yarn install - - - name: Build client - run: yarn run build - - - name: Deploy to pages - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./dist - cname: guusvanmeerveld.dev diff --git a/.gitignore b/.gitignore index a547bf3..c81e972 100644 --- a/.gitignore +++ b/.gitignore @@ -1,24 +1,4 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? +.env.local +.next +yarn-error.log \ No newline at end of file diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index de0f127..0000000 --- a/.prettierrc +++ /dev/null @@ -1,27 +0,0 @@ -{ - "trailingComma": "none", - "useTabs": true, - "semi": true, - "printWidth": 80, - "arrowParens": "always", - "importOrderSeparation": true, - "importOrder": [ - "@rollup/.*", - "rollup-.*", - "^..?/.*", - "^use-local-storage-state$", - "^styled-components$", - "^react.*", - "^preact$", - "^preact.*", - "^axios.*", - "^@src/.*", - "^@models/.*", - "^@interfaces/.*", - "^@styles/.*", - "^@shared/.*", - "^@utils/.*", - "^@components/.*", - "^@svg/.*" - ] -} diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..e48ff09 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "none", + "useTabs": true, + "semi": true, + "printWidth": 80, + "arrowParens": "always" +} \ No newline at end of file diff --git a/.stylelintrc.json b/.stylelintrc.json new file mode 100644 index 0000000..c3137bf --- /dev/null +++ b/.stylelintrc.json @@ -0,0 +1,9 @@ +{ + "extends": [ + "stylelint-config-standard", + "stylelint-config-idiomatic-order" + ], + "rules": { + "indentation": "tab" + } +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index ff24a05..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "prettier.configPath": ".prettierrc" -} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3fe9a79 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,32 @@ +FROM node:alpine AS deps + +WORKDIR /app +COPY package.json yarn.lock ./ +RUN yarn install --frozen-lockfile + +FROM node:alpine AS builder +WORKDIR /app +COPY . . +COPY --from=deps /app/node_modules ./node_modules +ENV NEXT_TELEMETRY_DISABLED 1; +RUN yarn build && yarn install --production --ignore-scripts --prefer-offline + +FROM node:alpine AS runner +WORKDIR /app + +ENV NODE_ENV production + +RUN addgroup -g 1001 -S nodejs +RUN adduser -S nextjs -u 1001 + +COPY --from=builder /app/next.config.js ./ +COPY --from=builder /app/public ./public +COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next +COPY --from=builder /app/node_modules ./node_modules +COPY --from=builder /app/package.json ./package.json + +USER nextjs + +EXPOSE 3000 + +CMD ["yarn", "start"] \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index fa6cf43..0000000 --- a/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Portfolio - -This is my portfolio website to show off all of my projects and provide my socials. - -It's build using Preact and Styled-Components and uses Vite as its build tool. diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..49587d1 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,8 @@ +version: "3" + +services: + app: + build: . + container_name: app + ports: + - 3000:3000 diff --git a/index.html b/index.html deleted file mode 100644 index b2597d9..0000000 --- a/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - Guus' Portfolio - - - -
- - - - diff --git a/next-env.d.ts b/next-env.d.ts new file mode 100644 index 0000000..4f11a03 --- /dev/null +++ b/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/next.config.js b/next.config.js new file mode 100644 index 0000000..7549451 --- /dev/null +++ b/next.config.js @@ -0,0 +1,7 @@ +// @ts-check +/** + * @type {import('next/dist/next-server/server/config').NextConfig} + **/ +module.exports = { + reactStrictMode: true, +} \ No newline at end of file diff --git a/package.json b/package.json index 42033f4..e8a7ec3 100644 --- a/package.json +++ b/package.json @@ -1,39 +1,42 @@ { - "name": "portfolio", - "private": true, - "version": "0.1.0", - "type": "module", - "scripts": { - "format": "prettier src --write", - "dev": "vite", - "build": "tsc && vite build", - "preview": "vite preview" - }, - "dependencies": { - "@fontsource/montserrat": "^4.5.11", - "@fontsource/prompt": "^4.5.8", - "@tanstack/react-query": "^4.0.10", - "@tanstack/react-query-devtools": "^4.0.10", - "axios": "^0.27.2", - "bootstrap": "^5.2.0", - "preact": "^10.9.0", - "react-bootstrap": "^2.4.0", - "react-icons": "^4.4.0", - "react-router-dom": "6", - "react-spring": "^9.5.2", - "reset-css": "^5.0.1", - "styled-components": "^5.3.5", - "use-local-storage-state": "^18.1.0", - "vite-plugin-imagemin": "^0.6.1" - }, - "devDependencies": { - "@preact/preset-vite": "^2.3.0", - "@rollup/plugin-alias": "^3.1.9", - "@trivago/prettier-plugin-sort-imports": "^3.3.0", - "@types/styled-components": "^5.1.25", - "prettier": "^2.7.1", - "typescript": "^4.6.4", - "vite": "^3.0.0", - "vite-tsconfig-paths": "^3.5.0" - } + "license": "MIT", + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "export": "next build && next export", + "test-build": "tsc", + "lint": "eslint src", + "stylelint": "npx stylelint **/*.scss", + "full-test": "yarn test-build && yarn lint && yarn stylelint" + }, + "dependencies": { + "axios": "^1.1.2", + "configcat-node": "^8.0.0", + "next": "^12.1.0", + "next-seo": "^4.24.0", + "next-themes": "^0.2.1", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "spectre.css": "^0.5.9" + }, + "devDependencies": { + "@types/node": "^15.12.1", + "@types/react": "^17.0.9", + "@types/react-dom": "^17.0.6", + "@typescript-eslint/eslint-plugin": "^4.26.0", + "@typescript-eslint/parser": "^4.26.0", + "eslint": "^7.28.0", + "eslint-plugin-css-modules": "^2.11.0", + "eslint-plugin-jsx-a11y": "^6.4.1", + "eslint-plugin-prettier": "^3.4.0", + "eslint-plugin-react": "^7.24.0", + "eslint-plugin-react-hooks": "^4.2.0", + "prettier": "^2.3.1", + "sass": "^1.34.1", + "stylelint": "^13.13.1", + "stylelint-config-idiomatic-order": "^8.1.0", + "stylelint-config-standard": "^22.0.0", + "typescript": "^4.3.2" + } } diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5fae4327885e09929712c390e78e9337742a7f16 GIT binary patch literal 3726 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 literal 0 HcmV?d00001 diff --git a/public/logo-dark.png b/public/logo-dark.png deleted file mode 100644 index 3d02b3449865acbd8cd4d2f22e0940e17bb302e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4271 zcma)9i96KY7q@2YlU=r%-bqM=WJ#E*m`Ro}_9YoRgUM2f5yQNd7+=|!Mkq$vm&O_r zL(yg(OPER7Dzb0C>HQ0S-{-l{{hWKxIiGv)_nhaRd*8~!RFLl&9~&E+APRZOnvIPe z^|yhJutp>vOqa4c>9ETVVK%|uVUZp5eVKn38Q3 zEiR`0J!KfJGX0?RhFBH|b>OHSlRTq)_Bg7J@qEC857i{x1OC^2At>-HaQ0>6n!f7E zL>uS9^oPw;f;zojbsFrYhyP(s4ghRD7N zk(Ckjpxrs}1U(S!J>$IZYAm51#$&&J(B?G15n2k{9d~+yR+F@Kd5}GsS+fW z{vC%`|C+T}p`PBsBoy5_Uv{dWS_lTB1$#rojr8V35E;Dex36DoA}u-V=1{+tJX>!F zhO?xL#zKqglH&oxK^==^gR=sNnlG^e9k)tay)WuiQ^Gd?oXnaWI0fn901^ob4I`nK zxm0L3I9A^wt4b)V@i)^|Q0%hOJ%8E~QVL+?9jWX;rKXMU*GQSo0ri}zkV3A6#%xaxI22;#?GO;{INIqfg zM+K8$3-&}&Jc%ErUv^yh)F2s}LS7oWz*$H4%{vq8ZI4+GuxA9g+G*8CL@*_2Cr#G7)m&4GhRaYy6Q=b8WMvzS| zm~{3K{hkLH2-?AbK6vw^A{|I*TR!iyi;!!Y(3~2 zEh$YeI9K1C@ol7I>xtDv-+m9P5vCd!VyLK5?0C+#N0~%5#G1LlP`>=nha=v#Xu!38 ze9x8J!qZEtg1aExNp9~#RMfWft(7-bcO~05pt`3wuc0FBP;Q$ot^DkNv=gi*t}7(^ z-xRx8`-Y#xV&_&05}G|gT=cPw|J`!%)m5U&ov5KYE&f57px_dWPDRv|3x9sKFgPdO zNnEaLY9EfADvCDv7rt%y`Ssm^bGv>SY(ay~@-01n;q4V_d4G(4IA0c-3T{nM5Kvf{ zK5z`4@di@~$xK5P+CX{I2mj0_L!1*eENG}rc)rjG{i7mPupBfsZiA><6h_@2tU8*k z9^BKTafW!m<;Cs5TAvM4M6+2@=al7^aWts$mn2CY+tcOu??|<{B{VCUtC)1PBR6iU zAN9gOZF%?+$4$W4p^0MBoPRYJ-MQ0ydHp-%AR;;SLn7Xkmx@8@^)Q;JBgJXm9c2D@7BO)elHuwj(sK66|8D)(B9ao+Ods}Q z*`V3QTp9E{CsAHOe1#yqwo^M+E@sy#0agmL89{679VJ0vH$R}Q^dxx^n*6mwZSy74 zL12Ko^|52qKxc_H`Ef&!7V>DL#DfP~HtF`sUj{cSZx-7?W_lS{=BIF_7iUD#HvhV* zpXkr7Vuxmz&@0v`+OtFctQB336&HB}feFIbX0^Z2D^}Z%`GEnam7ez(3fKvl zl{UY6IP#M@DO#(AWg_8I;N!eAADnasgc@S3vJGS7NvfUayvf`!5GuXcPKJQ_J$r}t zOkJ);yXHU6_X5gw4ogyT%YSdXVfQv2hx~CLGN4Lf7HE&+&MWXDtovKz=2U$+`zv>4+RFg?b1H`uQAW7u<#<4<;v@qrlpR6Q#uSpt7n1% z(IE(kR?*T=W=>%^OvQNvzhHUd1>EL;VK3NkXqLis>NDZmdgVEeLR=u)s?*AM-$(6p zE{ZICiY7=wH6l5o)as7O$w@cG%5`Ko2vNiTQ;VW#DHr$OF7itip+R`Dt%8{PiSUw$ z>>Yl=Ma9LDJ64CQ?+Qna*4w7b+GQp8B!U+__l%Lxes~V;)p|9EKTg}}5^?*94E!_j zI%WhLIgFdHs@l89Njwgs4aaL{N*)V#31x(ELC2n1>a~vQD+!+(@rfq|ezY*qC`jAy z3)K00%zX{?ZPvD(HKG`UxZKy<+H_Yc`wo-mT_rTY5?Aw1Xt^)pjGJA3wRu6bAbWsA$YFA+pjk$qy)nTcaw_vi9Zl)RkM67ObAO2M8320)6j+r#Kew~0p zVD_L$kbamHTQn~%9BaF)+}NDSiNKu>eaSGZ43+n7zSm|8EZU`cn#IMo5g38*+ate) zK+-(Lq105m_F(}^)=6C9<2};5r;~15);!GQE)Fm-jwPo+rF~xM_<2UuO&ZhEF``4o z4Khmluwa=jodH!%o-2YhKh8swQrM(2h)^66l`yy>#)YWS4PAX!MmAV`#q&4#nVq+3 z{6szw?bF1$t>6SNI5v(QVSR#%&^6MF=#3?*B3jfUhJP7F1@5!reu#ma*<+-yr$Jz5 zzr*YI7)v3#gY4qLf7o3Y54{+e|YYeMdw zRW%tbqFF^b{9(7#6;XW%EG;ajcX3O0&_+n^0R(2_PxV1Z*?%?g3N645&VUfs+SHc) zw$k|3&LtfX&6Yy*8=AzCy*6&3^>Ds%tlQ&uT&17G+)ceiW}$0FxUSG#0@w7TM3SvJ z_Br>VHNLm4xlW@$#Ngq~mfngP0dsCcE2_0?;oy^rM|O;Ea_4QPRPshT>0Lukp52d^ zxnddHN9G_)DOK(Z(}}UN(&A9ZxcDUZ-Q%kG#G4t4-1kOwN&;S#i2ECNb7v((Dbyv2$pMPFW2m4%jj{0_SA?CP=F$EU2?eQvk z#+vf03o@a$60mo_veV^gQnk~b!Q$v<$ zcoYHj7%3HA-k<1dG>ii0w3cdm)=S0xc4f*Ik;H((gRcTNw8u8D94CCMo5IfB!`nD0 zB`enK%R@T8L2ljRkas|o?jc!Rm0hnpP-U;+Xca8RZ2WcgxXbF@_M z43CgwRn{K$#OD5XL-arF2!IKf&gjmQ;spb$!hIpn$uj>9cG7$^e|Pv_zH35Y+!;YP6Jb>^Vviw^gkmxQrkb&R)eK+6n(NeO zr#g?TZfLS9tF@CK%I#+!#NSUPL!eUA8z&$Mm?-!UiGasnHSI{XhOK_kF$*h;8&*xj zxi0x%dVUiP4WCTv(ImQw4_whJSPMghlKf-C_|ve@e0^|%D=F%b@R^pmm?r~9{*9k~ zTf1yHr|lHOkj}b>k-PFF71~O9U+6y5Vb}b|@_Ni&TUP4bCkq5^W^d$jUG+2`5J-qP zU$U{Q*f1@B#w2sdGb?XQoMrW;yzklz6`~2}P|+0tZ=XIBi$;I4TYpt~#}@U?1+8yS zYal3ennt@wRRF5x6qmemgHo5Wi#K0}zgpQbW<{D=xk{HvVU?|K;8}+*Rl8)-i%{6^ zhd5%Dth8VO)b`=?a9#Ohe9*DRDgo&BWrrFS+49|7Yv1yO;wrHWkSX+j)g@g%)G^-v zlyu&Lwk)(Fh5!plU{)QhDkqlY`aC{4ad);(Sa?PRs5_c9=iut!y;gZ_a4~3>PZ~;# zDDQ9WtDm8wAI)Q36=8llXH2V`CO#*h^gCAm)=X3b0jzMcUXka;y+t~wgPucWU+9hWB`W6Y(MvtoF4)(3X;2_CJMV4)t57?`mtEhAE#v8>v#uROju^l}e&q zhN6V&YgMgB^V;Li1U71bgJq!z5qbUrk8mS)F^;v$twk`oSpGDZBdskE>$3|$NdkwOY4&W diff --git a/public/logo-light.png b/public/logo-light.png deleted file mode 100644 index e18529505984d686f1763ce1ddba7487fd5e60d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7168 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 J%$9QQe*mlBuu1>` diff --git a/public/topography.svg b/public/topography.svg deleted file mode 100644 index dbaa571..0000000 --- a/public/topography.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/src/components/BestRepository.tsx b/src/components/BestRepository.tsx new file mode 100644 index 0000000..131e8b9 --- /dev/null +++ b/src/components/BestRepository.tsx @@ -0,0 +1,40 @@ +import Link from "next/link"; + +import { FC } from "react"; + +import { BestRepository } from "@interfaces/repository"; + +const BestRepository: FC<{ repository: BestRepository }> = ({ repository }) => { + return ( +
+
+
+
+

My most popular project:

+

{repository.name}

+

+ {repository.stargazers_count} Star(s) +

+
{repository.description}
+

+ Written in {repository.language}, has{" "} + {repository.open_issues_count} issue(s) and{" "} + {repository.forks_count} fork(s). +

+ + + Github + + {repository.homepage && ( + + Website + + )} +
+
+
+
+ ); +}; + +export default BestRepository; diff --git a/src/components/CssBaseline.tsx b/src/components/CssBaseline.tsx deleted file mode 100644 index 9175c6c..0000000 --- a/src/components/CssBaseline.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { createGlobalStyle } from "styled-components"; - -const Baseline = createGlobalStyle` - body { - color: ${({ theme }) => theme.palette.text.primary}; - background-color: ${({ theme }) => theme.palette.background.primary}; - font-family: "Montserrat", sans-serif; - - background-image: url("/topography.svg"); - background-repeat: repeat; - } - - a { - color: ${({ theme }) => theme.palette.text.primary}; - text-decoration: none; - :hover { - color: ${({ theme }) => theme.palette.text.secondary}; - } - } -`; - -const CssBaseline = Baseline as () => JSX.Element; - -export default CssBaseline; diff --git a/src/components/Dots.tsx b/src/components/Dots.tsx deleted file mode 100644 index b49129d..0000000 --- a/src/components/Dots.tsx +++ /dev/null @@ -1,290 +0,0 @@ -import styled, { useTheme } from "styled-components"; - -import { FunctionalComponent } from "preact"; - -const Container = styled.div` - width: 100%; - transform: ${(props) => (props.left ? "scale(-1, -1)" : "none")}; -`; - -const Dots: FunctionalComponent<{ - left?: boolean; -}> = ({ left }) => { - const theme = useTheme(); - - return ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ); -}; - -export default Dots; diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index c067a9d..5bd8d68 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -1,61 +1,51 @@ -import styled, { DefaultTheme } from "styled-components"; +import { FC } from "react"; -import Col from "react-bootstrap/Col"; -import Container from "react-bootstrap/Container"; -import Row from "react-bootstrap/Row"; +import Link from "next/link"; -import { FunctionalComponent } from "preact"; +import multipleClassNames from "@utils/multipleClassNames"; -import socials from "@utils/socials"; +import styles from "./footer.module.scss"; -import Header from "@components/Header"; - -const Body = styled.div` - background-color: ${({ theme }: { theme: DefaultTheme }) => - theme.palette.background.secondary}; - - border-top: 2px solid - ${({ theme }: { theme: DefaultTheme }) => theme.palette.border}; - padding: 2rem; -`; - -const ListHeader = styled(Header)` - font-size: 2rem; -`; - -const ListItem = styled.li` - font-size: 1.25rem; - margin-top: 1rem; -`; - -const ListItemIcon = styled.span` - margin-right: 1rem; -`; - -const Footer: FunctionalComponent = () => { +const Footer: FC = () => { return ( - - - - -
Guus van Meerveld
- - - - -
-
- +
+
+
+

Guus van Meerveld

+
+
+ + Github + + · + + Twitter + + · + + Ko-fi + + · + + Youtube + +
+
+

+ Built with{" "} + + ❤️ + {" "} + by Guus van Meerveld, using{" "} + + Spectre.css + +

+
+
+
); }; diff --git a/src/components/Header.tsx b/src/components/Header.tsx deleted file mode 100644 index 7c800ab..0000000 --- a/src/components/Header.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import styled from "styled-components"; - -const Header = styled.h1` - font-family: "Prompt", sans-serif; - margin-bottom: 1rem; - font-size: 3rem; - margin-bottom: ${(props) => (props.gutter ? "1rem" : "0")}; -`; - -export default Header; diff --git a/src/components/Image.tsx b/src/components/Image.tsx deleted file mode 100644 index 5e20208..0000000 --- a/src/components/Image.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import styled from "styled-components"; - -const Image = styled.img.attrs(() => ({ draggable: false }))` - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -o-user-select: none; - user-select: none; -`; - -export default Image; diff --git a/src/components/Intro.tsx b/src/components/Intro.tsx new file mode 100644 index 0000000..cd012cb --- /dev/null +++ b/src/components/Intro.tsx @@ -0,0 +1,46 @@ +import { FC } from "react"; + +import styles from "./intro.module.scss"; + +const Intro: FC<{ isAvailable: boolean }> = ({ isAvailable }) => { + return ( +
+
+
+
+

Guus van Meerveld

+ +

+ Open source web developer +

+ +

+ + Github + + + + Contact + +

+ +

+ Availibility: {isAvailable && "Available"} + {!isAvailable && "Not available"} +

+
+
+
+
+ ); +}; + +export default Intro; diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx index 931869e..ab2d0ae 100644 --- a/src/components/Layout.tsx +++ b/src/components/Layout.tsx @@ -1,10 +1,12 @@ -import { FunctionalComponent } from "preact"; +import { FC } from "react"; import Footer from "@components/Footer"; +import ThemeChanger from "@components/ThemeChanger"; -const Layout: FunctionalComponent = ({ children }) => { +const Layout: FC = ({ children }) => { return ( <> + {children}