@@ -21,9 +21,9 @@ export default async function Page() {
2121 let dbError : string | null = null ;
2222 try {
2323 queue = await listInvoiceQueue ( ) ;
24- } catch ( err ) {
24+ } catch ( error ) {
2525 dbError =
26- err instanceof Error && err . message . includes ( "DATABASE_URL" )
26+ error instanceof Error && error . message . includes ( "DATABASE_URL" )
2727 ? "DATABASE_URL is not set."
2828 : "Could not reach the database." ;
2929 }
@@ -65,10 +65,8 @@ const Header = () => {
6565 </ div >
6666 < p className = "mt-2 max-w-xl text-[13.5px] leading-snug text-muted" >
6767 Reads a client's HRIS,{ " " }
68- < span className = "font-medium text-ink" >
69- derives their approval workflow
70- </ span >
71- , and runs procure-to-pay against it.
68+ < span className = "font-medium text-ink" > derives their approval workflow</ span > , and runs
69+ procure-to-pay against it.
7270 </ p >
7371 </ div >
7472 < div className = "flex shrink-0 items-center gap-2" >
@@ -99,45 +97,34 @@ const HowItWorks = () => {
9997 < details className = "group relative" >
10098 < summary className = "flex cursor-pointer list-none items-center gap-1.5 rounded-full bg-subtle px-3 py-1.5 text-[12px] font-medium text-muted ring-1 ring-inset ring-line-strong transition-colors hover:text-ink" >
10199 How it works
102- < span
103- aria-hidden
104- className = "text-faint transition-transform group-open:rotate-180"
105- >
100+ < span aria-hidden className = "text-faint transition-transform group-open:rotate-180" >
106101 ▾
107102 </ span >
108103 </ summary >
109104 < div className = "absolute right-0 z-20 mt-2 w-[300px] rounded-xl bg-surface p-3 text-[12px] leading-snug text-muted shadow-lift ring-1 ring-inset ring-line" >
110105 < dl className = "space-y-1.5" >
111106 < Term name = "Gate" >
112- an approval step that fires on a condition (amount, variance, …) and
113- pauses for a human.
107+ an approval step that fires on a condition (amount, variance, …) and pauses for a human.
114108 </ Term >
115109 < Term name = "2-way / 3-way match" >
116110 invoice ↔ PO, or invoice ↔ PO ↔ goods receipt (did we receive it?).
117111 </ Term >
118112 < Term name = "Verdict" >
119113 < span className = "text-ink" > clean</ span > (reconciles),{ " " }
120- < span className = "text-ink" > exception</ span > (a variance needs a
121- decision), < span className = "text-ink" > duplicate</ span > (blocked,
122- never paid twice).
114+ < span className = "text-ink" > exception</ span > (a variance needs a decision),{ " " }
115+ < span className = "text-ink" > duplicate</ span > (blocked, never paid twice).
123116 </ Term >
124117 < Term name = "Investigator" >
125- an AI agent that reads messy records on an exception and recommends.
126- A human still decides.
118+ an AI agent that reads messy records on an exception and recommends. A human still
119+ decides.
127120 </ Term >
128121 </ dl >
129122 </ div >
130123 </ details >
131124 ) ;
132125} ;
133126
134- const Term = ( {
135- name,
136- children,
137- } : {
138- name : string ;
139- children : React . ReactNode ;
140- } ) => {
127+ const Term = ( { name, children } : { name : string ; children : React . ReactNode } ) => {
141128 return (
142129 < div >
143130 < dt className = "inline font-medium text-ink" > { name } : </ dt >
@@ -150,10 +137,7 @@ const Term = ({
150137 glyph (matches app/icon.svg). The second stroke is the accent. */
151138const LogoMark = ( ) => {
152139 return (
153- < div
154- aria-hidden
155- className = "grid size-9 shrink-0 place-items-center rounded-[10px] bg-ink"
156- >
140+ < div aria-hidden className = "grid size-9 shrink-0 place-items-center rounded-[10px] bg-ink" >
157141 < svg viewBox = "0 0 32 32" className = "size-[19px]" fill = "none" aria-hidden >
158142 < path
159143 d = "M12 7v12a4 4 0 0 0 4 4"
@@ -177,9 +161,7 @@ const LogoMark = () => {
177161const SetupNotice = ( { detail } : { detail : string } ) => {
178162 return (
179163 < div className = "rounded-2xl bg-warn-soft/60 px-6 py-5 text-[13px] text-ink ring-1 ring-inset ring-warn-line/60" >
180- < p className = "font-semibold" >
181- Almost there. The demo needs its database.
182- </ p >
164+ < p className = "font-semibold" > Almost there. The demo needs its database.</ p >
183165 < p className = "mt-1 text-muted" > { detail } </ p >
184166 < p className = "mt-2.5 text-muted" >
185167 Set{ " " }
@@ -204,10 +186,9 @@ const Footer = () => {
204186 return (
205187 < footer className = "mt-7 flex flex-wrap items-center justify-between gap-3 border-t border-line pt-4 text-[12px] text-faint" >
206188 < p >
207- Matching and reconciliation run in code. A{ " " }
208- < span className = "text-muted" > Mastra</ span > agent on{ " " }
209- < span className = "font-mono text-muted" > { PIPELINE_MODEL } </ span > { " " }
210- investigates only the exceptions, all on the small model.
189+ Matching and reconciliation run in code. A < span className = "text-muted" > Mastra</ span > agent
190+ on < span className = "font-mono text-muted" > { PIPELINE_MODEL } </ span > investigates only the
191+ exceptions, all on the small model.
211192 </ p >
212193 < div className = "flex items-center gap-2" >
213194 < span className = "font-medium text-muted" > Dylan Mérigaud</ span >
0 commit comments