feat: v1.0.0 (#1)

pull/3/head
Hamothy 1 year ago committed by GitHub
parent 005e6ee638
commit e02fe18bc7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -6,3 +6,5 @@ node_modules
.direnv .direnv
flake.lock flake.lock
flake.nix flake.nix
*.md
*.env.*

@ -0,0 +1,49 @@
name: Publish Preview Image
on:
workflow_dispatch:
push:
branches: [main, "refactor/app-router"]
paths:
- "app/**"
- "next.config.js"
- "package.json"
- "tailwind.config.js"
- "Dockerfile"
jobs:
push_to_registry:
name: Push Image to Docker Hub
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Log Into Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Set Short SHA
id: short_sha
run: echo "short_sha=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- name: Build/Push Image
uses: docker/build-push-action@v4
with:
context: .
push: true
build-args: |
NEXT_PUBLIC_IS_PREVIEW=1
NEXT_PUBLIC_BUILD_SHA=${{ steps.short_sha.outputs.short_sha }}
NEXT_PUBLIC_BUILD_ID=${{ github.run_id }}
NEXT_PUBLIC_BUILD_NUM=${{ github.run_number }}
secrets: |
REPOS_READ_ONLY=${{ secrets.REPOS_READ_ONLY }}
tags: ${{ secrets.DOCKER_USERNAME }}/website:preview
cache-from: type=gha
cache-to: type=gha,mode=max

@ -1,33 +0,0 @@
name: Publish Docker Image
on:
workflow_dispatch:
push:
branches:
- 'main'
paths:
- '**.tsx'
- '**.js'
- 'package.json'
- 'Dockerfile'
jobs:
push_to_registry:
name: Push Image to Docker Hub
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Log Into Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Build/Push Image
uses: docker/build-push-action@v4
with:
context: .
push: true
tags: ${{ secrets.DOCKER_USERNAME }}/website:latest

@ -0,0 +1,40 @@
name: Publish Production Image
on:
push:
tags:
- "*"
jobs:
push_to_registry:
name: Push Image to Docker Hub
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Log Into Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Set Short SHA
id: short_sha
run: echo "short_sha=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- name: Build/Push Image
uses: docker/build-push-action@v4
with:
context: .
push: true
build-args:
NEXT_PUBLIC_BUILD_SHA=${{ steps.short_sha.outputs.short_sha }}
NEXT_PUBLIC_BUILD_ID=${{ github.run_id }}
NEXT_PUBLIC_BUILD_NUM=${{ github.run_number }}
secrets: |
REPOS_READ_ONLY=${{ secrets.REPOS_READ_ONLY }}
tags: ${{ secrets.DOCKER_USERNAME }}/website:${{ github.ref_name }}

9
.gitignore vendored

@ -38,3 +38,12 @@ next-env.d.ts
# nix # nix
.direnv/ .direnv/
.envrc .envrc
.env*
# yarn
.yarn/*
!.yarn/releases
!.yarn/plugins
!.yarn/sdks
!.yarn/versions
.pnp.*

File diff suppressed because one or more lines are too long

@ -0,0 +1,3 @@
nodeLinker: node-modules
yarnPath: .yarn/releases/yarn-3.6.1.cjs

@ -1,35 +1,58 @@
# Installing Dependencies # Dependencies Image
FROM node:18-alpine AS deps FROM node:20-alpine AS deps
RUN apk add --no-cache libc6-compat RUN apk add --no-cache libc6-compat
WORKDIR /app WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile COPY package.json yarn.lock .yarnrc.yml ./
COPY .yarn ./.yarn
RUN yarn set version berry
RUN yarn install --immutable
RUN yarn add sharp RUN yarn add sharp
# Building Website # Build Image
FROM node:18-alpine AS builder FROM node:20-alpine AS builder
WORKDIR /app WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules COPY --from=deps /app/node_modules ./node_modules
COPY . . COPY . .
RUN yarn build
ENV NEXT_TELEMETRY_DISABLED 1
# Keep as empty string as Typescript parses empty strings as false
ARG NEXT_PUBLIC_IS_PREVIEW=""
ENV NEXT_PUBLIC_IS_PREVIEW=$NEXT_PUBLIC_IS_PREVIEW
ARG NEXT_PUBLIC_BUILD_SHA
ENV NEXT_PUBLIC_BUILD_SHA=$NEXT_PUBLIC_BUILD_SHA
ARG NEXT_PUBLIC_BUILD_ID
ENV NEXT_PUBLIC_BUILD_ID=$NEXT_PUBLIC_BUILD_ID
ARG NEXT_PUBLIC_BUILD_NUM
ENV NEXT_PUBLIC_BUILD_NUM=$NEXT_PUBLIC_BUILD_NUM
RUN --mount=type=secret,id=REPOS_READ_ONLY \
REPOS_READ_ONLY=$(cat /run/secrets/REPOS_READ_ONLY) \
yarn build
# Production Image # Production Image
FROM node:18-alpine AS runner FROM node:20-alpine AS runner
WORKDIR /app WORKDIR /app
ENV NODE_ENV production ENV NODE_ENV production
ENV NEXT_TELEMETRY_DISABLED 1
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
RUN addgroup --system --gid 1001 nextjsgroup COPY --from=builder /app/public ./public
RUN adduser --system --uid 1001 nextjsuser
# Automatically leverage output traces to reduce image size # Automatically leverage output traces to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing # https://nextjs.org/docs/advanced-features/output-file-tracing
COPY --from=builder --chown=nextjsuser:nextjsgroup /app/public ./public COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjsuser:nextjsgroup /app/package.json ./package.json COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
COPY --from=builder --chown=nextjsuser:nextjsgroup /app/.next/standalone ./
COPY --from=builder --chown=nextjsuser:nextjsgroup /app/.next/static ./.next/static
COPY --from=builder --chown=nextjsuser:nextjsgroup /app/node_modules/next/dist/compiled/jest-worker ./node_modules/next/dist/compiled/jest-worker
USER nextjsuser USER nextjs
EXPOSE 3000 EXPOSE 3000
ENTRYPOINT ["node", "server.js"]
ENV PORT 3000
ENV HOSTNAME localhost
CMD ["node", "server.js"]

@ -3,7 +3,7 @@
</h1> </h1>
<h3 align="center"> <h3 align="center">
<a href="https://goudham.com"><img src="assets/me-circle.png" width="150px" alt=""/></a><br> <a href="https://goudham.com"><img src="public/profile-picture-circle.png" width="150px" alt=""/></a><br>
<img src="https://raw.githubusercontent.com/catppuccin/catppuccin/bbc6efd2096b8cfa82d00f8ad1099b1b2b34fc8f/assets/misc/transparent.png" height="30" width="0px"/> <img src="https://raw.githubusercontent.com/catppuccin/catppuccin/bbc6efd2096b8cfa82d00f8ad1099b1b2b34fc8f/assets/misc/transparent.png" height="30" width="0px"/>
<a href="https://goudham.com">✨ https://goudham.com ✨</a> <a href="https://goudham.com">✨ https://goudham.com ✨</a>
<img src="https://raw.githubusercontent.com/catppuccin/catppuccin/bbc6efd2096b8cfa82d00f8ad1099b1b2b34fc8f/assets/misc/transparent.png" height="30" width="0px"/> <img src="https://raw.githubusercontent.com/catppuccin/catppuccin/bbc6efd2096b8cfa82d00f8ad1099b1b2b34fc8f/assets/misc/transparent.png" height="30" width="0px"/>

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

@ -0,0 +1,27 @@
import { FancyUnderline, GroupedText, Text } from "./utils/Text";
export const About = () => {
return (
<GroupedText className="text-center">
<Text>
I am a{" "}
<FancyUnderline className="font-semibold" decoration="decoration-green">
software engineer
</FancyUnderline>{" "}
at the BBC and a{" "}
<FancyUnderline className="font-semibold" decoration="decoration-red">student</FancyUnderline>,
currently pursuing a BSc in Software Engineering at the University of
Glasgow.
</Text>
<Text>
You&apos;ll usually find me nerding out about technology and playing
video games. I also really enjoy contributing to open source projects,
mainly{" "}
<FancyUnderline className="font-semibold" decoration="decoration-peach">
Catppuccin
</FancyUnderline>
.
</Text>
</GroupedText>
);
};

@ -0,0 +1,103 @@
import { Text } from "./utils/Text";
import {
GitHub,
Gitea,
Instagram,
LinkedIn,
Twitter,
} from "./icons/SocialMedia";
import Link from "next/link";
import { Heart } from "./icons/Heart";
import { ExternalLink } from "./icons/ExternalLink";
export const Footer = () => {
return (
<footer className="border-t-2 border-surface1 w-full text-subtext1">
<div className="flex flex-col justify-center items-center space-y-6 pt-10 pb-20">
<div className="text-center">
<p className="text-lg lg:text-xl xl:text-2xl">
Designed With <Heart />
</p>
<Text>&copy; {new Date().getFullYear()} Goudham Suresh</Text>
</div>
<BuildInfo />
<SocialMediaRow />
</div>
</footer>
);
};
const BuildInfo = () => {
return (
<div className="text-center text-md lg:text-lg xl:text-xl">
<p>{process.env.NEXT_PUBLIC_IS_PREVIEW ? "Preview" : "Release"} Build</p>
<p>
GitHub SHA:{" "}
<Link
rel="noopener noreferrer"
target="_blank"
className="hocus:underline hocus:decoration-solid hocus:underline-offset-1"
href={`https://github.com/sgoudham/website/commit/${process.env.NEXT_PUBLIC_BUILD_SHA}`}
>
{process.env.NEXT_PUBLIC_BUILD_SHA}&#8201;
<ExternalLink />
</Link>
</p>
<p>
Build ID:{" "}
<Link
rel="noopener noreferrer"
target="_blank"
className="hocus:underline hocus:decoration-solid hocus:underline-offset-1"
href={`https://github.com/sgoudham/website/actions/runs/${process.env.NEXT_PUBLIC_BUILD_ID}`}
>
{process.env.NEXT_PUBLIC_BUILD_ID}&#8201;
<ExternalLink />
</Link>
</p>
<p>Build Num: #{process.env.NEXT_PUBLIC_BUILD_NUM}</p>
</div>
);
};
const SocialMediaRow = () => {
return (
<div className="flex gap-3 items-center">
<a
className="group focus:ring-2 focus:ring-blue ring-offset-0"
aria-label="Follow Me On GitHub"
href="https://github.com/sgoudham"
>
<GitHub />
</a>
<a
className="group focus:ring-2 focus:ring-blue ring-offset-0"
aria-label="Visit My Gitea Instance"
href="https://gitea.goudham.com"
>
<Gitea />
</a>
<a
className="group focus:ring-2 focus:ring-blue ring-offset-0"
aria-label="Follow Me On LinkedIn"
href="https://linkedin.com/in/sgoudham"
>
<LinkedIn />
</a>
<a
className="group focus:ring-2 focus:ring-blue ring-offset-0"
aria-label="Follow Me On Twitter"
href="https://twitter.com/RealGoudham"
>
<Twitter />
</a>
<a
className="group focus:ring-2 focus:ring-blue ring-offset-0"
aria-label="Follow Me On Instagram"
href="https://instagram.com/sgoudham"
>
<Instagram />
</a>
</div>
);
};

@ -0,0 +1,14 @@
import { Wave } from "./icons/Wave";
import { H1 } from "./utils/Titles";
export const Header = () => {
return (
<H1>
Hiya{" "}
<div className="inline-block motion-safe:animate-waving-hand">
<Wave />
</div>
, I&#39;m Goudham
</H1>
);
};

@ -0,0 +1,72 @@
"use client";
import { useRef, useState } from "react";
import { ProfilePicture } from "./images/ProfilePicture";
import { Hamburger } from "./nav/Hamburger";
import { Links } from "./nav/Links";
import { Close } from "./icons/Close";
import Link from "next/link";
import { Dialog } from "@headlessui/react";
import { usePathname } from "next/navigation";
export const NavBar = () => {
const path = usePathname();
const focusedRef = useRef(null);
const [isOpen, setIsOpen] = useState(false);
const checkPath = (href: string) => {
if (href === path) {
setIsOpen(false);
}
};
return (
<>
<nav className="self-center w-full max-w-xl lg:max-w-3xl xl:max-w-6xl">
<div className="p-4 flex flex-row items-center justify-between text-md lg:text-lg xl:text-xl">
<ProfilePicture />
<div className="hidden md:flex flex-row gap-x-4 font-bold tracking-tight">
<Links />
</div>
<button
className="md:hidden px-4 py-2 hover:bg-crust dark:hover:bg-base rounded-lg"
onClick={() => setIsOpen((prev) => !prev)}
>
<Hamburger />
</button>
</div>
</nav>
<Dialog
className={
isOpen
? "block w-full h-screen absolute overflow-hidden inset-0 bg-base dark:bg-crust z-10 flex-col items-center"
: "hidden"
}
open={isOpen}
onClose={() => setIsOpen(false)}
// initialFocus={focusedRef}
>
<div className="max-w-xl mx-auto">
<div className="p-4 w-full flex flex-row items-center justify-between">
<ProfilePicture />
<button
className="px-4 py-1 hover:bg-crust dark:hover:bg-base rounded-lg focus:bg-crust dark:focus:bg-base"
onClick={() => setIsOpen((prev) => !prev)}
ref={focusedRef}
>
<Close />
</button>
</div>
<ul className="flex flex-col space-y-6 items-center text-2xl font-semibold justify-center">
<Link href="/" onClick={() => checkPath("/")}>
&lt; Home /&gt;
</Link>
<Link href="/projects" onClick={() => checkPath("/projects")}>
&lt; Projects /&gt;
</Link>
</ul>
</div>
</Dialog>
</>
);
};

@ -0,0 +1,69 @@
import { fetchUserRepositories } from "@/app/lib/api";
import { Star } from "./icons/Star";
import Link from "next/link";
import { H2 } from "./utils/Titles";
import { ExternalLink } from "./icons/ExternalLink";
import { Archived } from "./icons/Archived";
export const Projects = async () => {
const projects = await fetchUserRepositories().then((res) =>
res
.filter(
(data) =>
!data.fork &&
data.name !== "uwuifyy" &&
data.name !== "Enso-Bot" &&
!data.archived
)
.sort((a, b) => (b.stargazers_count ?? 0) - (a.stargazers_count ?? 0))
.slice(0, 6)
);
return (
<section className="flex flex-col items-center space-y-3 px-5">
<H2>Favourite Projects</H2>
<div className="rounded-lg text-md lg:text-lg xl:text-xl">
<div className="flex flex-col space-y-4">
{projects.map((project) => (
<Project key={project.name} project={project} />
))}
</div>
</div>
</section>
);
};
export const Project = ({ project }: { project: RepositoryData }) => {
return (
<Link
rel="noopener noreferrer"
target="_blank"
href={project.html_url}
className="bg-base w-full rounded-xl outline-2 outline-mantle focus:ring-2 focus:ring-blue ring-offset-0 shadow-lg hover:scale-105 motion-safe:duration-300 p-3"
>
<div className="flex flex-col space-y-1 h-full justify-between">
<div>
<span className="font-semibold hover:underline">
{project.name}&#8201;
<ExternalLink />
</span>
{project.description && (
<div className="text-sm lg:text-md xl:text-lg text-subtext1">
{project.description}
</div>
)}
</div>
<div className="self-end flex flex-row gap-x-1">
{project.archived && (
<p className="text-md font-medium bg-mantle rounded-xl px-3">
<Archived />
</p>
)}
<p className="text-md font-medium bg-mantle rounded-xl px-3">
{project.stargazers_count} <Star />
</p>
</div>
</div>
</Link>
);
};

@ -0,0 +1,13 @@
export const Archived = () => {
return (
<svg
className="h-5 w-5 xl:h-6 xl:w-6 inline align-text-bottom fill-yellow"
xmlns="http://www.w3.org/2000/svg"
width="32"
height="32"
viewBox="0 0 256 256"
>
<path d="M224,48H32A16,16,0,0,0,16,64V88a16,16,0,0,0,16,16v88a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V104a16,16,0,0,0,16-16V64A16,16,0,0,0,224,48ZM208,192H48V104H208ZM224,88H32V64H224V88ZM96,136a8,8,0,0,1,8-8h48a8,8,0,0,1,0,16H104A8,8,0,0,1,96,136Z"></path>
</svg>
);
};

@ -0,0 +1,13 @@
export const Close = () => {
return (
<svg
className="h-8 w-8 fill-overlay0 group-hover:bg-subtext1"
xmlns="http://www.w3.org/2000/svg"
width="32"
height="32"
viewBox="0 0 256 256"
>
<path d="M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z"></path>
</svg>
);
};

@ -0,0 +1,13 @@
export const ExternalLink = () => {
return (
<svg
className="h-4 w-4 inline-block align-text-top fill-text opacity-50"
xmlns="http://www.w3.org/2000/svg"
width="32"
height="32"
viewBox="0 0 256 256"
>
<path d="M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z"></path>
</svg>
);
};

@ -0,0 +1,18 @@
export const Heart = () => {
return (
<svg
className="h-5 w-5 lg:h-6 lg:w-6 xl:h-7 xl:w-7 inline-block align-text-bottom"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 256 256"
>
<path
d="M128,216S24,160,24,94A54,54,0,0,1,78,40c22.59,0,41.94,12.31,50,32,8.06-19.69,27.41-32,50-32a54,54,0,0,1,54,54C232,160,128,216,128,216Z"
fill="red"
stroke="currentColor"
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth="0"
/>
</svg>
);
};

@ -0,0 +1,59 @@
const socialMediaColours: string =
"h-8 w-8 lg:h-9 lg:w-9 xl:h-10 xl:w-10 fill-surface2 transition group-hover:fill-blue";
export const Gitea = () => {
return (
<svg
className="h-10 w-10 lg:h-11 lg:w-11 xl:h-12 xl:w-12 transition group-hover:fill-blue"
aria-hidden="true"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 640 640"
>
<path
className="fill-base"
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 17.2 8.3 27.1 13 27.1 13l-.1-109.2 16.7-.1.1 117.1s57.4 24.2 83.1 40.1c3.7 2.3 10.2 6.8 12.9 14.4 2.1 6.1 2 13.1-1 19.3l-61 126.9c-6.2 12.7-21.4 18.1-33.9 12z"
/>
<g className="fill-surface2 group-hover:fill-blue">
<path d="M622.7 149.8c-4.1-4.1-9.6-4-9.6-4s-117.2 6.6-177.9 8c-13.3.3-26.5.6-39.6.7v117.2c-5.5-2.6-11.1-5.3-16.6-7.9 0-36.4-.1-109.2-.1-109.2-29 .4-89.2-2.2-89.2-2.2s-141.4-7.1-156.8-8.5c-9.8-.6-22.5-2.1-39 1.5-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 45.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 62 63 0 188.9-.1 188.9-.1s12 .1 28.3-10.3c14-8.5 26.5-23.4 26.5-23.4S547 483 565 451.5c5.5-9.7 10.1-19.1 14.1-28 0 0 55.2-117.1 55.2-231.1-1.1-34.5-9.6-40.6-11.6-42.6zM125.6 353.9c-25.9-8.5-36.9-18.7-36.9-18.7S69.6 321.8 60 295.4c-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.7s-26.1-3.1-43-9.1zm300.3 107.6s-6.1 14.5-19.6 15.4c-5.8.4-10.3-1.2-10.3-1.2s-.3-.1-5.3-2.1l-112.9-55s-10.9-5.7-12.8-15.6c-2.2-8.1 2.7-18.1 2.7-18.1L322 273s4.8-9.7 12.2-13c.6-.3 2.3-1 4.5-1.5 8.1-2.1 18 2.8 18 2.8L467.4 315s12.6 5.7 15.3 16.2c1.9 7.4-.5 14-1.8 17.2-6.3 15.4-55 113.1-55 113.1z" />
<path d="M326.8 380.1c-8.2.1-15.4 5.8-17.3 13.8-1.9 8 2 16.3 9.1 20 7.7 4 17.5 1.8 22.7-5.4 5.1-7.1 4.3-16.9-1.8-23.1l24-49.1c1.5.1 3.7.2 6.2-.5 4.1-.9 7.1-3.6 7.1-3.6 4.2 1.8 8.6 3.8 13.2 6.1 4.8 2.4 9.3 4.9 13.4 7.3.9.5 1.8 1.1 2.8 1.9 1.6 1.3 3.4 3.1 4.7 5.5 1.9 5.5-1.9 14.9-1.9 14.9-2.3 7.6-18.4 40.6-18.4 40.6-8.1-.2-15.3 5-17.7 12.5-2.6 8.1 1.1 17.3 8.9 21.3 7.8 4 17.4 1.7 22.5-5.3 5-6.8 4.6-16.3-1.1-22.6 1.9-3.7 3.7-7.4 5.6-11.3 5-10.4 13.5-30.4 13.5-30.4.9-1.7 5.7-10.3 2.7-21.3-2.5-11.4-12.6-16.7-12.6-16.7-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.3 4.7-9.7 9.4-19.3 14.1-29-4.1-2-8.1-4-12.2-6.1-4.8 9.8-9.7 19.7-14.5 29.5-6.7-.1-12.9 3.5-16.1 9.4-3.4 6.3-2.7 14.1 1.9 19.8l-24.6 50.4z" />
</g>
</svg>
);
};
export const GitHub = () => {
return (
<svg viewBox="0 0 24 24" aria-hidden="true" className={socialMediaColours}>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M12 2C6.475 2 2 6.588 2 12.253c0 4.537 2.862 8.369 6.838 9.727.5.09.687-.218.687-.487 0-.243-.013-1.05-.013-1.91C7 20.059 6.35 18.957 6.15 18.38c-.113-.295-.6-1.205-1.025-1.448-.35-.192-.85-.667-.013-.68.788-.012 1.35.744 1.538 1.051.9 1.551 2.338 1.116 2.912.846.088-.666.35-1.115.638-1.371-2.225-.256-4.55-1.14-4.55-5.062 0-1.115.387-2.038 1.025-2.756-.1-.256-.45-1.307.1-2.717 0 0 .837-.269 2.75 1.051.8-.23 1.65-.346 2.5-.346.85 0 1.7.115 2.5.346 1.912-1.333 2.75-1.05 2.75-1.05.55 1.409.2 2.46.1 2.716.637.718 1.025 1.628 1.025 2.756 0 3.934-2.337 4.806-4.562 5.062.362.32.675.936.675 1.897 0 1.371-.013 2.473-.013 2.82 0 .268.188.589.688.486a10.039 10.039 0 0 0 4.932-3.74A10.447 10.447 0 0 0 22 12.253C22 6.588 17.525 2 12 2Z"
></path>
</svg>
);
};
export const Twitter = () => {
return (
<svg viewBox="0 0 24 24" aria-hidden="true" className={socialMediaColours}>
<path d="M20.055 7.983c.011.174.011.347.011.523 0 5.338-3.92 11.494-11.09 11.494v-.003A10.755 10.755 0 0 1 3 18.186c.308.038.618.057.928.058a7.655 7.655 0 0 0 4.841-1.733c-1.668-.032-3.13-1.16-3.642-2.805a3.753 3.753 0 0 0 1.76-.07C5.07 13.256 3.76 11.6 3.76 9.676v-.05a3.77 3.77 0 0 0 1.77.505C3.816 8.945 3.288 6.583 4.322 4.737c1.98 2.524 4.9 4.058 8.034 4.22a4.137 4.137 0 0 1 1.128-3.86A3.807 3.807 0 0 1 19 5.274a7.657 7.657 0 0 0 2.475-.98c-.29.934-.9 1.729-1.713 2.233A7.54 7.54 0 0 0 22 5.89a8.084 8.084 0 0 1-1.945 2.093Z"></path>
</svg>
);
};
export const LinkedIn = () => {
return (
<svg viewBox="0 0 24 24" aria-hidden="true" className={socialMediaColours}>
<path d="M18.335 18.339H15.67v-4.177c0-.996-.02-2.278-1.39-2.278-1.389 0-1.601 1.084-1.601 2.205v4.25h-2.666V9.75h2.56v1.17h.035c.358-.674 1.228-1.387 2.528-1.387 2.7 0 3.2 1.778 3.2 4.091v4.715zM7.003 8.575a1.546 1.546 0 01-1.548-1.549 1.548 1.548 0 111.547 1.549zm1.336 9.764H5.666V9.75H8.34v8.589zM19.67 3H4.329C3.593 3 3 3.58 3 4.297v15.406C3 20.42 3.594 21 4.328 21h15.338C20.4 21 21 20.42 21 19.703V4.297C21 3.58 20.4 3 19.666 3h.003z"></path>
</svg>
);
};
export const Instagram = () => {
return (
<svg viewBox="0 0 24 24" aria-hidden="true" className={socialMediaColours}>
<path d="M12 3c-2.444 0-2.75.01-3.71.054-.959.044-1.613.196-2.185.418A4.412 4.412 0 0 0 4.51 4.511c-.5.5-.809 1.002-1.039 1.594-.222.572-.374 1.226-.418 2.184C3.01 9.25 3 9.556 3 12s.01 2.75.054 3.71c.044.959.196 1.613.418 2.185.23.592.538 1.094 1.039 1.595.5.5 1.002.808 1.594 1.038.572.222 1.226.374 2.184.418C9.25 20.99 9.556 21 12 21s2.75-.01 3.71-.054c.959-.044 1.613-.196 2.185-.419a4.412 4.412 0 0 0 1.595-1.038c.5-.5.808-1.002 1.038-1.594.222-.572.374-1.226.418-2.184.044-.96.054-1.267.054-3.711s-.01-2.75-.054-3.71c-.044-.959-.196-1.613-.419-2.185A4.412 4.412 0 0 0 19.49 4.51c-.5-.5-1.002-.809-1.594-1.039-.572-.222-1.226-.374-2.184-.418C14.75 3.01 14.444 3 12 3Zm0 1.622c2.403 0 2.688.009 3.637.052.877.04 1.354.187 1.67.31.421.163.72.358 1.036.673.315.315.51.615.673 1.035.123.317.27.794.31 1.671.043.95.052 1.234.052 3.637s-.009 2.688-.052 3.637c-.04.877-.187 1.354-.31 1.67-.163.421-.358.72-.673 1.036a2.79 2.79 0 0 1-1.035.673c-.317.123-.794.27-1.671.31-.95.043-1.234.052-3.637.052s-2.688-.009-3.637-.052c-.877-.04-1.354-.187-1.67-.31a2.789 2.789 0 0 1-1.036-.673 2.79 2.79 0 0 1-.673-1.035c-.123-.317-.27-.794-.31-1.671-.043-.95-.052-1.234-.052-3.637s.009-2.688.052-3.637c.04-.877.187-1.354.31-1.67.163-.421.358-.72.673-1.036.315-.315.615-.51 1.035-.673.317-.123.794-.27 1.671-.31.95-.043 1.234-.052 3.637-.052Z"></path>
<path d="M12 15a3 3 0 1 1 0-6 3 3 0 0 1 0 6Zm0-7.622a4.622 4.622 0 1 0 0 9.244 4.622 4.622 0 0 0 0-9.244Zm5.884-.182a1.08 1.08 0 1 1-2.16 0 1.08 1.08 0 0 1 2.16 0Z"></path>
</svg>
);
};

@ -0,0 +1,19 @@
export const Star = () => {
return (
<svg
className="h-5 w-5 xl:h-6 xl:w-6 inline align-text-bottom"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 256 256"
>
<rect width="256" height="256" fill="none" />
<path
d="M135.34,28.9l23.23,55.36a8,8,0,0,0,6.67,4.88l59.46,5.14a8,8,0,0,1,4.54,14.07L184.13,147.7a8.08,8.08,0,0,0-2.54,7.89l13.52,58.54a8,8,0,0,1-11.89,8.69l-51.1-31a7.93,7.93,0,0,0-8.24,0l-51.1,31a8,8,0,0,1-11.89-8.69l13.52-58.54a8.08,8.08,0,0,0-2.54-7.89L26.76,108.35A8,8,0,0,1,31.3,94.28l59.46-5.14a8,8,0,0,0,6.67-4.88L120.66,28.9A8,8,0,0,1,135.34,28.9Z"
fill="orange"
stroke="currentColor"
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth="0"
/>
</svg>
);
};

@ -0,0 +1,51 @@
export const Wave = () => {
return (
<svg
className="h-9 w-9 lg:h-10 lg:w-10 xl:h-12 xl:w-12 inline-block align-bottom text-peach"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 256 256"
>
<rect width="256" height="256" fill="none" />
<path
d="M98,64.31a20,20,0,0,1,34.64-20l28,48.5"
fill="none"
stroke="currentColor"
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth="16"
/>
<path
d="M71.35,98.17l-16-27.71A20,20,0,0,1,90,50.46l34,58.89"
fill="none"
stroke="currentColor"
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth="16"
/>
<path
d="M156,164.77a40,40,0,0,1,14.64-54.64l-10-17.32a20,20,0,0,1,34.64-20l18,31.18A80,80,0,0,1,74.7,184l-38-65.82a20,20,0,0,1,34.65-20l22,38.1"
fill="none"
stroke="currentColor"
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth="16"
/>
<path
d="M192,32a52.12,52.12,0,0,1,32,24"
fill="none"
stroke="currentColor"
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth="16"
/>
<path
d="M74.62,232c-11-8.69-19.39-19.48-26.62-32"
fill="none"
stroke="currentColor"
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth="16"
/>
</svg>
);
};

@ -0,0 +1,15 @@
import Image from "next/image";
export const ProfilePicture = ({}) => {
return (
<Image
src="/profile-picture.png"
width={64}
height={64}
alt="Goudham smiling at the camera"
className="motion-safe:hover:animate-spin w-12 h-12 lg:w-14 lg:h-14 xl:w-16 xl:h-16"
quality={100}
priority={true}
/>
);
};

@ -0,0 +1,9 @@
export const Hamburger = () => {
return (
<div className="space-y-2">
<span className="block w-8 h-0.5 bg-overlay0 group-hover:bg-subtext1"></span>
<span className="block w-8 h-0.5 bg-overlay0 group-hover:bg-subtext1"></span>
<span className="block w-8 h-0.5 bg-overlay0 group-hover:bg-subtext1"></span>
</div>
);
};

@ -0,0 +1,30 @@
import Link from "next/link";
export const Links = () => {
return (
<>
<LinkWithAnimatedUnderline href="/" text="&lt; Home /&gt;" />
<LinkWithAnimatedUnderline href="/projects" text="&lt; Projects /&gt;" />
</>
);
};
const LinkWithAnimatedUnderline = ({
href,
text,
}: {
href: string;
text: string;
}) => {
const animatedUnderline =
"md:block md:max-w-0 md:group-hover:max-w-full motion-safe:md:transition-all md:h-0.5 md:bg-blue motion-safe:md:duration-300";
return (
<Link href={href} className="motion-safe:md:transition motion-safe:md:duration-300 group focus:text-blue">
<span className="group-hover:text-blue motion-safe:md:transition-all motion-safe:md:duration-300">
{text}
</span>
<span className={`${animatedUnderline}`}></span>
</Link>
);
};

@ -0,0 +1,3 @@
export const Navbar = () => {
return
}

@ -0,0 +1,22 @@
import Link from "next/link";
export const StyledLink = ({
className,
href,
children,
}: {
className?: string;
href: string;
children: React.ReactNode;
}) => {
return (
<Link
href={href}
className={`font-medium text-blue underline text-lg lg:text-xl xl:text-2xl focus:ring-1 focus:ring-blue ${
className ?? ""
}`}
>
{children}
</Link>
);
};

@ -0,0 +1,31 @@
export const FancyUnderline = ({
decoration,
className,
children,
}: {
decoration: string;
className?: string;
children: React.ReactNode;
}) => {
return (
<span className={`underline ${decoration} decoration-2 ${className ?? ""}`}>
{children}
</span>
);
};
export const Text = ({ className, children }: { className?: string, children: React.ReactNode }) => {
return <p className={`text-md lg:text-lg xl:text-xl ${className ?? ""}`}>{children}</p>;
};
export const GroupedText = ({
className,
children,
}: {
className: string;
children: React.ReactNode;
}) => {
return (
<div className={`flex flex-col mx-3 gap-3 ${className}`}>{children}</div>
);
};

@ -0,0 +1,16 @@
export const H1 = ({ children }: { children: React.ReactNode | string }) => {
return (
<h1 className="text-3xl lg:text-4xl xl:text-5xl font-bold tracking-tight text-center">
{children}
</h1>
);
};
export const H2 = ({ children }: { children: React.ReactNode | string }) => {
return (
<h2 className="text-2xl lg:text-3xl xl:text-4xl font-bold">
{children}
</h2>
);
};

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

@ -0,0 +1,12 @@
@import "tailwindcss/base";
@import "tailwindcss/components";
@import "tailwindcss/utilities";
@layer base {
:focus-visible {
outline: none;
}
:-moz-focusring {
outline: auto;
}
}

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

@ -0,0 +1,57 @@
import "./globals.css";
import type { Metadata } from "next";
import { Raleway } from "next/font/google";
import { Footer } from "./components/Footer";
const raleway = Raleway({
subsets: ["latin"],
});
export const metadata: Metadata = {
title: "Goudham Suresh",
description:
"I am a software engineer by day, and an open source enthusiast by night. Welcome to my corner of the internet where I write about my experiences, projects, and more.",
keywords: ["Next.js", "React", "Typescript", "Catppuccin", "Goudham"],
colorScheme: "light dark",
metadataBase: new URL(
process.env.NEXT_PUBLIC_IS_PREVIEW
? "https://preview.goudham.com"
: "https://goudham.com"
),
openGraph: {
url: process.env.NEXT_PUBLIC_IS_PREVIEW
? "https://preview.goudham.com"
: "https://goudham.com",
title: `Goudham Suresh${
process.env.NEXT_PUBLIC_IS_PREVIEW ? " (Preview)" : ""
}`,
description:
"I am a software engineer by day, and an open source enthusiast by night. Welcome to my corner of the internet where I write about my experiences, projects, and more.",
locale: "en_GB",
},
twitter: {
creator: "@RealGoudham",
card: "summary_large_image",
},
themeColor: [
{ media: "(prefers-color-scheme: dark)", color: "#11111b" },
{ media: "(prefers-color-scheme: light)", color: "#eff1f5" },
],
};
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="en">
<body
className={`${raleway.className} latte dark:mocha bg-base dark:bg-crust text-text flex flex-col h-screen overflow-auto space-y-10 pb-10`}
>
{children}
<Footer />
</body>
</html>
);
}

@ -0,0 +1,32 @@
import { Octokit } from "octokit";
const octokit = new Octokit({
auth: process.env.REPOS_READ_ONLY,
});
export const fetchUserRepositories = async (): Promise<RepositoryData[]> => {
return await octokit.paginate(
octokit.rest.repos.listForAuthenticatedUser,
{
per_page: 100,
visibility: "public",
affiliation: "owner",
},
(response) =>
response.data.map((data) => {
return {
name: data.name,
description: data.description,
html_url: data.html_url,
size: data.size,
archived: data.archived,
fork: data.fork,
stargazers_count: data.stargazers_count,
open_issues_count: data.open_issues,
created_at: data.created_at,
updated_at: data.updated_at,
topics: data.topics,
};
})
);
};

13
app/lib/types.d.ts vendored

@ -0,0 +1,13 @@
type RepositoryData = {
name: string;
description: string | null;
html_url: string;
size?: number;
archived?: boolean;
fork: boolean;
stargazers_count?: number;
open_issues_count?: number;
created_at: string | null | undefined;
updated_at: string | null | undefined;
topics?: string[];
};

@ -0,0 +1 @@
Goudham standing in the BBC Scotland Building

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 64 KiB

@ -0,0 +1,18 @@
import { Header } from "./components/Header";
import { About } from "./components/About";
import { Projects } from "./components/Projects";
import { NavBar } from "./components/Navigation";
export default function Home() {
return (
/* Inherits from the RootLayout */
<div className="flex flex-col">
<NavBar />
<div className="self-center max-w-md lg:max-w-lg xl:max-w-xl flex flex-col space-y-10 grow">
<Header />
<About />
<Projects />
</div>
</div>
);
}

