Skip to content

Improve shared bill flows and add non-scan bill entry paths#20

Open
Aarekaz wants to merge 7 commits into
mainfrom
feat/non-scan-entry-flows
Open

Improve shared bill flows and add non-scan bill entry paths#20
Aarekaz wants to merge 7 commits into
mainfrom
feat/non-scan-entry-flows

Conversation

@Aarekaz
Copy link
Copy Markdown
Owner

@Aarekaz Aarekaz commented May 31, 2026

Summary

  • clarify shared-bill editing, syncing, and one-year sharing behavior
  • harden the admin dashboard handling around auth, pagination, and backend-supported sort keys
  • add first-class non-scan entry paths with scan, paste text, and manual quick-split / itemized bill starts

What changed

  • shared bills now make the forked-copy behavior more explicit, including clearer source indicators and updated sharing copy
  • bill title editing no longer triggers accidental ledger-name editing
  • shared bills now use a one-year expiry window instead of six months
  • the admin page handles expired sessions, empty states, fetch races, clamped pagination, and backend error messages more robustly
  • the starter flow now supports three visible entry points: Scan receipt, Paste order text, and Enter manually
  • Enter manually now opens either a quick total-split flow or a starter itemized bill flow
  • receipt import can now open directly into the text-paste path
  • local development now allows 127.0.0.1 as an allowed dev origin for hot reload

Verification

  • pnpm typecheck
  • pnpm test -- BillContext SharedBillUi ProBillSplitterTitleInput constants.test.ts app/admin/__tests__/page.test.tsx
  • pnpm test -- bill-start.test.ts BillContext
  • manual local browser smoke check of the new starter panel on 127.0.0.1:3000

Notes

  • uncommitted generated local files like next-env.d.ts and .playwright-cli/ were intentionally left out of the branch

@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented May 31, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
split-simple Ready Ready Preview, Comment Jun 2, 2026 3:49pm

@github-actions
Copy link
Copy Markdown

Coverage after merging feat/non-scan-entry-flows into main will be

52.33%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
app
   layout.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–87, 9
   page.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–51, 6–9
app/admin
   layout.tsx0%0%0%0%1, 1, 10–16, 2–9
   page.tsx81.25%67.16%24.24%83.52%1026–1028, 1078, 117, 1174–1175, 118–123, 126, 172–174, 185–186, 193–226, 229–236, 241–243, 265–267, 270, 272–276, 281–290, 298–327, 330–358, 361–394, 397–410, 413–416, 420, 431, 482, 542–543, 546, 570, 710, 713, 826–827, 863–865, 875–877, 907–909, 922–927, 966, 974–976, 987–989
app/api/admin/bills
   route.ts0%0%0%0%1, 1–9
app/api/admin/bills/[id]
   route.ts0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40, 5–9
app/api/admin/export
   route.ts0%0%0%0%1, 1–9
app/api/admin/login
   route.ts0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4–9
app/api/admin/logout
   route.ts0%0%0%0%1, 1, 10–19, 2–9
app/api/bills/[id]
   route.ts100%100%100%100%
app/api/receipt/scan
   route.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220, 23–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
app/b/[billId]
   page.tsx0%0%0%0%1, 1, 10, 2–9
app/og-image
   page.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–93
cloudflare/src
   bill-store.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220–229, 23, 230–236, 24–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
   worker.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220–229, 23, 230–239, 24, 240–249, 25, 250–259, 26, 260–269, 27, 270–279, 28, 280–289, 29, 290–299, 3, 30, 300–309, 31, 310–319, 32, 320–329, 33, 330–339, 34, 340–349, 35, 350–359, 36, 360–369, 37, 370–379, 38, 380–389, 39, 390–399, 4, 40, 400–409, 41, 410–419, 42, 420–429, 43, 430–439, 44, 440–449, 45, 450–459, 46, 460–469, 47, 470–479, 48, 480–489, 49, 490–499, 5, 50, 500–509, 51, 510–519, 52, 520–522, 53–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
components
   AddPersonForm.tsx92.02%88%100%92.54%35, 44–52, 89–91
   AnimatedNumber.tsx76.99%93.33%50%75%31–36, 62–80
   BillLookup.tsx9.13%100%0%9.17%100–229, 23, 230–239, 24, 240, 25–99
   BillSourceIndicator.tsx100%100%100%100%
   BillStartOptions.tsx74.85%44.44%18.18%77.78%107, 109–117, 123–163, 176–191, 194–229, 232–235, 238–239, 242–243, 255–258, 310–314, 48–50, 585, 591, 72–82, 85–94
   EmptyStates.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–91
   ErrorBoundary.tsx98.71%85.71%100%100%49–50
   ItemRow.tsx90.67%50%62.50%96.41%139, 166, 173, 178, 37, 37–38, 52–53, 56–57, 60–61, 78–79, 81, 87, 98
   MobileSpreadsheetView.tsx15.74%100%0%15.89%100–107, 18–99
   PersonChip.tsx82.05%16.67%50%91.09%46–49, 52–56, 65–69, 69, 73, 78, 81–82
   PersonSelector.tsx76.71%66.67%50%77.94%24–29, 31–40
   PostHogProvider.tsx0%0%0%0%1, 1, 10, 100–105, 11–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
   ProBillBreakdownView.tsx0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13,

@github-actions
Copy link
Copy Markdown

Coverage after merging feat/non-scan-entry-flows into main will be

52.40%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
app
   layout.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–87, 9
   page.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–51, 6–9
app/admin
   layout.tsx0%0%0%0%1, 1, 10–16, 2–9
   page.tsx81.25%67.16%24.24%83.52%1026–1028, 1078, 117, 1174–1175, 118–123, 126, 172–174, 185–186, 193–226, 229–236, 241–243, 265–267, 270, 272–276, 281–290, 298–327, 330–358, 361–394, 397–410, 413–416, 420, 431, 482, 542–543, 546, 570, 710, 713, 826–827, 863–865, 875–877, 907–909, 922–927, 966, 974–976, 987–989
app/api/admin/bills
   route.ts0%0%0%0%1, 1–9
app/api/admin/bills/[id]
   route.ts0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40, 5–9
app/api/admin/export
   route.ts0%0%0%0%1, 1–9
app/api/admin/login
   route.ts0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4–9
app/api/admin/logout
   route.ts0%0%0%0%1, 1, 10–19, 2–9
app/api/bills/[id]
   route.ts100%100%100%100%
app/api/receipt/scan
   route.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220, 23–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
app/b/[billId]
   page.tsx0%0%0%0%1, 1, 10, 2–9
app/og-image
   page.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–93
cloudflare/src
   bill-store.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220–229, 23, 230–236, 24–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
   worker.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220–229, 23, 230–239, 24, 240–249, 25, 250–259, 26, 260–269, 27, 270–279, 28, 280–289, 29, 290–299, 3, 30, 300–309, 31, 310–319, 32, 320–329, 33, 330–339, 34, 340–349, 35, 350–359, 36, 360–369, 37, 370–379, 38, 380–389, 39, 390–399, 4, 40, 400–409, 41, 410–419, 42, 420–429, 43, 430–439, 44, 440–449, 45, 450–459, 46, 460–469, 47, 470–479, 48, 480–489, 49, 490–499, 5, 50, 500–509, 51, 510–519, 52, 520–522, 53–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
components
   AddPersonForm.tsx92.02%88%100%92.54%35, 44–52, 89–91
   AnimatedNumber.tsx77.39%94.12%50%75%31–36, 62–80
   BillLookup.tsx9.13%100%0%9.17%100–229, 23, 230–239, 24, 240, 25–99
   BillSourceIndicator.tsx100%100%100%100%
   BillStartOptions.tsx74.85%44.44%18.18%77.78%107, 109–117, 123–163, 176–191, 194–229, 232–235, 238–239, 242–243, 255–258, 310–314, 48–50, 585, 591, 72–82, 85–94
   EmptyStates.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–91
   ErrorBoundary.tsx98.71%85.71%100%100%49–50
   ItemRow.tsx90.67%50%62.50%96.41%139, 166, 173, 178, 37, 37–38, 52–53, 56–57, 60–61, 78–79, 81, 87, 98
   MobileSpreadsheetView.tsx15.74%100%0%15.89%100–107, 18–99
   PersonChip.tsx87.70%76.47%50%91.09%46–49, 52–56, 69, 73, 78, 81
   PersonSelector.tsx76.71%66.67%50%77.94%24–29, 31–40
   PostHogProvider.tsx0%0%0%0%1, 1, 10, 100–105, 11–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
   ProBillBreakdownView.tsx0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139,

- bill-start: derive person color and colorIdx from the canonical 6-color
  palette with a single modulus, so a quick-split person's stored hex always
  matches the swatch the Pro view renders via COLORS[colorIdx].
- ProBillSplitter: bail out of the global spreadsheet keydown handler while a
  Radix dialog/alertdialog is open. Fixes keystrokes leaking into the selected
  ledger cell behind the Edit Member popup when focus sits on a non-input.

Verified in-browser: dialog typing, Escape close, and grid editing all unaffected; tsc clean; 175 tests pass.
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 2, 2026

Coverage after merging feat/non-scan-entry-flows into main will be

52.29%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
app
   layout.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–87, 9
   page.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–51, 6–9
app/admin
   layout.tsx0%0%0%0%1, 1, 10–16, 2–9
   page.tsx81.25%67.16%24.24%83.52%1026–1028, 1078, 117, 1174–1175, 118–123, 126, 172–174, 185–186, 193–226, 229–236, 241–243, 265–267, 270, 272–276, 281–290, 298–327, 330–358, 361–394, 397–410, 413–416, 420, 431, 482, 542–543, 546, 570, 710, 713, 826–827, 863–865, 875–877, 907–909, 922–927, 966, 974–976, 987–989
app/api/admin/bills
   route.ts0%0%0%0%1, 1–9
app/api/admin/bills/[id]
   route.ts0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40, 5–9
app/api/admin/export
   route.ts0%0%0%0%1, 1–9
app/api/admin/login
   route.ts0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4–9
app/api/admin/logout
   route.ts0%0%0%0%1, 1, 10–19, 2–9
app/api/bills/[id]
   route.ts100%100%100%100%
app/api/receipt/scan
   route.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220, 23–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
app/b/[billId]
   page.tsx0%0%0%0%1, 1, 10, 2–9
app/og-image
   page.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–93
cloudflare/src
   bill-store.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220–229, 23, 230–236, 24–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
   worker.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220–229, 23, 230–239, 24, 240–249, 25, 250–259, 26, 260–269, 27, 270–279, 28, 280–289, 29, 290–299, 3, 30, 300–309, 31, 310–319, 32, 320–329, 33, 330–339, 34, 340–349, 35, 350–359, 36, 360–369, 37, 370–379, 38, 380–389, 39, 390–399, 4, 40, 400–409, 41, 410–419, 42, 420–429, 43, 430–439, 44, 440–449, 45, 450–459, 46, 460–469, 47, 470–479, 48, 480–489, 49, 490–499, 5, 50, 500–509, 51, 510–519, 52, 520–522, 53–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
components
   AddPersonForm.tsx92.02%88%100%92.54%35, 44–52, 89–91
   AnimatedNumber.tsx76.99%93.33%50%75%31–36, 62–80
   BillLookup.tsx9.13%100%0%9.17%100–229, 23, 230–239, 24, 240, 25–99
   BillSourceIndicator.tsx95.71%83.33%100%96.77%27–29
   BillStartOptions.tsx74.85%44.44%18.18%77.78%107, 109–117, 123–163, 176–191, 194–229, 232–235, 238–239, 242–243, 255–258, 310–314, 48–50, 585, 591, 72–82, 85–94
   EmptyStates.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–91
   ErrorBoundary.tsx98.71%85.71%100%100%49–50
   ItemRow.tsx90.67%50%62.50%96.41%139, 166, 173, 178, 37, 37–38, 52–53, 56–57, 60–61, 78–79, 81, 87, 98
   MobileSpreadsheetView.tsx15.74%100%0%15.89%100–107, 18–99
   PersonChip.tsx87.70%76.47%50%91.09%46–49, 52–56, 69, 73, 78, 81
   PersonSelector.tsx76.71%66.67%50%77.94%24–29, 31–40
   PostHogProvider.tsx0%0%0%0%1, 1, 10, 100–105, 11–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
   ProBillBreakdownView.tsx0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13,

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 2, 2026

Coverage after merging feat/non-scan-entry-flows into main will be

52.38%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
app
   layout.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–87, 9
   page.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–51, 6–9
