Here is something that might get you started. I made a photo board out of all employees at work, and then I abused the bibliography system. That might work out OK for a catalog as well, as long as the different items do look more or less the same. If not, then I suggest that you ask a new question with perhaps a bit more information.
Note that what I do here could easily be done with a macro, but with a bibliography database (here in a buffer, but could be in a separate file) one is really separating layout and data. I am not sure how, but I am sure that one can also use a SQL database with the data (that might be even more convenient with a product catalog).
Anyways, this is how it looks:

The code looks like this (I'm sorry if I forgot to delete/change some setup from the photo board I made at work):
\setupbodyfont[iwona]
\definemeasure[columnseparation][0.4cm]
\definemeasure[tablewidth][(\textwidth - 3\measured{columnseparation})/4]
\definemeasure[figwidth][\measured{tablewidth} - 2\measured{columnseparation}]
\definemeasure[figheight][2.6cm]
\definemeasure[tabletitleheight][1.25cm]
\definemeasure[tabledescriptionheight][1.5cm]
\definemeasure[tabelfigheight][\measured{figheight} + 2\measured{columnseparation}]
\setuplayout
[backspace=1.5cm,
topspace=1.5cm,
margin=0cm,
header=0cm,
footer=0cm,
height=fit,
width=fit,
]
\setupexternalfigures
[location={local,global,default}]
\useMPlibrary[dum]
\defineexternalfigure
[catalogfigure]
[width=\measure{figwidth},
height=\measure{figheight},
text=no]
\usecolors[crayola]
\startuseMPgraphic{TableBackground}
path p ;
p := unitsquare xyscaled(OverlayWidth, OverlayHeight) ;
fill p superellipsed 0.97 withcolor "CulturedPearl" ;
draw p superellipsed 0.97 withcolor "OceanBluePearl" ;
\stopuseMPgraphic
\defineoverlay
[TableBackground]
[\useMPgraphic{TableBackground}]
\setupTABLE[width=\measure{tablewidth},offset=\measured{columnseparation},frame=off]
\setupTABLE[r][1][height=\measure{tabletitleheight},align={middle,lohi},style={\definedfont[SansBold*default at 12pt]\setupinterlinespace}]
\setupTABLE[r][2][height=\measure{tabledescriptionheight},align={high},style={\definedfont[Sans*default at 8pt]\setupinterlinespace}]
\setupTABLE[r][3][height=\measure{tabelfigheight},align={middle,lohi}]
\startbuffer[catalog]
@catalogitem {foo1,
title = {Test title},
description = {This is a sentence about the current product.},
}
@catalogitem {foo2,
title = {Test title},
description = {This is a sentence about the current product.},
}
@catalogitem {foo3,
title = {Test title},
description = {This is a sentence about the current product.},
}
@catalogitem {foo4,
title = {Test title},
description = {This is a sentence about the current product.},
}
@catalogitem {foo5,
title = {Test title},
description = {This is a sentence about the current product.},
}
@catalogitem {foo6,
title = {Test title},
description = {This is a sentence about the current product.},
}
@catalogitem {foo7,
title = {Test title},
description = {This is a sentence about the current product.},
}
@catalogitem {foo8,
title = {Test title},
description = {This is a sentence about the current product.},
}
@catalogitem {foo9,
title = {Test title},
description = {This is a sentence about the current product.},
}
@catalogitem {cow,
title = {Mew!},
description = {This is indeed a cow.},
}
@catalogitem {bar1,
title = {A little longer title},
description = {This is a sentence about the current product. It continues with some more text.},
}
@catalogitem {bar2,
title = {A little longer title},
description = {This is a sentence about the current product. It continues with some more text.},
}
@catalogitem {bar3,
title = {A little longer title},
description = {This is a sentence about the current product. It continues with some more text.},
}
@catalogitem {bar4,
title = {A little longer title},
description = {This is a sentence about the current product. It continues with some more text.},
}
@catalogitem {bar5,
title = {A little longer title},
description = {This is a sentence about the current product. It continues with some more text.},
}
@catalogitem {bar6,
title = {A little longer title},
description = {This is a sentence about the current product. It continues with some more text.},
}
@catalogitem {bar7,
title = {A little longer title},
description = {This is a sentence about the current product. It continues with some more text.},
}
@catalogitem {bar8,
title = {A little longer title},
description = {This is a sentence about the current product. It continues with some more text.},
}
@catalogitem {bar9,
title = {A little longer title},
description = {This is a sentence about the current product. It continues with some more text.},
}
\stopbuffer
\definebtxdataset
[catalog]
\usebtxdataset
[catalog]
[catalog.buffer]
\definebtx
[catalog]
[default=,
specification=catalog]
\definebtxrendering
[catalog]
[specification=catalog,
group=catalog,
dataset=catalog,
method=dataset,
numbering=no,
criterium=all]
\startsetups catalog
\currentlistentrytitle\hskip\measured{columnseparation}
\allowbreak
\stopsetups
\definelistalternative
[catalog]
[renderingsetup=catalog]
\setuplist
[btx]
[alternative=catalog]
\startsetups btx:catalog:list:catalogitem
\startframed
[offset=overlay,
boffset=\measure{columnseparation},
frame=off]
\startframed
[background=TableBackground,
offset=overlay,
frame=off]
\bTABLE
\bTR
\bTD
\begstrut\btxflush{title}\endstrut
\eTD
\eTR
\bTR
\bTD
\begstrut\btxflush{description}\endstrut
\eTD
\eTR
\bTR
\bTD
\externalfigure[\btxflush{tag}][catalogfigure]
\eTD
\eTR
\eTABLE
\stopframed
\stopframed
\stopsetups
\starttext
\placebtxrendering[catalog]
\stoptext
This is a close up of a few items.

minipage
s for example) of a certain width and height and place them next to each other. Boxes in TeX behave more or less likeinline-block
in CSS. As for fluidity: this is not really something that TeX supports, but the width of the boxes, for example, can be defined as multiples of\textwidth
.