feat: customizable business branding (name, logo, colors) #63

Merged
ghost merged 5 commits from feat/business-branding into main 2026-03-19 11:07:07 +00:00
3 changed files with 38 additions and 2 deletions
Showing only changes of commit ae9afab5a5 - Show all commits
+1 -1
View File
@@ -32,7 +32,7 @@ export function BrandingProvider({ children }: { children: React.ReactNode }) {
fetch("/api/branding")
.then((r) => (r.ok ? r.json() : null))
.then((data) => {
if (data) setBranding(data);
if (data && typeof data.businessName === "string") setBranding(data);
})
.catch(() => {});
}, []);
+36
View File
@@ -13,6 +13,18 @@ beforeEach(() => {
json: async () => ({ authDisabled: false }),
} as Response);
}
if (url === "/api/branding") {
return Promise.resolve({
ok: true,
json: async () => ({
businessName: "GroomBook",
primaryColor: "#4f8a6f",
accentColor: "#8b7355",
logoBase64: null,
logoMimeType: null,
}),
} as Response);
}
return Promise.resolve({
ok: true,
json: async () => [],
@@ -100,6 +112,18 @@ describe("Dev login selector", () => {
}),
} as Response);
}
if (url === "/api/branding") {
return Promise.resolve({
ok: true,
json: async () => ({
businessName: "GroomBook",
primaryColor: "#4f8a6f",
accentColor: "#8b7355",
logoBase64: null,
logoMimeType: null,
}),
} as Response);
}
return Promise.resolve({ ok: true, json: async () => [] } as Response);
}) as unknown as typeof fetch;
@@ -125,6 +149,18 @@ describe("Dev login selector", () => {
json: async () => ({ authDisabled: true }),
} as Response);
}
if (url === "/api/branding") {
return Promise.resolve({
ok: true,
json: async () => ({
businessName: "GroomBook",
primaryColor: "#4f8a6f",
accentColor: "#8b7355",
logoBase64: null,
logoMimeType: null,
}),
} as Response);
}
return Promise.resolve({ ok: true, json: async () => [] } as Response);
}) as unknown as typeof fetch;
+1 -1
View File
@@ -10,7 +10,7 @@ interface SettingsForm {
}
export function SettingsPage() {
const { branding, refresh } = useBranding();
const { refresh } = useBranding();
const [form, setForm] = useState<SettingsForm>({
businessName: "",
primaryColor: "#4f8a6f",