Commit Graph

108 Commits

Author SHA1 Message Date
stellarshenson
6cfd8a9af5 docs: reorganize README screenshots with explanations before images
Reordered User Interface section:
- Home control panel (server restart and volume management)
- Volume management screenshots grouped together
- Admin notification broadcast (last)

Changed format: explanation text with heading before each screenshot image,
replacing italic captions below images for better readability.
2025-11-09 22:25:11 +01:00
stellarshenson
47b4bd094c docs: update journal entry to reflect minimal documentation style
Updated entry #11 to accurately reflect the super-minimal modus primaris style
approach with line counts for each documentation file (35, 55, 66 lines) and
emphasis on "glimpse of implementation" rather than comprehensive coverage.
2025-11-09 22:24:23 +01:00
stellarshenson
7ba01412d1 docs: simplify documentation to minimal modus primaris style
Drastically reduced documentation length focusing only on essential
implementation facts:

- doc/notifications.md: Reduced from 250 to 35 lines - key technical facts,
  handler implementation, template details, dependencies, error handling
- doc/ui-template-customization.md: Reduced from 132 to 55 lines - technical
  facts, JavaScript patterns, Bootstrap 5 syntax, CSRF protection, build process
- doc/docker-socket-permissions.md: Reduced from 186 to 66 lines - implementation
  facts, pre-spawn hook code, built-in group system, security implications, usage

All documentation now follows super-minimal "glimpse of implementation" approach
with bullet points and code snippets, absent of lengthy narrative and marketing
language.
2025-11-09 22:23:54 +01:00
stellarshenson
f1dcf61db7 docs: update journal with documentation and screenshots entry
Added entry #11 documenting comprehensive documentation creation for
notification system, UI customization, and Docker socket permissions. Also
documented screenshot updates in README.md replacing restart server image with
complete control panel view and adding admin notification broadcast interface.
2025-11-09 22:21:18 +01:00
stellarshenson
9eda62edd7 docs: add comprehensive documentation and update screenshots
Added three new documentation files following modus primaris style:
- doc/ui-template-customization.md: Guide for extending JupyterHub UI
  templates with RequireJS, Bootstrap 5, CSRF protection, and custom handlers
- doc/docker-socket-permissions.md: Docker socket access control documentation
  covering group-based permissions, security implications, and best practices
- doc/notifications.md: Complete notification broadcast system documentation
  including implementation details, API integration, error handling, and
  troubleshooting

Updated UI screenshots in README.md:
- Replaced screenshot-restart-server.png with screenshot-home.png showing
  complete user control panel (restart server + volume management)
- Added screenshot-send-notification.png showing admin notification broadcast
  interface with message composer, type selector, and delivery results

All documentation follows consistent structure: brief overview, key facts in
bullet points, explanatory narrative, and technical specifications without
excessive nesting or marketing language.
2025-11-09 22:20:28 +01:00
stellarshenson
c6dfe89c84 docs: update CLAUDE.md with accurate notification system details
Updated notification broadcast system documentation in .claude/CLAUDE.md to
reflect actual implementation details:

- Corrected message character limit from 500 to 140 characters
- Updated notification type list to include all 6 types (default, info, success,
  warning, error, in-progress) instead of just 4
- Clarified authentication mechanism: temporary token generation with 5-minute
  expiry via user.new_api_token() rather than retrieving existing tokens
- Fixed endpoint URL pattern showing correct base_url interpolation
- Corrected extension endpoint path (hyphen not underscore)
- Added Dismiss button feature to UI features list
- Updated error handling to include HTTP 500 and logging details
- Added explanation of one-line logging per server delivery

These changes ensure the embedded configuration accurately documents the
notification broadcast feature as implemented in version 3.2.0.
2025-11-09 22:17:38 +01:00
stellarshenson
0e39fac7ac feat: add admin notification broadcast system for active JupyterLab servers
Implemented comprehensive notification broadcast functionality allowing
administrators to send notifications to all active user JupyterLab servers
simultaneously through a dedicated admin panel.

Core Features:
- Admin-only notification panel accessible at /hub/notifications
- Concurrent delivery to all active servers using asyncio with 5s timeout
- Temporary API token generation (5-minute expiry) for authentication
- Support for 6 notification types: default, info, success, warning, error, in-progress
- 140-character message limit with live character counter
- Auto-close toggle and dismiss button in notifications
- Dynamic endpoint URL construction using spawner.server.base_url
- Comprehensive error handling with user-friendly messages
- One-line logging per server with message preview and outcome

