more changes

This commit is contained in:
Lio 2023-05-28 07:56:48 +02:00
parent 19157d2e09
commit 1fe1bef1a9
10 changed files with 210 additions and 0 deletions

7
.dockerignore Normal file
View file

@ -0,0 +1,7 @@
Dockerfile
.dockerignore
node_modules
npm-debug.log
README.md
.next
.git

57
Dockerfile Normal file
View file

@ -0,0 +1,57 @@
# Install dependencies only when needed
FROM node:16-alpine AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
WORKDIR /app
# Install dependencies based on the preferred package manager
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./
RUN \
if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
elif [ -f package-lock.json ]; then npm ci; \
elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i --frozen-lockfile; \
else echo "Lockfile not found." && exit 1; \
fi
# Rebuild the source code only when needed
FROM node:16-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
# Next.js collects completely anonymous telemetry data about general usage.
# Learn more here: https://nextjs.org/telemetry
# Uncomment the following line in case you want to disable telemetry during the build.
# ENV NEXT_TELEMETRY_DISABLED 1
RUN yarn build
# If using npm comment out above and use below instead
# RUN npm run build
# Production image, copy all the files and run next
FROM node:16-alpine AS runner
WORKDIR /app
ENV NODE_ENV production
# Uncomment the following line in case you want to disable telemetry during runtime.
# ENV NEXT_TELEMETRY_DISABLED 1
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
COPY --from=builder /app/public ./public
# Automatically leverage output traces to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
USER nextjs
EXPOSE 3000
ENV PORT 3000
CMD ["node", "server.js"]

15
components/Credits.tsx Normal file
View file

@ -0,0 +1,15 @@
import Link from "next/link"
const Credits = ({ credits }) => {
return (
<Link
href={`https://${credits.url}`}>
<a>{credits.name}</a>
</Link>
)
}
export default Credits

48
components/Head.tsx Normal file
View file

@ -0,0 +1,48 @@
import NextHead from "next/head"
const Head = ({ redirect }: { redirect?: { url: string, site: string } }) => {
return (
<NextHead>
<link rel="icon" type="image/png" href="/assets/favicon.png" sizes="32x32" />
<link rel="icon" type="image/png" href="/assets/favicon.png" sizes="96x96" />
<link rel="icon" type="image/png" href="/assets/favicon.png" sizes="16x16" />
<link rel="apple-touch-icon" sizes="180x180" href="/assets/favicon.png" />
<title>heika.dog</title>
<meta name="theme-color" content="#FABD02 " />
{!redirect && (
<>
<meta property="og:title" content="heika.dog" />
</>
)}
{redirect && (
<>
<meta property="og:title" content={` heika.dog on ${redirect.site}`} />
</>
)}
<meta property="og:type" content="website" />
<meta property="og:url" content="https://heika.dog" />
<meta property="og:description" content="heikadog and heikadog accessories" />
<meta property="og:image" content="/assets/favicon.png" />
<meta name="description" content="your one-stop shop for all things sor." />
<meta name="keywords" content="heikadog, heika, music, producer, furry" />
<meta name="twitter:card" content="summary" />
<meta name="twitter:image" content="https://heika.dog/assets/favicon.png" />
<meta name="twitter:creator" content="@hkadogs" />
{redirect && (
<>
<meta http-equiv="refresh" content={`2; url = ${redirect.url}`} />
</>
)}
</NextHead>
)
}
export default Head

19
lib/constants.js Normal file
View file

@ -0,0 +1,19 @@
const consts = {
socials: {
spotify: "https://open.spotify.com/playlist/52m7Bk2Lo0qGvzdn9Ecyjx?si=cba9a3a596a746d6",
soundcloud: "https://soundcloud.com/heikadog",
twitter: "https://twitter.com/heikadog",
discord: "https://discordapp.com/users/319164759478108170",
bandcamp: "https://heikadog.bandcamp.com/",
twitch: "https://twitch.tv/heikadog",
mail: "mailto:email@heika.dog",
teespring: "https://club-siberian.creator-spring.com/"
},
music: {
special: "https://heikadog.bandcamp.com/album/specialty-endeavors",
sleepydogs: "https://distrokid.com/hyperfollow/heikadog/songs-for-dogs-to-sleep-to-ambient-2"
}
}
module.exports = consts
module.default = consts

12
lib/socialRewrites.js Normal file
View file

@ -0,0 +1,12 @@
const c = require('./constants')
const SocialRewrites = Object.keys(c.socials)
.map(b => {
return {
source: `/${b}`,
destination: `/socials/${b}`
}
})
module.exports = SocialRewrites

16
next.config.js Normal file
View file

@ -0,0 +1,16 @@
// https://distrokid.com/hyperfollow/heikadog/songs-for-dogs-to-sleep-to-ambient-2module.exports = {
const SocialRewrites = require("./lib/socialRewrites.js")
module.exports = {
// ... rest of the configuration.
output: 'standalone',
rewrites: async function () {
return [
{
source: "/favicon.ico",
destination: "/assets/favicon.png"
},
...SocialRewrites
]
}
}

View file

@ -0,0 +1,36 @@
import constants from "lib/constants";
import Head from "components/Head";
import styles from "../../styles/Index.module.sass";
const Social = (props) => {
return (
<>
<Head redirect={props} />
<div className={styles.center}>
<p className={styles.name}>
{props.site}
</p>
</div>
</>
);
};
export async function getStaticPaths() {
let socials = Object.keys(constants.socials).map(a => `/socials/${a}`)
return {
paths: [...socials],
fallback: false
}
}
export async function getStaticProps({ params }) {
return {
props: {
site: params.social,
url: constants.socials[params.social]
}
}
}
export default Social;

BIN
public/assets/Avatar.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB