diff --git a/src/photo/PhotosLargeInfinite.tsx b/src/photo/PhotosLargeInfinite.tsx
index 8309d6a0..1b2b72b9 100644
--- a/src/photo/PhotosLargeInfinite.tsx
+++ b/src/photo/PhotosLargeInfinite.tsx
@@ -1,6 +1,6 @@
'use client';
-import { PATH_FEED_INFERRED } from '@/site/paths';
+import { PATH_FEED_INFERRED } from '@/app-core/paths';
import InfinitePhotoScroll from './InfinitePhotoScroll';
import PhotosLarge from './PhotosLarge';
diff --git a/src/photo/StaggeredOgPhotosInfinite.tsx b/src/photo/StaggeredOgPhotosInfinite.tsx
index f568bbc3..2d9de205 100644
--- a/src/photo/StaggeredOgPhotosInfinite.tsx
+++ b/src/photo/StaggeredOgPhotosInfinite.tsx
@@ -1,6 +1,6 @@
'use client';
-import { PATH_OG } from '@/site/paths';
+import { PATH_OG } from '@/app-core/paths';
import InfinitePhotoScroll from './InfinitePhotoScroll';
import StaggeredOgPhotos from './StaggeredOgPhotos';
diff --git a/src/photo/UploadPageClient.tsx b/src/photo/UploadPageClient.tsx
index 27e612d8..e8355af3 100644
--- a/src/photo/UploadPageClient.tsx
+++ b/src/photo/UploadPageClient.tsx
@@ -1,7 +1,7 @@
'use client';
import AdminChildPage from '@/components/AdminChildPage';
-import { PATH_ADMIN_UPLOADS } from '@/site/paths';
+import { PATH_ADMIN_UPLOADS } from '@/app-core/paths';
import { PhotoFormData, generateTakenAtFields } from './form';
import PhotoForm from './form/PhotoForm';
import { Tags } from '@/tag';
diff --git a/src/photo/actions.ts b/src/photo/actions.ts
index 86bc203a..ed728cd3 100644
--- a/src/photo/actions.ts
+++ b/src/photo/actions.ts
@@ -33,7 +33,7 @@ import {
PATH_ADMIN_TAGS,
PATH_ROOT,
pathForPhoto,
-} from '@/site/paths';
+} from '@/app-core/paths';
import { blurImageFromUrl, extractImageDataFromBlobPath } from './server';
import { TAG_FAVS, isTagFavs } from '@/tag';
import { convertPhotoToPhotoDbInsert, Photo } from '.';
@@ -44,7 +44,7 @@ import {
AI_TEXT_AUTO_GENERATED_FIELDS,
AI_TEXT_GENERATION_ENABLED,
BLUR_ENABLED,
-} from '@/site/config';
+} from '@/app-core/config';
import { generateAiImageQueries } from './ai/server';
import { createStreamableValue } from 'ai/rsc';
import { convertUploadToPhoto } from './storage';
diff --git a/src/photo/cache.ts b/src/photo/cache.ts
index 6452d8f6..4d3c3fa8 100644
--- a/src/photo/cache.ts
+++ b/src/photo/cache.ts
@@ -31,7 +31,7 @@ import {
PREFIX_FILM_SIMULATION,
PREFIX_TAG,
pathForPhoto,
-} from '@/site/paths';
+} from '@/app-core/paths';
import { createLensKey } from '@/lens';
// Table key
diff --git a/src/photo/data.ts b/src/photo/data.ts
index fa674b4a..47837a3f 100644
--- a/src/photo/data.ts
+++ b/src/photo/data.ts
@@ -8,7 +8,7 @@ import {
getUniqueFilmSimulations,
getUniqueTags,
} from '@/photo/db/query';
-import { SHOW_FILM_SIMULATIONS } from '@/site/config';
+import { SHOW_FILM_SIMULATIONS } from '@/app-core/config';
import { sortTagsObject } from '@/tag';
export const getPhotoSidebarData = () => [
diff --git a/src/photo/db/index.ts b/src/photo/db/index.ts
index e150a538..72ba97a8 100644
--- a/src/photo/db/index.ts
+++ b/src/photo/db/index.ts
@@ -1,4 +1,4 @@
-import { PRIORITY_ORDER_ENABLED } from '@/site/config';
+import { PRIORITY_ORDER_ENABLED } from '@/app-core/config';
import { parameterize } from '@/utility/string';
import { PhotoSetCategory } from '..';
diff --git a/src/photo/db/query.ts b/src/photo/db/query.ts
index f4177276..8936060a 100644
--- a/src/photo/db/query.ts
+++ b/src/photo/db/query.ts
@@ -14,7 +14,7 @@ import {
import { Cameras, createCameraKey } from '@/camera';
import { Tags } from '@/tag';
import { FilmSimulation, FilmSimulations } from '@/simulation';
-import { ADMIN_SQL_DEBUG_ENABLED } from '@/site/config';
+import { ADMIN_SQL_DEBUG_ENABLED } from '@/app-core/config';
import {
GetPhotosOptions,
getLimitAndOffsetFromOptions,
diff --git a/src/photo/form/PhotoForm.tsx b/src/photo/form/PhotoForm.tsx
index 5b480509..d132021a 100644
--- a/src/photo/form/PhotoForm.tsx
+++ b/src/photo/form/PhotoForm.tsx
@@ -15,7 +15,7 @@ import { createPhotoAction, updatePhotoAction } from '../actions';
import SubmitButtonWithStatus from '@/components/SubmitButtonWithStatus';
import Link from 'next/link';
import { clsx } from 'clsx/lite';
-import { PATH_ADMIN_PHOTOS, PATH_ADMIN_UPLOADS } from '@/site/paths';
+import { PATH_ADMIN_PHOTOS, PATH_ADMIN_UPLOADS } from '@/app-core/paths';
import { toastSuccess, toastWarning } from '@/toast';
import { getDimensionsFromSize } from '@/utility/size';
import ImageWithFallback from '@/components/image/ImageWithFallback';
@@ -27,7 +27,7 @@ import usePreventNavigation from '@/utility/usePreventNavigation';
import { useAppState } from '@/state/AppState';
import UpdateBlurDataButton from '../UpdateBlurDataButton';
import { getNextImageUrlForManipulation } from '@/services/next-image';
-import { BLUR_ENABLED, IS_PREVIEW } from '@/site/config';
+import { BLUR_ENABLED, IS_PREVIEW } from '@/app-core/config';
import { PhotoDbInsert } from '..';
import ErrorNote from '@/components/ErrorNote';
diff --git a/src/photo/form/index.ts b/src/photo/form/index.ts
index 58711d2d..571b3c2e 100644
--- a/src/photo/form/index.ts
+++ b/src/photo/form/index.ts
@@ -21,7 +21,7 @@ import {
MAKE_FUJIFILM,
} from '@/vendors/fujifilm';
import { FilmSimulation } from '@/simulation';
-import { GEO_PRIVACY_ENABLED } from '@/site/config';
+import { GEO_PRIVACY_ENABLED } from '@/app-core/config';
import { TAG_FAVS, getValidationMessageForTags } from '@/tag';
type VirtualFields = 'favorite';
diff --git a/src/photo/index.ts b/src/photo/index.ts
index e58a38db..cf4ec16d 100644
--- a/src/photo/index.ts
+++ b/src/photo/index.ts
@@ -3,8 +3,12 @@ import { formatFocalLength } from '@/focal';
import { Lens } from '@/lens';
import { getNextImageUrlForRequest } from '@/services/next-image';
import { FilmSimulation } from '@/simulation';
-import { HIGH_DENSITY_GRID, IS_PREVIEW, SHOW_EXIF_DATA } from '@/site/config';
-import { ABSOLUTE_PATH_FOR_HOME_IMAGE } from '@/site/paths';
+import {
+ HIGH_DENSITY_GRID,
+ IS_PREVIEW,
+ SHOW_EXIF_DATA,
+} from '@/app-core/config';
+import { ABSOLUTE_PATH_FOR_HOME_IMAGE } from '@/app-core/paths';
import { formatDate, formatDateFromPostgresString } from '@/utility/date';
import {
formatAperture,
diff --git a/src/photo/server.ts b/src/photo/server.ts
index 3708395a..4b1d9233 100644
--- a/src/photo/server.ts
+++ b/src/photo/server.ts
@@ -11,7 +11,10 @@ import { ExifData, ExifParserFactory } from 'ts-exif-parser';
import { PhotoFormData } from './form';
import { FilmSimulation } from '@/simulation';
import sharp, { Sharp } from 'sharp';
-import { GEO_PRIVACY_ENABLED, PRESERVE_ORIGINAL_UPLOADS } from '@/site/config';
+import {
+ GEO_PRIVACY_ENABLED,
+ PRESERVE_ORIGINAL_UPLOADS,
+} from '@/app-core/config';
const IMAGE_WIDTH_RESIZE = 200;
const IMAGE_WIDTH_BLUR = 200;
diff --git a/src/services/next-image.ts b/src/services/next-image.ts
index 682130d1..93f8e7a2 100644
--- a/src/services/next-image.ts
+++ b/src/services/next-image.ts
@@ -2,7 +2,7 @@ import {
BASE_URL,
VERCEL_BYPASS_KEY,
VERCEL_BYPASS_SECRET,
-} from '@/site/config';
+} from '@/app-core/config';
// Explicity defined next.config.js `imageSizes`
type NextCustomSize = 200;
diff --git a/src/services/openai.ts b/src/services/openai.ts
index 72d33a94..7ef64c83 100644
--- a/src/services/openai.ts
+++ b/src/services/openai.ts
@@ -3,7 +3,7 @@ import { createStreamableValue } from 'ai/rsc';
import { createOpenAI } from '@ai-sdk/openai';
import { kv } from '@vercel/kv';
import { Ratelimit } from '@upstash/ratelimit';
-import { AI_TEXT_GENERATION_ENABLED, HAS_VERCEL_KV } from '@/site/config';
+import { AI_TEXT_GENERATION_ENABLED, HAS_VERCEL_KV } from '@/app-core/config';
import { removeBase64Prefix } from '@/utility/image';
import { cleanUpAiTextResponse } from '@/photo/ai';
diff --git a/src/services/postgres.ts b/src/services/postgres.ts
index 27d1fd3c..439e56ab 100644
--- a/src/services/postgres.ts
+++ b/src/services/postgres.ts
@@ -1,4 +1,4 @@
-import { POSTGRES_SSL_ENABLED } from '@/site/config';
+import { POSTGRES_SSL_ENABLED } from '@/app-core/config';
import { Pool, QueryResult, QueryResultRow } from 'pg';
const pool = new Pool({
diff --git a/src/services/storage/index.ts b/src/services/storage/index.ts
index e773b3b9..364c4ba6 100644
--- a/src/services/storage/index.ts
+++ b/src/services/storage/index.ts
@@ -19,7 +19,7 @@ import {
HAS_AWS_S3_STORAGE,
HAS_VERCEL_BLOB_STORAGE,
HAS_CLOUDFLARE_R2_STORAGE,
-} from '@/site/config';
+} from '@/app-core/config';
import { generateNanoid } from '@/utility/nanoid';
import {
CLOUDFLARE_R2_BASE_URL_PUBLIC,
@@ -29,7 +29,7 @@ import {
cloudflareR2Put,
isUrlFromCloudflareR2,
} from './cloudflare-r2';
-import { PATH_API_PRESIGNED_URL } from '@/site/paths';
+import { PATH_API_PRESIGNED_URL } from '@/app-core/paths';
export const generateStorageId = () => generateNanoid(16);
diff --git a/src/services/storage/vercel-blob.ts b/src/services/storage/vercel-blob.ts
index 1955488b..6abfefb5 100644
--- a/src/services/storage/vercel-blob.ts
+++ b/src/services/storage/vercel-blob.ts
@@ -1,4 +1,4 @@
-import { PATH_API_VERCEL_BLOB_UPLOAD } from '@/site/paths';
+import { PATH_API_VERCEL_BLOB_UPLOAD } from '@/app-core/paths';
import { copy, del, list, put } from '@vercel/blob';
import { upload } from '@vercel/blob/client';
import { fileNameForStorageUrl } from '.';
diff --git a/src/share/ShareModal.tsx b/src/share/ShareModal.tsx
index d1768da9..6301a07a 100644
--- a/src/share/ShareModal.tsx
+++ b/src/share/ShareModal.tsx
@@ -8,7 +8,7 @@ import { JSX, ReactNode, useEffect } from 'react';
import { shortenUrl } from '@/utility/url';
import { toastSuccess } from '@/toast';
import { PiXLogo } from 'react-icons/pi';
-import { SHOW_SOCIAL } from '@/site/config';
+import { SHOW_SOCIAL } from '@/app-core/config';
import { generateXPostText } from '@/utility/social';
import { useAppState } from '@/state/AppState';
import useOnPathChange from '@/utility/useOnPathChange';
diff --git a/src/share/index.ts b/src/share/index.ts
index 5642d168..fabc9f01 100644
--- a/src/share/index.ts
+++ b/src/share/index.ts
@@ -5,7 +5,7 @@ import {
absolutePathForFocalLengthImage,
absolutePathForPhotoImage,
absolutePathForTagImage,
-} from '@/site/paths';
+} from '@/app-core/paths';
export type ShareModalProps = Omit
& {
photo?: Photo
diff --git a/src/simulation/FilmSimulationOGTile.tsx b/src/simulation/FilmSimulationOGTile.tsx
index 1233a3e4..1f894877 100644
--- a/src/simulation/FilmSimulationOGTile.tsx
+++ b/src/simulation/FilmSimulationOGTile.tsx
@@ -2,7 +2,7 @@ import { Photo, PhotoDateRange } from '@/photo';
import {
absolutePathForFilmSimulationImage,
pathForFilmSimulation,
-} from '@/site/paths';
+} from '@/app-core/paths';
import OGTile from '@/components/OGTile';
import {
FilmSimulation,
diff --git a/src/simulation/FilmSimulationShareModal.tsx b/src/simulation/FilmSimulationShareModal.tsx
index a1c64012..e8ca9691 100644
--- a/src/simulation/FilmSimulationShareModal.tsx
+++ b/src/simulation/FilmSimulationShareModal.tsx
@@ -1,4 +1,4 @@
-import { absolutePathForFilmSimulation } from '@/site/paths';
+import { absolutePathForFilmSimulation } from '@/app-core/paths';
import { PhotoSetAttributes } from '../photo';
import ShareModal from '@/share/ShareModal';
import FilmSimulationOGTile from './FilmSimulationOGTile';
diff --git a/src/simulation/PhotoFilmSimulation.tsx b/src/simulation/PhotoFilmSimulation.tsx
index bd7ee7dc..f85e5fc4 100644
--- a/src/simulation/PhotoFilmSimulation.tsx
+++ b/src/simulation/PhotoFilmSimulation.tsx
@@ -1,6 +1,6 @@
import { labelForFilmSimulation } from '@/vendors/fujifilm';
import PhotoFilmSimulationIcon from './PhotoFilmSimulationIcon';
-import { pathForFilmSimulation } from '@/site/paths';
+import { pathForFilmSimulation } from '@/app-core/paths';
import { FilmSimulation } from '.';
import EntityLink, {
EntityLinkExternalProps,
diff --git a/src/simulation/index.ts b/src/simulation/index.ts
index 51b63dbd..5293848d 100644
--- a/src/simulation/index.ts
+++ b/src/simulation/index.ts
@@ -7,7 +7,7 @@ import {
import {
absolutePathForFilmSimulation,
absolutePathForFilmSimulationImage,
-} from '@/site/paths';
+} from '@/app-core/paths';
import {
FujifilmSimulation,
labelForFilmSimulation,
diff --git a/src/site/SiteChecklist.tsx b/src/site/SiteChecklist.tsx
deleted file mode 100644
index 935d0f9c..00000000
--- a/src/site/SiteChecklist.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import { Suspense } from 'react';
-import { CONFIG_CHECKLIST_STATUS } from '@/site/config';
-import SiteChecklistServer from './SiteChecklistServer';
-import SiteChecklistClient from './SiteChecklistClient';
-
-export default function SiteChecklist({
- simplifiedView,
-}: {
- simplifiedView?: boolean
-}) {
- return (
- }>
-
-
- );
-}
diff --git a/src/state/AppStateProvider.tsx b/src/state/AppStateProvider.tsx
index 39e7382e..3a675954 100644
--- a/src/state/AppStateProvider.tsx
+++ b/src/state/AppStateProvider.tsx
@@ -10,7 +10,7 @@ import {
HIGH_DENSITY_GRID,
MATTE_PHOTOS,
SHOW_ZOOM_CONTROLS,
-} from '@/site/config';
+} from '@/app-core/config';
import { getPhotosHiddenMetaCachedAction } from '@/photo/actions';
import { ShareModalProps } from '@/share';
import { storeTimezoneCookie } from '@/utility/timezone';
diff --git a/src/tag/FavsTag.tsx b/src/tag/FavsTag.tsx
index 60f76ced..d8df8183 100644
--- a/src/tag/FavsTag.tsx
+++ b/src/tag/FavsTag.tsx
@@ -1,6 +1,6 @@
import { FaStar } from 'react-icons/fa';
import { TAG_FAVS } from '.';
-import { pathForTag } from '@/site/paths';
+import { pathForTag } from '@/app-core/paths';
import { clsx } from 'clsx/lite';
import EntityLink, {
EntityLinkExternalProps,
diff --git a/src/tag/HiddenTag.tsx b/src/tag/HiddenTag.tsx
index 9727abff..c9176bea 100644
--- a/src/tag/HiddenTag.tsx
+++ b/src/tag/HiddenTag.tsx
@@ -1,5 +1,5 @@
import { TAG_HIDDEN } from '.';
-import { pathForTag } from '@/site/paths';
+import { pathForTag } from '@/app-core/paths';
import EntityLink, {
EntityLinkExternalProps,
} from '@/components/primitives/EntityLink';
diff --git a/src/tag/PhotoTag.tsx b/src/tag/PhotoTag.tsx
index fb4acbf5..8ffd6657 100644
--- a/src/tag/PhotoTag.tsx
+++ b/src/tag/PhotoTag.tsx
@@ -1,4 +1,4 @@
-import { pathForTag } from '@/site/paths';
+import { pathForTag } from '@/app-core/paths';
import { FaTag } from 'react-icons/fa';
import { formatTag } from '.';
import EntityLink, {
diff --git a/src/tag/TagForm.tsx b/src/tag/TagForm.tsx
index 30608287..bad08222 100644
--- a/src/tag/TagForm.tsx
+++ b/src/tag/TagForm.tsx
@@ -2,7 +2,7 @@
import SubmitButtonWithStatus from '@/components/SubmitButtonWithStatus';
import Link from 'next/link';
-import { PATH_ADMIN_TAGS } from '@/site/paths';
+import { PATH_ADMIN_TAGS } from '@/app-core/paths';
import FieldSetWithStatus from '@/components/FieldSetWithStatus';
import { ReactNode, useMemo, useState } from 'react';
import { renamePhotoTagGloballyAction } from '@/photo/actions';
diff --git a/src/tag/TagOGTile.tsx b/src/tag/TagOGTile.tsx
index e3295ea8..4026fb05 100644
--- a/src/tag/TagOGTile.tsx
+++ b/src/tag/TagOGTile.tsx
@@ -1,5 +1,5 @@
import { Photo, PhotoDateRange } from '@/photo';
-import { absolutePathForTagImage, pathForTag } from '@/site/paths';
+import { absolutePathForTagImage, pathForTag } from '@/app-core/paths';
import OGTile from '@/components/OGTile';
import { descriptionForTaggedPhotos, titleForTag } from '.';
diff --git a/src/tag/TagShareModal.tsx b/src/tag/TagShareModal.tsx
index 5d7f9250..b0223bf6 100644
--- a/src/tag/TagShareModal.tsx
+++ b/src/tag/TagShareModal.tsx
@@ -1,4 +1,4 @@
-import { absolutePathForTag } from '@/site/paths';
+import { absolutePathForTag } from '@/app-core/paths';
import { PhotoSetAttributes } from '../photo';
import ShareModal from '@/share/ShareModal';
import TagOGTile from './TagOGTile';
diff --git a/src/tag/index.ts b/src/tag/index.ts
index aafa1c72..447ee702 100644
--- a/src/tag/index.ts
+++ b/src/tag/index.ts
@@ -8,7 +8,7 @@ import {
absolutePathForTag,
absolutePathForTagImage,
getPathComponents,
-} from '@/site/paths';
+} from '@/app-core/paths';
import {
capitalizeWords,
convertStringToArray,
diff --git a/src/site/useMetaThemeColor.ts b/src/utility/useMetaThemeColor.ts
similarity index 100%
rename from src/site/useMetaThemeColor.ts
rename to src/utility/useMetaThemeColor.ts
diff --git a/src/utility/vercel.ts b/src/utility/vercel.ts
index fd788f11..0986f6bc 100644
--- a/src/utility/vercel.ts
+++ b/src/utility/vercel.ts
@@ -2,7 +2,7 @@ import {
IS_PREVIEW,
VERCEL_BYPASS_KEY,
VERCEL_BYPASS_SECRET,
-} from '@/site/config';
+} from '@/app-core/config';
export const fetchWithBypass: typeof fetch = (url, options) =>
IS_PREVIEW && VERCEL_BYPASS_SECRET