Technical Implementation:
- Created BroadcastNotificationHandler in custom_handlers.py
- Created NotificationsPageHandler for admin UI rendering
- Added notifications.html template with Bootstrap 5 form
- Registered handlers in jupyterhub_config.py extra_handlers
- Sends to /jupyterlab-notifications-extension/ingest endpoint
- Payload includes type, message, autoClose, and actions array
- Navigation link added to home.html for admin access

Integration:
- Requires jupyterlab_notifications_extension installed on JupyterLab servers
- Uses correct payload format (type field, not variant)
- Includes Dismiss action button for manual notification closure

Documentation:
- Updated .claude/CLAUDE.md with complete feature documentation
- Updated README.md Features section with notification broadcast details
- Updated .claude/JOURNAL.md with implementation summary
- Removed obsolete FEATURE_PLAN.md

Version: 3.2.0 (bumped from 3.1.2)
2025-11-09 22:05:06 +01:00
stellarshenson
067b613397 feat: add group-based docker.sock access control for privileged users
Implemented built-in protected group system enabling admins to grant trusted users read-write Docker socket access within their JupyterLab containers. Groups are managed through admin panel and cannot be permanently deleted.
RELEASE_3.1.2
2025-11-05 20:15:30 +01:00
stellarshenson
f126571fb2 docs: update journal with production readiness work
- Document visual enhancements with Font Awesome icons
- Note GitHub Actions CI/CD implementation
- Record architecture diagram addition to README
- Document critical custom_handlers import fix
- Note built-in config feature
- Record git history cleanup (removed co-authoring)
- Version progression 3.0.20 -> 3.0.23
2025-11-04 23:33:49 +01:00
stellarshenson
09e69e9467 fix: prevent Docker Compose from pulling image after build
- Add pull_policy: build to jupyterhub service
- Forces Docker Compose to use locally built image
- Prevents unnecessary pulls from Docker Hub after building

Now 'docker compose up' will use the local image built with 'make build'
2025-11-04 23:30:22 +01:00
stellarshenson
db483de36d feat: build jupyterhub_config.py into Docker image by default
- Change Docker build context from services/jupyterhub to project root
- Copy config/jupyterhub_config.py into image at /srv/jupyterhub/jupyterhub_config.py
- Users can still override with volume mount if needed
- Update all COPY paths in Dockerfile to reflect new build context
- Enables container to work out-of-the-box without external config file

Benefits:
- Image is self-contained and ready to run without dependencies
- Volume mount remains optional for custom configurations
- Default config includes GPU auto-detection and self-service features
2025-11-04 23:25:17 +01:00
stellarshenson
e8bf0b7c54 updated 2025-11-04 23:20:46 +01:00
stellarshenson
e985786499 fix: add /srv/jupyterhub to Python path for custom_handlers import
- Add /srv/jupyterhub to sys.path before importing custom_handlers
- Separate shell scripts and Python files in Dockerfile COPY commands
- Resolves ModuleNotFoundError for custom_handlers module
- JupyterHub now starts successfully with custom API handlers
RELEASE_3.0.21 STABLE_3.0.21_cuda-12.9.1_jh-5.4.2
2025-11-04 11:06:25 +01:00
stellarshenson
274237ee7c docs: remove fill colors from architecture diagram for transparent background
- Remove fill colors from mermaid diagram nodes
- Keep stroke colors and widths for visual distinction
- Improves compatibility with different GitHub themes (light/dark mode)
2025-11-04 10:54:10 +01:00
stellarshenson
a296338db1 docs: reorganize README with architecture diagram and improved structure
- Add mermaid diagram illustrating JupyterHub architecture and user flow
- Move screenshots higher in document under dedicated User Interface section
- Visualize relationships between Traefik, Hub, Spawner, and user containers
- Show per-user volumes and shared storage configuration
- Improve document flow: Architecture -> UI -> Features -> Setup
2025-11-04 10:53:12 +01:00
stellarshenson
d03faf4f2a chore: remove specific tag format from CI/CD workflow
- Remove tag-based trigger constraint from GitHub Actions workflow
- Workflow now triggers only on push to main, PRs, and manual dispatch
- Simplifies workflow triggers and removes version-specific pattern
2025-11-04 10:51:46 +01:00
stellarshenson
64e2a9d557 fix: pin JupyterHub base image to version 5.4.2
- Replace 'latest' tag with explicit version 5.4.2
- Resolves hadolint DL3007 warning in CI/CD pipeline
- Ensures reproducible builds and prevents unexpected breaking changes
2025-11-04 10:51:04 +01:00
stellarshenson
d9896a7073 feat: add icons to buttons and auto-refresh on stop, implement GitHub Actions CI/CD
UI Enhancements:
- Add Font Awesome icons to all control buttons (stop, start, restart, manage volumes)
- Auto-refresh page after server stop with smooth UI transitions
- Hide/show appropriate buttons based on server state (Restart vs Manage Volumes)
- Re-inject icons removed by JupyterHub's DOM manipulation

