This website requires JavaScript.
3394be4ee9
auth: add RS256 validation via JWKS (Phase 3)
main
Davide Scaini
2026-06-03 15:43:44 +02:00
e24d290127
fix: show reset URL inline in admin table (was hidden in tooltip)
Davide Scaini
2026-06-03 12:05:10 +02:00
7e8545f8db
fix: redirect back to activity.bincio.org after login via bincio.org
Davide Scaini
2026-06-03 11:33:37 +02:00
ae2737fed1
fix: admin page script crashes — define:vars bypasses TypeScript compilation; use data attribute instead
Davide Scaini
2026-06-03 11:28:38 +02:00
4641ca9b72
fix: show Select button only on own profile feed, not community feed
Davide Scaini
2026-06-03 11:11:47 +02:00
7cec9541e2
fix: restore broken <a> tag in nav after Ideas removal
Davide Scaini
2026-06-03 11:09:26 +02:00
37e91af5bd
feat: move Ideas into Support page tab; remove Ideas from nav
Davide Scaini
2026-06-03 11:07:35 +02:00
08f451ec71
feat: recurring budget entries (lazy materialise) + preferred Satispay badge
Davide Scaini
2026-06-03 10:47:58 +02:00
cf7ce027b1
fix: support page — donate default tab, split community tab, require login
Davide Scaini
2026-06-03 10:41:59 +02:00
fa14d91359
feat: Support page with budget transparency (replaces About)
Davide Scaini
2026-06-03 10:34:18 +02:00
b781193d44
feat: bulk delete + merge activities in feed
Davide Scaini
2026-06-03 10:32:02 +02:00
5287b98bc1
fix: admin reset-pwd button copies full bincio.org link instead of bare code
Davide Scaini
2026-06-03 09:42:24 +02:00
0e5044eb06
fix: close all bincio-auth migration holes
Davide Scaini
2026-06-03 09:36:20 +02:00
75f7fa8810
refactoring mobile app location
Davide Scaini
2026-06-02 23:28:41 +02:00
5255e24184
feat: default chart x-axis to distance
Davide Scaini
2026-06-02 16:49:21 +02:00
c59fc0073f
feat: pace chart and spm cadence for running/hiking/walking/other
Davide Scaini
2026-06-02 16:46:16 +02:00
a142e8732f
fix: redirect login to bincio.org (bincio-auth) when PUBLIC_AUTH_URL is set
Davide Scaini
2026-06-02 16:31:46 +02:00
13859a34d3
feat: show pace (min/km) for running, hiking, walking, other activities
Davide Scaini
2026-06-02 16:23:03 +02:00
1dca00d5e3
update stats script
Davide Scaini
2026-06-02 15:47:55 +02:00
fa61801580
refactor: move mobile app to bincio-autarchive repo
Davide Scaini
2026-06-02 15:45:42 +02:00
2af29a460b
serve: add JWT consumer shim for bincio-auth integration
Davide Scaini
2026-06-02 14:54:43 +02:00
0d6bf57932
fix: handle empty/invalid athlete.json in merge, API read, and writer encoding
Davide Scaini
2026-05-25 20:00:18 +02:00
447d56a960
fix: skip empty or unparseable athlete.json in merge_all
Davide Scaini
2026-05-25 19:55:08 +02:00
2f5251e9fe
perf: run all background build/merge/rsync subprocesses at nice 19
Davide Scaini
2026-05-24 19:07:23 +02:00
c9b544ab55
perf: throttle OG image generation — nice 19 + 50ms sleep between renders
Davide Scaini
2026-05-24 19:02:08 +02:00
b827792d16
feat: export gear maintenance log as CSV
Davide Scaini
2026-05-24 14:07:37 +02:00
94cd3f7eb4
fix: show replacement dates as dd/mm/yyyy
Davide Scaini
2026-05-24 14:01:53 +02:00
bdee036204
feat: part lifespan tracking in gear tab
Davide Scaini
2026-05-24 13:40:27 +02:00
7db7bf91e0
refactor: extract import_garmin_gear() + add backfill script
Davide Scaini
2026-05-24 13:13:47 +02:00
801140ac51
feat: show accumulated distance per gear item in gear tab
Davide Scaini
2026-05-24 13:06:37 +02:00
49feef66c5
feat: Garmin gear sync — registry + per-activity gear on sync and backfill
Davide Scaini
2026-05-24 13:03:34 +02:00
b23b3de1bb
feat: include gear in activity index summaries; generate OG images in serve rebuild
Davide Scaini
2026-05-24 12:51:57 +02:00
5bf426df29
fix: use Strava gear ID prefix (b/g) to determine gear type, not missing primary_type field
Davide Scaini
2026-05-24 12:44:25 +02:00
40ccec0e2d
fix: generate OG images in serve rebuild worker, not on every deploy
Davide Scaini
2026-05-24 12:39:38 +02:00
e553e08663
feat: gear registry — manage bikes/shoes per athlete, set per activity
Davide Scaini
2026-05-24 12:33:41 +02:00
aca9f79b46
fix: slope tooltip clipping — use clip:false + marginTop instead of dy function
Davide Scaini
2026-05-23 22:24:55 +02:00
40aa51be4d
fix: flip slope tooltip below dot when near chart top edge
Davide Scaini
2026-05-23 22:06:02 +02:00
e5c5383471
fix: move Pillow to base deps so generate_og_images.py can import it
Davide Scaini
2026-05-23 21:49:47 +02:00
693f720cbd
feat: OG link previews — track image + meta tags for Telegram/WhatsApp
Davide Scaini
2026-05-23 21:44:19 +02:00
56932f7f25
perf: add patch_index flag to recalculate_elevation_hysteresis
Davide Scaini
2026-05-23 21:05:00 +02:00
02edb0b0f9
fix: per-source elevation params — strava_export vs barometric vs raw GPS
Davide Scaini
2026-05-23 20:12:11 +02:00
df025873c6
Add map view toggle to activity feed
Davide Scaini
2026-05-22 11:47:47 +02:00
7f2a751065
feat: power curve chart on activity page (single-activity MMP)
Davide Scaini
2026-05-21 21:29:29 +02:00
793b719983
fix: stable power curve colors — buttons and chart lines always match
Davide Scaini
2026-05-21 21:15:44 +02:00
d4e5b11f71
admin: add Total imported and Last sync columns to Garmin sync table
Davide Scaini
2026-05-21 20:32:54 +02:00
418e3a13e8
changelog: document 2026-05-19 performance improvements
Davide Scaini
2026-05-19 20:19:11 +02:00
84eff1f3b0
perf: spatial 10 m downsampling for timeseries
Davide Scaini
2026-05-19 20:11:00 +02:00
835968e8fe
perf: unblock event loop for segment_efforts scan
Davide Scaini
2026-05-19 19:53:26 +02:00
29c6e399c0
perf: skip feed index fetch when navigating from activity feed
Davide Scaini
2026-05-19 19:44:20 +02:00
1f6239e7d2
Fix feature detection for explore and add community
Davide Scaini
2026-05-18 22:03:40 +02:00
5d2e2443a3
Add feature breakdown to stderr output for debugging
Davide Scaini
2026-05-18 21:55:14 +02:00
90283c45f4
usage_stats: fix reindex alignment bug, switch logins panel to weekly
Davide Scaini
2026-05-18 21:31:05 +02:00
cd80b8e32e
usage_stats: fix datetime.utcnow() deprecation warning
Davide Scaini
2026-05-18 21:27:29 +02:00
adaa075e6e
Add usage stats script and /api/admin/stats endpoint
Davide Scaini
2026-05-18 20:54:17 +02:00
bbfab72138
ActivityCharts: switch slope tab to distance-weighted smoothing
Davide Scaini
2026-05-18 19:03:56 +02:00
6faf63c2cd
ActivityCharts: add slope coloring tab to elevation profile
Davide Scaini
2026-05-18 18:57:55 +02:00
c0f6c4da6d
render: add --recompute-vam to backfill climbing_time_s into existing activities
Davide Scaini
2026-05-17 10:15:29 +02:00
766da0320b
NerdCorner VAM: filter short climbs, opacity-encode confidence, add climbing time to tooltip
Davide Scaini
2026-05-17 10:13:39 +02:00
7a44cbbef0
change segment width and opacity
Davide Scaini
2026-05-17 09:51:11 +02:00
979a6c527f
Segment create: load existing segments in activity bbox as reference layer
Davide Scaini
2026-05-17 09:40:41 +02:00
6bc77486f1
Segments: color track green→red along direction of travel
Davide Scaini
2026-05-17 09:32:31 +02:00
9521a64da4
Activity stats: fixed-position pairs so optional values don't shift layout
Davide Scaini
2026-05-17 09:15:11 +02:00
7953e05241
Fix build: use class ternary instead of class: directive for Tailwind /opacity class
Davide Scaini
2026-05-17 09:06:04 +02:00
db9b4ce32c
Activity map: click stat to lock track color mode, hover still previews
Davide Scaini
2026-05-17 09:01:59 +02:00
14a4a0b994
Activity detail: layout refactor + GPS-derived speed for map coloring
Davide Scaini
2026-05-16 23:24:29 +02:00
0dc450ba30
Fix track coloring hover: inline reactive vars so Svelte tracks deps
Davide Scaini
2026-05-16 22:56:20 +02:00
1cca485062
Activity map: extend track coloring to HR, power, elevation, cadence
Davide Scaini
2026-05-16 22:50:24 +02:00
f71fe2ddf5
Activity map: color track by speed when hovering speed stats
Davide Scaini
2026-05-16 22:43:12 +02:00
08e8e54c36
Power curve: show record holder in tooltip and add records table
Davide Scaini
2026-05-16 22:25:30 +02:00
003b540481
VAM: drop duration curve, show avg climbing VAM in Nerd Corner
Davide Scaini
2026-05-16 22:03:40 +02:00
7cd8a6b030
VAM: add --recompute-vam flag and compute_vam_from_timeseries helper
Davide Scaini
2026-05-16 21:37:51 +02:00
baf20b51ba
Add VAM (climbing velocity) metric and per-duration curve
Davide Scaini
2026-05-16 21:34:06 +02:00
de602ff5d9
Settings: per-user default for download_disabled
Davide Scaini
2026-05-16 20:51:23 +02:00
2d9620c6d1
Admin: add Garmin sync status panel
Davide Scaini
2026-05-16 20:31:02 +02:00
2c69e75842
Show orange upload button when Strava/Garmin auth fails
Davide Scaini
2026-05-16 20:27:43 +02:00
0eb25620ef
Add headless Garmin background sync (systemd timer)
Davide Scaini
2026-05-16 20:13:12 +02:00
307f1fbbc1
download bas: embed timeseries into the JSON so the file is self-contained
Davide Scaini
2026-05-15 18:38:53 +02:00
c465e518e5
Add activity file downloads with per-activity download_disabled flag
Davide Scaini
2026-05-15 18:35:40 +02:00
fe437626e6
Global feed: switch from sequential pages to month-based BAS shards
Davide Scaini
2026-05-15 10:25:01 +02:00
d3bce49445
Feed: eager-load only the year shards needed for the active date filter
Davide Scaini
2026-05-15 09:32:12 +02:00
8a06227243
Feed date filter: early-stop global feed load, fix cross-date validation, show Loading while fetching
Davide Scaini
2026-05-15 09:24:02 +02:00
1f3f5b3d3b
Feed: fix date range eager-load — use primary let-vars, cover feed pages
Davide Scaini
2026-05-15 09:14:56 +02:00
d2151a4acf
Ideas: add reopen button when awaiting; add /reopen endpoint
Davide Scaini
2026-05-15 09:07:49 +02:00
9cc70269f5
Feed: eager-load all year shards when a date filter is active
Davide Scaini
2026-05-15 08:59:06 +02:00
afbcaa5011
Feed: cap date range inputs at today to prevent selecting future dates
Davide Scaini
2026-05-15 08:38:58 +02:00
15e9969ca2
Ideas: add 'won't implement' status with decline/reopen button
Davide Scaini
2026-05-15 08:36:31 +02:00
c905449114
Feed: add custom date range (From/To) inputs alongside search bar
Davide Scaini
2026-05-15 08:32:31 +02:00
ed6a7ed39c
Ideas: add 'awaiting feedback' status with amber section + admin comment
Davide Scaini
2026-05-15 08:18:44 +02:00
3b675a68b0
Elevation: skip near-zero dropout values mid-recording
Davide Scaini
2026-05-15 01:21:34 +02:00
c12f5336f5
AthleteView: listen for bincio:me event so owner tabs appear without hard refresh
Davide Scaini
2026-05-15 01:15:24 +02:00
4ea2292e2b
Indoor detection: title-based inference in merge layer + fix _merge_all_locked
Davide Scaini
2026-05-15 01:03:17 +02:00
0fbb7822df
EditDrawer: show sub_sport badge immediately after save without page reload
Davide Scaini
2026-05-15 00:52:34 +02:00
a863cdd663
Records: exclude Zwift activities by title; show Saved confirmation before closing drawer
Davide Scaini
2026-05-15 00:49:46 +02:00
9f1e9e4d3b
Records: apply sidecars before computing; fix best_climb_m for long mountain climbs
Davide Scaini
2026-05-15 00:30:58 +02:00
de07d8d4cf
activities: trigger rebuild after edit so records update immediately
Davide Scaini
2026-05-15 00:09:51 +02:00
1ce94b8536
records: exclude indoor/treadmill/virtual sub_sport; rebuild athlete.json on bake
Davide Scaini
2026-05-14 23:37:54 +02:00
b509db4940
nerd corner: cool-to-warm year color ramp (proposal, not pushed)
Davide Scaini
2026-05-14 18:47:08 +02:00
653db2428f
nerd corner: add cumulative plot below the per-period chart
Davide Scaini
2026-05-14 18:43:05 +02:00
5167f2a988
explore: shard tracks into per-year files for progressive loading
Davide Scaini
2026-05-14 18:34:53 +02:00
8af6b7b04e
nav: always show upload button on all screen sizes
Davide Scaini
2026-05-14 18:24:44 +02:00