Index: src/routes/audio.js
===================================================================
--- src/routes/audio.js	(revision dfc537997e6219369822c5c2f644ec369da2ec58)
+++ src/routes/audio.js	(revision fa089819894c489333fe1d0f327dae1085a86987)
@@ -141,3 +141,20 @@
 });
 
+// Welke post bevat deze track? (voor de mini-speler → "spring naar de post +
+// scroll naar de track".) Pakt de nieuwste gepubliceerde post met [[track:<id>]].
+router.get('/track/:id/post', (req, res) => {
+  const id = String(req.params.id || '');
+  if (!/^[A-Za-z0-9_-]+$/.test(id)) return res.status(400).json({ error: 'bad id' });
+  const isHub = res.locals.tenancy === 'hub';
+  const row = db.prepare(`
+    SELECT p.slug, s.slug AS site_slug
+    FROM posts p JOIN sites s ON s.id = p.site_id
+    WHERE p.status = 'published' AND p.content LIKE ?
+    ORDER BY p.published_at DESC LIMIT 1
+  `).get('%[[track:' + id + ']]%');
+  if (!row) return res.status(404).json({ error: 'not found' });
+  const url = isHub ? `/user/${row.site_slug}/${row.slug}` : `/${row.slug}`;
+  res.json({ url });
+});
+
 export default router;
