We can't find the internet
Attempting to reconnect
Something went wrong!
Hang in there while we get back on track
Changelog
A living document of updates, improvements, and milestones for this blog.
Upcoming Features
- → Search functionality with type filtering
 - → Analytics dashboard with content type insights
 - → Social sharing buttons for posts
 - → Custom 404 and error pages
 - → Book API Integration (fetch book details from ISBN)
 - → Project screenshots gallery with lightbox
 - → Reading statistics and yearly book challenges
 - → GitHub API integration for project stats
 - → Type-specific RSS feeds (/projects/feed.xml, /readings/feed.xml)
 - → Comments system with AI moderation
 - → Newsletter integration with content type preferences
 - → Dark mode toggle
 
Recent Technical Improvements
🕐 UTC Infrastructure & Timezone Support
Complete UTC standardization across server, containers, and cron jobs. UK timezone display layer with centralized TimeHelper module. All dates stored in UTC, displayed in Europe/London timezone.
🔐 Production Security & Deployment
Secure environment variable configuration with production-ready setup. Enhanced CSP headers for Monaco editor support. Gzip compression for static assets. Alpine Linux compatibility for smaller container footprint.
💾 Automated Backup System
Production-grade backup scripts with Google Drive integration via rclone. Host-based execution for reliability. Daily automated backups at midnight UTC with proper error handling.
📄 Pagination & Navigation
URL-based pagination with Ecto query optimization using limit/offset. Reusable pagination component with smart page ranges. JavaScript hooks for scroll-to-top on navigation. LiveView lifecycle optimization with mount vs handle_params separation.
🎯 Multi-Content-Type Architecture
Polymorphic content system with post_type field enabling blog posts, projects, and readings. Type-specific fields stored in same table with smart validation based on content type. Automatic URL routing (/post/, /project/, /reading/) based on type.
📝 Dynamic Form System
Phoenix LiveView-powered forms that show/hide fields based on content type selection. Tech stack stored as PostgreSQL array with comma-separated input parsing. Rating validation only for reading type.
🔧 RSS/Atom Implementation
Using Atomex library with custom XML generator for feed compatibility. Includes validation fixes for iframe removal and proper entity encoding.
🔒 Registration Control
Environment-based registration control with single-user mode for production deployments on Hetzner.
📁 Content Organization
Hierarchical categories, post series with ordering, draft revisions, and enhanced SEO fields across all content types.
🖼️ Media Management
Centralized upload system with image gallery, automatic file organization, and integration with blog posts.
v3.3.0
Latest 04 November 2025- ✓ UTC Infrastructure: Complete timezone standardization with UTC at infrastructure level and UK display timezone
 - ✓ Production Backup System: Automated daily backups to Google Drive with host-based execution for reliability
 - ✓ Security Enhancements: Secure environment configuration, CSP headers, and production optimizations
 - ✓ UI Consistency: Fixed auth layout footer to match main blog design
 - ✓ Dependency Updates: Resolved XML builder conflicts, replaced md with earmark for better compatibility
 - ✓ Admin Tools: Added create_admin function for easier production user management
 - ✓ Performance: Enabled gzip compression for static assets in production
 
v3.2.0
June 30, 2024- • Pagination System: Implemented across all content pages with URL-based state for bookmarkable pages
 - • Scroll-to-Top Navigation: Automatic page top scrolling on pagination and navigation clicks for better UX
 - • Reusable Pagination Component: Smart page range display with first/last/current page logic
 - • Content-Specific Pagination: Maintained rating groups for readings, series order, and grid layouts
 - • Performance Optimization: Efficient query limits and offsets for faster page loads
 - • Mobile-Friendly Pagination: Responsive controls that work well on all screen sizes
 - • Admin Pagination: Added to admin posts list with content type filtering preserved
 
v3.1.0
June 22, 2025- • Multi-Content-Type System: Support for blog posts, projects, and book reviews with type-specific fields
 - • Project Showcase: Dedicated project pages with tech stack display, demo links, and GitHub integration
 - • Reading List: Book review system with ratings, author info, ISBN tracking, and date read
 - • Dynamic Content Forms: Type-specific fields appear dynamically based on content type selection
 - • Smart URL Routing: Automatic URL prefixes (/post/, /project/, /reading/) based on content type
 - • Enhanced Admin: Unified content management with type filtering and proper edit links
 - • Type-Specific Templates: Custom display layouts for projects (with tech badges) and readings (with star ratings)
 
v3.0.0
June 14, 2025- • RSS/Atom Feed System with main, category, series, and tag-specific feeds
 - • Content Organization with hierarchical categories and series
 - • Media Management with upload system and gallery view
 - • Enhanced Editor with Tailwind Typography integration
 - • Single-user blog mode with registration prevention
 - • SEO Improvements with meta tags and sitemap generation
 - • Feed Discovery with auto-discovery links and OPML export
 
v2.0.0
June 11, 2024- • Complete tag system implementation with many-to-many relationships
 - • Docker containerization for development environment
 - • Improved sidebar design with active tag highlighting
 - • Sticky footer implementation
 - • Migration from Fly.io to Hetzner deployment strategy
 
v1.5.0
March 15, 2024- • Added Monaco editor for markdown editing
 - • Implemented draft and publish workflow
 - • User authentication system
 - • Basic tag creation functionality
 
v1.0.0
March 9, 2024- • Initial blog setup with Phoenix LiveView
 - • Basic post creation and display
 - • Custom Tailwind styling with SNPro and Calistoga fonts
 - • Responsive design implementation