Refine site meta observability

This commit is contained in:
Sam Becker 2025-06-03 18:30:25 -05:00
parent a063d0d29b
commit 34e6fdb6c2
6 changed files with 27 additions and 21 deletions

View File

@ -111,8 +111,8 @@ Application behavior can be changed by configuring the following environment var
#### Content #### Content
- `NEXT_PUBLIC_META_TITLE` (seen in search results and browser tab) - `NEXT_PUBLIC_META_TITLE` (seen in search results and browser tab)
- `NEXT_PUBLIC_META_DESCRIPTION` (seen in search results) - `NEXT_PUBLIC_META_DESCRIPTION` (seen in search results)
- `NEXT_PUBLIC_NAV_TITLE` (defaults to domain when not configured) - `NEXT_PUBLIC_NAV_TITLE` (seen in top-right navigation, defaults to domain when not configured)
- `NEXT_PUBLIC_NAV_CAPTION` (seen in navigation, beneath title) - `NEXT_PUBLIC_NAV_CAPTION` (seen in top-right navigation, beneath title)
- `NEXT_PUBLIC_PAGE_ABOUT` (seen in grid sidebar—accepts rich formatting tags: `<b>`, `<strong>`, `<i>`, `<em>`, `<u>`, `<br>`) - `NEXT_PUBLIC_PAGE_ABOUT` (seen in grid sidebar—accepts rich formatting tags: `<b>`, `<strong>`, `<i>`, `<em>`, `<u>`, `<br>`)
- `NEXT_PUBLIC_DOMAIN_SHARE` (seen in share modals where a shorter url may be desirable) - `NEXT_PUBLIC_DOMAIN_SHARE` (seen in share modals where a shorter url may be desirable)

View File

@ -6,9 +6,10 @@ import {
DEFAULT_THEME, DEFAULT_THEME,
PRESERVE_ORIGINAL_UPLOADS, PRESERVE_ORIGINAL_UPLOADS,
META_DESCRIPTION, META_DESCRIPTION,
NAV_TITLE_OR_DOMAIN, NAV_TITLE,
META_TITLE, META_TITLE,
HTML_LANG, HTML_LANG,
NAV_CAPTION,
} from '@/app/config'; } from '@/app/config';
import AppStateProvider from '@/state/AppStateProvider'; import AppStateProvider from '@/state/AppStateProvider';
import ToasterWithThemes from '@/toast/ToasterWithThemes'; import ToasterWithThemes from '@/toast/ToasterWithThemes';
@ -90,7 +91,10 @@ export default function RootLayout({
'mx-3 mb-3', 'mx-3 mb-3',
'lg:mx-6 lg:mb-6', 'lg:mx-6 lg:mb-6',
)}> )}>
<Nav navTitleOrDomain={NAV_TITLE_OR_DOMAIN} /> <Nav
navTitle={NAV_TITLE}
navCaption={NAV_CAPTION}
/>
<main> <main>
<ShareModals /> <ShareModals />
<RecipeModal /> <RecipeModal />

View File

