Uploaders
File uploads are handled by Shrine, with Uppy on the front-end:
ImageUploader— base image uploaderRecordImageUploader— attach an image to any record:include RecordImageUploader::Attachment(:image)ModelImageUploader— model-level image uploader (used by content editor images)
Storage
Configured per environment in the generated Shrine initializer (config/initializers/shrine.rb):
| Environment | Storage |
|---|---|
| production | S3 (via the S3_* ENV variables) |
| development | local filesystem (public/uploads/) |
| test | in-memory |
Image processing uses libvips, blurhash placeholders are generated for progressive loading, and direct uploads go through the Shrine upload_endpoint (20 MB max).