Products: carry the IMVU parent's image and categories
CI / test (push) Successful in 49s

Revisions with an IMVU parent store its public info (image, category path, gender)
from IMVU's product API, looked up after registering and in a periodic pass.
Product views gain parent, image and categories; GET /products takes category and
limit. The website shows the image on cards and product pages.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
dhkatzandClaude Opus 5.5 committed 2026-10-30 01:03:02 -07:00
1 parent d57674d90c
commit 6668b55117
15 files changed
+2026 -29

No files matched your search

+14 -1
View File
@@ -1,7 +1,7 @@
import type { Metadata } from "next";
import Link from "next/link";
import { ActionForm, SubmitButton } from "@/components/forms";
import { formatSize, RatingTag } from "@/components/products";
import { formatSize, ProductImage, RatingTag } from "@/components/products";
import { PageHeader, Tag } from "@/components/status";
import { DateTime } from "@/components/time";
import { buttonVariants } from "@/components/ui/button";
@@ -30,6 +30,19 @@ export default async function ProductPage({ params }: { params: Promise<{ id: st
</span>
</PageHeader>
{(product.image || product.categories.length > 0) && (
<div className="flex flex-wrap items-center gap-4">
{product.image && (
<div className="w-40 overflow-hidden rounded-xl ring-1 ring-foreground/10">
<ProductImage src={product.image} />
</div>
)}
{product.categories.length > 0 && (
<p className="text-sm text-muted-foreground">{product.categories.map((c) => c.name).join(" › ")}</p>
)}
</div>
)}
<div className="flex flex-wrap items-center gap-2">
{me ? (
<ActionForm action={libraryAction} fields={{ id }} className="space-y-2">