Mark incomplete features as under construction and implement v0.0.2 release

- Mark incomplete statistics charts with construction notices
- Disable non-functional 3D radar controls
- Implement collapsible Display Options menu (defaults to collapsed)
- Add toast notifications for better error feedback
- Update version to 0.0.2 across all files and packages
- Improve Debian packaging with root-owner-group flag
- Update repository URLs to Forgejo instance
- Create comprehensive feature status documentation
- Created 10 detailed issues for all incomplete features (#5-#14)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Ole-Morten Duesund 2025-08-24 18:24:08 +02:00
commit 67d0e0612a
14 changed files with 263 additions and 49 deletions

1
CLAUDE.md Normal file
View file

@ -0,0 +1 @@
- This project uses forgejo for source control and the fj client is available.

View file

@ -1,13 +1,26 @@
BINARY_NAME=skyview
PACKAGE_NAME=skyview
BUILD_DIR=build
VERSION=$(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
LDFLAGS=-w -s -X main.version=$(VERSION)
.PHONY: build clean run dev test lint deb deb-clean install-deps
.PHONY: build build-all clean run dev test lint deb deb-clean install-deps
# Build main skyview binary
build:
@echo "Building $(BINARY_NAME)..."
@echo "Building skyview..."
@mkdir -p $(BUILD_DIR)
go build -ldflags="-w -s -X main.version=$(VERSION)" -o $(BUILD_DIR)/$(BINARY_NAME) ./cmd/skyview
go build -ldflags="$(LDFLAGS)" -o $(BUILD_DIR)/skyview ./cmd/skyview
# Build beast-dump utility binary
build-beast-dump:
@echo "Building beast-dump..."
@mkdir -p $(BUILD_DIR)
go build -ldflags="$(LDFLAGS)" -o $(BUILD_DIR)/beast-dump ./cmd/beast-dump
# Build all binaries
build-all: build build-beast-dump
@echo "Built all binaries successfully:"
@ls -la $(BUILD_DIR)/
clean:
@echo "Cleaning..."

View file

@ -17,13 +17,14 @@ A high-performance, multi-source ADS-B aircraft tracking application that connec
- **Multi-view Dashboard**: Map, Table, Statistics, Coverage, and 3D Radar views
### Professional Visualization
- **Signal Analysis**: Signal strength heatmaps and coverage analysis
- **Signal Analysis**: Signal strength visualization and coverage analysis
- **Range Circles**: Configurable range rings for each receiver
- **Flight Trails**: Historical aircraft movement tracking
- **3D Radar View**: Three.js-powered 3D visualization (optional)
- **Statistics Dashboard**: Live charts and metrics
- **3D Radar View**: Three.js-powered 3D visualization
- **Statistics Dashboard**: Aircraft count timeline *(additional charts under construction)* 🚧
- **Smart Origin**: Auto-calculated map center based on receiver locations
- **Map Controls**: Center on aircraft, reset to origin, toggle overlays
- **Signal Heatmaps**: Coverage heatmap visualization *(under construction)* 🚧
### Aircraft Data
- **Complete Mode S Decoding**: Position, velocity, altitude, heading
@ -51,7 +52,7 @@ A high-performance, multi-source ADS-B aircraft tracking application that connec
```bash
# Install
sudo dpkg -i skyview_2.0.0_amd64.deb
sudo dpkg -i skyview_0.0.2_amd64.deb
# Configure
sudo nano /etc/skyview/config.json
@ -119,9 +120,18 @@ Access the web interface at `http://localhost:8080`
### Views Available:
- **Map View**: Interactive aircraft tracking with receiver locations
- **Table View**: Sortable aircraft data with multi-source information
- **Statistics**: Live metrics and historical charts
- **Coverage**: Signal strength analysis and heatmaps
- **3D Radar**: Three-dimensional aircraft visualization
- **Statistics**: Aircraft count timeline *(additional charts planned)* 🚧
- **Coverage**: Signal strength analysis *(heatmaps under construction)* 🚧
- **3D Radar**: Three-dimensional aircraft visualization *(controls under construction)* 🚧
### 🚧 Features Under Construction
Some advanced features are currently in development:
- **Message Rate Charts**: Per-source message rate visualization
- **Signal Strength Distribution**: Signal strength histogram analysis
- **Altitude Distribution**: Aircraft altitude distribution charts
- **Interactive Heatmaps**: Leaflet.heat-based coverage heatmaps
- **3D Radar Controls**: Interactive 3D view manipulation (reset, auto-rotate, range)
- **Enhanced Error Notifications**: User-friendly toast notifications for issues
## 🔧 Building
@ -193,7 +203,7 @@ make check # Run all checks
### Systemd Service (Debian/Ubuntu)
```bash
# Install package
sudo dpkg -i skyview_2.0.0_amd64.deb
sudo dpkg -i skyview_0.0.2_amd64.deb
# Configure sources in /etc/skyview/config.json
# Start service
@ -249,9 +259,9 @@ MIT License - see [LICENSE](LICENSE) file for details.
## 🆘 Support
- [GitHub Issues](https://github.com/skyview/skyview/issues)
- [Documentation](https://github.com/skyview/skyview/wiki)
- [Configuration Examples](https://github.com/skyview/skyview/tree/main/examples)
- [Issues](https://kode.naiv.no/olemd/skyview/issues)
- [Documentation](https://kode.naiv.no/olemd/skyview/wiki)
- [Configuration Examples](https://kode.naiv.no/olemd/skyview/src/branch/main/examples)
---

View file

@ -417,6 +417,99 @@ body {
color: #ffffff !important;
}
/* Under Construction Styles */
.under-construction {
color: #ff8c00;
font-size: 0.8em;
font-weight: normal;
margin-left: 8px;
}
.construction-notice {
background: rgba(255, 140, 0, 0.1);
border: 1px solid #ff8c00;
border-radius: 4px;
padding: 8px;
margin: 8px 0;
font-size: 0.9em;
color: #ff8c00;
text-align: center;
}
/* Toast Notifications */
.toast-notification {
position: fixed;
top: 20px;
right: 20px;
background: rgba(40, 40, 40, 0.95);
border: 1px solid #555;
border-radius: 6px;
padding: 12px 20px;
color: #ffffff;
font-size: 0.9em;
max-width: 300px;
z-index: 10000;
transform: translateX(320px);
transition: transform 0.3s ease-in-out;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}
.toast-notification.error {
border-color: #ff8c00;
background: rgba(255, 140, 0, 0.1);
color: #ff8c00;
}
.toast-notification.show {
transform: translateX(0);
}
/* Version Info */
.version-info {
font-size: 0.6em;
color: #888;
font-weight: normal;
margin-left: 8px;
}
/* Collapsible Sections */
.collapsible-header {
cursor: pointer;
user-select: none;
display: flex;
justify-content: space-between;
align-items: center;
margin: 0 0 8px 0;
padding: 4px 0;
border-bottom: 1px solid #444;
}
.collapsible-header:hover {
color: #4a9eff;
}
.collapse-indicator {
font-size: 0.8em;
transition: transform 0.2s ease;
color: #888;
}
.collapsible-header.collapsed .collapse-indicator {
transform: rotate(-90deg);
}
.collapsible-content {
overflow: hidden;
transition: max-height 0.3s ease;
max-height: 200px;
}
.collapsible-content.collapsed {
max-height: 0;
margin: 0;
padding: 0;
}
.leaflet-popup-tip {
background: #2d2d2d !important;
}

View file

@ -28,7 +28,7 @@
<body>
<div id="app">
<header class="header">
<h1>SkyView</h1>
<h1>SkyView <span class="version-info">v0.0.2</span></h1>
<!-- Status indicators -->
<div class="status-section">
@ -83,8 +83,11 @@
<!-- Display options -->
<div class="display-options">
<h4>Display Options</h4>
<div class="option-group">
<h4 class="collapsible-header collapsed" id="display-options-header">
<span>Display Options</span>
<span class="collapse-indicator"></span>
</h4>
<div class="option-group collapsible-content collapsed" id="display-options-content">
<label>
<input type="checkbox" id="show-site-positions" checked>
<span>Site Positions</span>
@ -205,16 +208,19 @@
<canvas id="aircraft-chart"></canvas>
</div>
<div class="chart-card">
<h3>Message Rate by Source</h3>
<h3>Message Rate by Source <span class="under-construction">🚧 Under Construction</span></h3>
<canvas id="message-chart"></canvas>
<div class="construction-notice">This chart is planned but not yet implemented</div>
</div>
<div class="chart-card">
<h3>Signal Strength Distribution</h3>
<h3>Signal Strength Distribution <span class="under-construction">🚧 Under Construction</span></h3>
<canvas id="signal-chart"></canvas>
<div class="construction-notice">This chart is planned but not yet implemented</div>
</div>
<div class="chart-card">
<h3>Altitude Distribution</h3>
<h3>Altitude Distribution <span class="under-construction">🚧 Under Construction</span></h3>
<canvas id="altitude-chart"></canvas>
<div class="construction-notice">This chart is planned but not yet implemented</div>
</div>
</div>
</div>
@ -233,10 +239,11 @@
<!-- 3D Radar View -->
<div id="radar3d-view" class="view">
<div class="radar3d-controls">
<button id="radar3d-reset">Reset View</button>
<button id="radar3d-auto-rotate">Auto Rotate</button>
<div class="construction-notice">🚧 3D Controls Under Construction</div>
<button id="radar3d-reset" disabled>Reset View</button>
<button id="radar3d-auto-rotate" disabled>Auto Rotate</button>
<label>
<input type="range" id="radar3d-range" min="10" max="500" value="100">
<input type="range" id="radar3d-range" min="10" max="500" value="100" disabled>
Range: <span id="radar3d-range-value">100</span> km
</label>
</div>

View file

@ -107,6 +107,9 @@ class SkyView {
});
}
// Setup collapsible sections
this.setupCollapsibleSections();
const toggleDarkModeBtn = document.getElementById('toggle-dark-mode');
if (toggleDarkModeBtn) {
toggleDarkModeBtn.addEventListener('click', () => {
@ -458,6 +461,43 @@ class SkyView {
// Clean up old trail data, etc.
}, 30000);
}
setupCollapsibleSections() {
// Setup Display Options collapsible
const displayHeader = document.getElementById('display-options-header');
const displayContent = document.getElementById('display-options-content');
if (displayHeader && displayContent) {
displayHeader.addEventListener('click', () => {
const isCollapsed = displayContent.classList.contains('collapsed');
if (isCollapsed) {
// Expand
displayContent.classList.remove('collapsed');
displayHeader.classList.remove('collapsed');
} else {
// Collapse
displayContent.classList.add('collapsed');
displayHeader.classList.add('collapsed');
}
// Save state to localStorage
localStorage.setItem('displayOptionsCollapsed', !isCollapsed);
});
// Restore saved state (default to collapsed)
const savedState = localStorage.getItem('displayOptionsCollapsed');
const shouldCollapse = savedState === null ? true : savedState === 'true';
if (shouldCollapse) {
displayContent.classList.add('collapsed');
displayHeader.classList.add('collapsed');
} else {
displayContent.classList.remove('collapsed');
displayHeader.classList.remove('collapsed');
}
}
}
}
// Initialize application when DOM is ready

View file

@ -352,8 +352,14 @@ export class MapManager {
}
createHeatmapOverlay(data) {
// Simplified heatmap implementation
// In production, would use proper heatmap library like Leaflet.heat
// 🚧 Under Construction: Heatmap visualization not yet implemented
// Planned: Use Leaflet.heat library for proper heatmap rendering
console.log('Heatmap overlay requested but not yet implemented');
// Show user-visible notice
if (window.uiManager) {
window.uiManager.showError('Heatmap visualization is under construction 🚧');
}
}
setSelectedSource(sourceId) {

View file

@ -316,6 +316,22 @@ export class UIManager {
showError(message) {
console.error(message);
// Could implement toast notifications here
// Simple toast notification implementation
const toast = document.createElement('div');
toast.className = 'toast-notification error';
toast.textContent = message;
// Add to page
document.body.appendChild(toast);
// Show toast with animation
setTimeout(() => toast.classList.add('show'), 100);
// Auto-remove after 5 seconds
setTimeout(() => {
toast.classList.remove('show');
setTimeout(() => document.body.removeChild(toast), 300);
}, 5000);
}
}

View file

@ -1,10 +1,10 @@
Package: skyview
Version: 2.0.0
Version: 0.0.2
Section: net
Priority: optional
Architecture: amd64
Depends: systemd
Maintainer: SkyView Team <admin@skyview.local>
Maintainer: Ole-Morten Duesund <glemt.net>
Description: Multi-source ADS-B aircraft tracker with Beast format support
SkyView is a standalone application that connects to multiple dump1090 Beast
format TCP streams and provides a modern web frontend for aircraft tracking.
@ -20,4 +20,4 @@ Description: Multi-source ADS-B aircraft tracker with Beast format support
- Mobile-responsive design
- Systemd integration for service management
- Beast-dump utility for raw ADS-B data analysis
Homepage: https://github.com/skyview/skyview
Homepage: https://kode.naiv.no/olemd/skyview

View file

@ -21,19 +21,28 @@ case "$1" in
chmod 755 /var/lib/skyview
chmod 755 /var/log/skyview
# Set permissions on config file
# Set permissions on config files
if [ -f /etc/skyview/config.json ]; then
chown root:skyview /etc/skyview/config.json
chmod 640 /etc/skyview/config.json
fi
# Enable and start the service
systemctl daemon-reload
systemctl enable skyview.service
echo "SkyView has been installed and configured."
echo "Edit /etc/skyview/config.json to configure your dump1090 sources."
echo "Then run: systemctl start skyview"
# Install systemd service but do not enable or start it
systemctl daemon-reload
echo "SkyView has been installed successfully."
echo ""
echo "Configuration:"
echo " - Main config: /etc/skyview/config.json"
echo ""
echo "To start SkyView:"
echo " sudo systemctl enable skyview"
echo " sudo systemctl start skyview"
echo ""
echo "Binaries installed:"
echo " - skyview: Main ADS-B tracker server"
echo " - beast-dump: Beast protocol data dump utility"
;;
esac

Binary file not shown.

View file

@ -1,4 +1,4 @@
.TH BEAST-DUMP 1 "2024-08-24" "SkyView 2.0.0" "User Commands"
.TH BEAST-DUMP 1 "2025-08-24" "SkyView 0.0.2" "User Commands"
.SH NAME
beast-dump \- Utility for analyzing raw ADS-B data in Beast binary format
.SH SYNOPSIS
@ -90,6 +90,6 @@ Beast format files typically use .bin or .beast extensions.
.BR skyview (1),
.BR dump1090 (1)
.SH BUGS
Report bugs at: https://github.com/skyview/skyview/issues
Report bugs at: https://kode.naiv.no/olemd/skyview/issues
.SH AUTHOR
SkyView Team <admin@skyview.local>
Ole-Morten Duesund <glemt.net>

View file

@ -1,4 +1,4 @@
.TH SKYVIEW 1 "2024-08-24" "SkyView 2.0.0" "User Commands"
.TH SKYVIEW 1 "2025-08-24" "SkyView 0.0.2" "User Commands"
.SH NAME
skyview \- Multi-source ADS-B aircraft tracker with Beast format support
.SH SYNOPSIS
@ -83,6 +83,6 @@ Coverage heatmaps and range circles
.BR beast-dump (1),
.BR dump1090 (1)
.SH BUGS
Report bugs at: https://github.com/skyview/skyview/issues
Report bugs at: https://kode.naiv.no/olemd/skyview/issues
.SH AUTHOR
SkyView Team <admin@skyview.local>
Ole-Morten Duesund <glemt.net>

View file

@ -34,25 +34,44 @@ mkdir -p "$BUILD_DIR"
# Change to project directory
cd "$PROJECT_DIR"
# Build the application
echo_info "Building SkyView application..."
# Build the applications
echo_info "Building SkyView applications..."
export CGO_ENABLED=0
export GOOS=linux
export GOARCH=amd64
go build -ldflags="-w -s -X main.version=$(git describe --tags --always --dirty)" \
VERSION=$(git describe --tags --always --dirty)
LDFLAGS="-w -s -X main.version=$VERSION"
# Build main skyview binary
echo_info "Building skyview..."
go build -ldflags="$LDFLAGS" \
-o "$DEB_DIR/usr/bin/skyview" \
./cmd/skyview
if [ $? -ne 0 ]; then
echo_error "Failed to build application"
echo_error "Failed to build skyview"
exit 1
fi
echo_info "Built binary: $(file "$DEB_DIR/usr/bin/skyview")"
# Build beast-dump utility
echo_info "Building beast-dump..."
go build -ldflags="$LDFLAGS" \
-o "$DEB_DIR/usr/bin/beast-dump" \
./cmd/beast-dump
# Set executable permission
if [ $? -ne 0 ]; then
echo_error "Failed to build beast-dump"
exit 1
fi
echo_info "Built binaries:"
echo_info " skyview: $(file "$DEB_DIR/usr/bin/skyview")"
echo_info " beast-dump: $(file "$DEB_DIR/usr/bin/beast-dump")"
# Set executable permissions
chmod +x "$DEB_DIR/usr/bin/skyview"
chmod +x "$DEB_DIR/usr/bin/beast-dump"
# Get package info
VERSION=$(grep "Version:" "$DEB_DIR/DEBIAN/control" | cut -d' ' -f2)
@ -69,7 +88,7 @@ sed -i "s/Installed-Size:.*/Installed-Size: $INSTALLED_SIZE/" "$DEB_DIR/DEBIAN/c
echo "Installed-Size: $INSTALLED_SIZE" >> "$DEB_DIR/DEBIAN/control"
# Build the package
dpkg-deb --build "$DEB_DIR" "$BUILD_DIR/$DEB_FILE"
dpkg-deb --root-owner-group --build "$DEB_DIR" "$BUILD_DIR/$DEB_FILE"
if [ $? -eq 0 ]; then
echo_info "Successfully created: $BUILD_DIR/$DEB_FILE"