Index: src/routes/admin-audio.js
===================================================================
--- src/routes/admin-audio.js	(revision 183875b46fb28dbb72cffa7bc53cedaad373f8cd)
+++ src/routes/admin-audio.js	(revision a66f691d99d16426511668251ccb7a7aeafbf7b5)
@@ -394,4 +394,22 @@
 
 /** GET /admin/audio/api/:id — single track with all metadata */
+// Maak een track ZONDER audiobestand (alleen titel + open-in links). Verschijnt
+// in albums/playlists in de lijst, met open-in-iconen maar zonder afspeelknop.
+router.post('/create-link', requireGod, express.json(), (req, res) => {
+  const site = res.locals.site;
+  if (!site) return res.status(404).json({ error: 'Site required' });
+  const trackId = uuid();
+  const title = ((req.body && req.body.title) || 'Nieuwe track').toString().trim().slice(0, 200) || 'Nieuwe track';
+  try {
+    db.prepare(`
+      INSERT INTO audio_tracks (id, site_id, title, media_id, position)
+      VALUES (?, ?, ?, NULL, COALESCE((SELECT MAX(position) + 1 FROM audio_tracks WHERE site_id = ?), 0))
+    `).run(trackId, site.id, title, site.id);
+  } catch (e) {
+    return res.status(500).json({ error: e.message });
+  }
+  res.json({ ok: true, id: trackId });
+});
+
 router.get('/api/:id', requireGod, (req, res) => {
   const site = res.locals.site;
Index: src/routes/posts.js
===================================================================
--- src/routes/posts.js	(revision 183875b46fb28dbb72cffa7bc53cedaad373f8cd)
+++ src/routes/posts.js	(revision a66f691d99d16426511668251ccb7a7aeafbf7b5)
@@ -537,5 +537,5 @@
       html = AudioEmbedService.embedTrackShortcodes(html, (id) => {
         const r = byId.get(id);
-        if (!r || !r.filename) return null;
+        if (!r) return null;
         return {
           id: r.id,
@@ -548,5 +548,5 @@
           link_youtube: r.link_youtube || '',
           link_soundcloud: r.link_soundcloud || '',
-          url: audioUrl(r.filename),
+          url: r.filename ? audioUrl(r.filename) : '',  // '' = link-only track
         };
       });
@@ -566,9 +566,9 @@
       const byAlbum = new Map();
       for (const r of albumRows) {
-        if (!r.filename) continue;
+        // Link-only tracks (geen bestand) blijven in het album-overzicht (url '').
         if (!byAlbum.has(r.album)) byAlbum.set(r.album, []);
         byAlbum.get(r.album).push({
           id: r.id,
-          url: audioUrl(r.filename),
+          url: r.filename ? audioUrl(r.filename) : '',
           title: r.title || 'Untitled',
           artist: r.artist || '',
