@@ -22,114 +22,124 @@ export default function OpengraphImage() {
2222 const stages = [ "Intake" , "Matching" , "Approval" , "Reconciliation" ] ;
2323
2424 return new ImageResponse (
25- (
26- < div
27- style = { {
28- width : "100%" ,
29- height : "100%" ,
30- display : "flex" ,
31- flexDirection : "column" ,
32- justifyContent : "space-between" ,
33- background : "#FAFAFA" ,
34- padding : "72px 80px" ,
35- fontFamily : "sans-serif" ,
36- } }
37- >
38- { /* Top: wordmark + a small accent tag */ }
39- < div style = { { display : "flex" , alignItems : "center" , gap : 16 } } >
40- < div
41- style = { {
42- width : 18 ,
43- height : 18 ,
44- borderRadius : 5 ,
45- background : ACCENT ,
46- } }
47- />
48- < div style = { { fontSize : 30 , fontWeight : 700 , color : INK , letterSpacing : - 0.5 } } >
49- ledgerloop
50- </ div >
25+ < div
26+ style = { {
27+ width : "100%" ,
28+ height : "100%" ,
29+ display : "flex" ,
30+ flexDirection : "column" ,
31+ justifyContent : "space-between" ,
32+ background : "#FAFAFA" ,
33+ padding : "72px 80px" ,
34+ fontFamily : "sans-serif" ,
35+ } }
36+ >
37+ { /* Top: wordmark + a small accent tag */ }
38+ < div style = { { display : "flex" , alignItems : "center" , gap : 16 } } >
39+ < div
40+ style = { {
41+ width : 18 ,
42+ height : 18 ,
43+ borderRadius : 5 ,
44+ background : ACCENT ,
45+ } }
46+ />
47+ < div
48+ style = { {
49+ fontSize : 30 ,
50+ fontWeight : 700 ,
51+ color : INK ,
52+ letterSpacing : - 0.5 ,
53+ } }
54+ >
55+ ledgerloop
5156 </ div >
57+ </ div >
5258
53- { /* Middle: headline + subline */ }
54- < div style = { { display : "flex" , flexDirection : "column" , gap : 22 } } >
55- < div
56- style = { {
57- fontSize : 60 ,
58- fontWeight : 700 ,
59- color : INK ,
60- lineHeight : 1.08 ,
61- letterSpacing : - 1.5 ,
62- maxWidth : 980 ,
63- } }
64- >
65- A multi-agent procure-to-pay pipeline
66- </ div >
67- < div style = { { fontSize : 27 , color : MUTED , lineHeight : 1.4 , maxWidth : 940 } } >
68- Four cooperating AI agents match, route, and reconcile each invoice —
69- with the live execution trace streamed and a real human-in-the-loop on
70- caught mismatches.
71- </ div >
59+ { /* Middle: headline + subline */ }
60+ < div style = { { display : "flex" , flexDirection : "column" , gap : 22 } } >
61+ < div
62+ style = { {
63+ fontSize : 60 ,
64+ fontWeight : 700 ,
65+ color : INK ,
66+ lineHeight : 1.08 ,
67+ letterSpacing : - 1.5 ,
68+ maxWidth : 980 ,
69+ } }
70+ >
71+ A multi-agent procure-to-pay pipeline
72+ </ div >
73+ < div
74+ style = { { fontSize : 27 , color : MUTED , lineHeight : 1.4 , maxWidth : 940 } }
75+ >
76+ Four cooperating AI agents match, route, and reconcile each invoice —
77+ with the live execution trace streamed and a real human-in-the-loop on
78+ caught mismatches.
7279 </ div >
80+ </ div >
7381
74- { /* Stage flow */ }
75- < div style = { { display : "flex" , alignItems : "center" , gap : 14 } } >
76- { stages . map ( ( label , i ) => (
77- < div key = { label } style = { { display : "flex" , alignItems : "center" , gap : 14 } } >
82+ { /* Stage flow */ }
83+ < div style = { { display : "flex" , alignItems : "center" , gap : 14 } } >
84+ { stages . map ( ( label , i ) => (
85+ < div
86+ key = { label }
87+ style = { { display : "flex" , alignItems : "center" , gap : 14 } }
88+ >
89+ < div
90+ style = { {
91+ display : "flex" ,
92+ alignItems : "center" ,
93+ gap : 12 ,
94+ background : "#FFFFFF" ,
95+ border : `1px solid ${ LINE } ` ,
96+ borderRadius : 999 ,
97+ padding : "12px 22px" ,
98+ fontSize : 24 ,
99+ color : INK ,
100+ } }
101+ >
78102 < div
79103 style = { {
80104 display : "flex" ,
81105 alignItems : "center" ,
82- gap : 12 ,
83- background : "#FFFFFF" ,
84- border : `1px solid ${ LINE } ` ,
106+ justifyContent : "center" ,
107+ width : 26 ,
108+ height : 26 ,
85109 borderRadius : 999 ,
86- padding : "12px 22px" ,
87- fontSize : 24 ,
88- color : INK ,
110+ background : "#EEF2FF" ,
111+ color : ACCENT ,
112+ fontSize : 15 ,
113+ fontWeight : 700 ,
89114 } }
90115 >
91- < div
92- style = { {
93- display : "flex" ,
94- alignItems : "center" ,
95- justifyContent : "center" ,
96- width : 26 ,
97- height : 26 ,
98- borderRadius : 999 ,
99- background : "#EEF2FF" ,
100- color : ACCENT ,
101- fontSize : 15 ,
102- fontWeight : 700 ,
103- } }
104- >
105- { i + 1 }
106- </ div >
107- { label }
116+ { i + 1 }
108117 </ div >
109- { i < stages . length - 1 && (
110- < div style = { { fontSize : 26 , color : LINE } } > →</ div >
111- ) }
118+ { label }
112119 </ div >
113- ) ) }
114- </ div >
120+ { i < stages . length - 1 && (
121+ < div style = { { fontSize : 26 , color : LINE } } > →</ div >
122+ ) }
123+ </ div >
124+ ) ) }
125+ </ div >
115126
116- { /* Footer: stack + author */ }
117- < div
118- style = { {
119- display : "flex" ,
120- justifyContent : "space-between" ,
121- alignItems : "center" ,
122- fontSize : 22 ,
123- color : MUTED ,
124- borderTop : `1px solid ${ LINE } ` ,
125- paddingTop : 28 ,
126- } }
127- >
128- < div > Mastra · Next.js · Claude Haiku · Supabase</ div >
129- < div style = { { color : INK } } > Dylan Mérigaud</ div >
130- </ div >
127+ { /* Footer: stack + author */ }
128+ < div
129+ style = { {
130+ display : "flex" ,
131+ justifyContent : "space-between" ,
132+ alignItems : "center" ,
133+ fontSize : 22 ,
134+ color : MUTED ,
135+ borderTop : `1px solid ${ LINE } ` ,
136+ paddingTop : 28 ,
137+ } }
138+ >
139+ < div > Mastra · Next.js · Claude Haiku · Supabase</ div >
140+ < div style = { { color : INK } } > Dylan Mérigaud</ div >
131141 </ div >
132- ) ,
142+ </ div > ,
133143 { ...size } ,
134144 ) ;
135145}
0 commit comments