CROP

Media Metadata

Image metadata schema, XMP structure, Zod validation, and GCS bucket layout per vendor.

Media Metadata Structure

The Media Service manages product images stored in Google Cloud Storage. Each image has associated metadata validated through Zod schemas.

GCS Bucket Layout

gs://crop-parts-media/
├── {vendor_code}/
│   └── {part_number}/
│       ├── original.jpg        # Original uploaded image
│       ├── thumbnail.webp      # 200px thumbnail
│       ├── medium.webp         # 800px display image
│       └── metadata.json       # Image metadata

gs://crop-equipment-images/
└── models/
    └── {vendor}/
        └── {baseModel}/
            └── {filename}      # Scraped equipment model images

Image Metadata Schema

Each image has metadata stored in MongoDB alongside the media record:

const ImageMetadataSchema = z.object({
  partNumber: z.string(),
  vendor: z.string(),
  originalFilename: z.string(),
  mimeType: z.string(),
  width: z.number(),
  height: z.number(),
  fileSize: z.number(),
  gcsPath: z.string(),
  cdnUrl: z.string().optional(),
  uploadedAt: z.date(),
  source: z.enum(["manual", "scraper", "vendor_api"]),
});

CDN URLs

Images are served through Cloudflare CDN:

https://media.clintontractor.net/{vendor}/{part_number}/{variant}.webp
https://media.clintontractor.net/equipment/models/{vendor}/{baseModel}/{filename}

On this page