document.addEventListener('DOMContentLoaded', () => {
const BLUESKY_DID = 'did:plc:4qjpcixqrc3b2qmbce76sm7k';
const MUSIC_DID = 'did:plc:l37td5yhxl2irrzrgvei4qay';
async function fetchMusicStatus() {
const url = `https://rose.madebydanny.uk/xrpc/com.atproto.repo.getRecord?repo=${MUSIC_DID}&collection=fm.teal.alpha.actor.status&rkey=self`;
try {
const response = await fetch(url);
if (!response.ok) {
console.error('Music API error:', response.status, response.statusText);
throw new Error('Network response was not ok');
}
const data = await response.json();
console.log('Music data:', data);
if (data && data.value && data.value.item) {
const item = data.value.item;
const artists = item.artists.map(a => a.artistName).join(', ');
const trackUrl = item.originUrl || '#';
document.getElementById('music-link-icon').innerHTML = `↗`;
document.getElementById('music-ui-content').innerHTML = `
${item.trackName}
by ${artists}
`;
document.getElementById('music-status-card').style.display = 'block';
} else {
console.warn('No music data found');
}
} catch (error) {
console.error('Error fetching music:', error);
// Show card anyway with error message
document.getElementById('music-ui-content').innerHTML = 'No recent music activity';
document.getElementById('music-status-card').style.display = 'block';
}
}
async function fetchLatestPost() {
const url = `https://public.api.bsky.app/xrpc/app.bsky.feed.getAuthorFeed?actor=${BLUESKY_DID}&limit=1`;
try {
console.log('Fetching post from:', url);
const response = await fetch(url);
if (!response.ok) {
console.error('Post API error:', response.status, response.statusText);
const errorText = await response.text();
console.error('Error response:', errorText);
throw new Error(`HTTP ${response.status}`);
}
const data = await response.json();
console.log('Post data:', data);
if (data.feed && data.feed.length > 0) {
const latest = data.feed[0].post;
const record = latest.record;
const rkey = latest.uri.split('/').pop();
const postUrl = `https://bsky.app/profile/madebydanny.uk/post/${rkey}`;
// Set Text and Date
document.getElementById('post-content').innerText = record.text || "";
document.getElementById('post-date').innerText = new Date(record.createdAt).toLocaleString();
document.getElementById('post-link-icon').innerHTML = `↗`;
// Handle Images (Embeds)
const mediaContainer = document.getElementById('post-media');
mediaContainer.innerHTML = ''; // Clear previous
if (record.embed && record.embed.$type === 'app.bsky.embed.images') {
record.embed.images.forEach(img => {
const imgRef = img.image.ref.$link;
const imgSrc = `https://cdn.bsky.app/img/feed_fullsize/plain/${BLUESKY_DID}/${imgRef}@jpeg`;
const imgElement = document.createElement('img');
imgElement.src = imgSrc;
imgElement.alt = img.alt || "Bluesky post image";
imgElement.className = 'post-image';
mediaContainer.appendChild(imgElement);
});
}
document.getElementById('latest-post-card').style.display = 'block';
} else {
console.warn('No posts found in feed');
document.getElementById('post-content').innerHTML = 'No posts found';
document.getElementById('latest-post-card').style.display = 'block';
}
} catch (error) {
console.error('Error fetching post:', error);
document.getElementById('post-content').innerHTML = `Error loading post: ${error.message}`;
document.getElementById('latest-post-card').style.display = 'block';
}
}
fetchMusicStatus();
fetchLatestPost();
});