@ -0,0 +1,25 @@
import { Metadata } from "next";
export const metadata: Metadata = {
title: "Projects by Goudham Suresh",
description:
"I am a software engineer by day, and an open source enthusiast by night. Welcome to my corner of the internet where I write about my experiences, projects, and more.",
openGraph: {
url: process.env.NEXT_PUBLIC_IS_PREVIEW
? "https://preview.goudham.com/projects"
: "https://goudham.com/projects",
title: `Projects by Goudham Suresh${
process.env.NEXT_PUBLIC_IS_PREVIEW ? " (Preview)" : ""
}`,
description:
"I am a software engineer by day, and an open source enthusiast by night. Welcome to my corner of the internet where I write about my experiences, projects, and more.",
},
};
export default function ProjectsLayout({
children,
}: {
children: React.ReactNode;
}) {
return <section>{children}</section>;
}

@ -0,0 +1,45 @@
import { fetchUserRepositories } from "../lib/api";
import { Project } from "../components/Projects";
import { Text } from "../components/utils/Text";
import { H1 } from "../components/utils/Titles";
import { NavBar } from "../components/Navigation";
export default async function Projects() {
const projects = await fetchUserRepositories().then((res) =>
res
.filter((data) => !data.fork)
.sort((a, b) => (b.stargazers_count ?? 0) - (a.stargazers_count ?? 0))
);
return (
/* Inherits from the RootLayout */
<div className="flex flex-col">
<NavBar />
<div className="self-center max-w-md lg:max-w-lg xl:max-w-xl 2xl:max-w-4xl flex flex-col space-y-10 grow">
<H1>All Projects</H1>
<div className="flex flex-col mx-3 gap-3 text-center">
<Text>
Here&apos;s a list of all my public projects, they are sorted by
most starred. Note that some projects are still under development
and/or unfinished, but I&apos;d like to get around to finishing them
at some point in the future!
</Text>
<Text>
I promise I&apos;ll implement sorting options soon
<span className="text-blue font-bold"></span>
</Text>
</div>
<div className="grid grid-cols-1 2xl:grid-cols-2 gap-y-4 gap-x-6 px-5">
{projects.map((project) => (
<div
key={project.name}
className="rounded-lg text-md lg:text-lg xl:text-xl flex justify-center"
>
<Project key={project.name} project={project} />
</div>
))}
</div>
</div>
</div>
);
}

