fix(branding): render theme assets and dynamic metadata

This commit is contained in:
poyrazavsever
2026-07-17 21:56:29 +03:00
parent b603f260f8
commit ae370b4313
12 changed files with 28 additions and 15 deletions
+1 -1
View File
@@ -2,7 +2,7 @@ import { AnalyticsClient, type AnalyticsData } from "./analytics-client";
import { parseDashboardRange, resolveDashboardRange } from "@/server/services/analytics-range";
import { requireFreelancerBackend } from "@/server/web/freelancer";
export const metadata = { title: "Analizler - Neta" };
export const metadata = { title: "Analizler" };
export default async function AnalyticsPage({
searchParams,
+1 -1
View File
@@ -27,7 +27,7 @@ export default async function DashboardLayout({
return (
<DashboardShell
branding={{
applicationName: branding.applicationName,
applicationName: branding.organizationName ?? branding.applicationName,
organizationName: branding.organizationName,
lightLogoUrl: branding.lightLogoUrl,
darkLogoUrl: branding.darkLogoUrl,
+1 -1
View File
@@ -2,7 +2,7 @@ import { DashboardClient, type DashboardData } from "./dashboard-client";
import { parseDashboardRange, resolveDashboardRange } from "@/server/services/analytics-range";
import { requireFreelancerBackend } from "@/server/web/freelancer";
export const metadata = { title: "Dashboard - Neta" };
export const metadata = { title: "Dashboard" };
export default async function DashboardPage({
searchParams,
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

+2
View File
@@ -1,6 +1,8 @@
@import "tailwindcss";
@import "poyraz-ui/preset.css";
@custom-variant dark (&:where(.dark, .dark *));
@source "../app/**/*.{js,ts,jsx,tsx,mdx}";
@source "../components/**/*.{js,ts,jsx,tsx,mdx}";
@source "../config/**/*.{js,ts,jsx,tsx,mdx}";
+1 -1
View File
@@ -43,7 +43,7 @@ export default async function InvitationPage({
{query.error && query.message ? <ErrorToaster message={query.message} /> : null}
<AuthPageShell
branding={{
applicationName: branding.applicationName,
applicationName: branding.organizationName ?? branding.applicationName,
lightLogoUrl: branding.lightLogoUrl,
darkLogoUrl: branding.darkLogoUrl,
}}
+6 -1
View File
@@ -22,11 +22,16 @@ const colorModeScript = `(() => {
export function generateMetadata(): Metadata {
const branding = getPublicBranding();
const faviconUrl = branding.iconUrl ?? "/logo/iconLogo.png";
return {
title: { default: branding.applicationName, template: `%s · ${branding.applicationName}` },
description: "Self-hosted freelancer operating dashboard",
manifest: "/manifest.webmanifest",
icons: branding.iconUrl ? { icon: branding.iconUrl, apple: branding.iconUrl } : undefined,
icons: {
icon: [{ url: faviconUrl, type: "image/png" }],
shortcut: [{ url: faviconUrl, type: "image/png" }],
apple: [{ url: faviconUrl, type: "image/png" }],
},
appleWebApp: {
capable: true,
statusBarStyle: "default",
+1 -1
View File
@@ -23,7 +23,7 @@ export default async function LoginPage({
{error && message && <ErrorToaster message={String(message)} />}
<AuthPageShell
branding={{
applicationName: branding.applicationName,
applicationName: branding.organizationName ?? branding.applicationName,
lightLogoUrl: branding.lightLogoUrl,
darkLogoUrl: branding.darkLogoUrl,
}}
+2 -5
View File
@@ -6,7 +6,7 @@ export const dynamic = "force-dynamic";
export default function manifest(): MetadataRoute.Manifest {
const branding = getPublicBranding();
return {
name: branding.applicationName,
name: branding.organizationName ?? branding.applicationName,
short_name: branding.shortName,
description: "Self-hosted freelancer operating dashboard",
start_url: "/",
@@ -15,9 +15,6 @@ export default function manifest(): MetadataRoute.Manifest {
theme_color: branding.primaryColor,
icons: branding.iconUrl
? [{ src: branding.iconUrl, sizes: "any", type: "image/png" }]
: [
{ src: "/icons/icon-192x192.png", sizes: "192x192", type: "image/png" },
{ src: "/icons/icon-512x512.png", sizes: "512x512", type: "image/png" },
],
: [{ src: "/logo/iconLogo.png", sizes: "any", type: "image/png" }],
};
}
+1 -1
View File
@@ -30,7 +30,7 @@ export default async function PortalLayout({
return (
<PortalShell
branding={{
applicationName: branding.applicationName,
applicationName: branding.organizationName ?? branding.applicationName,
organizationName: branding.organizationName,
lightLogoUrl: branding.lightLogoUrl,
darkLogoUrl: branding.darkLogoUrl,
+1 -1
View File
@@ -40,7 +40,7 @@ export default async function RegisterPage({
{error && message && <ErrorToaster message={String(message)} />}
<AuthPageShell
branding={{
applicationName: branding.applicationName,
applicationName: branding.organizationName ?? branding.applicationName,
lightLogoUrl: branding.lightLogoUrl,
darkLogoUrl: branding.darkLogoUrl,
}}