Technical Implementation:
- MutationObserver watches for JupyterHub DOM changes after stop
- Immediate UI state correction before page refresh
- Comprehensive console logging for debugging

CI/CD:
- Add GitHub Actions workflow for Dockerfile validation with hadolint
- Triggers on push to main, version tags, and pull requests
- Uses hadolint to ensure Dockerfile best practices
2025-11-04 10:49:32 +01:00
stellarshenson
99236350d4 docs: add release notes for v3.0.14 2025-11-04 10:26:19 +01:00
stellarshenson
c06baa8372 docs: add features section and screenshots to README v3.0.14
Documentation enhancements:
- Add comprehensive Features section highlighting key capabilities
- Document GPU auto-detection, user self-service, isolated environments
- Include production-ready features (Traefik, TLS, Watchtower)
- Add Self-Service Volume Management subsection with visual examples
- Include three screenshots demonstrating UI features:
  - Restart Server button (active state)
  - Manage Volumes button (stopped state)
  - Volume selection modal (checkbox interface)
- Position screenshots prominently after feature list
- Provide one-sentence descriptions for each screenshot

Technical updates:
- Increase Stop Server refresh delay to 3 seconds for stability
- Update version to 3.0.14

Screenshots stored in .resources/ directory for future reference
2025-11-04 10:16:45 +01:00
stellarshenson
cd74fc71db feat: evolve user self-service to multi-volume management v3.0.12
Major enhancements to self-service features:
- Transform single volume reset to multi-volume selection (home/workspace/cache)
- Add Font Awesome icons to buttons (fa-rotate, fa-database)
- Fix Bootstrap 5 modal compatibility (data-bs-*, btn-close)
- Fix template inheritance to properly extend default home.html
- Wrap JavaScript in RequireJS callback for proper module loading
- Implement page refresh after Stop/Manage/Restart actions
- Update API endpoint to /api/users/{username}/manage-volumes
- Backend processes multiple volumes with detailed response
- Add Makefile logs target for container log monitoring

Technical fixes:
- Add default JupyterHub templates to template_paths configuration
- Convert modal triggers from Bootstrap 4 to Bootstrap 5 syntax
- Update JavaScript to use Bootstrap 5 Modal getInstance API
- Add json import to custom_handlers.py for request body parsing

