more changes
This commit is contained in:
		
							parent
							
								
									19157d2e09
								
							
						
					
					
						commit
						1fe1bef1a9
					
				
					 10 changed files with 210 additions and 0 deletions
				
			
		
							
								
								
									
										7
									
								
								.dockerignore
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.dockerignore
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | ||||||
|  | Dockerfile | ||||||
|  | .dockerignore | ||||||
|  | node_modules | ||||||
|  | npm-debug.log | ||||||
|  | README.md | ||||||
|  | .next | ||||||
|  | .git | ||||||
							
								
								
									
										57
									
								
								Dockerfile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								Dockerfile
									
										
									
									
									
										Normal 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
									
								
							
							
						
						
									
										15
									
								
								components/Credits.tsx
									
										
									
									
									
										Normal 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
									
								
							
							
						
						
									
										48
									
								
								components/Head.tsx
									
										
									
									
									
										Normal 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
									
								
							
							
						
						
									
										19
									
								
								lib/constants.js
									
										
									
									
									
										Normal 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
									
								
							
							
						
						
									
										12
									
								
								lib/socialRewrites.js
									
										
									
									
									
										Normal 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
									
								
							
							
						
						
									
										16
									
								
								next.config.js
									
										
									
									
									
										Normal 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 | ||||||
|  |         ] | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										36
									
								
								pages/socials/[social].tsx
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								pages/socials/[social].tsx
									
										
									
									
									
										Normal 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
									
								
							
							
						
						
									
										
											BIN
										
									
								
								public/assets/Avatar.png
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 238 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/assets/website_background.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								public/assets/website_background.png
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.2 MiB | 
		Loading…
	
	Add table
		
		Reference in a new issue