k4be

k4be pushed to master at k4be/k4be-gentoo-overlay

4 hours ago

k4be pushed to master at k4be/k4be-gentoo-overlay

4 hours ago

k4be pushed to master at k4be/k4be-gentoo-overlay

3 days ago

k4be pushed to master at k4be/irc-clone

1 week ago

k4be created new branch master at k4be/irc-clone

1 week ago

k4be created repository k4be/irc-clone

1 week ago

k4be pushed to master at k4be/gpx-vis

  • eb6f55ade7 Fix login flash, elevation gain/loss accuracy, and stats label position - Hide auth page by default to prevent flash when already logged in - Filter GPS elevation noise with 5m hysteresis threshold, halving inflated gain/loss values - Move gain/loss stats label above the chart area to avoid overlap with profile Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

1 month ago

k4be pushed to master at k4be/gpx-vis

  • ae5a700f36 Show loading indicator on all tracks when opening a folder Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

1 month ago

k4be pushed to master at k4be/gpx-vis

  • 412c7f06f2 Add GPX export button to track list Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
  • ebb10eb407 Show elevation gain and loss in elevation profile chart Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
  • 2edcff8a58 Fix 401 handler: only clear token and reload if token exists Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
  • aed4ee7c7c Add interactive CLI for user management Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
  • View comparison for these 4 commits »

1 month ago

k4be pushed to master at k4be/gpx-vis

  • 9ffe4d72d3 Cache track point data in memory and show loading state on click - Track segment data is cached after first fetch; re-toggling a track on/off no longer triggers a network request - While fetching, the track item pulses and ignores further clicks (pointer-events:none) so repeated clicking has no effect - Cache is invalidated on edit (name/type change) and delete Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

1 month ago

k4be pushed to master at k4be/gpx-vis

  • ba55604528 Fix trackType missing from directory contents endpoint GET /api/directories/:id was not including trackType in the track attributes, causing: edit modal always showing "unset", type emoji not appearing in the file list for tracks inside folders, and incidentally clearing saved types when saving the edit form. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

1 month ago

k4be pushed to master at k4be/gpx-vis

  • b7c4a11b58 Add track type emoji in file list, folder type inference, always-visible buttons, and stats type filter - Item actions (buttons) now use absolute positioning so they always overlay the row on hover, even when the sidebar is narrow - Track type emoji moved to appear after the track name (not before) - Folders display a type emoji when all their items share the same type (computed recursively from cached dir contents) - Stats tab gains a type filter bar: pill buttons for each track type plus Untyped; multi-select; backend filters via ?type= query param Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

1 month ago

k4be pushed to master at k4be/gpx-vis

  • b7fe59ba99 Don't auto-fit map after user manually pans or zooms Adds a userMovedMap flag in MapView. Leaflet fires movestart/zoomstart with e.originalEvent for user gestures (drag, scroll, touch) and without it for programmatic calls (fitBounds, setView). The flag is set only on user-initiated events. fitTrack() and fitAll() bail out immediately when the flag is set, so opening a track or selecting a folder no longer jumps the map after the user has taken control of the viewport. Double-clicking a polyline resets the flag before calling fitTrack() since that is an explicit "zoom to this track" request. No backend restart required. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

1 month ago

k4be pushed to master at k4be/gpx-vis

  • ea9c3f6876 Fix elevation tooltip: check viewport space, not canvas-local space The previous fix checked whether topAbove >= 0 in canvas coordinates. Since the canvas is only 120px tall and the tooltip can be ~110px (name + date + dist + ele + time + coords), the check almost always failed and fell through to 'below'. Now the above/below decision uses viewport coordinates: cursorViewportY = canvasRect.top + cy fitsAbove = cursorViewportY - tooltipHeight - gap >= 0 The tooltip is position:absolute inside the container (no overflow hidden), so a negative top value is allowed and places it visually above the chart panel — which is exactly what we want. No backend restart required. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

1 month ago

k4be pushed to master at k4be/gpx-vis

  • 634efab246 Tidy track type display: emoji prefix in name, no separate type row - Track info panel: remove the 'Type' row; prepend the type emoji directly before the track name in <h3> with a title tooltip showing the formatted type name (e.g. 'Hiking') - Folder list: item-icon is always 🗺️; type emoji (when set) appears as a prefix inside item-name with the same title tooltip, so it reads naturally as part of the name and updates automatically on reload after an edit No backend restart required (frontend-only change). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