Version: 3.0.12_cuda-12.9.1_jh-5.4.2
2025-11-04 10:07:07 +01:00
stellarshenson
bc16b0ca4b debug: add console logging to custom handlers for troubleshooting
- Add console.log statements to track button clicks and API calls
- Log username, base URL, and button existence on page load
- Log success/error responses from API calls
- Help diagnose why restart server button does nothing
2025-11-03 20:44:18 +01:00
stellarshenson
0468a0da98 fix: properly extend jupyterhub default home template
- Replace custom template with proper extension of default home.html
- Keep all default functionality (Start/Stop, named servers, admin panel)
- Use correct template variables (default_server.active, base_url)
- Add custom buttons alongside existing controls
- Preserve default JavaScript (require home.js)
- Fix 404 errors on spawn and admin panel access
2025-11-03 20:39:29 +01:00
stellarshenson
2660d6a659 feat: add stop target to makefile
- Add stop target to gracefully stop and remove containers
- Respects compose_override.yml if present
- Stops containers without removing images or volumes
2025-11-03 20:32:39 +01:00
stellarshenson
a18024f1d9 fix: implement manual permission checking in custom handlers
- Remove non-existent @admin_or_self decorator
- Replace with manual permission validation using current_user
- Check authentication and admin/self access explicitly
- Use tornado.web.HTTPError for 403 responses
2025-11-03 20:28:37 +01:00
stellarshenson
c375c51c6d docs: update journal with feature implementation 2025-11-03 20:24:36 +01:00
stellarshenson
3e52a91924 feat: implement reset home volume and restart server features
- Add custom API handlers for volume reset and server restart
- Create custom home.html template with self-service buttons and modals
- Register handlers in jupyterhub_config.py with @admin_or_self permissions
- Update Dockerfile to copy templates and handlers
- Add custom templates path to JupyterHub configuration
- Update .claude/CLAUDE.md with feature documentation
- Reset Home Volume: DELETE /hub/api/users/{username}/reset-home-volume
- Restart Server: POST /hub/api/users/{username}/restart-server
- Both features use Docker API directly via /var/run/docker.sock
2025-11-03 20:24:20 +01:00
stellarshenson
be8c8f2428 feat: add project documentation, feature plan, and version management
- Add .claude/CLAUDE.md with comprehensive architecture documentation
- Add .claude/JOURNAL.md for tracking substantive work
- Add FEATURE_PLAN.md for Reset Home Volume and Restart Server features
- Add project.env with version tracking (1.0.0_jh-4.x)
- Update Makefile with increment_version and tag targets
- Implement auto-versioning on build and dual-tag push workflow
2025-11-03 20:18:52 +01:00
Konrad Jeleń
b28cbe7570 Remove GitHub Stars badge from README
Removed GitHub Stars badge from README.
2025-10-26 18:43:57 +01:00
stellarshenson
cfd62254dd feat: add docker pulls and github stars badges to readme
Added Docker pulls badge and GitHub stars badge alongside existing Docker image size badge for better project visibility and metrics tracking.
2025-10-26 17:37:56 +00:00
stellarshenson
4aa047e103 added line to pull jupyterlab 2025-10-26 11:36:19 +01:00
stellarshenson
42b23a547d returned back to CUDA 12.9.1 2.11.35_cuda-12.9.1_jh-5.4.2 v2.11-cuda-12.9.1 2025-08-10 21:55:59 +02:00
stellarshenson
f76ee8711a makde package leaner v2.10-cuda-13.0.0 2025-08-10 04:42:06 +02:00
stellarshenson
fd991f3d4d updated to have certs still sourced from a volume 2025-08-10 04:39:02 +02:00
stellarshenson
3e0780a41b added certs for traefik 2025-08-10 04:33:47 +02:00
stellarshenson
15d7b023fc removed need to certs volume 2025-08-10 04:33:04 +02:00
stellarshenson
a5ffcdb1f8 updated to have certificates mounted externally 2025-08-10 04:31:59 +02:00
stellarshenson
254d5670d6 updated to support latest CUDA 13.0 v2.9 2025-08-10 04:22:21 +02:00
stellarshenson
6502e8a109 updated with the latest CUDA version 13.0.0 2025-08-10 04:02:22 +02:00
stellarshenson
d034d41dd4 updated permissions 2025-08-08 20:16:08 +02:00
stellarshenson
41dabb0dcb added restore script for backup volumes 2025-08-08 20:01:52 +02:00
stellarshenson
fba2347463 updated readme 2025-08-08 01:46:26 +02:00
stellarshenson
ba81dd63c2 updated with configurable nvidia autodetect image 2025-08-08 00:52:17 +02:00
stellarshenson
51106cb81b updated with enhanved autodetection routine for nvidia v2.8 2025-08-08 00:50:41 +02:00
stellarshenson
1f0def6823 small bugs 2025-08-07 22:43:33 +02:00
stellarshenson
dccd14d6cc updated env variables 2025-08-07 22:42:12 +02:00
stellarshenson
99713fc557 updated to fix the issue with test container 2025-08-07 22:37:05 +02:00
stellarshenson
f5fd86adbf another fix 2025-08-07 22:29:37 +02:00
stellarshenson
293e2af741 fixed the way nvidia autodetection works 2025-08-07 21:52:56 +02:00
stellarshenson
caeb47d0bd updated nvidia detection 2025-08-07 21:40:24 +02:00