@ -362,8 +362,8 @@ export default function AdminAppConfigurationClient({
status={hasNavTitle} status={hasNavTitle}
optional optional
> >
{hasNavTitle && renderContent(navTitle)} {renderContent(navTitle)}
Store in environment variable (replaces domain in nav): Store in environment variable (replaces domain in top-right nav):
{renderEnvVars(['NEXT_PUBLIC_NAV_TITLE'])} {renderEnvVars(['NEXT_PUBLIC_NAV_TITLE'])}
</ChecklistRow> </ChecklistRow>
<ChecklistRow <ChecklistRow
@ -372,7 +372,7 @@ export default function AdminAppConfigurationClient({
optional optional
> >
{hasNavCaption && renderContent(navCaption)} {hasNavCaption && renderContent(navCaption)}
Store in environment variable (seen in nav, under title): Store in environment variable (seen in top-right nav, under title):
{renderEnvVars(['NEXT_PUBLIC_NAV_CAPTION'])} {renderEnvVars(['NEXT_PUBLIC_NAV_CAPTION'])}
</ChecklistRow> </ChecklistRow>
<ChecklistRow <ChecklistRow

View File

@ -26,9 +26,11 @@ const NAV_HEIGHT_CLASS = NAV_CAPTION
: 'min-h-[4rem]'; : 'min-h-[4rem]';
export default function Nav({ export default function Nav({
navTitleOrDomain, navTitle,
navCaption,
}: { }: {
navTitleOrDomain: string; navTitle: string
navCaption?: string
}) { }) {
const ref = useRef<HTMLElement>(null); const ref = useRef<HTMLElement>(null);
@ -89,14 +91,14 @@ export default function Nav({
'translate-y-[-1px]', 'translate-y-[-1px]',
)}> )}>
<div className="truncate overflow-hidden select-none"> <div className="truncate overflow-hidden select-none">
{renderLink(navTitleOrDomain, PATH_ROOT)} {renderLink(navTitle, PATH_ROOT)}
</div> </div>
{NAV_CAPTION && {navCaption &&
<div className={clsx( <div className={clsx(
'hidden sm:block truncate overflow-hidden', 'hidden sm:block truncate overflow-hidden',
'leading-tight text-dim', 'leading-tight text-dim',
)}> )}>
{NAV_CAPTION} {navCaption}
</div>} </div>}
</div> </div>
</nav>] </nav>]

View File

@ -107,7 +107,7 @@ export const APP_LOCALE = (process.env.NEXT_PUBLIC_LOCALE || 'en-us')
.replace('_', '-'); .replace('_', '-');
export const HTML_LANG = (APP_LOCALE.split('-')[1] || 'en'); export const HTML_LANG = (APP_LOCALE.split('-')[1] || 'en');
export const NAV_TITLE = export const CUSTOM_NAV_TITLE =
process.env.NEXT_PUBLIC_NAV_TITLE; process.env.NEXT_PUBLIC_NAV_TITLE;
export const NAV_CAPTION = export const NAV_CAPTION =
@ -119,14 +119,14 @@ export const META_TITLE =
process.env.NEXT_PUBLIC_META_TITLE || process.env.NEXT_PUBLIC_META_TITLE ||
// Legacy environment variable // Legacy environment variable
process.env.NEXT_PUBLIC_SITE_TITLE || process.env.NEXT_PUBLIC_SITE_TITLE ||
NAV_TITLE || CUSTOM_NAV_TITLE ||
TEMPLATE_TITLE; TEMPLATE_TITLE;
export const IS_META_TITLE_CONFIGURED = export const IS_META_TITLE_CONFIGURED =
Boolean(process.env.NEXT_PUBLIC_META_TITLE) || Boolean(process.env.NEXT_PUBLIC_META_TITLE) ||
// Legacy environment variable // Legacy environment variable
Boolean(process.env.NEXT_PUBLIC_SITE_TITLE) || Boolean(process.env.NEXT_PUBLIC_SITE_TITLE) ||
Boolean(NAV_TITLE); Boolean(CUSTOM_NAV_TITLE);
export const IS_META_DESCRIPTION_CONFIGURED = export const IS_META_DESCRIPTION_CONFIGURED =
Boolean(process.env.NEXT_PUBLIC_META_DESCRIPTION) || Boolean(process.env.NEXT_PUBLIC_META_DESCRIPTION) ||
@ -135,10 +135,10 @@ export const IS_META_DESCRIPTION_CONFIGURED =
export const META_DESCRIPTION = export const META_DESCRIPTION =
process.env.NEXT_PUBLIC_META_DESCRIPTION || process.env.NEXT_PUBLIC_META_DESCRIPTION ||
NAV_CAPTION || NAV_CAPTION ||
SITE_DOMAIN; SITE_DOMAIN_SHORT;
export const NAV_TITLE_OR_DOMAIN = export const NAV_TITLE =
NAV_TITLE || CUSTOM_NAV_TITLE ||
SITE_DOMAIN_SHORT || SITE_DOMAIN_SHORT ||
META_TITLE; META_TITLE;
@ -361,7 +361,7 @@ export const APP_CONFIGURATION = {
metaDescription: META_DESCRIPTION, metaDescription: META_DESCRIPTION,
isMetaDescriptionConfigured: IS_META_DESCRIPTION_CONFIGURED, isMetaDescriptionConfigured: IS_META_DESCRIPTION_CONFIGURED,
navTitle: NAV_TITLE, navTitle: NAV_TITLE,
hasNavTitle: Boolean(NAV_TITLE), hasNavTitle: Boolean(CUSTOM_NAV_TITLE),
navCaption: NAV_CAPTION, navCaption: NAV_CAPTION,
hasNavCaption: Boolean(NAV_CAPTION), hasNavCaption: Boolean(NAV_CAPTION),
pageAbout: PAGE_ABOUT, pageAbout: PAGE_ABOUT,

View File

@ -1,4 +1,4 @@
import { NAV_TITLE_OR_DOMAIN } from '@/app/config'; import { NAV_TITLE } from '@/app/config';
import { Photo } from '../photo'; import { Photo } from '../photo';
import ImageCaption from './components/ImageCaption'; import ImageCaption from './components/ImageCaption';
import ImageContainer from './components/ImageContainer'; import ImageContainer from './components/ImageContainer';
@ -29,7 +29,7 @@ export default function HomeImageResponse({
width, width,
height, height,
fontFamily, fontFamily,
title: NAV_TITLE_OR_DOMAIN, title: NAV_TITLE,
}} /> }} />
</ImageContainer> </ImageContainer>
); );