This website requires JavaScript.
16965a7645
ActivityDetail: fetch timeseries in parallel with detail JSON to cut load time
Davide Scaini
2026-05-14 18:22:05 +02:00
c36b95e041
segments detect: add --fresh flag to clear efforts before re-detecting
Davide Scaini
2026-05-14 17:11:11 +02:00
862226305a
Fix segment avg_speed: derive from distance/time; tighten speed bounds to reject false matches
Davide Scaini
2026-05-14 17:09:41 +02:00
8ff781661e
Fix feedback JSON encoding: use ensure_ascii=False to preserve accented characters
Davide Scaini
2026-05-14 17:04:44 +02:00
4d6859b927
NerdCorner: show per-period load instead of cumulative
Davide Scaini
2026-05-14 16:42:16 +02:00
b32553b0b1
Fix NerdCorner: pass all activities, not only those with power data
Davide Scaini
2026-05-14 16:39:57 +02:00
8804bdec37
Add Nerd Corner tab with year-over-year cumulative progress chart
Davide Scaini
2026-05-14 16:37:01 +02:00
487ce42361
Explore: type pill dark/light theme split; freeze active pill on hover in dark theme
Davide Scaini
2026-05-14 16:24:00 +02:00
46445dd1cb
Move Invites link from athlete page to settings; type pill active state contrast fix
Davide Scaini
2026-05-14 16:22:31 +02:00
ab112788b4
Explore: grey pill background dark-theme only; transparent in light mode
Davide Scaini
2026-05-14 16:18:10 +02:00
8d799e8e64
Explore: active type pill solid color bg with auto black/white text contrast
Davide Scaini
2026-05-14 16:17:16 +02:00
cfb7198d64
Explore: raise inactive type-pill background opacity to 70% for dark theme visibility
Davide Scaini
2026-05-14 16:11:48 +02:00
2b9e080b4c
Explore: opacity slider heatmap-only; lines mode width-only at 100% opacity
Davide Scaini
2026-05-14 16:07:57 +02:00
20bb5bfb60
explore: grey background on inactive type pills for readability
Davide Scaini
2026-05-14 15:59:00 +02:00
dc719a55d5
explore: show width/opacity sliders in lines mode too
Davide Scaini
2026-05-14 15:57:20 +02:00
5593764fdb
explore: skip legacy bare-timestamp geojsons; type pill colors visible when inactive
Davide Scaini
2026-05-14 15:55:10 +02:00
e7228c2be8
explore: plasma palette; width + opacity sliders for heatmap
Davide Scaini
2026-05-14 15:48:30 +02:00
298fe3ea39
explore: fix by-type layer visibility — only show selected types
Davide Scaini
2026-05-14 15:43:12 +02:00
4e32cf4f21
explore: grey map default; zoom-scaled heatmap lines; fix all/none type buttons
Davide Scaini
2026-05-14 15:35:40 +02:00
a75fabecb9
explore: thicker heatmap lines (4px + blur)
Davide Scaini
2026-05-14 14:57:39 +02:00
b3c41967f6
explore: replace gaussian heatmap with line-accumulation (strava-style)
Davide Scaini
2026-05-14 14:54:47 +02:00
6d13993f98
explore: default heatmap/by-type; month All button; bbox filtering on map move
Davide Scaini
2026-05-14 14:45:54 +02:00
537d1bb712
explore: exclude indoor/virtual activities from tracks.json
Davide Scaini
2026-05-14 14:34:44 +02:00
5307ae287c
Explore: personal GPS heatmap tab under Athlete page
Davide Scaini
2026-05-14 14:31:21 +02:00
2daa66d7b0
about: add Satispay donation button + QR code; remove feedback button (all locales)
Davide Scaini
2026-05-14 11:11:34 +02:00
1a7d1dc8c3
serve: complete CurrentUserResponse model (add wiki_access, activity_access, dem_configured)
Davide Scaini
2026-05-14 11:06:35 +02:00
e7c5af0d01
Nav: add Planner link for logged-in users (mirrors wiki link strategy)
Davide Scaini
2026-05-14 10:44:46 +02:00
a10164b932
metrics: fall back to GPS-derived speed in compute_best_efforts when device speed absent
Davide Scaini
2026-05-14 09:16:01 +02:00
c85d2edf39
dev: fix _start_serve to set deps.data_dir/site_dir (not srv.*) after Step 3 split
Davide Scaini
2026-05-14 00:09:41 +02:00
7ec91b0e6a
refactoring.md: update Step 4 to reflect as-built (post-split routers)
Davide Scaini
2026-05-14 00:04:52 +02:00
27f6d141f7
Refactor step 4: narrow broad except Exception catches
Davide Scaini
2026-05-13 23:58:14 +02:00
8380b1d2cc
Refactor: split serve/server.py (3220 lines) into focused modules
Davide Scaini
2026-05-13 23:47:19 +02:00
2ec4d9157c
Refactor: extract edit UI HTML into bincio/edit/templates/edit.html
Davide Scaini
2026-05-13 23:19:19 +02:00
9dd533825f
Fix pre-existing test failures in test_writer and test_metrics
Davide Scaini
2026-05-13 23:15:26 +02:00
e61d05fc41
Refactor: extract shared image upload utilities into bincio/shared/images.py
Davide Scaini
2026-05-13 23:13:08 +02:00
cd97e4cc87
CORS: allow all *.bincio.org origins (for planner.bincio.org)
Davide Scaini
2026-05-13 22:51:00 +02:00
58a5d5b450
Strava sync: skip import when a FIT-file upload already covers the same start time
Davide Scaini
2026-05-13 21:52:07 +02:00
fb033e3da2
Search: auto-load all year shards when a query is entered so full history is searched
Davide Scaini
2026-05-13 21:17:55 +02:00
e4b53dde44
Nav: move Wiki to right-side menu (desktop + hamburger); fix missing element when PUBLIC_WIKI_URL unset in rebuilds
Davide Scaini
2026-05-13 20:50:04 +02:00
a4b4d11fc0
Nav: move Ideas and About to right-side menu (desktop + hamburger)
Davide Scaini
2026-05-13 20:44:54 +02:00
fc012b5311
pull_feedback: highlight new submissions since last pull
Davide Scaini
2026-05-13 20:36:40 +02:00
b5a1e881fb
delete plan
Davide Scaini
2026-05-13 20:07:26 +02:00
b9a21e8bcc
ideas: add inline edit for own ideas (author + admin)
Davide Scaini
2026-05-13 19:52:25 +02:00
aa1c0b38c0
ideas: add Feedback button to header
Davide Scaini
2026-05-13 19:48:34 +02:00
c2c4cb9f3a
segments: fit initial map view to all existing segments
Davide Scaini
2026-05-13 19:41:59 +02:00
d82033fd84
ideas: update bug report link text
Davide Scaini
2026-05-13 19:34:02 +02:00
c30a15d295
ideas: add done/reopen status toggle for admins
Davide Scaini
2026-05-13 19:32:30 +02:00
38f2e51788
ideas: add Ideas page, nav link; remove feedback button from About
Davide Scaini
2026-05-13 19:29:39 +02:00
9553ca5ce7
ideas: add JSON-file-backed ideas API (list, create, vote, delete)
Davide Scaini
2026-05-13 19:27:54 +02:00
cf9817e853
segments: clear stored efforts before rescan so stale entries are removed
Davide Scaini
2026-05-13 16:35:44 +02:00
6e92ea4fce
segments: reject false efforts via geometric speed check
Davide Scaini
2026-05-13 16:31:00 +02:00
994f4287ef
Dedup segment efforts by started_at to handle same activity stored under two IDs
Davide Scaini
2026-05-13 16:20:10 +02:00
ad9e428b1e
Fix UnicodeEncodeError: sanitize surrogate pairs before JSON writes in merge.py
Davide Scaini
2026-05-13 16:16:58 +02:00
c837464a28
Exclude indoor/virtual activities from records and power curve
Davide Scaini
2026-05-13 16:05:26 +02:00
2395a6e566
Fix segment effort duplicates; auto-scan on segment creation
Davide Scaini
2026-05-13 15:58:57 +02:00
cb3c9b6e41
Move search bar above sport/date filters, below page title
Davide Scaini
2026-05-13 11:54:37 +02:00
861748a059
ActivityFeed: add title search bar with URL sync
Davide Scaini
2026-05-13 11:51:14 +02:00
f00e5e47b2
SegmentDetail: sort efforts by time by default, sortable column headers
Davide Scaini
2026-05-13 11:17:22 +02:00
0ff5473dfd
Athlete segments tab: link best time to activity; expandable effort list
Davide Scaini
2026-05-13 08:40:39 +02:00
59cf99f0af
Fix stuck segments tab; add /segments/ dev fallback
Davide Scaini
2026-05-13 08:35:00 +02:00
b8fd4e4ded
Move segment rescan button from segments list to athlete/segments tab
Davide Scaini
2026-05-13 08:20:05 +02:00
d7fd585e77
Add global segment rescan: POST /api/me/segment-rescan + Rescan all button
Davide Scaini
2026-05-13 08:17:18 +02:00
f2075e29d2
Segments Phase 4: detail page, activity efforts, athlete tab, new APIs
Davide Scaini
2026-05-13 08:09:24 +02:00
c7f0013e57
SegmentCreate: prompt after save instead of immediate redirect; update plan
Davide Scaini
2026-05-13 01:03:34 +02:00
6c9de35426
Enforce 500 m minimum segment length in UI and API
Davide Scaini
2026-05-13 00:56:04 +02:00
e9e7b5d0e7
SegmentCreate: add elevation profile that zooms to selected portion
Davide Scaini
2026-05-13 00:54:39 +02:00
4d2df860ce
Segments Phase 3: detection algorithm, CLI, ingest hook, and efforts API
Davide Scaini
2026-05-13 00:50:39 +02:00
61db0734d2
Move segment shortcut next to Edit button, shorten to '+ segment'
Davide Scaini
2026-05-13 00:39:51 +02:00
dd9f7a82dc
Segments phase 2: /segments/ browse page, /segments/new/ creation flow, activity detail shortcut
Davide Scaini
2026-05-13 00:36:44 +02:00
79cad29ff1
Segments phase 1: models, store, and API endpoints (GET/POST/DELETE /api/segments)
Davide Scaini
2026-05-13 00:19:15 +02:00
6b2698c0c5
Mark fallback NP computation for future removal
Davide Scaini
2026-05-12 23:52:19 +02:00
c46e91d0f5
Compute NP from timeseries in frontend for activities missing np_power_w in JSON
Davide Scaini
2026-05-12 23:51:22 +02:00
bd0595ee79
Add avg power and NP to activity summary; NP uses Coggan 30s rolling-average method
Davide Scaini
2026-05-12 23:47:06 +02:00
f1fec6d825
ActivityCharts: smoothing toggle (Raw/10s/20s) for all line chart metrics
Davide Scaini
2026-05-12 23:37:41 +02:00
a5db6142b3
ActivityCharts: 10s rolling mean on cadence and power line charts (display only)
Davide Scaini
2026-05-12 23:32:33 +02:00
1298586a74
ActivityCharts: extend reference lines to HR; use high-contrast label styling
Davide Scaini
2026-05-12 23:29:09 +02:00
3231fdb4b7
ActivityCharts: add avg/P20/P80 reference lines to speed, cadence, and power line charts
Davide Scaini
2026-05-12 23:24:33 +02:00
0b266d208c
Strip pre-2000 leading points to prevent epoch-zero start time and absurd duration
Davide Scaini
2026-05-12 23:11:33 +02:00
867da767eb
Add sub_sport editing to activity edit drawer
Davide Scaini
2026-05-12 23:01:12 +02:00
93f6109028
Add hamburger menu for mobile nav
Davide Scaini
2026-05-11 11:37:33 +02:00
8fbbf460a9
Add PWA icons and manifest for iOS/Android home screen
Davide Scaini
2026-05-11 11:17:13 +02:00
14313ec59c
Add Disconnect button to Strava section of upload modal
Davide Scaini
2026-05-10 17:12:55 +02:00
1eaf5c4e0b
Remove TS annotation from define:vars script (caused parse error)
Davide Scaini
2026-05-10 17:10:38 +02:00
5be58f4e1c
Fix Strava OAuth popup detection via postMessage (cross-origin safe)
Davide Scaini
2026-05-10 17:04:30 +02:00
695dc9fdce
Fix Strava re-auth when credentials change; add disconnect button
Davide Scaini
2026-05-10 16:33:52 +02:00
8f028101c7
Fix elevation gain inflation from device no-fix leading zeros
Davide Scaini
2026-05-10 16:21:24 +02:00
55d59112ad
Fix: don't copy 9 GB data dir into dist/ during production builds
Davide Scaini
2026-05-08 13:56:31 +02:00
2287d6e2ee
Add Strava sync status report and manual trigger to admin panel
Davide Scaini
2026-05-08 13:44:23 +02:00
12693dbd60
feat: scheduled Strava sync + admin suspend/delete account
Davide Scaini
2026-05-08 10:36:21 +02:00
680ef9d440
Hide edit controls on activities the logged-in user does not own
Davide Scaini
2026-05-03 18:51:52 +02:00
48ffc5be8e
Hub: add SW cleanup on load; add self-unregistering sw.js to kill stale Astro SW
Davide Scaini
2026-05-03 18:47:30 +02:00
8c10ff5574
fix card hub not being showed
Davide Scaini
2026-05-02 23:10:28 +02:00
9540cdd6cb
Replace Astro hub build with standalone hub/index.html
mobile_app
Davide Scaini
2026-05-02 22:49:32 +02:00
58def4bf02
weird characters
Davide Scaini
2026-05-01 23:49:48 +02:00
e0b5a55ccc
fix(dev): pass --host 0.0.0.0 to astro dev when --mobile, print LAN URL
Davide Scaini
2026-05-01 22:20:19 +02:00
12ef5100ef
fix(hub): greeting above tagline, no punctuation
Davide Scaini
2026-05-01 22:08:27 +02:00
0ab62aa961
fix(hub): activity card links to /u/{handle}/ when same origin to avoid hub loop
Davide Scaini
2026-05-01 22:07:01 +02:00
1f11bee730
feat: bincio.org hub page (login / app selector) and grants_activity invite toggle
Davide Scaini
2026-05-01 22:04:30 +02:00
82288a35ea
feat(auth): wiki/activity access flags, SESSION_DOMAIN, wiki nav link
Davide Scaini
2026-05-01 21:56:02 +02:00
f6e9fe8198
feat(serve): debounced site rebuild — burst uploads trigger one build, not N
Davide Scaini
2026-04-30 21:23:29 +02:00