app/admin
   layout.tsx0%0%0%0%1, 1, 10–16, 2–9
   page.tsx81.25%67.16%24.24%83.52%1026–1028, 1078, 117, 1174–1175, 118–123, 126, 172–174, 185–186, 193–226, 229–236, 241–243, 265–267, 270, 272–276, 281–290, 298–327, 330–358, 361–394, 397–410, 413–416, 420, 431, 482, 542–543, 546, 570, 710, 713, 826–827, 863–865, 875–877, 907–909, 922–927, 966, 974–976, 987–989
app/api/admin/bills
   route.ts0%0%0%0%1, 1–9
app/api/admin/bills/[id]
   route.ts0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40, 5–9
app/api/admin/export
   route.ts0%0%0%0%1, 1–9
app/api/admin/login
   route.ts0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4–9
app/api/admin/logout
   route.ts0%0%0%0%1, 1, 10–19, 2–9
app/api/bills/[id]
   route.ts100%100%100%100%
app/api/receipt/scan
   route.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220, 23–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
app/b/[billId]
   page.tsx0%0%0%0%1, 1, 10, 2–9
app/og-image
   page.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–93
cloudflare/src
   bill-store.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220–229, 23, 230–236, 24–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
   worker.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220–229, 23, 230–239, 24, 240–249, 25, 250–259, 26, 260–269, 27, 270–279, 28, 280–289, 29, 290–299, 3, 30, 300–309, 31, 310–319, 32, 320–329, 33, 330–339, 34, 340–349, 35, 350–359, 36, 360–369, 37, 370–379, 38, 380–389, 39, 390–399, 4, 40, 400–409, 41, 410–419, 42, 420–429, 43, 430–439, 44, 440–449, 45, 450–459, 46, 460–469, 47, 470–479, 48, 480–489, 49, 490–499, 5, 50, 500–509, 51, 510–519, 52, 520–522, 53–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
components
   AddPersonForm.tsx92.02%88%100%92.54%35, 44–52, 89–91
   AnimatedNumber.tsx77.39%94.12%50%75%31–36, 62–80
   BillLookup.tsx9.13%100%0%9.17%100–229, 23, 230–239, 24, 240, 25–99
   BillSourceIndicator.tsx100%100%100%100%
   BillStartOptions.tsx74.85%44.44%18.18%77.78%107, 109–117, 123–163, 176–191, 194–229, 232–235, 238–239, 242–243, 255–258, 310–314, 48–50, 585, 591, 72–82, 85–94
   EmptyStates.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–91
   ErrorBoundary.tsx98.71%85.71%100%100%49–50
   ItemRow.tsx90.67%50%62.50%96.41%139, 166, 173, 178, 37, 37–38, 52–53, 56–57, 60–61, 78–79, 81, 87, 98
   MobileSpreadsheetView.tsx15.74%100%0%15.89%100–107, 18–99
   PersonChip.tsx87.70%76.47%50%91.09%46–49, 52–56, 69, 73, 78, 81
   PersonSelector.tsx76.71%66.67%50%77.94%24–29, 31–40
   PostHogProvider.tsx0%0%0%0%1, 1, 10, 100–105, 11–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
   ProBillBreakdownView.tsx0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139,

Resolves the Radix "Missing Description or aria-describedby for DialogContent"
warning by linking a description to the dialog. Verified in-browser: dialog now
exposes aria-describedby and the warning no longer appears.
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 2, 2026

Coverage after merging feat/non-scan-entry-flows into main will be

52.29%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
app
   layout.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–87, 9
   page.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–51, 6–9
app/admin
   layout.tsx0%0%0%0%1, 1, 10–16, 2–9
   page.tsx81.25%67.16%24.24%83.52%1026–1028, 1078, 117, 1174–1175, 118–123, 126, 172–174, 185–186, 193–226, 229–236, 241–243, 265–267, 270, 272–276, 281–290, 298–327, 330–358, 361–394, 397–410, 413–416, 420, 431, 482, 542–543, 546, 570, 710, 713, 826–827, 863–865, 875–877, 907–909, 922–927, 966, 974–976, 987–989
app/api/admin/bills
   route.ts0%0%0%0%1, 1–9
app/api/admin/bills/[id]
   route.ts0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40, 5–9
app/api/admin/export
   route.ts0%0%0%0%1, 1–9
app/api/admin/login
   route.ts0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4–9
app/api/admin/logout
   route.ts0%0%0%0%1, 1, 10–19, 2–9