1 month ago

k4be pushed to master at k4be/gpx-vis

  • 71c91a8289 Fix elevation tooltip position: appear above cursor, not over profile Previously the tooltip was vertically centred on the cursor Y, which placed it directly over the elevation profile line most of the time. New logic: prefer above the cursor (cy - height - 8px gap); fall back to below (cy + 8px) only when there is not enough space above. Keeps existing left-clamping so it never overflows the canvas edge. No backend restart required. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

1 month ago

k4be pushed to master at k4be/gpx-vis

  • efe806648b Fix: show only one hover tooltip (closest to cursor) Previously both the Leaflet map tooltip and the elevation chart tooltip appeared simultaneously on every hover event. - Map hover path: onMapHover() now only draws the indicator line on the chart; hideTooltip() suppresses the chart tooltip since the Leaflet tooltip is already next to the cursor on the map. - Chart hover path: showHoverMarker() gains a noTooltip flag; chart's onChartMove passes noTooltip=true so the map marker moves silently while the chart tooltip (closer to the cursor) is the only one shown. No backend restart required (frontend-only change). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

1 month ago

k4be pushed to master at k4be/gpx-vis

  • d73f34ba6d Add track editing (name + type) with emoji labels Backend: - Track model gets trackType VARCHAR(32) NULL field - database.js: runMigrations() adds missing columns on startup via PRAGMA table_info (SQLite) or information_schema (MySQL/PG), safe to run repeatedly on existing databases - PUT /api/tracks/:id now accepts trackType; validates against allowed values: hiking, running, cycling, driving, train, other - GET /api/tracks and GET /api/tracks/:id/points now return trackType Frontend: - Edit modal with Name input and Type dropdown (emoji options) - ✏️ Edit button added to each track item in the sidebar - Track item icon changes to type emoji (🥾🏃🚴🚗🚆📍) when type is set - Track info panel shows type row when set - TRACK_TYPE_EMOJI map shared between list rendering and info panel - Hover tooltip already receives meta.trackType via existing meta flow - form-group / form-input CSS added for modal form fields Backend restart required (model and database.js changed; migration will run automatically on first startup and add the trackType column). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

1 month ago

k4be pushed to master at k4be/gpx-vis

  • 1a31748be1 Show track name/date in hover tooltip; double-click track to fit view Tooltip: - Elevation.setTrack() now accepts optional meta {name, trackDate, ...} stored as trackMeta alongside the point data - formatTooltip(p, meta) renders the track name (bold) and date (muted) above the distance/elevation/time/coords lines - meta is passed through all call sites: browser.js, app.js (share page and hash-restore), local.js - MapView stores trackData.meta in trackLayers[id].meta and passes it to showHoverMarker → formatTooltip for the Leaflet map tooltip - elevation.js also passes trackMeta when calling MapView.showHoverMarker from the chart hover path Double-click to fit: - Each polyline layer gets a dblclick handler that calls fitTrack(id) - L.DomEvent.stopPropagation prevents the map's own double-click zoom from firing at the same time Also fixes: elevation chart was missing on tracks opened via URL hash on page load (hash-restore now calls Elevation.setTrack). No backend restart required (frontend-only change). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

1 month ago

k4be pushed to master at k4be/gpx-vis

  • 396bcc0784 Allow dragging folders into other folders Backend: - Extend PUT /api/directories/:id to accept parentId for reparenting - Server-side cycle check: walks ancestry of target, rejects if it passes through the directory being moved (400 with clear message) - Name and parentId can be updated independently or together Frontend: - API.moveDir(id, parentId) sends PUT with { parentId } - Dir items are now draggable (draggable="true"); .dir-item.dragging dims them like track items during drag - dragstart on a dir sets dragDirId; dragend clears it - Drop targets accept both track drags and dir drags - Client-side isValidDirDrop() walks dirMeta to reject self-drops and descendant-drops before even showing the highlight; backend validates again as a safety net - confirmMoveDir() shows confirmation dialog then calls API.moveDir - Auto-scroll works for folder drags too (dragDirId check added) Backend restart required (directories route changed). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

1 month ago