@ -0,0 +1,12 @@
import { MetadataRoute } from 'next'
export default function robots(): MetadataRoute.Robots {
return {
rules: {
userAgent: '*',
allow: '/',
disallow: '/private/',
},
sitemap: process.env.NEXT_PUBLIC_IS_PREVIEW ? 'https://preview.goudham.com/sitemap.xml' : 'https://goudham.com/sitemap.xml',
}
}

@ -0,0 +1,10 @@
import { MetadataRoute } from "next";
export default function sitemap(): MetadataRoute.Sitemap {
return ["goudham.com", "goudham.com/projects"].map((url) => {
return {
url: process.env.NEXT_PUBLIC_IS_PREVIEW ? `https://preview.${url}` : `https://${url}`,
lastModified: new Date(),
};
});
}

@ -5,11 +5,11 @@
"systems": "systems" "systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1681202837, "lastModified": 1689068808,
"narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "cfacdce06f30d2b68473a46042957675eebb3401", "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -20,11 +20,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1681446367, "lastModified": 1690729170,
"narHash": "sha256-zg4mpxLtjiM18r2SB8b18cm2AjNw7CiHNuoUhs+cOoE=", "narHash": "sha256-uWHLUuBVUUJDx2zQNxAnhrLI/w93Pd5MXi1TovL0Nhk=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "3b9f29cbe6468a4751a2715a92b5be67aecff0f7", "rev": "195110917ecbeebf27946990cf0a260b99178ded",
"type": "github" "type": "github"
}, },
"original": { "original": {

@ -4,17 +4,21 @@
flake-utils.url = "github:numtide/flake-utils"; flake-utils.url = "github:numtide/flake-utils";
}; };
outputs = { self, nixpkgs, flake-utils, ... }: outputs = {
flake-utils.lib.eachDefaultSystem (system: nixpkgs,
let flake-utils,
pkgs = import nixpkgs { inherit system; }; ...
in }:
{ flake-utils.lib.eachDefaultSystem (
system: let
pkgs = import nixpkgs {inherit system;};
in {
devShells.default = pkgs.mkShell { devShells.default = pkgs.mkShell {
name = "yarn-shell"; name = "yarn-shell";
buildInputs = with pkgs; [ buildInputs = with pkgs; [
nodejs-18_x nodejs_20
(nodePackages.yarn.override { nodejs = nodejs-18_x; }) (nodePackages.yarn.override {inherit nodejs_20;})
dive
]; ];
}; };
} }

@ -1,13 +1,6 @@
/** @type {import('next').NextConfig} */ /** @type {import('next').NextConfig} */
const nextConfig = { const nextConfig = {
reactStrictMode: true,
output: "standalone", output: "standalone",
i18n: { };
defaultLocale: "en",
locales: [
"en"
]
}
}
module.exports = nextConfig module.exports = nextConfig;

@ -1,31 +1,35 @@
{ {
"name": "goudham", "name": "website",
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
"build": "next build", "build": "next build",
"start": "next start", "start": "next start",
"lint": "next lint" "lint": "next lint",
"docker:preview:build": "docker build --secret id=REPOS_READ_ONLY --build-arg='NEXT_PUBLIC_IS_PREVIEW=1' --build-arg='NEXT_PUBLIC_BUILD_SHA=5266152' --build-arg='NEXT_PUBLIC_BUILD_ID=4716419565' --build-arg='NEXT_PUBLIC_BUILD_NUM=1' -t website-preview .",
"docker:preview": "yarn docker:preview:build && docker run --rm -it -p 3000:3000 --name website website-preview:latest",
"docker:release:build": "docker build --secret id=REPOS_READ_ONLY -t website-release .",
"docker:release": "yarn docker:release:build && docker run --rm -it -p 3000:3000 --name website website-release:latest"
}, },
"dependencies": { "dependencies": {
"@types/node": "18.15.11", "@headlessui/react": "^1.7.16",
"@types/react": "18.0.35", "@types/node": "20.4.5",
"@types/react-dom": "18.0.11", "@types/react": "18.2.17",
"autoprefixer": "^10.4.14", "@types/react-dom": "18.2.7",
"eslint": "8.38.0", "autoprefixer": "10.4.14",
"eslint-config-next": "13.3.0", "eslint": "8.46.0",
"keen-slider": "^6.8.5", "eslint-config-next": "13.4.12",
"next": "13.3.0", "next": "13.4.12",
"next-seo": "^6.0.0", "octokit": "^3.0.0",
"postcss": "8.4.21", "postcss": "8.4.27",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0", "react-dom": "18.2.0",
"tailwindcss": "3.3.1", "tailwindcss": "3.3.3",
"tailwindcss-animate": "^1.0.5", "typescript": "5.1.6"
"typescript": "5.0.4"
}, },
"devDependencies": { "devDependencies": {
"@catppuccin/tailwindcss": "^0.1.1" "@catppuccin/tailwindcss": "^0.1.6"
} },
"packageManager": "yarn@3.6.1"
} }