app/api/bills/[id]
   route.ts100%100%100%100%
app/api/receipt/scan
   route.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220, 23–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
app/b/[billId]
   page.tsx0%0%0%0%1, 1, 10, 2–9
app/og-image
   page.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–93
cloudflare/src
   bill-store.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220–229, 23, 230–236, 24–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
   worker.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220–229, 23, 230–239, 24, 240–249, 25, 250–259, 26, 260–269, 27, 270–279, 28, 280–289, 29, 290–299, 3, 30, 300–309, 31, 310–319, 32, 320–329, 33, 330–339, 34, 340–349, 35, 350–359, 36, 360–369, 37, 370–379, 38, 380–389, 39, 390–399, 4, 40, 400–409, 41, 410–419, 42, 420–429, 43, 430–439, 44, 440–449, 45, 450–459, 46, 460–469, 47, 470–479, 48, 480–489, 49, 490–499, 5, 50, 500–509, 51, 510–519, 52, 520–522, 53–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
components
   AddPersonForm.tsx92.02%88%100%92.54%35, 44–52, 89–91
   AnimatedNumber.tsx77.39%94.12%50%75%31–36, 62–80
   BillLookup.tsx9.13%100%0%9.17%100–229, 23, 230–239, 24, 240, 25–99
   BillSourceIndicator.tsx95.71%83.33%100%96.77%27–29
   BillStartOptions.tsx74.85%44.44%18.18%77.78%107, 109–117, 123–163, 176–191, 194–229, 232–235, 238–239, 242–243, 255–258, 310–314, 48–50, 585, 591, 72–82, 85–94
   EmptyStates.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–91
   ErrorBoundary.tsx98.71%85.71%100%100%49–50
   ItemRow.tsx90.67%50%62.50%96.41%139, 166, 173, 178, 37, 37–38, 52–53, 56–57, 60–61, 78–79, 81, 87, 98
   MobileSpreadsheetView.tsx15.74%100%0%15.89%100–107, 18–99
   PersonChip.tsx82.05%16.67%50%91.09%46–49, 52–56, 65–69, 69, 73, 78, 81–82
   PersonSelector.tsx76.71%66.67%50%77.94%24–29, 31–40
   PostHogProvider.tsx0%0%0%0%1, 1, 10, 100–105, 11–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
   ProBillBreakdownView.tsx0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129,

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 2, 2026

Coverage after merging feat/non-scan-entry-flows into main will be

52.38%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
app
   layout.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–87, 9
   page.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–51, 6–9
app/admin
   layout.tsx0%0%0%0%1, 1, 10–16, 2–9
   page.tsx81.25%67.16%24.24%83.52%1026–1028, 1078, 117, 1174–1175, 118–123, 126, 172–174, 185–186, 193–226, 229–236, 241–243, 265–267, 270, 272–276, 281–290, 298–327, 330–358, 361–394, 397–410, 413–416, 420, 431, 482, 542–543, 546, 570, 710, 713, 826–827, 863–865, 875–877, 907–909, 922–927, 966, 974–976, 987–989
app/api/admin/bills
   route.ts0%0%0%0%1, 1–9
app/api/admin/bills/[id]
   route.ts0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40, 5–9
app/api/admin/export
   route.ts0%0%0%0%1, 1–9
app/api/admin/login
   route.ts0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4–9
app/api/admin/logout
   route.ts0%0%0%0%1, 1, 10–19, 2–9
app/api/bills/[id]
   route.ts100%100%100%100%
app/api/receipt/scan
   route.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220, 23–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
app/b/[billId]
   page.tsx0%0%0%0%1, 1, 10, 2–9
app/og-image
   page.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–93
cloudflare/src
   bill-store.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220–229, 23, 230–236, 24–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
   worker.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220–229, 23, 230–239, 24, 240–249, 25, 250–259, 26, 260–269, 27, 270–279, 28, 280–289, 29, 290–299, 3, 30, 300–309, 31, 310–319, 32, 320–329, 33, 330–339, 34, 340–349, 35, 350–359, 36, 360–369, 37, 370–379, 38, 380–389, 39, 390–399, 4, 40, 400–409, 41, 410–419, 42, 420–429, 43, 430–439, 44, 440–449, 45, 450–459, 46, 460–469, 47, 470–479, 48, 480–489, 49, 490–499, 5, 50, 500–509, 51, 510–519, 52, 520–522, 53–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
