feat(market): show offer photos in the market list and detail

Render offer.imageUrl (already carried by NIP-99) as a thumbnail on each
market card and a hero image on the offer detail page. Remote images
degrade gracefully: a spinner while loading, a neutral placeholder when
the media server is unreachable. Publishing the photo comes next.
This commit is contained in:
vjrj 2026-07-10 20:58:45 +02:00
parent d36fd05741
commit 0150a7ce02
14 changed files with 633 additions and 111 deletions

View file

@ -215,8 +215,18 @@
"anyMonth": "Any month",
"noDate": "Set harvest date",
"monthNames": [
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
]
},
"lotType": {
@ -331,30 +341,102 @@
"some": "some",
"plenty": "plenty",
"pinch": "a pinch",
"handful": { "singular": "handful", "plural": "handfuls" },
"teaspoon": { "singular": "teaspoon", "plural": "teaspoons" },
"spoon": { "singular": "spoon", "plural": "spoons" },
"cup": { "singular": "cup", "plural": "cups" },
"jar": { "singular": "jar", "plural": "jars" },
"sack": { "singular": "sack", "plural": "sacks" },
"packet": { "singular": "packet", "plural": "packets" },
"cob": { "singular": "cob", "plural": "cobs" },
"pod": { "singular": "pod", "plural": "pods" },
"ear": { "singular": "ear", "plural": "ears" },
"head": { "singular": "head", "plural": "heads" },
"fruit": { "singular": "fruit", "plural": "fruits" },
"bulb": { "singular": "bulb", "plural": "bulbs" },
"tuber": { "singular": "tuber", "plural": "tubers" },
"seedHead": { "singular": "seed head", "plural": "seed heads" },
"bunch": { "singular": "bunch", "plural": "bunches" },
"plant": { "singular": "plant", "plural": "plants" },
"pot": { "singular": "pot", "plural": "pots" },
"tray": { "singular": "tray", "plural": "trays" },
"seedling": { "singular": "seedling", "plural": "seedlings" },
"tree": { "singular": "tree", "plural": "trees" },
"cutting": { "singular": "cutting", "plural": "cuttings" },
"grams": { "singular": "gram", "plural": "grams" },
"count": { "singular": "seed", "plural": "seeds" }
"handful": {
"singular": "handful",
"plural": "handfuls"
},
"teaspoon": {
"singular": "teaspoon",
"plural": "teaspoons"
},
"spoon": {
"singular": "spoon",
"plural": "spoons"
},
"cup": {
"singular": "cup",
"plural": "cups"
},
"jar": {
"singular": "jar",
"plural": "jars"
},
"sack": {
"singular": "sack",
"plural": "sacks"
},
"packet": {
"singular": "packet",
"plural": "packets"
},
"cob": {
"singular": "cob",
"plural": "cobs"
},
"pod": {
"singular": "pod",
"plural": "pods"
},
"ear": {
"singular": "ear",
"plural": "ears"
},
"head": {
"singular": "head",
"plural": "heads"
},
"fruit": {
"singular": "fruit",
"plural": "fruits"
},
"bulb": {
"singular": "bulb",
"plural": "bulbs"
},
"tuber": {
"singular": "tuber",
"plural": "tubers"
},
"seedHead": {
"singular": "seed head",
"plural": "seed heads"
},
"bunch": {
"singular": "bunch",
"plural": "bunches"
},
"plant": {
"singular": "plant",
"plural": "plants"
},
"pot": {
"singular": "pot",
"plural": "pots"
},
"tray": {
"singular": "tray",
"plural": "trays"
},
"seedling": {
"singular": "seedling",
"plural": "seedlings"
},
"tree": {
"singular": "tree",
"plural": "trees"
},
"cutting": {
"singular": "cutting",
"plural": "cuttings"
},
"grams": {
"singular": "gram",
"plural": "grams"
},
"count": {
"singular": "seed",
"plural": "seeds"
}
},
"market": {
"title": "Seeds near you",
@ -403,7 +485,8 @@
"sharedBy": "Shared by",
"noProfile": "This person hasn't shared a profile yet",
"copyId": "Copy code",
"idCopied": "Code copied"
"idCopied": "Code copied",
"photo": "Photo"
},
"profile": {
"title": "Your profile",