diff --git a/frontend/src/routes/art/+page.svelte b/frontend/src/routes/art/+page.svelte
index 124f6da..fee3174 100644
--- a/frontend/src/routes/art/+page.svelte
+++ b/frontend/src/routes/art/+page.svelte
@@ -41,9 +41,6 @@
else goto('/home3', { replaceState: true });
}
- let who = $derived(
- art ? [art.artist || 'Unknown artist', art.date_text].filter(Boolean) : []
- );
// Woods are built from four real mitered rails (grain turns at the corners); metals/none aren't.
let isWood = $derived(['walnut', 'oak', 'mahogany'].includes(frame));
@@ -70,6 +67,30 @@
function saveThickness() {
try { localStorage.setItem('ub_art_thickness', String(thickness)); } catch { /* ignore */ }
}
+
+ const MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
+ let dateLabel = $derived.by(() => {
+ if (!art?.date) return '';
+ const [, m, d] = art.date.split('-').map(Number);
+ return MONTHS[m - 1] ? `${MONTHS[m - 1]} ${d}` : '';
+ });
+ // "Winslow Homer, 1865 — oil on canvas"
+ let attribution = $derived.by(() => {
+ if (!art) return '';
+ const who = [art.artist, art.date_text].filter(Boolean).join(', ');
+ return art.medium ? (who ? `${who} — ${art.medium}` : art.medium) : who;
+ });
+ let dlName = $derived(art ? `${(art.title || 'artwork').replace(/[^\w \-]+/g, '').trim()}.jpg` : 'artwork.jpg');
+
+ let copied = $state(false);
+ async function share() {
+ const url = art?.source_url || location.href;
+ try {
+ if (navigator.share) { await navigator.share({ title: art?.title || 'Daily Art', url }); return; }
+ await navigator.clipboard.writeText(url);
+ copied = true; setTimeout(() => (copied = false), 1800);
+ } catch { /* cancelled / unsupported — no-op */ }
+ }
@@ -96,59 +117,83 @@
Back
-
-
Daily Art
-
A masterwork a day, from the world's open collections.
-
-
-
{#if state === 'ready'}
-
-
-
-
- {art.title}
-
- {#each who as part, i}{#if i > 0}·{/if}{part}{/each}
-
- {#if art.medium}{art.medium}
{/if}
-
- from {art.museum}{#if art.license}·{art.license}{/if}
- {#if art.source_url}View at {art.museum} →{/if}
-
-
-
-
Frame
- {#each FRAMES as f}
-
- {/each}
+
+
+
+
+
Daily Art{#if dateLabel} · {dateLabel}{/if}
+
{art.title}
+ {#if attribution}
{attribution}
{/if}
- {#if frame !== 'none'}
-
-
Thickness
-
+
+ {#if art.blurb}
{art.blurb}
{/if}
+
- {/if}
-
-
+ {#if art.source_url}
+
View at {art.museum} →
+ {/if}
+
+
+
+
+
+
+
+
+
+
+
Frame
+
+ {#each FRAMES as f}
+
+ {/each}
+
+
+ {#if frame !== 'none'}
+
+ Thickness
+
+
+ {/if}
+
+ {#if art.palette?.length}
+
+
Colors in this piece
+
+ {#each art.palette as c}{/each}
+
+ {/if}
+
+
+
+ {#if art.is_public_domain}
+
↓ Download
+ {/if}
+
+
+
+
{:else if state === 'empty'}
The gallery's resting — a new piece is hung each morning. Check back soon.
{:else}
@@ -172,33 +217,41 @@
{/if}