components
   AddPersonForm.tsx92.02%88%100%92.54%35, 44–52, 89–91
   AnimatedNumber.tsx77.39%94.12%50%75%31–36, 62–80
   BillLookup.tsx9.13%100%0%9.17%100–229, 23, 230–239, 24, 240, 25–99
   BillSourceIndicator.tsx100%100%100%100%
   BillStartOptions.tsx74.85%44.44%18.18%77.78%107, 109–117, 123–163, 176–191, 194–229, 232–235, 238–239, 242–243, 255–258, 310–314, 48–50, 585, 591, 72–82, 85–94
   EmptyStates.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–91
   ErrorBoundary.tsx98.71%85.71%100%100%49–50
   ItemRow.tsx90.67%50%62.50%96.41%139, 166, 173, 178, 37, 37–38, 52–53, 56–57, 60–61, 78–79, 81, 87, 98
   MobileSpreadsheetView.tsx15.74%100%0%15.89%100–107, 18–99
   PersonChip.tsx87.70%76.47%50%91.09%46–49, 52–56, 69, 73, 78, 81
   PersonSelector.tsx76.71%66.67%50%77.94%24–29, 31–40
   PostHogProvider.tsx0%0%0%0%1, 1, 10, 100–105, 11–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
   ProBillBreakdownView.tsx0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139,

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 2, 2026

Coverage after merging feat/non-scan-entry-flows into main will be

52.31%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
app
   layout.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–87, 9
   page.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–51, 6–9
app/admin
   layout.tsx0%0%0%0%1, 1, 10–16, 2–9
   page.tsx81.25%67.16%24.24%83.52%1026–1028, 1078, 117, 1174–1175, 118–123, 126, 172–174, 185–186, 193–226, 229–236, 241–243, 265–267, 270, 272–276, 281–290, 298–327, 330–358, 361–394, 397–410, 413–416, 420, 431, 482, 542–543, 546, 570, 710, 713, 826–827, 863–865, 875–877, 907–909, 922–927, 966, 974–976, 987–989
app/api/admin/bills
   route.ts0%0%0%0%1, 1–9
app/api/admin/bills/[id]
   route.ts0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40, 5–9
app/api/admin/export
   route.ts0%0%0%0%1, 1–9
app/api/admin/login
   route.ts0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4–9
app/api/admin/logout
   route.ts0%0%0%0%1, 1, 10–19, 2–9
app/api/bills/[id]
   route.ts100%100%100%100%
app/api/receipt/scan
   route.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220, 23–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
app/b/[billId]
   page.tsx0%0%0%0%1, 1, 10, 2–9
app/og-image
   page.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–93
cloudflare/src
   bill-store.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220–229, 23, 230–236, 24–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
   worker.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220–229, 23, 230–239, 24, 240–249, 25, 250–259, 26, 260–269, 27, 270–279, 28, 280–289, 29, 290–299, 3, 30, 300–309, 31, 310–319, 32, 320–329, 33, 330–339, 34, 340–349, 35, 350–359, 36, 360–369, 37, 370–379, 38, 380–389, 39, 390–399, 4, 40, 400–409, 41, 410–419, 42, 420–429, 43, 430–439, 44, 440–449, 45, 450–459, 46, 460–469, 47, 470–479, 48, 480–489, 49, 490–499, 5, 50, 500–509, 51, 510–519, 52, 520–522, 53–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
components
   AddPersonForm.tsx92.02%88%100%92.54%35, 44–52, 89–91
   AnimatedNumber.tsx77.39%94.12%50%75%31–36, 62–80
   BillLookup.tsx9.13%100%0%9.17%100–229, 23, 230–239, 24, 240, 25–99
   BillSourceIndicator.tsx100%100%100%100%
   BillStartOptions.tsx74.85%44.44%18.18%77.78%107, 109–117, 123–163, 176–191, 194–229, 232–235, 238–239, 242–243, 255–258, 310–314, 48–50, 585, 591, 72–82, 85–94
   EmptyStates.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–91
   ErrorBoundary.tsx98.71%85.71%100%100%49–50
   ItemRow.tsx90.67%50%62.50%96.41%139, 166, 173, 178, 37, 37–38, 52–53, 56–57, 60–61, 78–79, 81, 87, 98
   MobileSpreadsheetView.tsx15.74%100%0%15.89%100–107, 18–99
   PersonChip.tsx82.05%16.67%50%91.09%46–49, 52–56, 65–69, 69, 73, 78, 81–82
   PersonSelector.tsx76.71%66.67%50%77.94%24–29, 31–40
   PostHogProvider.tsx0%0%0%0%1, 1, 10, 100–105, 11–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
   ProBillBreakdownView.tsx0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13,

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 2, 2026

