QualiFi is a web-based WiFi Rate vs Range (RvR) analysis tool for SDG testing. It provides a modern dark-themed interface for visualizing and comparing WiFi performance data across different devices, software versions, and test configurations. The tool supports 2.4GHz, 5GHz, and 6GHz bands with comprehensive TX/RX analysis capabilities.
- Multi-Band Support: 2.4GHz (2G), 5GHz (5G), and 6GHz (6G) WiFi bands
- TX/RX Specific Analysis: Separate columns and parameters for DUT-TX and DUT-RX tests
- Dual Report Formats: Supports both Excel (.xlsx) and PDF report downloads
- Modern UI: Dark theme with Berkeley Mono font (falls back to Poppins)
- Batch Loading: Load multiple test configurations from server simultaneously
- Interactive Visualization: Line/bar charts with detailed hover tooltips showing PHY degradation
- Smart Filtering: Automatically filters invalid data points (channel=0 or throughput=0)
- Web Interface (
public/index.html) - Modern dark-themed user interface - Node.js Server (
server.js) - Serves reports and provides API endpoints - Styling (
public/qualifi.css) - Technical precision dark theme - Client Logic (
public/qualifi.js) - Interactive visualization and analysis - Excel/PDF Reports - LANforge test data in hierarchical directory structure
The server uses a hierarchical report storage system with test configuration folders. Each test configuration folder contains:
- report.xlsx - Required Excel test data file
- Rate-vs-Range-Report.pdf* - Optional PDF report (wildcard matching supported)
reports/
├── [Vendor Name]/
│ ├── logo.png (optional vendor logo - 64x64px)
│ ├── [Model Name]/
│ │ ├── device.png (optional device image - 128x96px)
│ │ ├── [Software Version]/
│ │ │ ├── [Test Config 1]/
│ │ │ │ ├── report.xlsx
│ │ │ │ └── Rate-vs-Range-Report-[details].pdf (optional)
│ │ │ ├── [Test Config 2]/
│ │ │ │ ├── report.xlsx
│ │ │ │ └── Rate-vs-Range-Report-[details].pdf (optional)
│ │ │ └── [Test Config N]/
│ │ │ ├── report.xlsx
│ │ │ └── Rate-vs-Range-Report-[details].pdf (optional)
│ │ └── [Another Version]/
│ │ └── [Test Config]/
│ │ ├── report.xlsx
│ │ └── Rate-vs-Range-Report-[details].pdf (optional)
│ └── [Another Model]/
│ ├── device.png (optional device image)
│ └── [Software Version]/
│ └── [Test Config]/
│ ├── report.xlsx
│ └── Rate-vs-Range-Report-[details].pdf (optional)
└── [Another Vendor]/
├── logo.png (optional vendor logo)
└── ...
reports/
├── Adtran/
│ ├── logo.png
│ ├── SDG-8612/
│ │ ├── device.png
│ │ ├── 25.6.4.1/
│ │ │ ├── 5g_2x2_ch44/
│ │ │ │ ├── report.xlsx
│ │ │ │ └── Rate-vs-Range-Report-5g-2x2-ch44.pdf
│ │ │ ├── 5g_2x2_ch149/
│ │ │ │ ├── report.xlsx
│ │ │ │ └── Rate-vs-Range-Report-5g-2x2-ch149.pdf
│ │ │ └── 6g_2x2_ch37/
│ │ │ ├── report.xlsx
│ │ │ └── Rate-vs-Range-Report-6g-2x2-ch37.pdf
│ │ └── 25.9.1.1/
│ │ └── 5g_4x4_ch44/
│ │ └── report.xlsx
├── Eero/
│ ├── logo.png
│ └── Max7/
│ ├── device.png
│ └── 1.2.3/
│ └── 5g_4x4_ch149/
│ └── report.xlsx
└── Netgear/
├── logo.png
└── RAX80/
├── device.png
└── 3.0.1.4/
└── 5g_4x4_ch44/
└── report.xlsx
Test configuration folder names should be descriptive and follow a consistent pattern:
{band}_{spatial_streams}_{channel}[_{additional_info}]
- 5g_2x2_ch44 - 5GHz, 2x2 MIMO, Channel 44
- 5g_4x4_ch149 - 5GHz, 4x4 MIMO, Channel 149
- 2g_2x2_ch6 - 2.4GHz, 2x2 MIMO, Channel 6
- 6g_2x2_ch37 - 6GHz, 2x2 MIMO, Channel 37
- 6g_4x4_ch1 - 6GHz, 4x4 MIMO, Channel 1 (displayed as CH1 in UI)
- 5g_2x2_ch44_80mhz - 5GHz, 2x2 MIMO, Channel 44, 80MHz bandwidth
- 5g_4x4_ch149_wpa3 - 5GHz, 4x4 MIMO, Channel 149, WPA3 security
- 2g - 2.4GHz (2412-2484 MHz)
- 5g - 5GHz (5160-5885 MHz)
- 6g - 6GHz (5925-7125 MHz)
6GHz channels are automatically converted for display (e.g., channel 191 → CH1)
Ensure Node.js is installed on your system. Download from nodejs.org if needed.
# Clone project
git clone git@github.com:cmonroe/qualifi.git
cd qualifi
# Create reports directory
mkdir reports
# Optional: Add logo image
cp logo.png public/logo.pngnode server.jsThe server will start on http://localhost:3000
Place your Excel test reports and optional PDF reports in the hierarchical directory structure as shown above.
- Hierarchical Browser: Navigate vendors → models → versions
- Version-Level Selection: Select entire versions (all test configs included automatically)
- Visual Elements: Vendor logos and device images with automatic fallback
- Search: Real-time search across vendors, models, versions, and test configs
- Quick Filters:
- Expand/Collapse All navigation
- Select Latest Versions (auto-selects newest version per model)
- Batch loading with progress notifications
- Drag & Drop: Upload Excel files directly from your computer
- Multiple Files: Load and compare multiple local reports
- File Management:
- Clear server files only
- Clear local files only
- Clear all loaded files
- Clear by device model
After loading reports:
- Device Grouping: Tests organized by device with metadata display
- TX/RX Columns: Separate columns for DUT-TX and DUT-RX tests
- Smart Selection:
- Select All/Clear All
- Select by device
- Select Matching (finds common configs across devices)
- Download Links: Direct Excel and PDF download icons for server files
- Test Details: Band, Channel, BW, NSS, Mode, Version display
- Interactive Charts:
- Line or bar chart toggle
- Zoom and pan capabilities
- Solid lines for TX, dotted for RX
- Unique colors per device/configuration
- Advanced Tooltips:
- PHY parameters at each attenuation point
- Degradation indicators (NSS, BW, Mode changes)
- TX/RX specific parameter display
- Performance Statistics:
- Max throughput with trophy indicators
- Average throughput calculations
- Effective range (>10 Mbps threshold)
- Device Comparison:
- Side-by-side comparison table
- Best value highlighting
- Configuration grouping
- Export Options:
- Chart export as PNG
- Full comparison data as CSV
- Typography: Berkeley Mono font with Poppins fallback
- Dark Theme: Technical precision design with high contrast
- Notifications: Success/error notifications with stacking support
- Responsive: Adapts to different screen sizes
Reports must be Excel files (.xlsx) containing:
- Device Under Test Information - Device metadata
- Rate vs Range [N] - Test data (can have multiple)
- Attenuation - Signal attenuation in dB
- Throughput - Data rate in Mbps
- Direction - DUT-TX or DUT-RX
- Channel - WiFi channel number
- Frequency - Center frequency in MHz
- BW - Bandwidth in MHz
- NSS - Number of spatial streams
- Security - Security protocol (e.g., WPA3)
- Mode - PHY mode (e.g., HE, VHT, HT, OFDM)
For more precise analysis, include direction-specific columns:
- TX Mode, TX BW, TX NSS - Used for DUT-TX tests
- RX Mode, RX BW, RX NSS - Used for DUT-RX tests
The tool automatically uses direction-specific columns when available, falling back to standard columns if not present.
- Invalid data points (channel=0 or throughput=0) are automatically filtered
- Band (2G/5G/6G) determined from frequency
- Tests grouped by baseline configuration (attenuation 0 or lowest)
- 6GHz channels converted for display (191+ → 1+)
Returns the complete hierarchical structure of all reports.
{
"vendors": {
"Adtran": {
"logo": "Adtran/logo.png",
"models": {
"SDG-8612": {
"image": "Adtran/SDG-8612/device.png",
"versions": {
"25.6.4.1": {
"testConfigs": {
"5g_2x2_ch44": {
"name": "report.xlsx",
"path": "Adtran/SDG-8612/25.6.4.1/5g_2x2_ch44/report.xlsx",
"size": 45678,
"modified": "2025-01-15T10:30:00.000Z"
}
}
}
}
}
}
}
}
}Search for reports matching the query across all hierarchy levels.
Finds and serves PDF report files using wildcard matching.
- Searches for files matching pattern:
rate-vs-range-report*.pdf - Case-insensitive matching
- Returns first matching PDF in the directory
Download report files or retrieve images:
- Excel reports:
/reports/vendor/model/version/testconfig/report.xlsx - Images:
/reports/vendor/logo.pngor/reports/vendor/model/device.png
The tool automatically detects PDF reports in test configuration directories:
- Naming Pattern:
Rate-vs-Range-Report*.pdf(case-insensitive) - Wildcard Support: Any suffix after the base name is accepted
- Examples:
Rate-vs-Range-Report-5g-2x2-ch44.pdfrate-vs-range-report_2025_01_15.pdfRate-VS-Range-Report-FINAL.pdf
- Size: 64x64 pixels recommended
- Format: PNG with transparency preferred
- Location:
reports/[Vendor]/logo.png
- Size: 128x96 pixels recommended
- Format: PNG or JPG
- Location:
reports/[Vendor]/[Model]/device.png
Images are optional but enhance the visual experience. Missing images are handled gracefully with automatic hiding.
- Consistent Naming: Use standardized folder and file names
- Version Control: Keep original test files separately as backup
- Test Organization: Group related tests logically by configuration
- Data Quality: Ensure Excel files have all required columns
- TX/RX Columns: Include direction-specific columns for accurate analysis
- Regular Updates: Keep software versions current
- PDF Reports: Include PDF versions for complete documentation
- Image Assets: Add logos and device images for better visual navigation
- 6GHz Testing: Use proper channel numbers (raw values will be converted)
- Verify file is named exactly
report.xlsx - Check directory structure (5 levels: vendor/model/version/testconfig/report.xlsx)
- Ensure proper read permissions
- Check server console for error messages
- Verify Excel has required sheets: "Device Under Test Information" and "Rate vs Range"
- Check column headers (case-insensitive, partial matching supported)
- Look for filtered data notifications (channel=0 or throughput=0)
- Review browser console (F12) for detailed errors
- Ensure PDF follows naming pattern:
Rate-vs-Range-Report*.pdf - Check file exists in same directory as report.xlsx
- Verify read permissions on PDF file
- Berkeley Mono loads if available, falls back to Poppins
- Google Fonts loads automatically for Poppins fallback
- Check browser console for font loading messages