Your query is ✅ but returns 0️⃣ result.
SELECT *, min(start) AS next FROM calendar INNER JOIN events USING (id) WHERE status = 'published' AND calendar.start > strftime('%Y-%m-%d', 'now') GROUP BY id ORDER BY random() LIMIT 1