- Remove ASCII art for cleaner, simpler interface
- Keep nerdy subtitle: '⚡ I compile ML systems knowledge'
- Simplify banner and about screen
- Maintain professional, clean appearance
- Add ./binder publish command with confirmation
- Add ./binder about command with system status
- Add beautiful ASCII art with proper alignment
- Add nerdy subtitle: 'I compile ML systems knowledge for the world'
- Improve help and shortcuts (add 'a' for about, 'pub' for publish)
- Add confirmation warning for publishing
- Update documentation to reflect new commands
Addresses minor visual inconsistencies in console output by adjusting the spacing before the hammer emoji.
Improves the overall user experience by providing cleaner and more visually appealing output during build processes.
Refines the build output by adjusting the indentation for better readability.
The change adds a single space to the beginning of the build messages, improving their visual alignment in the console.
- Changed format from '🔗 _quarto.yml → target' to '→ _quarto.yml: target'
- Removed emoji clutter that was making it hard to see
- Added bold styling and blank line for better separation
- Now stands out clearly against busy build output
- Clean, readable format that's easy to spot at a glance
- Changed from dim grey [dim] to bright cyan [cyan] for symlink info
- Changed warning from dim grey to bright yellow [yellow]
- Important configuration info now stands out instead of fading
- Symlink display: '🔗 _quarto.yml → config/_quarto-html.yml' in cyan
- Warning display: '⚠️ _quarto.yml is NOT a symlink' in yellow
- Changed from: '🔗 _quarto.yml is symlink: config/_quarto-html.yml'
- Changed to: '🔗 _quarto.yml → config/_quarto-html.yml'
- Arrow symbol makes the symlink relationship immediately clear
- More visual and concise display of what points to what
- Added show_symlink_status() method for simple, consistent display
- Shows symlink info at start of: build, preview, switch, clean commands
- Format: '🔗 _quarto.yml is symlink: config/_quarto-html.yml'
- Commands not using _quarto.yml (list, help) don't show symlink info
- Removed redundant symlink displays from individual build methods
- Provides immediate visibility of configuration state for every operation
- Status shows: 'Symlink: config/_quarto-html.yml' or 'NOT a symlink'
- Build shows: '_quarto.yml is symlink: config/_quarto-html.yml'
- Provides direct answer to: is it a symlink + what's the raw target
- Removed decorative arrows for cleaner output
- Show '_quarto.yml → config/<target>' during all build operations
- Added symlink display to build_single, build_multiple_unified, and build_full methods
- Enhanced status command to show clearer symlink arrow format
- Updated BINDER.md documentation with symlink troubleshooting section
- Provides clear visibility of which configuration is active during builds
- Remove EPUB from GitHub workflow valid formats and build steps
- Remove EPUB config references from binder script
- Remove EPUB rendering and compression functions from publish script
- Remove EPUB file patterns from .gitignore
- Update README.md to remove EPUB config reference
- Update help messages to only mention HTML and PDF formats
- Tested binder commands and status functionality
Updates the binder to remove Quarto-generated figure-html
directories, preventing them from being included in the build.
This reduces the size of the final output and avoids including
unnecessary files.
- Replace * with - for building all chapters (shell-safe)
- Add full EPUB format support throughout CLI
- Update all format validation to include epub
- Add epub config path and logic to all build functions
- Update status checking and cleanup to handle EPUB configs
- Fix build_full to run from book/ directory correctly
- Update help screens and examples to use - syntax
- Successfully tested: ./binder build - html, ./binder build - epub
✅ Improved binder command clarity and usability
• Build commands now require explicit format: 'binder build * html' or 'binder build intro pdf'
• Removes ambiguity between HTML/PDF builds - no more defaults
• Uses '*' for building all chapters, making intent clear
• Updated all documentation (README.md, BINDER.md) with new syntax examples
• Maintains backward compatibility by keeping build-full command internally
• Enhanced help text with clear usage examples and error messages
This change makes the CLI more explicit and reduces user confusion about output formats.
Since RICH is now a required dependency, removed all conditional logic:
- Removed try/except import block for rich modules
- Removed RICH_AVAILABLE variable and all associated checks
- Removed fallback print statements for when RICH is unavailable
- Simplified console initialization to always use Console()
- Removed ~70 conditional if statements throughout the code
Result: Cleaner, more maintainable code with the same beautiful output.
✅ Verified: All functionality working correctly after simplification
Enhanced binder to support building multiple chapters together in one
unified Quarto render command instead of sequential separate builds.
Key changes:
- Modified build_multiple() to use unified approach instead of sequential
- Added build_multiple_unified() for single render command execution
- Added set_fast_build_mode_multiple() to configure project.render
with all target chapters simultaneously
- Added open_browser_if_needed() helper method for consistent browser opening
Benefits:
- Faster builds: One Quarto process instead of multiple
- Shared context: Frontmatter and dependencies loaded once
- Unified processing: Quiz injection and cross-refs in single pass
- Better user experience: Single browser window opens with complete site
Usage:
./binder build intro,ml_systems html # Builds both chapters together
./binder build intro html # Single chapter still works
Maintains backward compatibility while significantly improving
multi-chapter build performance and efficiency.
Improved fast build functionality to handle HTML and PDF builds differently:
- HTML builds use project.render configuration for selective rendering
- PDF builds comment out unwanted chapters in book.chapters list
- Added command visibility and better error handling
- Enhanced support for both website and book project types
Major improvement: Replace sidebar commenting with render configuration approach
- Much cleaner and more reliable than commenting/uncommenting sidebar entries
- Uses Quarto's project.render config to explicitly control which files get built
- Preserves full navigation while only building essential files + target chapter
- No more complex backup/restore of YAML modifications
- Eliminates race conditions and file corruption risks
Key changes:
- set_fast_build_mode(): Add render config instead of commenting sidebar
- ensure_clean_config(): Remove render restrictions cleanly
- restore_config(): Simple backup restoration
- Removed old comment_qmd_files() complexity
- Updated clean() to use new approach
- Simplified check_artifacts() for new workflow
Benefits:
- 83% faster builds (from fix-quiz-callouts research)
- More robust and maintainable code
- Cleaner separation of concerns (navigation vs build control)
- Better error handling and recovery
This brings the best improvements from the fix-quiz-callouts branch while
maintaining all our recent navigation and multiple chapter enhancements.
Enhanced binder to support building multiple chapters in a single command:
- New syntax: binder build intro,ml_systems,opt [format]
- Comma-separated chapter names automatically parsed and processed
- Sequential building with progress tracking and status reports
- Smart browser opening: only opens for the last chapter in HTML builds
- Comprehensive error handling and success reporting
Technical Implementation:
- Split build() into build(), build_multiple(), and build_single()
- Added chapter list parsing and validation
- Enhanced progress display with chapter counters
- Maintains all existing single-chapter functionality
- Updated help text and examples for new syntax
User Experience:
- Build multiple related chapters efficiently
- Clear progress indication: Chapter 1/3, Chapter 2/3, etc
- Summary reporting: successful vs failed builds
- Same robust config restoration and signal handling
- Backward compatible with existing single chapter commands
Examples:
- binder b intro,ml_systems,opt html
- binder build training,ops pdf
- ./binder b intro,dl_primer (defaults to HTML)
This enhancement significantly improves developer productivity when working
with multiple related chapters while maintaining the reliability and
user experience of single chapter builds.
🌐 Perfect workflow enhancement for binder builds:
- Parse quarto output for Output created: lines
- Auto-open HTML files in browser after successful builds
- Fixed quarto path resolution (../../../../ → ../)
- Works with all shorthand commands: binder b intro html
🚀 Enhanced run_command method:
- Added capture_for_parsing parameter
- Captures output while still streaming to terminal
- Returns tuple (success, output) when capturing
🎯 Seamless developer experience:
- Build and immediately see results
- No manual file navigation needed
- Works consistently across all chapters
- Only opens browser for HTML builds (not PDF)
🔧 Smart path handling:
- Corrects quarto relative path calculation
- Resolves absolute paths from book directory
- Robust file existence checking
- Clear error messages if file not found
✅ Tested extensively:
- binder b intro html → works perfectly
- binder build ml_systems html → auto-opens
- All chapter variations working
- Path resolution verified correct
✅ Complete protection against config corruption:
- Added SIGINT/SIGTERM handlers to both build() and preview()
- Robust backup creation with verification and error handling
- Enhanced restore_config() with multiple fallback strategies
- Bulletproof cleanup in try/finally blocks
🔒 Safety features:
- Backup files: .fast-build-backup with metadata preservation
- Signal detection: 'Ctrl+C detected - restoring config...'
- Multiple restoration paths: backup → uncomment → error handling
- No leftover files: Perfect cleanup every time
🎯 User safety guarantee:
- YAML files always restored to pristine state
- Interruption at any point → automatic restoration
- Visual confirmation of restoration success
- Zero risk of corrupted configurations
Perfect implementation of user requirement for bulletproof Ctrl+C handling
✅ Major breakthrough:
- Fixed chapter builds to render ONLY the target file
- No more auto-discovery processing 66 files unnecessarily
- Uses 'quarto render [single-file] --to [format]' approach
- Dramatically faster builds (~11s vs previous long process)
🎯 Perfect implementation of user requirement:
"when i say build intro then it should only build introduction.qmd"
📊 Results:
- Before: [1/66] files processed (auto-discovery hell)
- After: Only 1 target file processed (lightning fast)
- Success: build/html/contents/core/introduction/introduction.html
🏆 Book Binder now delivers exactly what was requested
✨ Major transformation:
- Rename 'bb' → 'binder' (more intuitive Book Binder metaphor)
- Complete self-contained Python CLI (no Makefile dependency)
- All build logic moved from Makefile to Python
- Beautiful rich terminal interface with panels, tables, trees
- Professional Book Binder branding throughout
🚀 Features:
- Fast chapter builds: ./binder build intro pdf
- Preview server: ./binder preview ops
- Full book builds: ./binder build-full html
- Config management: ./binder switch pdf
- Status & listing: ./binder status, ./binder list
- Shortcuts: b, p, bf, pf, c, s, st, l, h
🎨 User Experience:
- Gorgeous progress indicators with spinners
- Organized help with color-coded sections
- Hierarchical chapter tree display
- Clean status panels
- Intuitive command structure
The Book Binder is now a professional, standalone development tool