@ -1,17 +0,0 @@
import { pacifico } from "@/pages/index";
import Link from "next/link";
export default function Custom404() {
return (
<div className={`flex flex-col items-center ${pacifico.variable} justify-center h-screen`}>
<div className="font-pacifico text-center leading-relaxed md:leading-normal">
<h1 className="text-3xl text-base mb-10">
404 | Page Not Found
</h1>
<h2 className="text-2xl text-crust underline">
<Link href="/">Go Back Home</Link>
</h2>
</div>
</div>
)
}

@ -1,12 +0,0 @@
import '@/styles/globals.css'
import type { AppProps } from 'next/app'
export const gradient: string = "bg-gradient-to-r from-red via-green to-sky animate-bg-scroll bg-600"
export default function App({ Component, pageProps }: AppProps) {
return (
<main className={`w-full h-screen ${gradient}`}>
<Component {...pageProps} />
</main>
)
}

@ -1,28 +0,0 @@
import { NextSeo } from "next-seo";
export default function SEO() {
return (
<NextSeo
title="Goudham's Website"
description="Just a silly little guy living in a serious big world."
canonical="https://goudham.com"
openGraph={{
url: 'https://goudham.com',
title: "Goudham's Website",
description: "Just a silly little guy living in a serious big world.",
locale: 'en_GB',
images: [
{
url: 'https://goudham.com/og_banner.jpeg',
alt: 'Goudham standing in the BBC Scotland Building',
type: 'image/jpeg',
},
],
}}
twitter={{
handle: '@RealGoudham',
cardType: 'summary_large_image',
}}
/>
)
}

