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
This commit is contained in:
stellarshenson
2025-11-04 10:16:45 +01:00
parent cd74fc71db
commit c06baa8372
7 changed files with 29 additions and 3 deletions

View File

@@ -21,3 +21,6 @@ This journal tracks substantive work on documents, diagrams, and documentation c
6. **Task - Enhance and fix self-service features**: Evolved volume management from single home volume to multi-volume selection, fixed Bootstrap 5 compatibility, added visual enhancements<br>
**Result**: Transformed ResetHomeVolumeHandler into ManageVolumesHandler supporting selective reset of home/workspace/cache volumes via checkboxes in UI, fixed template inheritance to properly extend JupyterHub's default home.html (resolving 404 errors), updated to Bootstrap 5 modal API (data-bs-toggle, data-bs-target, btn-close), wrapped JavaScript in RequireJS callback for proper module loading, added Font Awesome icons (fa-rotate for restart, fa-database for volumes), implemented automatic page refresh after Stop Server/Manage Volumes/Restart Server actions, updated API endpoint to `/api/users/{username}/manage-volumes` accepting JSON body with volume array, backend now processes multiple volumes and returns detailed success/failure response, bumped version to 3.0.12 reflecting major feature enhancement
7. **Task - Document self-service features in README**: Updated README with features section and screenshots demonstrating new self-service capabilities<br>
**Result**: Added comprehensive Features section with bullet points covering GPU auto-detection, user self-service, isolated environments, native authentication, shared storage, and production-ready setup, created Self-Service Volume Management subsection with three screenshots (restart server button, manage volumes button, volume selection modal) and one-sentence descriptions for each, positioned visual documentation prominently after feature list to demonstrate user-facing functionality

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

BIN
.resources/screenshot-volumes.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -11,6 +11,28 @@ By default system is capable of **automatically detecting** NVIDIA CUDA-supporte
This deployment provides access to a centralized JupyterHub instance for managing user sessions. Optional integrations such as TensorBoard, MLFlow, or Optuna can be added manually via service extensions.
## Features
- **GPU Auto-Detection**: Automatic NVIDIA CUDA GPU detection and configuration for spawned user containers
- **User Self-Service**: Users can restart their JupyterLab containers and selectively reset persistent volumes (home/workspace/cache) without admin intervention
- **Isolated Environments**: Each user gets dedicated JupyterLab container with persistent volumes via DockerSpawner
- **Native Authentication**: Built-in user management with NativeAuthenticator supporting self-registration and admin approval
- **Shared Storage**: Optional CIFS/NAS mount support for shared datasets across all users
- **Production Ready**: Traefik reverse proxy with TLS termination, automatic container updates via Watchtower
### Self-Service Volume Management
Users can restart their server or selectively reset volumes when the server is stopped:
![Restart Server](.resources/screenshot-restart-server.png)
*Restart running JupyterLab container directly from the user control panel*
![Manage Volumes](.resources/screenshot-volumes.png)
*Access volume management when server is stopped*
![Volume Selection](.resources/screenshot-volumes-modal.png)
*Select individual volumes to reset - home directory, workspace files, or cache data*
## References
This project spawns user environments using docker image: `stellars/stellars-jupyterlab-ds`

View File

@@ -3,7 +3,7 @@ PROJECT_NAME="stellars-jupyterhub-ds"
PROJECT_DESCRIPTION="Multi-user JupyterHub 4 deployment platform with data science stack, GPU auto-detection, NativeAuthenticator, and isolated per-user environments spawned via DockerSpawner"
# Version
VERSION="3.0.12_cuda-12.9.1_jh-5.4.2"
VERSION="3.0.14_cuda-12.9.1_jh-5.4.2"
VERSION_COMMENT="Multi-user JupyterHub with GPU auto-detection, self-service volume management (home/workspace/cache), and container restart capabilities"
# Author

View File

@@ -379,11 +379,12 @@
// Monitor for when button changes state (becomes start button)
const checkInterval = setInterval(function() {
if ($('#stop').length === 0 && $('#start').length > 0) {
console.log('[Stop Server] Server stopped, refreshing page...');
console.log('[Stop Server] Server stopped, waiting before refresh...');
clearInterval(checkInterval);
setTimeout(function() {
console.log('[Stop Server] Refreshing page now');
location.reload();
}, 1000);
}, 3000); // Wait 3 seconds after stop completes before refreshing
}
}, 500);