Coverage after merging feat/non-scan-entry-flows into main will be

52.38%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
app
   layout.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–87, 9
   page.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–51, 6–9
app/admin
   layout.tsx0%0%0%0%1, 1, 10–16, 2–9
   page.tsx81.25%67.16%24.24%83.52%1026–1028, 1078, 117, 1174–1175, 118–123, 126, 172–174, 185–186, 193–226, 229–236, 241–243, 265–267, 270, 272–276, 281–290, 298–327, 330–358, 361–394, 397–410, 413–416, 420, 431, 482, 542–543, 546, 570, 710, 713, 826–827, 863–865, 875–877, 907–909, 922–927, 966, 974–976, 987–989
app/api/admin/bills
   route.ts0%0%0%0%1, 1–9
app/api/admin/bills/[id]
   route.ts0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40, 5–9
app/api/admin/export
   route.ts0%0%0%0%1, 1–9
app/api/admin/login
   route.ts0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4–9
app/api/admin/logout
   route.ts0%0%0%0%1, 1, 10–19, 2–9
app/api/bills/[id]
   route.ts100%100%100%100%
app/api/receipt/scan
   route.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220, 23–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
app/b/[billId]
   page.tsx0%0%0%0%1, 1, 10, 2–9
app/og-image
   page.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–93
cloudflare/src
   bill-store.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220–229, 23, 230–236, 24–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
   worker.ts0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139, 14, 140–149, 15, 150–159, 16, 160–169, 17, 170–179, 18, 180–189, 19, 190–199, 2, 20, 200–209, 21, 210–219, 22, 220–229, 23, 230–239, 24, 240–249, 25, 250–259, 26, 260–269, 27, 270–279, 28, 280–289, 29, 290–299, 3, 30, 300–309, 31, 310–319, 32, 320–329, 33, 330–339, 34, 340–349, 35, 350–359, 36, 360–369, 37, 370–379, 38, 380–389, 39, 390–399, 4, 40, 400–409, 41, 410–419, 42, 420–429, 43, 430–439, 44, 440–449, 45, 450–459, 46, 460–469, 47, 470–479, 48, 480–489, 49, 490–499, 5, 50, 500–509, 51, 510–519, 52, 520–522, 53–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
components
   AddPersonForm.tsx92.02%88%100%92.54%35, 44–52, 89–91
   AnimatedNumber.tsx77.39%94.12%50%75%31–36, 62–80
   BillLookup.tsx9.13%100%0%9.17%100–229, 23, 230–239, 24, 240, 25–99
   BillSourceIndicator.tsx100%100%100%100%
   BillStartOptions.tsx74.85%44.44%18.18%77.78%107, 109–117, 123–163, 176–191, 194–229, 232–235, 238–239, 242–243, 255–258, 310–314, 48–50, 585, 591, 72–82, 85–94
   EmptyStates.tsx0%0%0%0%1, 1, 10–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–91
   ErrorBoundary.tsx98.71%85.71%100%100%49–50
   ItemRow.tsx90.67%50%62.50%96.41%139, 166, 173, 178, 37, 37–38, 52–53, 56–57, 60–61, 78–79, 81, 87, 98
   MobileSpreadsheetView.tsx15.74%100%0%15.89%100–107, 18–99
   PersonChip.tsx87.70%76.47%50%91.09%46–49, 52–56, 69, 73, 78, 81
   PersonSelector.tsx76.71%66.67%50%77.94%24–29, 31–40
   PostHogProvider.tsx0%0%0%0%1, 1, 10, 100–105, 11–19, 2, 20–29, 3, 30–39, 4, 40–49, 5, 50–59, 6, 60–69, 7, 70–79, 8, 80–89, 9, 90–99
   ProBillBreakdownView.tsx0%0%0%0%1, 1, 10, 100–109, 11, 110–119, 12, 120–129, 13, 130–139,

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant