From 21599de179178381071aabf1eb9a55931eadbcc4 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 26 Sep 2026 16:07:47 +0000 Subject: [PATCH 1/3] feat(frontend): name the app in the tab and add its own favicon The browser tab read "frontend" (the Vite template default) and the favicon was Vite's logo. Title the page "Lead Management", replace the favicon with a simple funnel mark in the app's blue (#2563eb), and add an apple-touch-icon, theme-color and description. Remove the unused template leftover public/icons.svg. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018oMHDqDASywmwc7ncmxtCY --- frontend/index.html | 5 ++++- frontend/public/apple-touch-icon.png | Bin 0 -> 1524 bytes frontend/public/favicon.svg | 6 +++++- frontend/public/icons.svg | 24 ------------------------ 4 files changed, 9 insertions(+), 26 deletions(-) create mode 100644 frontend/public/apple-touch-icon.png delete mode 100644 frontend/public/icons.svg diff --git a/frontend/index.html b/frontend/index.html index 8fc97c8..f5fdced 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -3,8 +3,11 @@ + + + - frontend + Lead Management
diff --git a/frontend/public/apple-touch-icon.png b/frontend/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a436c558846e89540b2c8db701c1596ace66cf4e GIT binary patch literal 1524 zcmciC`&ZI;7zc376!Su+PD@EeYbR&c@z?}MX-o3bj5ReAP%Er-6AoyJSHxyU&Piq$ zw^CVaX+~L4e8nTmR0zcjnUN5d1f9~nfTk#lGW;L5{qT7{=e*8y&hz~8yvvTDBOPqr zZ9yQALv$1>*8D$Rdp7ILmGkJzX%NV&F&g!4d~VI;o5Q5|qfqgT^Qnxadmfrs!y4QX zm*}L&WKHLFk5v4N7oce8iijNiJ-lqOcxJ;*7oQ_`qF?~v+Q<(Cg{RfmMw+;G&Qp)9 zveE`jHOnh}(Aj~R-gDC9W-roVT5n7ZXyf=Zjsf$t2%1f3`nfrYpQU5ur zg)?)`;JSR{mEz^kA8Q9BSh#&s4I=nf+q-H{>MYyRVj1)B9Ft1jCv^NslVZ6!={$Vd z`pF(fH$=kl7dlRjPEQ{CIF`;GzO%6hA~y3^D5uY*E6c~Rq}nF14Fy3#!Roqc^P>h% zU}(!0T^MC21p&LiNZN3mnxmO5?4x->6zApa3v#u1aQZ@*uk1QEorY;+-+65LBNDOE z&F!izUu(E6iSX^b%ZF2JC@vK54vXE)Jv&!q`?C12$8RjDMF5F@B63q9c`op!s70Tl z6`R66t`J8dFy6a~APM_3PD^z*1my1oGL=O-;Ty1=RCm8t@XCIBDh{Xsr;UhCdi~yB z$oYmgG|0*jD9#XjAz}Xd+zHm8z0~2T_N~82R8AZUR+0_a@wxV~srl)0@%{dU4{p1G zZL^Fm3ONwEu z6c`~6;Hq%zq=YK6{Qacch{thyzV6A!A|$kq}22Wt8cEg7Tf~1;S!^gAmNS-Mgnc6Ymn6( z@a%@mi|TMF?jbpy$H8XKv`cTCELTX>yRyF2#MRgvFCo!)$cDaGWuZFXB}7H%>92GB zrvJV?rrBd#t&DF(Gv*i@r+hFkM&ATE}K_F}P@POT!Pmz4Uz$f{M<{bT93t zIE{gkJHdz-Tpk_9LV-`|Xbm23y3EUPEZ?7~IGRy<~ zB8K2MPo8Oc3 \ No newline at end of file + + Lead Management + + + diff --git a/frontend/public/icons.svg b/frontend/public/icons.svg deleted file mode 100644 index e952219..0000000 --- a/frontend/public/icons.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - From bded79588694440e9bddaae7fe14105aeaea81e2 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 26 Sep 2026 16:09:44 +0000 Subject: [PATCH 2/3] test(frontend): type the fake leads endpoint's config as AxiosRequestConfig The paginated fake in LeadListPage.test.tsx declared its config parameter as { params?: Record }, narrower than axios's own signature. Newer axios (1.20, in Dependabot's frontend group) types params as unknown, so tsc -b rejected the mock and the Frontend check failed on that PR. Accept AxiosRequestConfig and narrow params inside. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018oMHDqDASywmwc7ncmxtCY --- frontend/src/pages/leads/LeadListPage.test.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/frontend/src/pages/leads/LeadListPage.test.tsx b/frontend/src/pages/leads/LeadListPage.test.tsx index 4563c93..99f6af0 100644 --- a/frontend/src/pages/leads/LeadListPage.test.tsx +++ b/frontend/src/pages/leads/LeadListPage.test.tsx @@ -1,7 +1,7 @@ import { screen, waitFor, within } from "@testing-library/react" import userEvent from "@testing-library/user-event" import { AxiosError } from "axios" -import type { AxiosResponse } from "axios" +import type { AxiosRequestConfig, AxiosResponse } from "axios" import { describe, expect, it, vi } from "vitest" import api from "../../api/axios" @@ -15,9 +15,10 @@ function renderList(url = "/leads") { // Fake paginated endpoint over `total` leads, 20 per page, mirroring DRF function paginatedLeads(total: number) { - return vi.spyOn(api, "get").mockImplementation((_url: string, config?: { params?: Record }) => { - const page = config?.params?.page ?? 1 - const size = config?.params?.page_size ?? 20 + return vi.spyOn(api, "get").mockImplementation((_url: string, config?: AxiosRequestConfig) => { + const params = config?.params as { page?: number; page_size?: number } | undefined + const page = params?.page ?? 1 + const size = params?.page_size ?? 20 const pages = Math.max(1, Math.ceil(total / size)) if (page > pages) { From a907ab788a2cc83ab3bda76d919d952a15e1d879 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 26 Sep 2026 16:10:37 +0000 Subject: [PATCH 3/3] ci(dependabot): skip TypeScript and @types/node major versions - TypeScript 7 is the native (Go) compiler without the JS compiler API; openapi-typescript 7.13 crashes under it ("Cannot read properties of undefined (reading 'createKeywordTypeNode')"), which broke type generation and the Frontend check on Dependabot's TypeScript 7 PR - @types/node should follow the Node version the app runs on (22 in CI and the Docker image), not the newest Node major Minor and patch updates for both still come through. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018oMHDqDASywmwc7ncmxtCY --- .github/dependabot.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 5002ad4..f90a162 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -33,5 +33,15 @@ updates: groups: frontend: update-types: [minor, patch] + ignore: + # TypeScript 7 (the native compiler) drops the JS compiler API that + # openapi-typescript uses to generate src/types/api.ts; revisit once + # openapi-typescript supports it + - dependency-name: typescript + update-types: ["version-update:semver-major"] + # Node's types should match the Node version the app runs on (CI and + # the Docker image use Node 22), not the newest Node release + - dependency-name: "@types/node" + update-types: ["version-update:semver-major"] commit-message: prefix: chore(frontend)