Implement fallback mechanisms for YouTube video data and add startup
validation for blog post ordering.
- Add `loadVideosJSON` to persist and reload video data from disk.
- Update `refreshVideos` to retain existing local videos if the YouTube
API returns an empty response.
- Add `validateBlogOrdering` to perform a health check on blog post
sequence during startup.
- Call video loading and blog validation in `main`.
Refactor the blog listing logic to use a canonical numeric ID when available. This ensures consistent identity and deduplication between numeric and slug-based filenames, and ensures image path resolution uses the correct identifier.
- Modified blog handler to resolve slugs to numeric files when slug files don't exist
- This allows slug URLs to work without creating duplicate slug files
- Fixes sorting issues while maintaining slug URL compatibility
- When files have recent timestamps (from setup script), sort by numeric ID
- Higher numeric IDs represent newer blogs
- This ensures proper chronological ordering in admin interface
- Remove duplicate slug files that were causing duplicate entries
- Add logic to find corresponding numeric ID for image paths
- This fixes broken images in admin interface for slug-based blogs
- Add deduplication logic to avoid showing same blog twice
- Add extractBlogID function to get correct numeric ID from meta tags
- Use blogID for image paths instead of filename ID
- This fixes duplicate entries in admin interface and broken images
- Fix listLatestBlogs function to use correct blog directory path
- Add /data/blog-list.json endpoint for frontend blog listing
- Update remoteBlogDir references to use blogDir
- Resolve blog listing and admin interface loading issues