@ -1,93 +0,0 @@
import { Pacifico } from 'next/font/google'
import { gradient } from "@/pages/_app";
import Head from "next/head";
import SEO from "@/pages/_seo";
export const pacifico = Pacifico({
weight: '400',
variable: '--font-pacifico',
subsets: [ 'latin' ]
})
export default function Home() {
return (
<>
<Head>
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"/>
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"/>
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"/>
<link rel="manifest" href="/site.webmanifest"/>
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#000000"/>
<meta name="msapplication-TileColor" content="#da532c"/>
<meta name="theme-color" content="#1e1e2e"/>
</Head>
<SEO/>
<div className={`flex flex-col items-center ${pacifico.variable} justify-center h-screen`}>
<div className="font-extrabold">
<div>
<Title/>
<Body/>
</div>
</div>
</div>
</>
)
}
function Title() {
return (
<div className="text-center">
<h1 className={`font-pacifico text-5xl text-crust leading-relaxed md:leading-normal mb-10`}>
Hiya 👋, I&#39;m Goudham
</h1>
</div>
)
}
function Body() {
return (
<div className="flex flex-col items-center text-text bg-mantle rounded-lg p-5">
<div className="mb-5">
<p className={`text-transparent bg-clip-text ${gradient}`}>
<a href="https://fun.goudham.com">[Work-In-Progress]</a>
</p>
</div>
<SocialMedia/>
</div>
)
}
function SocialMedia() {
const imgs: { name: string, link: string }[] = [
{
name: "GitHub",
link: "https://github.com/sgoudham",
},
{
name: "Twitter",
link: "https://twitter.com/RealGoudham",
},
{
name: "Twitch",
link: "https://twitch.tv/goudham",
},
{
name: "LinkedIn",
link: "https://linkedin.com/in/sgoudham",
}
]
return (
<div className="w-full">
<ul className="flex flex-wrap items-center justify-around text-overlay2 max-[260px]:flex-col">
{imgs.map(({ name, link }) => {
return (
<li key={name}>
<a href={link} className="hover:underline">{name}</a>
</li>
)
})}
</ul>
</div>
)
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 KiB

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square150x150logo src="/mstile-150x150.png"/>
<TileColor>#da532c</TileColor>
</tile>
</msapplication>
</browserconfig>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Before

Width:  |  Height:  |  Size: 282 KiB

After

Width:  |  Height:  |  Size: 282 KiB

@ -1,2 +0,0 @@
User-agent: *
Disallow:

@ -1,441 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="400.000000pt" height="400.000000pt" viewBox="0 0 400.000000 400.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.14, written by Peter Selinger 2001-2017
</metadata>
<g transform="translate(0.000000,400.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M2030 3989 c0 -4 -17 -10 -37 -14 -21 -4 -44 -11 -51 -17 -6 -6 -25
-8 -41 -5 -19 4 -33 1 -41 -8 -7 -8 -15 -13 -19 -10 -4 2 -15 -5 -24 -16 -9
-10 -13 -19 -9 -19 4 -1 -8 -7 -26 -15 -18 -8 -67 -17 -110 -21 -42 -3 -93
-14 -112 -22 -40 -19 -102 -71 -95 -82 5 -9 -60 -40 -85 -40 -10 0 -22 -4 -25
-10 -3 -5 -14 -10 -23 -10 -15 0 -16 10 -12 89 l5 88 -35 -12 -35 -12 -2 -97
c-1 -84 -4 -102 -25 -132 -12 -18 -26 -34 -29 -34 -12 0 -109 -103 -109 -115
0 -6 -22 -33 -50 -59 -43 -41 -50 -53 -50 -86 0 -21 -5 -51 -11 -67 -6 -15
-12 -37 -13 -48 -4 -33 -28 -99 -41 -115 -19 -23 -25 -70 -9 -70 8 0 14 -9 14
-20 0 -11 -4 -20 -8 -20 -4 0 -14 -15 -20 -34 -7 -19 -20 -37 -28 -40 -8 -3
-12 -10 -9 -16 4 -6 11 -8 16 -5 5 4 9 -5 9 -19 0 -14 4 -26 10 -26 5 0 7 -6
4 -13 -4 -12 -7 -35 -15 -122 -4 -41 0 -47 26 -41 14 4 25 2 25 -4 0 -5 -5
-10 -11 -10 -7 0 -9 -10 -5 -24 3 -14 2 -28 -4 -31 -5 -3 -10 -16 -10 -28 0
-12 -3 -75 -6 -141 -4 -78 -3 -116 4 -112 17 10 30 -17 41 -88 6 -44 7 -75 1
-87 -6 -10 -10 -29 -10 -43 0 -14 -5 -28 -12 -32 -7 -4 -8 -3 -4 4 4 7 2 12
-3 12 -6 0 -11 -6 -11 -14 0 -8 -2 -20 -3 -28 -2 -7 -2 -10 0 -6 2 4 11 4 20
1 12 -5 11 -8 -8 -19 -13 -7 -24 -18 -25 -26 0 -7 -2 -23 -2 -35 -2 -26 -47
-71 -79 -79 -12 -3 -24 -12 -27 -20 -7 -20 -33 -18 -44 4 -5 9 -9 115 -8 234
1 120 -2 218 -5 218 -13 0 -32 130 -36 255 -11 300 -21 638 -22 750 -2 147 -8
162 -52 118 l-32 -31 12 -274 c7 -150 16 -304 21 -343 17 -140 24 -419 10
-445 -9 -17 -12 -85 -11 -256 l2 -233 -23 -5 c-13 -3 -51 -7 -85 -9 -78 -6
-94 8 -96 87 -1 30 -7 60 -14 67 -9 9 -11 -4 -11 -54 2 -91 -5 -97 -111 -97
-49 0 -97 6 -111 13 -23 12 -25 18 -27 87 -7 301 -10 367 -21 387 -7 13 -17
66 -22 119 -5 53 -11 98 -13 100 -8 8 -35 -128 -36 -174 0 -24 -5 -49 -10 -56
-14 -16 -28 -565 -16 -613 5 -22 9 -22 178 -26 94 -2 184 -6 200 -10 20 -6 29
-3 33 8 5 12 24 15 93 15 l87 0 -4 -62 c-2 -35 -11 -82 -19 -106 -15 -41 -15
-98 2 -178 6 -29 4 -32 -24 -42 -18 -6 -44 -20 -60 -31 -23 -17 -103 -46 -247
-91 -17 -6 -40 -10 -52 -10 -34 0 -28 -23 34 -134 150 -267 317 -460 553 -639
141 -106 251 -170 268 -155 17 14 85 131 103 178 8 19 28 59 47 87 42 67 65
122 56 136 -3 6 -1 7 6 3 21 -13 63 96 61 161 -3 93 -1 103 15 103 13 0 19
-12 16 -32 0 -4 8 -9 18 -13 10 -3 21 -19 25 -35 5 -27 18 -35 48 -32 3 1 9
-6 12 -14 4 -11 2 -15 -8 -11 -20 8 -26 -14 -9 -31 7 -7 13 -19 13 -25 0 -7
-5 -6 -11 3 -9 12 -10 12 -5 -3 3 -10 6 -25 6 -33 0 -8 7 -14 17 -14 14 0 14
-2 -3 -21 -10 -11 -14 -19 -9 -17 6 2 12 -1 13 -7 2 -5 8 -18 13 -27 6 -12 6
-25 -1 -39 -22 -40 -4 -40 70 1 41 22 87 46 103 53 15 6 27 19 27 30 0 9 7 20
15 23 8 4 12 10 9 15 -3 6 0 16 6 24 18 21 -5 19 -26 -2 -10 -10 -20 -16 -23
-15 -29 18 -39 20 -49 10 -9 -9 -12 -9 -12 -1 0 7 5 15 10 18 5 3 10 11 10 17
0 7 -4 7 -13 0 -14 -12 -43 1 -34 15 3 5 -7 8 -24 7 -19 -1 -29 3 -29 12 0 8
6 14 13 14 6 1 3 6 -9 13 -12 7 -19 18 -16 26 3 8 0 11 -7 7 -6 -4 -11 -1 -11
8 0 9 -6 16 -12 16 -9 0 -8 4 2 10 8 5 11 10 5 11 -5 0 -1 4 10 9 19 8 19 9
-3 9 -13 1 -20 5 -17 11 3 6 2 10 -3 10 -14 0 -21 48 -8 54 6 2 4 5 -5 5 -19
1 -35 31 -16 31 8 0 8 3 -2 9 -7 5 -10 14 -7 20 4 6 0 11 -9 11 -9 0 -14 4
-10 9 3 5 1 12 -5 16 -6 4 -8 11 -4 16 3 5 9 7 13 5 4 -3 8 1 8 9 0 8 -4 15
-9 15 -4 0 -8 -4 -8 -9 0 -5 -7 -12 -16 -15 -12 -5 -14 -3 -8 6 16 22 16 65 0
80 -12 13 -13 19 -1 41 7 14 11 27 9 29 -2 3 0 19 5 36 7 23 6 32 -2 32 -8 0
-8 3 1 12 8 8 8 17 1 30 -7 14 -7 23 1 33 7 8 9 19 5 25 -8 13 8 13 20 1 6 -5
28 -11 50 -13 35 -3 40 -6 42 -28 2 -41 4 -46 12 -26 7 17 9 16 38 -8 34 -29
55 -34 47 -11 -4 9 -12 14 -18 13 -14 -4 -66 46 -66 63 0 8 14 10 48 6 38 -5
43 -4 25 5 -14 7 -23 20 -22 32 0 21 1 21 9 1 5 -11 9 -15 9 -10 1 6 13 11 29
12 15 1 54 5 87 8 34 4 79 2 105 -5 65 -16 90 -18 84 -9 -11 18 7 47 39 64 18
9 43 23 57 30 14 8 50 14 81 14 34 -1 69 5 87 15 36 18 39 23 17 23 -8 0 -15
-4 -15 -9 0 -4 -36 -8 -81 -8 -73 0 -85 -3 -123 -29 -35 -25 -49 -29 -83 -24
-34 4 -46 13 -71 48 -25 36 -37 44 -74 50 -23 4 -58 16 -76 27 -43 27 -51 17
-12 -15 28 -24 29 -26 8 -25 -13 1 -32 8 -43 15 -27 18 -33 16 -37 -9 -2 -13
-9 -22 -16 -20 -7 1 -13 -10 -13 -25 -2 -24 -2 -25 -6 -5 -2 12 -9 22 -14 22
-5 0 -14 10 -18 23 l-9 22 -10 -26 c-6 -14 -17 -26 -26 -26 -8 0 -13 5 -9 10
3 5 -3 6 -16 2 -15 -4 -21 -3 -19 7 2 8 -4 12 -16 10 -19 -4 -19 -2 -3 22 26
40 20 44 -12 8 -17 -17 -37 -32 -45 -32 -9 0 -16 -5 -16 -11 0 -6 -11 -25 -25
-41 -20 -24 -23 -33 -14 -44 10 -12 9 -13 -5 -8 -12 5 -17 2 -15 -7 2 -8 0
-31 -5 -53 -6 -33 -10 -37 -30 -34 -19 4 -22 1 -18 -14 2 -10 9 -15 15 -11 6
4 7 1 1 -8 -5 -8 -9 -18 -9 -23 0 -5 -6 -11 -12 -13 -16 -6 -17 9 -1 25 9 9 9
12 -3 12 -16 0 -44 39 -34 48 3 4 10 0 15 -8 6 -9 10 -10 10 -3 0 6 -5 15 -11
19 -6 3 -8 17 -4 33 5 21 4 24 -7 13 -7 -7 -13 -26 -14 -43 -1 -17 -6 -35 -11
-40 -11 -11 -11 20 0 38 4 7 0 16 -10 22 -17 10 -17 10 0 11 10 0 15 5 12 10
-4 6 -11 8 -16 5 -10 -7 -12 8 -2 18 3 4 11 -1 18 -10 11 -14 12 -14 19 3 4
10 4 15 0 11 -4 -4 -12 1 -19 9 -10 15 -14 13 -33 -11 -24 -31 -30 -22 -7 9 8
11 15 28 15 37 0 10 8 23 18 28 12 8 13 10 3 11 -8 0 -23 -7 -33 -17 -21 -19
-35 -12 -16 9 17 18 21 38 7 38 -8 0 -8 5 1 15 7 8 9 15 5 15 -4 0 -2 7 5 15
17 21 6 30 -13 10 -19 -19 -24 -19 -24 0 0 8 4 12 8 9 4 -2 10 0 14 6 3 5 -1
10 -11 10 -15 0 -15 2 0 25 15 23 15 25 0 25 -12 0 -15 6 -10 28 3 15 3 22 0
16 -5 -12 -44 -7 -44 5 1 12 27 41 33 36 4 -3 5 -2 3 1 -3 3 0 18 5 33 l9 26
-19 -25 c-11 -14 -23 -21 -28 -17 -4 5 -1 12 6 16 8 5 10 14 6 21 -6 9 -11 6
-20 -10 -12 -22 -12 -22 -11 9 0 17 6 31 11 31 6 0 3 5 -5 10 -13 8 -13 10 1
10 9 0 22 7 29 15 10 12 10 15 -4 15 -9 0 -16 -5 -16 -11 0 -5 -5 -7 -12 -3
-8 5 -2 12 17 20 25 11 20 20 -7 15 -5 0 -8 5 -8 13 0 8 -6 17 -12 19 -10 4
-9 8 2 16 13 9 13 11 -2 11 -13 0 -16 7 -13 28 2 15 6 50 9 77 5 43 29 139 67
261 5 17 9 38 9 47 0 9 6 17 14 17 9 0 12 7 9 20 -3 11 0 20 6 20 6 0 11 6 11
13 0 19 37 89 52 99 10 6 10 8 1 8 -19 0 -16 21 5 36 10 8 12 13 5 14 -16 0
-5 32 16 44 13 8 12 10 -4 17 -20 7 -20 8 0 9 l20 1 -20 9 c-17 7 -17 9 -2 9
22 1 22 18 0 25 -10 3 -6 4 9 2 36 -4 61 12 31 20 -19 5 -20 9 -10 25 6 10 17
19 24 19 7 0 13 5 13 10 0 6 -7 10 -16 10 -13 0 -14 3 -5 14 9 11 9 15 -1 19
-10 4 -10 6 0 6 7 1 20 8 28 16 9 8 24 15 35 15 10 0 19 7 19 15 0 8 3 14 8
13 4 0 15 2 26 7 21 9 36 -8 36 -42 0 -23 20 -33 20 -10 0 9 2 9 8 -1 7 -10
14 -10 38 3 16 8 43 15 59 16 24 0 26 2 11 8 -19 7 -19 8 0 16 20 9 34 11 99
14 35 2 37 3 18 11 -33 13 -29 16 20 15 39 -1 97 -21 97 -34 0 -3 38 -6 85 -6
71 0 82 -2 68 -12 -15 -12 -15 -13 4 -13 19 0 47 22 39 31 -2 2 10 5 27 5 18
1 57 3 87 4 63 3 135 -11 129 -24 -2 -5 4 -10 14 -12 9 -1 17 4 17 12 0 9 -4
12 -10 9 -5 -3 -10 1 -10 10 0 9 5 13 11 10 15 -10 79 4 79 17 0 5 -7 7 -15 4
-11 -4 -15 0 -13 11 2 9 -3 18 -10 20 -8 3 -10 -1 -5 -14 3 -10 3 -15 -1 -12
-4 4 -11 20 -15 37 -9 29 -8 30 12 23 12 -5 27 -18 33 -29 6 -12 14 -19 17
-16 4 4 21 -10 39 -30 33 -37 55 -45 76 -24 9 9 12 8 12 -7 0 -10 3 -15 7 -11
4 4 8 17 8 29 0 14 7 23 20 25 16 3 17 1 5 -7 -12 -9 -11 -11 8 -11 12 0 22
-4 22 -9 0 -13 42 -22 55 -11 6 5 17 3 28 -5 16 -11 16 -15 4 -26 -12 -11 -10
-15 11 -26 30 -16 27 -16 46 3 15 14 16 14 16 -5 0 -12 5 -18 13 -15 17 6 55
-22 43 -33 -5 -4 -11 -2 -13 5 -6 14 -23 16 -23 2 0 -10 36 -50 45 -50 3 0 5
9 5 21 0 37 20 9 21 -29 0 -29 2 -33 8 -17 7 17 9 16 15 -12 4 -18 12 -33 17
-33 5 0 9 -5 9 -10 0 -6 12 -23 26 -37 18 -18 22 -28 14 -33 -9 -6 -8 -14 5
-34 10 -14 20 -26 24 -26 4 0 7 -9 8 -20 1 -11 -2 -20 -8 -20 -5 0 -9 -7 -9
-15 0 -8 5 -15 10 -15 6 0 10 -10 9 -22 l0 -23 -9 21 c-5 12 -13 25 -18 28
-12 7 -3 -75 10 -91 5 -7 7 -17 4 -22 -4 -5 -2 -12 4 -16 5 -3 10 -15 10 -26
0 -10 6 -19 13 -19 9 0 9 -2 -1 -8 -13 -9 -7 -42 8 -42 8 0 18 -39 26 -102 3
-21 11 -55 19 -77 7 -21 10 -42 7 -46 -8 -8 -10 -105 -2 -105 8 0 5 -134 -4
-148 -4 -7 -16 -12 -27 -12 -11 0 -17 -4 -14 -10 3 -5 1 -10 -5 -10 -7 0 -10
-6 -7 -14 8 -20 -4 -28 -20 -15 -9 9 -13 8 -13 0 0 -6 5 -11 10 -11 6 0 10 -7
10 -15 0 -8 5 -15 12 -15 9 0 9 -3 1 -11 -9 -9 -8 -15 3 -26 15 -15 10 -38 -7
-28 -5 4 -9 2 -9 -4 0 -5 -8 -12 -17 -14 -11 -3 -7 -5 10 -6 28 -1 39 -21 12
-21 -8 0 -15 -4 -15 -10 0 -5 4 -10 10 -10 5 0 7 -7 4 -15 -8 -20 -24 -9 -24
16 0 10 -4 19 -10 19 -5 0 -10 -11 -10 -25 0 -14 5 -25 10 -25 6 0 10 -6 10
-14 0 -8 6 -17 13 -19 7 -4 6 -6 -5 -6 -9 -1 -18 5 -21 12 -8 22 -15 3 -10
-26 3 -15 10 -27 15 -27 5 0 6 5 2 12 -4 6 -3 8 4 5 5 -4 9 -15 7 -25 -2 -9
-4 -26 -4 -37 -1 -17 -3 -17 -11 -5 -7 12 -10 8 -10 -14 0 -16 -3 -27 -6 -23
-6 5 -9 31 -13 92 -1 15 -3 17 -10 6 -5 -7 -14 -10 -20 -7 -6 4 -9 11 -6 16 3
5 -4 8 -15 7 -19 -1 -34 -29 -29 -53 1 -5 1 -19 0 -31 -1 -17 -5 -21 -18 -16
-11 4 -14 3 -9 -5 4 -7 2 -12 -5 -12 -8 0 -9 -3 0 -13 6 -8 7 -17 3 -21 -7 -8
-9 -13 -11 -48 -2 -21 -3 -22 -15 -5 -18 23 -25 21 -19 -5 3 -16 2 -19 -4 -10
-7 8 -9 1 -9 -23 1 -21 5 -33 12 -31 6 2 11 -2 11 -10 0 -7 -4 -11 -8 -8 -4 2
-10 -2 -13 -8 -3 -9 -11 -6 -24 9 -11 12 -23 19 -27 15 -5 -4 -5 -1 -1 6 4 7
12 10 17 7 12 -8 11 6 -1 25 -6 9 -10 11 -10 3 0 -7 -7 -10 -16 -6 -13 5 -14
0 -8 -33 4 -22 11 -40 15 -42 13 -5 11 -22 -5 -37 -9 -10 -16 -11 -24 -3 -8 8
-9 5 -6 -9 3 -11 -1 -25 -10 -32 -9 -8 -16 -21 -16 -31 0 -21 -18 -30 -44 -20
-13 4 -16 9 -8 14 6 3 9 14 6 24 -2 9 2 4 10 -13 13 -26 15 -27 16 -8 0 12 7
29 16 38 21 20 10 32 -13 14 -15 -13 -16 -12 -8 6 5 11 10 40 11 64 1 24 6 46
11 50 12 8 25 41 15 40 -19 -3 -23 2 -12 17 11 13 10 16 -8 21 -12 3 -22 13
-22 23 0 10 -4 20 -8 22 -4 2 -28 29 -52 60 -24 32 -45 56 -47 54 -2 -1 3 -20
11 -42 8 -22 15 -31 15 -20 1 11 4 17 7 13 4 -3 3 -14 0 -24 -7 -17 -8 -17
-22 1 -8 11 -14 14 -14 8 0 -22 -16 -13 -28 16 -8 18 -10 20 -6 5 6 -24 -11
-32 -19 -10 -3 7 -6 5 -6 -5 -1 -9 7 -22 17 -27 9 -6 13 -10 7 -10 -23 0 -44
26 -38 48 5 21 4 22 -14 13 -22 -12 -43 1 -43 26 0 8 -9 12 -22 10 -15 -2 -26
4 -34 20 -9 18 -13 20 -17 8 -3 -8 -1 -17 6 -19 7 -3 4 -8 -7 -13 -13 -5 -21
-3 -24 4 -5 16 -29 15 -35 0 -3 -8 -6 -6 -6 5 -1 16 -3 17 -32 1 -23 -11 -34
-13 -39 -4 -5 8 -11 6 -20 -5 -7 -8 -20 -13 -30 -10 -16 5 -75 -18 -84 -34 -5
-8 30 -42 36 -35 3 2 23 -5 46 -16 22 -11 45 -20 49 -20 12 0 59 -43 66 -60 4
-11 6 -11 6 -2 1 7 9 21 18 30 15 16 16 15 10 -16 -4 -21 -3 -32 5 -32 6 0 9
3 5 6 -9 9 15 31 35 31 9 0 14 -6 11 -14 -3 -8 6 -15 26 -19 23 -5 31 -12 31
-27 0 -16 3 -18 11 -10 16 16 39 5 33 -15 -4 -13 -2 -12 11 3 16 20 16 20 21
-3 4 -12 10 -19 15 -16 5 3 9 -2 9 -11 0 -8 -7 -18 -15 -21 -8 -4 -15 -12 -15
-20 0 -8 -3 -13 -7 -13 -5 1 -15 1 -23 0 -13 -1 -13 -3 0 -10 8 -6 17 -8 21
-5 14 8 4 -135 -11 -154 -19 -23 -23 -42 -10 -42 5 0 10 7 10 16 0 9 6 14 13
12 15 -6 22 -58 7 -58 -6 0 -8 5 -5 10 15 24 -23 7 -43 -19 -18 -25 -19 -31
-7 -41 18 -15 0 -61 -21 -53 -8 3 -12 9 -9 13 3 4 -2 10 -10 14 -8 3 -12 12
-9 20 3 8 2 16 -3 19 -10 6 -11 -69 0 -79 4 -4 7 -11 7 -16 0 -4 -3 -7 -7 -6
-5 1 -20 -6 -35 -15 -14 -10 -35 -19 -46 -20 -12 0 -18 -6 -15 -14 4 -9 -6
-13 -36 -13 -23 0 -41 -3 -41 -7 0 -5 27 -8 61 -8 56 0 63 -3 85 -30 18 -23
24 -26 24 -12 0 22 32 22 65 1 27 -17 32 -51 15 -84 -10 -18 -13 -17 -47 18
-20 20 -30 28 -22 17 51 -73 47 -85 -38 -105 -32 -8 -72 -22 -90 -33 -17 -10
-44 -20 -59 -23 -16 -3 -31 -8 -34 -12 -3 -4 -17 -13 -32 -21 -33 -17 -31 -25
3 -13 48 18 117 -17 143 -73 16 -33 16 -40 2 -88 -18 -60 -23 -68 -54 -89 -22
-15 -20 -16 41 -14 52 1 69 -3 87 -19 34 -30 52 -74 48 -111 -4 -34 -4 -34 31
-28 95 15 291 67 378 100 476 177 867 523 1088 964 98 196 150 347 133 389
-19 46 -29 103 -38 201 -4 52 -13 117 -20 143 -13 51 -7 88 11 70 10 -10 16
-29 40 -128 5 -22 12 -47 16 -55 4 -8 8 -24 9 -35 1 -11 6 -42 12 -70 l9 -50
7 50 c4 28 11 68 16 90 20 90 30 303 21 433 -14 180 -20 214 -38 208 -8 -4
-19 -6 -24 -6 -6 0 -8 -4 -5 -8 7 -12 -45 -8 -70 6 -17 9 -22 24 -27 74 -6 70
-59 261 -78 285 -7 8 -18 25 -24 37 -6 11 -20 22 -33 24 -18 3 -23 -3 -28 -37
-6 -35 -9 -39 -24 -31 -20 11 -70 104 -70 130 0 21 -23 70 -32 70 -5 0 -8 9
-8 19 0 11 -7 32 -15 48 -8 15 -28 60 -45 98 -17 39 -39 88 -49 110 -29 60
-42 110 -35 128 8 21 6 21 56 -3 23 -11 43 -20 45 -20 2 0 3 16 3 36 0 32 -10
46 -93 128 -51 50 -105 97 -120 105 -15 8 -46 32 -67 53 -39 36 -101 77 -72
47 6 -7 12 -22 12 -32 0 -10 9 -21 20 -24 20 -5 24 -22 20 -72 -1 -13 3 -21 8
-17 15 9 62 -58 62 -89 0 -8 -6 -15 -12 -15 -19 0 -78 76 -78 99 0 12 -5 21
-11 21 -15 0 -56 44 -64 69 -3 10 -12 22 -20 25 -8 3 -15 15 -15 27 0 12 -8
29 -18 38 -10 9 -28 31 -41 49 -12 18 -44 43 -70 56 -42 22 -48 23 -57 9 -9
-14 -13 -14 -43 2 -26 13 -31 19 -20 26 10 6 11 11 3 19 -23 23 -414 150 -414
134 0 -3 11 -16 25 -29 l26 -23 -33 3 c-49 5 -88 22 -88 40 0 8 -9 15 -19 15
-11 0 -22 6 -24 13 -4 8 -6 7 -6 -3 -1 -9 -12 -17 -27 -18 -14 -1 -23 2 -19 8
3 6 -1 10 -9 10 -9 0 -16 4 -16 9 0 5 -41 11 -90 13 -50 2 -90 0 -90 -3z m145
-69 c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8 -4 11 -10z
m-327 -32 c-2 -6 -10 -14 -16 -16 -7 -2 -10 2 -6 12 7 18 28 22 22 4z m586
-54 c3 -8 2 -12 -4 -9 -6 3 -10 10 -10 16 0 14 7 11 14 -7z m100 -10 c3 -8 2
-12 -4 -9 -6 3 -10 10 -10 16 0 14 7 11 14 -7z m-411 -1 c-7 -2 -21 -2 -30 0
-10 3 -4 5 12 5 17 0 24 -2 18 -5z m-56 -9 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6
6 11 1 17 -2 13 -5z m393 -25 c0 -6 -4 -7 -10 -4 -5 3 -10 11 -10 16 0 6 5 7
10 4 6 -3 10 -11 10 -16z m54 13 c3 -5 -1 -9 -9 -9 -8 0 -12 4 -9 9 3 4 7 8 9
8 2 0 6 -4 9 -8z m-747 -18 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13
-5z m1151 -91 c-6 -31 -27 -24 -37 13 -6 20 -8 41 -5 46 8 13 46 -39 42 -59z
m-61 25 c-3 -7 -5 -2 -5 12 0 14 2 19 5 13 2 -7 2 -19 0 -25z m-20 -11 c-6
-20 -27 -19 -27 2 0 14 5 19 15 14 9 -3 14 -10 12 -16z m59 -75 c-4 -3 -11 0
-16 8 -15 24 -11 33 6 15 9 -9 13 -19 10 -23z m54 8 c0 -5 -4 -10 -10 -10 -5
0 -10 5 -10 10 0 6 5 10 10 10 6 0 10 -4 10 -10z m-453 -46 c-3 -3 -12 -4 -19
-1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m23 -24 c0 -5 -2 -10 -4 -10 -3 0 -8 5
-11 10 -3 6 -1 10 4 10 6 0 11 -4 11 -10z m-949 -23 c-10 -9 -11 -8 -5 6 3 10
9 15 12 12 3 -3 0 -11 -7 -18z m929 -28 c0 -6 -4 -7 -10 -4 -5 3 -10 11 -10
16 0 6 5 7 10 4 6 -3 10 -11 10 -16z m-481 -79 c-1 -11 -3 -10 -6 3 -2 9 -13
17 -23 17 -10 0 -22 5 -26 12 -5 8 -2 9 10 5 14 -6 17 -3 12 10 -4 11 1 8 14
-7 11 -14 19 -32 19 -40z m374 20 c-7 -8 -22 24 -16 34 4 5 10 1 13 -10 4 -10
6 -21 3 -24z m101 24 c5 -14 4 -15 -9 -4 -17 14 -19 20 -6 20 5 0 12 -7 15
-16z m-381 -21 c-7 -2 -19 -2 -25 0 -7 3 -2 5 12 5 14 0 19 -2 13 -5z m-65
-44 c-3 -8 -7 -3 -11 10 -4 17 -3 21 5 13 5 -5 8 -16 6 -23z m292 5 c0 -8 4
-13 8 -10 5 3 9 -2 9 -11 0 -12 -5 -11 -19 7 -19 24 -24 45 -8 35 6 -3 10 -13
10 -21z m-820 2 c0 -3 -4 -8 -10 -11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0
10 -2 10 -4z m54 -9 c-3 -8 -11 -14 -18 -14 -8 0 -12 6 -9 14 3 7 11 13 19 13
7 0 11 -6 8 -13z m323 -9 c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z
m-230 6 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m-197 -24 c-20
-13 -33 -13 -25 0 3 6 14 10 23 10 15 0 15 -2 2 -10z m208 -5 c-2 -1 -13 -7
-25 -14 -19 -9 -22 -8 -20 7 1 14 7 17 24 14 13 -2 23 -6 21 -7z m559 9 c-3
-3 -12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m817 -9 c3 -8 1 -15 -4 -15
-6 0 -10 7 -10 15 0 8 2 15 4 15 2 0 6 -7 10 -15z m-1771 -32 c-7 -3 -15 -4
-18 -3 -3 0 -13 -6 -21 -15 -9 -8 -20 -15 -26 -15 -13 0 30 35 52 42 8 3 17 3
20 0 3 -2 -1 -7 -7 -9z m638 -10 c13 -16 12 -17 -3 -4 -10 7 -18 15 -18 17 0
8 8 3 21 -13z m789 -13 c0 -5 -2 -10 -4 -10 -3 0 -8 5 -11 10 -3 6 -1 10 4 10
6 0 11 -4 11 -10z m-1060 -15 c0 -8 -8 -15 -17 -14 -11 0 -13 3 -5 6 6 2 10 9
6 14 -3 5 0 9 5 9 6 0 11 -7 11 -15z m-450 -5 c0 -5 -4 -10 -10 -10 -5 0 -10
5 -10 10 0 6 5 10 10 10 6 0 10 -4 10 -10z m474 -46 c8 -21 -12 -17 -24 6 -8
16 -8 18 4 14 8 -3 17 -12 20 -20z m1686 -74 c5 0 11 -13 15 -30 4 -16 11 -32
16 -35 5 -4 9 -15 9 -26 0 -10 4 -19 8 -19 5 0 15 -19 22 -42 7 -24 15 -50 18
-58 3 -8 6 -21 8 -29 1 -7 7 -18 13 -24 6 -6 11 -19 11 -29 0 -10 4 -18 10
-18 5 0 13 -18 16 -40 4 -22 9 -40 13 -40 4 0 13 -21 20 -47 7 -27 16 -59 21
-73 8 -24 54 -176 100 -327 13 -40 20 -82 17 -93 -3 -11 -1 -23 4 -26 5 -3 9
-16 9 -30 0 -14 7 -48 16 -75 14 -43 15 -60 4 -126 -8 -54 -9 -78 -1 -86 6 -6
11 -19 11 -28 0 -10 10 -25 22 -33 l22 -16 -22 0 c-19 0 -22 -5 -22 -46 0 -49
13 -84 33 -84 24 -1 54 -37 60 -73 5 -30 3 -37 -11 -37 -10 0 -23 10 -30 21
-14 21 -14 21 -33 -10 -21 -35 -42 -40 -59 -13 -10 15 -11 14 -6 -7 7 -34 -13
-71 -39 -71 -25 0 -49 40 -60 103 -4 20 -11 40 -17 43 -5 3 -7 13 -4 22 14 52
15 72 6 72 -5 0 -10 -8 -11 -17 0 -14 -2 -15 -6 -3 -13 32 -63 54 -63 27 0 -8
-9 -22 -20 -32 -20 -18 -21 -18 -53 17 -17 19 -45 42 -62 50 -33 17 -223 33
-241 21 -6 -5 -17 -25 -24 -46 -14 -43 -21 -42 -27 5 -17 122 9 251 48 241 14
-4 19 0 19 16 0 12 11 32 24 44 13 12 31 37 40 55 14 27 20 31 36 22 30 -16
35 -31 36 -108 0 -42 5 -77 12 -84 7 -7 12 -21 12 -33 0 -16 2 -17 10 -5 8 12
10 11 10 -7 0 -16 6 -23 20 -23 11 0 20 -5 20 -11 0 -6 -6 -9 -14 -6 -8 3 -17
-1 -20 -9 -3 -9 1 -14 13 -14 10 0 24 -7 31 -15 10 -12 10 -15 0 -15 -10 0 -9
-4 1 -16 12 -14 14 -14 25 1 9 12 10 25 3 42 -5 13 -9 42 -9 64 0 21 -4 39 -9
39 -5 0 -11 15 -14 33 -3 17 -10 61 -17 97 -7 36 -13 81 -14 101 0 21 -9 46
-18 56 -10 11 -18 25 -18 31 0 7 -5 12 -11 12 -7 0 -9 9 -6 22 4 14 0 26 -11
34 -16 12 -16 13 2 14 18 0 18 1 1 27 -16 23 -16 32 -5 79 11 46 16 53 34 50
12 -2 15 -1 9 1 -19 7 -16 40 6 62 10 10 20 38 23 64 5 39 3 45 -11 39 -15 -5
-15 -4 0 14 9 11 14 32 13 51 -4 36 21 54 31 22 4 -10 12 -19 18 -19 11 0 28
-45 92 -245 84 -264 101 -331 150 -615 33 -193 52 -232 74 -152 9 30 8 39 -5
49 -10 7 -20 44 -28 105 -8 52 -19 104 -25 115 -6 12 -13 49 -15 83 -3 35 -9
66 -14 69 -4 3 -9 15 -9 26 -3 33 -14 78 -29 112 -17 38 -36 132 -29 143 3 5
-1 15 -9 23 -8 8 -13 16 -11 19 5 5 -16 64 -37 104 -10 17 -29 80 -44 140 -15
60 -32 116 -39 124 -7 8 -18 62 -24 120 -9 74 -18 113 -32 132 -10 15 -19 36
-19 48 0 11 -4 20 -10 20 -18 0 -10 22 10 27 13 3 21 15 22 32 1 22 2 21 5 -6
2 -18 8 -33 13 -33z m-1678 0 c-1 -13 2 -27 8 -30 7 -4 5 -12 -6 -21 -12 -9
-15 -10 -10 -1 4 6 5 12 2 12 -2 0 -11 3 -19 6 -9 3 -17 0 -20 -8 -2 -7 -2 -2
1 12 3 14 4 32 4 41 0 11 7 16 21 15 17 -1 21 -7 19 -26z m594 -1 c14 -15 15
-20 4 -17 -16 3 -30 18 -30 31 0 11 6 8 26 -14z m808 15 c20 -8 11 -24 -12
-23 -12 0 -13 2 -3 6 11 5 11 7 0 14 -16 10 -8 12 15 3z m6 -79 c11 -13 10
-14 -4 -9 -9 3 -16 10 -16 15 0 13 6 11 20 -6z m-1422 -25 c-7 -11 -19 -20
-27 -20 -9 0 -6 7 9 20 13 11 25 20 27 20 2 0 -2 -9 -9 -20z m-518 -4 c0 -3
-4 -8 -10 -11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z m545 -26
c-3 -5 -14 -10 -23 -10 -15 0 -15 2 -2 10 20 13 33 13 25 0z m-8 -26 c-3 -3
-12 -4 -19 -1 -8 3 -5 6 6 6 11 1 17 -2 13 -5z m353 -28 c0 -2 -11 -6 -25 -8
-13 -3 -22 -1 -19 3 5 9 44 13 44 5z m1055 -104 c-7 -8 -35 13 -35 26 0 13 3
12 19 -4 10 -10 17 -20 16 -22z m-253 -124 c-7 -7 -12 -8 -12 -2 0 6 3 14 7
17 3 4 9 5 12 2 2 -3 -1 -11 -7 -17z m168 -73 c0 -2 -10 -9 -22 -15 -22 -11
-22 -10 -4 4 21 17 26 19 26 11z m760 -380 c0 -18 -5 -25 -19 -25 -14 0 -17 6
-13 25 2 14 11 25 18 25 8 0 14 -10 14 -25z m190 -85 c0 -5 -4 -10 -10 -10 -5
0 -10 5 -10 10 0 6 5 10 10 10 6 0 10 -4 10 -10z m-100 -322 c0 -4 -7 -8 -15
-8 -10 0 -15 10 -15 28 1 26 1 26 15 8 8 -11 15 -23 15 -28z m-2986 -159 c-3
-5 -10 -7 -15 -3 -5 3 -7 10 -3 15 3 5 10 7 15 3 5 -3 7 -10 3 -15z m2631
-125 c3 -20 9 -43 12 -52 4 -13 2 -12 -10 3 -15 19 -16 18 -6 -18 6 -22 8 -41
5 -45 -8 -7 -7 -8 -35 71 -18 54 -21 70 -11 82 17 21 36 3 45 -41z m-565 -28
c0 -3 -4 -8 -10 -11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z
m-1178 -16 c9 0 31 -18 48 -40 24 -30 27 -38 13 -33 -10 3 -25 11 -33 18 -31
24 -40 27 -35 8 3 -10 -2 -3 -12 15 -12 23 -23 32 -35 29 -10 -3 -15 -1 -12 5
3 5 16 7 28 4 11 -3 28 -6 38 -6z m-865 -16 c-3 -3 -12 -4 -19 -1 -8 3 -5 6 6
6 11 1 17 -2 13 -5z m3 -24 c0 -5 -2 -10 -4 -10 -3 0 -8 5 -11 10 -3 6 -1 10
4 10 6 0 11 -4 11 -10z m620 0 c0 -5 -2 -10 -4 -10 -3 0 -8 5 -11 10 -3 6 -1
10 4 10 6 0 11 -4 11 -10z m1280 -57 c0 -13 -3 -13 -15 -3 -8 7 -15 16 -15 21
0 5 7 6 15 3 8 -4 15 -13 15 -21z m-1270 -12 c-7 -14 -7 -21 0 -21 5 0 10 -6
10 -14 0 -11 -5 -12 -25 -3 -19 9 -22 14 -12 22 7 6 16 19 20 29 4 10 10 16
13 13 3 -3 1 -15 -6 -26z m-183 -13 c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4
-12 1 -19z m563 13 c0 -5 -9 -7 -20 -4 -11 3 -20 7 -20 9 0 2 9 4 20 4 11 0
20 -4 20 -9z m-20 -21 c0 -5 -5 -10 -11 -10 -5 0 -7 5 -4 10 3 6 8 10 11 10 2
0 4 -4 4 -10z m1716 -16 c50 6 90 -8 97 -34 3 -10 1 -38 -4 -62 -5 -23 -6 -96
-2 -160 6 -128 5 -132 -49 -107 -21 9 -23 16 -21 72 1 33 7 85 13 113 10 45 9
57 -6 79 -16 25 -22 26 -76 23 l-58 -3 0 42 c0 44 13 57 44 40 10 -5 39 -7 62
-3z m-1189 -46 c-3 -7 -5 -2 -5 12 0 14 2 19 5 13 2 -7 2 -19 0 -25z m-107
-61 c0 -14 -4 -16 -19 -8 -10 6 -21 8 -23 5 -3 -3 -8 2 -12 11 -4 13 -2 14 14
5 16 -9 20 -8 20 5 0 9 -4 14 -8 11 -4 -2 -8 4 -8 15 0 19 1 18 18 -3 10 -13
18 -31 18 -41z m-1118 28 c3 -14 2 -27 -1 -30 -4 -2 -8 10 -9 26 -3 36 4 38
10 4z m82 -22 c-11 -42 -35 -74 -53 -70 -9 1 -21 -6 -27 -16 -10 -17 -11 -16
-12 12 0 17 2 30 6 29 16 -4 72 39 72 55 0 9 5 17 10 17 6 0 8 -11 4 -27z
m1436 -53 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10 -4
10 -10z m-1410 -96 c-1 -5 -12 5 -25 21 -20 23 -27 27 -34 16 -5 -8 -11 -9
-15 -3 -4 6 1 15 10 20 13 7 23 3 41 -18 12 -15 23 -32 23 -36z m1355 26 c3
-5 1 -10 -4 -10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8 -4 11 -10z m911 -27
c14 -25 12 -78 -3 -77 -7 1 -22 2 -33 3 -14 1 -20 8 -20 27 0 14 -4 23 -10 19
-5 -3 -10 0 -10 7 0 8 10 15 22 15 13 1 24 7 26 13 5 15 16 12 28 -7z m-2201
-13 c-3 -5 -10 -10 -16 -10 -5 0 -9 5 -9 10 0 6 7 10 16 10 8 0 12 -4 9 -10z
m-103 -41 c-9 -10 -20 -15 -25 -12 -6 3 -3 11 6 18 10 7 17 18 17 26 0 12 2
12 9 0 6 -8 3 -20 -7 -32z m1363 11 c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0 6
2 10 4 10 3 0 8 -4 11 -10z m-128 -93 c-2 -6 -10 -13 -18 -15 -8 -3 -11 -1 -7
3 4 5 3 14 -3 21 -8 9 -5 11 11 7 11 -3 19 -10 17 -16z m-107 -39 c0 -4 -4 -8
-9 -8 -6 0 -12 4 -15 8 -3 5 1 9 9 9 8 0 15 -4 15 -9z m-60 -98 c0 -5 -5 -10
-11 -10 -5 0 -7 5 -4 10 3 6 8 10 11 10 2 0 4 -4 4 -10z m-880 -54 c0 -2 -7
-6 -15 -10 -8 -3 -15 -1 -15 4 0 6 7 10 15 10 8 0 15 -2 15 -4z m985 -416 c-3
-5 -16 -10 -28 -10 -18 0 -19 2 -7 10 20 13 43 13 35 0z"/>
<path d="M3325 3180 c3 -5 8 -10 11 -10 2 0 4 5 4 10 0 6 -5 10 -11 10 -5 0
-7 -4 -4 -10z"/>
<path d="M3335 2448 c4 -18 13 -63 19 -99 12 -73 27 -98 60 -100 17 -1 17 -2
4 -6 -22 -6 -22 -18 0 -129 10 -49 19 -111 20 -138 1 -34 8 -56 21 -70 11 -12
23 -33 26 -48 8 -30 25 -38 25 -13 0 8 5 15 10 15 6 0 10 16 10 36 0 21 -4 33
-10 29 -6 -4 -10 11 -10 39 0 24 -5 57 -11 73 -13 33 -22 87 -21 123 0 14 -7
33 -16 44 -12 12 -17 37 -18 80 -1 69 -26 132 -68 171 -37 35 -50 32 -41 -7z"/>
<path d="M3182 2055 c0 -16 2 -22 5 -12 2 9 2 23 0 30 -3 6 -5 -1 -5 -18z"/>
<path d="M3147 1893 c-4 -3 -7 -11 -7 -17 0 -6 5 -5 12 2 6 6 9 14 7 17 -3 3
-9 2 -12 -2z"/>
<path d="M3110 3559 c0 -5 5 -7 10 -4 6 3 10 8 10 11 0 2 -4 4 -10 4 -5 0 -10
-5 -10 -11z"/>
<path d="M2120 2975 c0 -8 4 -15 10 -15 5 0 7 7 4 15 -4 8 -8 15 -10 15 -2 0
-4 -7 -4 -15z"/>
<path d="M2489 2982 c11 -8 11 -10 0 -15 -10 -4 -8 -6 4 -6 21 -1 18 21 -4 27
-12 3 -12 2 0 -6z"/>
<path d="M3715 2980 c-9 -15 -1 -23 21 -18 15 3 16 4 1 16 -11 9 -17 10 -22 2z"/>
<path d="M2068 2963 c6 -2 18 -2 25 0 6 3 1 5 -13 5 -14 0 -19 -2 -12 -5z"/>
<path d="M3591 2957 c-16 -16 -13 -41 7 -68 10 -13 26 -43 36 -66 11 -24 22
-43 27 -43 10 0 17 93 8 105 -4 6 -9 23 -11 39 -2 22 -10 31 -30 37 -15 4 -31
2 -37 -4z"/>
<path d="M2058 2933 c7 -3 16 -2 19 1 4 3 -2 6 -13 5 -11 0 -14 -3 -6 -6z"/>
<path d="M2681 2884 c0 -11 3 -14 6 -6 3 7 2 16 -1 19 -3 4 -6 -2 -5 -13z"/>
<path d="M3837 2745 c7 -64 12 -83 26 -97 22 -24 36 -77 27 -106 -5 -15 -11
-39 -14 -54 -4 -16 -13 -28 -21 -28 -18 0 -20 -17 -2 -23 9 -3 9 -7 -1 -19
-11 -14 -9 -17 15 -25 37 -13 83 2 83 27 0 29 -68 254 -94 312 l-24 53 5 -40z"/>
<path d="M1373 2423 c9 -2 23 -2 30 0 6 3 -1 5 -18 5 -16 0 -22 -2 -12 -5z"/>
<path d="M1267 2398 c-31 -11 -55 -24 -52 -29 3 -5 -7 -7 -22 -5 -15 2 -20 1
-10 -1 27 -7 20 -23 -10 -24 -16 0 -22 -3 -15 -6 8 -3 5 -11 -12 -24 -25 -20
-31 -53 -13 -76 5 -7 6 -20 3 -29 -9 -22 47 -76 70 -67 13 5 16 3 11 -10 -3
-9 -2 -17 2 -17 5 0 11 7 15 15 4 11 13 14 29 9 14 -3 44 0 68 7 24 7 66 12
93 11 27 -1 56 4 64 11 11 8 14 8 9 0 -4 -6 -3 -14 2 -17 5 -4 12 -2 16 4 3 5
13 10 21 10 10 0 12 -5 8 -12 -6 -10 -4 -10 7 -2 16 13 48 11 134 -6 62 -12
121 -47 98 -57 -7 -2 -13 -10 -13 -16 0 -6 12 0 26 14 19 16 28 20 31 11 7
-18 23 -4 23 20 0 45 -100 113 -112 76 -3 -8 -19 -5 -54 12 -43 21 -63 23
-174 23 -132 0 -133 0 -194 -26 -47 -21 -52 -21 -60 -1 -9 22 -8 24 10 24 13
0 14 3 5 13 -13 17 -5 27 22 27 12 0 17 5 14 14 -7 17 35 30 64 21 12 -4 18
-2 17 5 -2 7 7 16 20 21 12 4 22 5 22 1 0 -4 32 -6 71 -5 63 2 74 -1 95 -23
14 -13 31 -24 39 -24 9 0 32 -9 52 -20 41 -22 73 -26 73 -10 0 6 9 1 20 -10
22 -22 40 -26 40 -10 0 6 -4 10 -10 10 -5 0 -7 7 -4 15 4 8 13 15 21 15 8 0
12 -4 9 -9 -3 -5 5 -11 18 -13 31 -6 24 15 -9 30 -17 8 -26 8 -31 1 -3 -6 -12
-2 -21 10 -8 12 -18 19 -23 16 -4 -3 -10 0 -12 6 -2 6 -25 13 -52 16 -31 4
-43 9 -34 14 10 7 9 9 -4 9 -10 0 -18 5 -18 11 0 6 -9 8 -21 4 -15 -5 -19 -4
-15 4 4 6 2 11 -3 11 -6 0 -11 -6 -11 -12 0 -7 -5 -5 -11 5 -6 9 -14 15 -19
12 -5 -3 -20 -1 -32 6 -30 16 -151 23 -142 8 4 -8 1 -8 -12 -1 -11 5 -25 7
-33 4 -10 -3 -12 0 -8 12 8 20 -1 19 -76 -6z m188 -28 c4 -6 -6 -10 -22 -9
-25 0 -26 1 -8 9 11 5 21 9 22 9 1 1 5 -3 8 -9z m35 0 c0 -5 -5 -10 -11 -10
-5 0 -7 5 -4 10 3 6 8 10 11 10 2 0 4 -4 4 -10z m-147 -17 c-7 -2 -19 -2 -25
0 -7 3 -2 5 12 5 14 0 19 -2 13 -5z m17 -17 c0 -3 -4 -8 -10 -11 -5 -3 -10 -1
-10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z m438 -84 c6 -18 -15 -14 -22 4 -4 10
-1 14 6 12 6 -2 14 -10 16 -16z m-128 -82 c13 -8 13 -10 -2 -10 -9 0 -20 5
-23 10 -8 13 5 13 25 0z m143 -24 c3 -7 2 -18 -3 -25 -6 -10 -14 -7 -34 10
-36 32 -35 51 3 38 16 -6 32 -16 34 -23z"/>
<path d="M2428 2278 c-2 -5 -37 -9 -78 -11 -49 -2 -74 -7 -73 -14 2 -7 -6 -14
-16 -18 -10 -3 -26 -13 -34 -23 -15 -17 -14 -18 16 -19 26 -2 28 0 12 7 -18 8
-17 9 7 7 15 -1 24 -5 22 -9 -6 -9 71 1 104 13 15 6 21 5 17 -1 -3 -6 -2 -10
4 -10 5 0 14 7 19 16 9 15 12 15 40 1 18 -8 41 -13 53 -10 17 5 20 3 14 -7 -6
-10 -1 -12 20 -7 18 3 34 -1 42 -9 8 -8 26 -17 41 -20 15 -4 48 -19 73 -35 25
-16 49 -29 53 -29 4 0 14 -7 22 -15 14 -13 12 -15 -18 -16 -28 -2 -29 -2 -8
-7 23 -4 24 -5 5 -13 -18 -7 -18 -8 5 -9 l25 -2 -25 -8 c-23 -7 -23 -8 -3 -9
12 -1 24 -5 27 -9 3 -5 -20 -8 -52 -6 -49 2 -58 6 -62 24 -5 21 -43 39 -161
76 -46 14 -139 25 -210 25 -52 0 -149 -62 -149 -96 0 -32 8 -32 20 1 6 14 14
22 20 19 5 -3 10 -1 10 5 0 11 114 13 134 2 4 -2 33 -5 63 -6 40 -1 58 -6 68
-19 7 -10 16 -14 19 -9 4 6 21 7 43 2 21 -5 39 -7 41 -5 2 2 15 -3 29 -10 15
-8 30 -12 35 -9 4 3 8 1 8 -5 0 -13 53 -24 111 -24 65 0 126 43 125 87 -1 17
-5 37 -9 44 -5 6 -5 12 0 13 4 1 -3 4 -16 8 -13 3 -29 15 -35 26 -19 34 -69
76 -83 70 -8 -3 -18 -5 -21 -6 -4 -1 4 -5 18 -10 l25 -8 -25 2 c-36 2 -54 -11
-39 -29 8 -10 8 -14 0 -14 -6 0 -11 5 -11 11 0 5 -4 7 -10 4 -5 -3 -10 -1 -10
5 0 6 -5 8 -10 5 -13 -8 -38 16 -33 31 2 7 -3 14 -12 17 -8 4 -15 1 -15 -6 0
-7 -5 -4 -11 6 -5 9 -15 17 -20 17 -6 0 -7 -5 -4 -11 4 -5 -9 -3 -28 5 -20 8
-39 11 -43 8 -4 -4 -5 0 -1 9 4 13 -2 18 -29 21 -18 2 -35 0 -36 -4z m338 -97
c-3 -5 -15 -7 -26 -4 -28 7 -25 13 6 13 14 0 23 -4 20 -9z m-1 -31 c3 -5 2
-10 -4 -10 -5 0 -13 5 -16 10 -3 6 -2 10 4 10 5 0 13 -4 16 -10z"/>
<path d="M2510 2286 c0 -2 8 -10 18 -17 15 -13 16 -12 3 4 -13 16 -21 21 -21
13z"/>
<path d="M2670 2286 c0 -1 11 -15 25 -30 22 -24 45 -34 45 -20 0 10 -28 34
-39 34 -6 0 -11 5 -11 10 0 6 -4 10 -10 10 -5 0 -10 -2 -10 -4z"/>
<path d="M2650 2240 c0 -5 7 -10 15 -10 8 0 15 5 15 10 0 6 -7 10 -15 10 -8 0
-15 -4 -15 -10z"/>
<path d="M2690 2220 c0 -6 -8 -10 -17 -8 -10 1 -20 -1 -23 -6 -3 -5 5 -10 16
-12 25 -4 51 20 34 31 -5 3 -10 1 -10 -5z"/>
<path d="M2152 2194 c-7 -8 -8 -14 -3 -14 10 0 25 19 20 25 -2 1 -10 -3 -17
-11z"/>
<path d="M2154 2113 c-26 -28 -31 -43 -13 -43 6 0 13 9 16 20 3 10 17 23 31
28 22 7 23 9 8 15 -11 5 -25 -2 -42 -20z"/>
<path d="M1380 2120 c0 -5 5 -10 11 -10 5 0 7 5 4 10 -3 6 -8 10 -11 10 -2 0
-4 -4 -4 -10z"/>
<path d="M2727 2089 c7 -7 15 -10 18 -7 3 3 -2 9 -12 12 -14 6 -15 5 -6 -5z"/>
<path d="M1820 2048 c0 -19 2 -20 10 -8 13 19 13 30 0 30 -5 0 -10 -10 -10
-22z"/>
<path d="M2120 2039 c0 -5 5 -7 10 -4 6 3 10 8 10 11 0 2 -4 4 -10 4 -5 0 -10
-5 -10 -11z"/>
<path d="M1453 1694 c-15 -16 -16 -24 -4 -24 8 0 24 30 19 35 -2 2 -9 -3 -15
-11z"/>
<path d="M2825 1679 c-11 -16 -1 -19 13 -3 7 8 8 14 3 14 -5 0 -13 -5 -16 -11z"/>
<path d="M1440 1625 c7 -8 20 -14 29 -14 13 1 13 2 -1 6 -10 2 -18 9 -18 14 0
5 -5 9 -11 9 -8 0 -8 -5 1 -15z"/>
<path d="M1531 1614 c0 -11 3 -14 6 -6 3 7 2 16 -1 19 -3 4 -6 -2 -5 -13z"/>
<path d="M1250 1540 c0 -5 5 -10 10 -10 6 0 10 5 10 10 0 6 -4 10 -10 10 -5 0
-10 -4 -10 -10z"/>
<path d="M1235 1481 c-9 -40 -8 -44 8 -47 9 -1 12 9 10 34 -3 46 -10 50 -18
13z"/>
<path d="M1690 1399 c0 -5 5 -7 10 -4 6 3 10 8 10 11 0 2 -4 4 -10 4 -5 0 -10
-5 -10 -11z"/>
<path d="M2585 1370 c-3 -5 -1 -10 4 -10 6 0 11 5 11 10 0 6 -2 10 -4 10 -3 0
-8 -4 -11 -10z"/>
<path d="M1670 1310 c0 -7 -7 -9 -16 -6 -14 5 -15 4 -4 -9 7 -9 16 -12 19 -8
3 4 10 11 15 14 4 4 3 10 -3 13 -6 4 -11 2 -11 -4z"/>
<path d="M2213 1274 c-4 -10 -10 -11 -25 -3 -13 7 -24 7 -30 1 -17 -17 35 -22
82 -7 25 7 41 15 35 16 -37 7 -57 5 -62 -7z"/>
<path d="M2562 1255 c0 -16 2 -22 5 -12 2 9 2 23 0 30 -3 6 -5 -1 -5 -18z"/>
<path d="M1738 1263 c6 -2 18 -2 25 0 6 3 1 5 -13 5 -14 0 -19 -2 -12 -5z"/>
<path d="M2085 1240 c-4 -6 2 -9 14 -7 29 4 39 17 13 17 -11 0 -24 -5 -27 -10z"/>
<path d="M1940 1220 c0 -5 7 -10 15 -10 8 0 15 5 15 10 0 6 -7 10 -15 10 -8 0
-15 -4 -15 -10z"/>
<path d="M2038 1223 c6 -2 18 -2 25 0 6 3 1 5 -13 5 -14 0 -19 -2 -12 -5z"/>
<path d="M2030 1170 c-9 -6 -10 -10 -3 -10 6 0 15 5 18 10 8 12 4 12 -15 0z"/>
<path d="M1630 980 c-8 -5 -10 -10 -5 -10 6 0 17 5 25 10 8 5 11 10 5 10 -5 0
-17 -5 -25 -10z"/>
<path d="M1900 951 c0 -6 -8 -11 -17 -11 -13 0 -14 -3 -6 -11 9 -9 16 -8 27 4
10 10 12 18 6 22 -5 3 -10 1 -10 -4z"/>
<path d="M2272 928 c1 -20 5 -35 9 -33 7 5 3 54 -6 63 -3 3 -5 -10 -3 -30z"/>
<path d="M1990 930 c6 -11 13 -20 16 -20 2 0 0 9 -6 20 -6 11 -13 20 -16 20
-2 0 0 -9 6 -20z"/>
<path d="M2086 931 c-3 -5 1 -11 9 -14 9 -4 12 -1 8 9 -6 16 -10 17 -17 5z"/>
<path d="M1922 922 c-9 -6 -7 -14 8 -30 33 -35 56 -21 29 18 -8 11 -9 9 -3
-10 6 -22 5 -24 -10 -11 -9 8 -15 20 -12 28 6 15 5 15 -12 5z"/>
<path d="M1856 911 c-3 -5 1 -11 9 -15 8 -3 15 -1 15 4 0 13 -18 22 -24 11z"/>
<path d="M2028 915 c-11 -11 3 -35 21 -35 10 0 12 3 5 8 -6 4 -13 13 -15 20
-3 7 -7 10 -11 7z"/>
<path d="M1900 890 c0 -5 5 -10 11 -10 5 0 7 5 4 10 -3 6 -8 10 -11 10 -2 0
-4 -4 -4 -10z"/>
<path d="M2295 889 c-4 -6 -5 -12 -2 -15 2 -3 7 2 10 11 7 17 1 20 -8 4z"/>
<path d="M2010 740 c0 -5 5 -10 11 -10 5 0 7 5 4 10 -3 6 -8 10 -11 10 -2 0
-4 -4 -4 -10z"/>
<path d="M1891 731 c-14 -4 -26 -12 -29 -20 -3 -10 0 -11 17 -2 12 7 25 10 30
7 5 -3 14 1 21 9 14 17 4 18 -39 6z"/>
<path d="M1798 713 c-16 -4 -33 -32 -24 -40 2 -3 13 0 23 6 10 6 14 11 9 11
-5 0 -3 7 4 15 7 8 11 14 9 14 -2 -1 -11 -3 -21 -6z"/>
<path d="M1700 654 c0 -13 3 -14 15 -4 8 6 20 8 26 4 8 -4 9 -3 5 4 -11 18
-46 14 -46 -4z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 30 KiB

@ -1,19 +0,0 @@
{
"name": "Goudham's Website",
"short_name": "Goudham's Website",
"icons": [
{
"src": "/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/android-chrome-384x384.png",
"sizes": "384x384",
"type": "image/png"
}
],
"theme_color": "#1e1e2e",
"background_color": "#1e1e2e",
"display": "standalone"
}

@ -1,3 +0,0 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

@ -1,40 +1,38 @@
const plugin = require("tailwindcss/plugin");
/** @type {import('tailwindcss').Config} */ /** @type {import('tailwindcss').Config} */
module.exports = { module.exports = {
content: [ content: [
'./pages/**/*.{js,ts,jsx,tsx}', "./pages/**/*.{js,ts,jsx,tsx,mdx}",
'./components/**/*.{js,ts,jsx,tsx}', "./components/**/*.{js,ts,jsx,tsx,mdx}",
'./app/**/*.{js,ts,jsx,tsx}', "./app/**/*.{js,ts,jsx,tsx,mdx}",
], ],
theme: { theme: {
extend: { extend: {
fontFamily: { keyframes: {
pacifico: ['var(--font-pacifico)', 'cursive'] wave: {
}, "0%": { transform: "rotate(0.0deg)" },
"10%": { transform: "rotate(14deg)" },
"backgroundSize": { "20%": { transform: "rotate(-8deg)" },
"600": "600%" "30%": { transform: "rotate(14deg)" },
"40%": { transform: "rotate(-4deg)" },
"50%": { transform: "rotate(10.0deg)" },
"60%": { transform: "rotate(0.0deg)" },
"100%": { transform: "rotate(0.0deg)" },
},
}, },
animation: { animation: {
"bg-scroll": "bgscroll 15s ease infinite" "waving-hand": "wave 2s linear infinite",
}, },
keyframes: {
"bgscroll": {
"0%, 100%": {
"background-position": "0 50%"
},
"50%": {
"background-position": "100% 50%"
}
}
}
}, },
}, },
plugins: [ plugins: [
require('@catppuccin/tailwindcss')({ require("@catppuccin/tailwindcss")({
prefix: false, // which flavour of colours to use by default, in the `:root`
defaultFlavour: "mocha" defaultFlavour: "latte",
}),
plugin(function ({ addVariant }) {
addVariant("hocus", ["&:hover", "&:focus"]);
}), }),
require('tailwindcss-animate')
], ],
} };

@ -9,15 +9,20 @@
"noEmit": true, "noEmit": true,
"esModuleInterop": true, "esModuleInterop": true,
"module": "esnext", "module": "esnext",
"moduleResolution": "node", "moduleResolution": "bundler",
"resolveJsonModule": true, "resolveJsonModule": true,
"isolatedModules": true, "isolatedModules": true,
"jsx": "preserve", "jsx": "preserve",
"incremental": true, "incremental": true,
"plugins": [
{
"name": "next"
}
],
"paths": { "paths": {
"@/*": ["./*"] "@/*": ["./*"]
} }
}, },
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
"exclude": ["node_modules"] "exclude": ["node_modules"]
} }

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save