diff --git a/__tests__/html.test.ts b/__tests__/html.test.ts
index 9468d976..d9eda9b1 100644
--- a/__tests__/html.test.ts
+++ b/__tests__/html.test.ts
@@ -1,5 +1,7 @@
-import { htmlHasBrParagraphBreaks, safelyParseFormattedHtml } from '@/utility/html';
-import { parameterize } from '@/utility/string';
+import {
+ htmlHasBrParagraphBreaks,
+ safelyParseFormattedHtml,
+} from '@/utility/html';
describe('HTML', () => {
it('safely parses', () => {
diff --git a/src/admin/github/GitHubForkStatusBadge.tsx b/src/admin/github/GitHubForkStatusBadge.tsx
index f4cb64f7..e9cd6263 100644
--- a/src/admin/github/GitHubForkStatusBadge.tsx
+++ b/src/admin/github/GitHubForkStatusBadge.tsx
@@ -1,14 +1,12 @@
import { Suspense } from 'react';
import GitHubForkStatusBadgeClient from './GitHubForkStatusBadgeClient';
import GitHubForkStatusBadgeServer from './GitHubForkStatusBadgeServer';
-import { IS_DEVELOPMENT, IS_VERCEL_GIT_PROVIDER_GITHUB } from '@/site/config';
+import { IS_DEVELOPMENT } from '@/site/config';
export default function GitHubForkStatusBadge() {
return IS_DEVELOPMENT
?
- : IS_VERCEL_GIT_PROVIDER_GITHUB
- ?
-
-
- : null;
+ :
+
+ ;
}
diff --git a/src/admin/github/GitHubForkStatusBadgeClient.tsx b/src/admin/github/GitHubForkStatusBadgeClient.tsx
index 7bf89811..eaf5323a 100644
--- a/src/admin/github/GitHubForkStatusBadgeClient.tsx
+++ b/src/admin/github/GitHubForkStatusBadgeClient.tsx
@@ -38,10 +38,11 @@ export default function GitHubForkStatusBadgeClient({
};
const className = clsx(
+ 'opacity-0 transition-opacity animate-fade-in',
'inline-flex items-center gap-2',
'border transition-colors',
url ? 'hover:underline' : 'select-none',
- 'pl-[4.5px] pr-2 py-[3px]',
+ 'pl-[4.5px] pr-2.5 py-[3px]',
'rounded-full shadow-sm',
classNameForStyle(),
);
diff --git a/src/admin/github/GitHubForkStatusBadgeServer.tsx b/src/admin/github/GitHubForkStatusBadgeServer.tsx
index 44bb8dc8..39669026 100644
--- a/src/admin/github/GitHubForkStatusBadgeServer.tsx
+++ b/src/admin/github/GitHubForkStatusBadgeServer.tsx
@@ -1,5 +1,6 @@
import GitHubForkStatusBadgeClient from './GitHubForkStatusBadgeClient';
import {
+ VERCEL_GIT_BRANCH,
VERCEL_GIT_REPO_OWNER,
VERCEL_GIT_REPO_SLUG,
} from '@/site/config';
@@ -8,29 +9,32 @@ import { getGitHubMeta } from '.';
export default async function GitHubForkStatusBadgeServer() {
const owner = VERCEL_GIT_REPO_OWNER;
const repo = VERCEL_GIT_REPO_SLUG;
-
+ const branch = VERCEL_GIT_BRANCH;
+
const {
url,
+ isForkedFromBase,
label,
title,
isBehind,
- } = await getGitHubMeta({ owner, repo })
+ } = await getGitHubMeta({ owner, repo, branch })
.catch(() => {
- console.log('Error getting GitHub meta', { owner, repo });
+ console.error('Error retrieving GitHub meta', { owner, repo, branch });
return {
url: undefined,
+ isForkedFromBase: false,
label: undefined,
title: undefined,
- isBehind: false,
+ isBehind: undefined,
};
});
- return (
-
- );
+ : null;
}
diff --git a/src/admin/github/index.ts b/src/admin/github/index.ts
index fe662cc8..fbad31d0 100644
--- a/src/admin/github/index.ts
+++ b/src/admin/github/index.ts
@@ -1,7 +1,10 @@
-import { VERCEL_BRANCH } from '@/site/config';
+import {
+ TEMPLATE_BASE_OWNER,
+ TEMPLATE_BASE_REPO,
+ TEMPLATE_BASE_BRANCH,
+} from '@/site/config';
-const BASE_OWNER = 'sambecker';
-const BASE_REPO = 'exif-photo-blog';
+const DEFAULT_BRANCH = 'main';
interface RepoParams {
owner?: string
@@ -9,31 +12,42 @@ interface RepoParams {
branch?: string
};
-// Urls
+// Website urls
const getGitHubRepoUrl = ({
- owner = BASE_OWNER,
- repo = BASE_REPO,
+ owner = TEMPLATE_BASE_OWNER,
+ repo = TEMPLATE_BASE_REPO,
}: RepoParams = {}) =>
`https://github.com/${owner}/${repo}`;
+export const getGitHubCompareUrl = ({
+ owner,
+ repo,
+ branch = DEFAULT_BRANCH,
+}: RepoParams = {}) =>
+ // eslint-disable-next-line max-len
+ `${getGitHubRepoUrl({ owner, repo })}/compare/${branch}...${TEMPLATE_BASE_OWNER}:${TEMPLATE_BASE_REPO}:${TEMPLATE_BASE_BRANCH}`;
+
+// API urls
+
const getGitHubApiRepoUrl = ({
- owner = BASE_OWNER,
- repo = BASE_REPO,
+ owner = TEMPLATE_BASE_OWNER,
+ repo = TEMPLATE_BASE_REPO,
}: RepoParams = {}) =>
`https://api.github.com/repos/${owner}/${repo}`;
const getGitHubApiCommitsUrl = (params?: RepoParams) =>
`${getGitHubApiRepoUrl(params)}/commits/main`;
-// Fetching
-
const getGitHubApiCompareUrl = ({
owner,
repo,
branch = 'main',
}: RepoParams = {}) =>
- `${getGitHubApiRepoUrl()}/compare/main...${owner}:${repo}:${branch}`;
+ // eslint-disable-next-line max-len
+ `${getGitHubApiRepoUrl()}/compare/${TEMPLATE_BASE_BRANCH}...${owner}:${repo}:${branch}`;
+
+// Requests
const getLatestBaseRepoCommitSha = async () => {
const response = await fetch(getGitHubApiCommitsUrl());
@@ -44,21 +58,21 @@ const getLatestBaseRepoCommitSha = async () => {
const getIsRepoForkedFromBase = async (params: RepoParams) => {
const response = await fetch(getGitHubApiRepoUrl(params));
const data = await response.json();
- return data.fork && data.source?.full_name === `${BASE_OWNER}/${BASE_REPO}`;
+ return (
+ Boolean(data.fork) &&
+ data.source?.full_name === `${TEMPLATE_BASE_OWNER}/${TEMPLATE_BASE_REPO}`
+ );
};
const getGitHubCommitsBehind = async (params?: RepoParams) => {
- const response = await fetch(getGitHubApiCompareUrl({
- ...params,
- branch: VERCEL_BRANCH,
- }));
+ const response = await fetch(getGitHubApiCompareUrl(params));
const data = await response.json();
return data.behind_by as number;
};
const isRepoBaseRepo = async ({ owner, repo }: RepoParams) =>
- owner?.toLowerCase() === BASE_OWNER &&
- repo?.toLowerCase() === BASE_REPO;
+ owner?.toLowerCase() === TEMPLATE_BASE_OWNER &&
+ repo?.toLowerCase() === TEMPLATE_BASE_REPO;
export const getGitHubMeta = async (params: RepoParams) => {
const [
diff --git a/src/site/config.ts b/src/site/config.ts
index a73b9a49..4be0edc7 100644
--- a/src/site/config.ts
+++ b/src/site/config.ts
@@ -3,23 +3,26 @@ import type { StorageType } from '@/services/storage';
import { makeUrlAbsolute, shortenUrl } from '@/utility/url';
// HARD-CODED GLOBAL CONFIGURATION
-
export const SHOULD_PREFETCH_ALL_LINKS: boolean | undefined = undefined;
export const SHOULD_DEBUG_SQL = false;
// META / SOURCE / DOMAINS
-
export const SITE_TITLE =
process.env.NEXT_PUBLIC_SITE_TITLE ||
'Photo Blog';
// SOURCE
+export const TEMPLATE_BASE_OWNER = 'sambecker';
+export const TEMPLATE_BASE_REPO = 'exif-photo-blog';
+export const TEMPLATE_BASE_BRANCH = 'main';
+
export const VERCEL_GIT_PROVIDER =
process.env.NEXT_PUBLIC_VERCEL_GIT_PROVIDER;
export const VERCEL_GIT_REPO_OWNER =
process.env.NEXT_PUBLIC_VERCEL_GIT_REPO_OWNER;
export const VERCEL_GIT_REPO_SLUG =
process.env.NEXT_PUBLIC_VERCEL_GIT_REPO_SLUG;
+export const VERCEL_GIT_BRANCH = process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_REF;
export const VERCEL_GIT_COMMIT_MESSAGE =
process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_MESSAGE;
export const VERCEL_GIT_COMMIT_SHA =
@@ -37,10 +40,9 @@ export const VERCEL_ENV = process.env.NEXT_PUBLIC_VERCEL_ENV;
export const VERCEL_PRODUCTION_URL = process.env.VERCEL_PROJECT_PRODUCTION_URL;
export const VERCEL_DEPLOYMENT_URL = process.env.NEXT_PUBLIC_VERCEL_URL;
export const VERCEL_BRANCH_URL = process.env.NEXT_PUBLIC_VERCEL_BRANCH_URL;
-export const VERCEL_BRANCH = process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_REF;
// Last resort: cannot be used reliably
-export const VERCEL_PROJECT_URL = VERCEL_BRANCH_URL && VERCEL_BRANCH
- ? `${VERCEL_BRANCH_URL.split(`-git-${VERCEL_BRANCH}-`)[0]}.vercel.app`
+export const VERCEL_PROJECT_URL = VERCEL_BRANCH_URL && VERCEL_GIT_BRANCH
+ ? `${VERCEL_BRANCH_URL.split(`-git-${VERCEL_GIT_BRANCH}-`)[0]}.vercel.app`
: undefined;
export const IS_PRODUCTION = process.env.NODE_ENV === 'production' && (
diff --git a/tailwind.config.js b/tailwind.config.js
index a728d01d..889d2572 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -29,7 +29,7 @@ module.exports = {
'rotate-pulse':
'rotate-pulse 0.75s linear infinite normal both running',
'fade-in':
- 'fade-in 0.5s linear',
+ 'fade-in 0.5s linear both running',
'hover-drift':
'hover-drift 8s linear infinite',
'hover-wobble':