This website requires JavaScript.
5e36806392
feat(mobile): replace 'This year' with dynamic per-year pills in filter tab
Davide Scaini
2026-04-27 15:37:09 +02:00
87baf33815
fix collapsing labels
Davide Scaini
2026-04-27 15:28:39 +02:00
946da685e5
feat(mobile): editable activity title for local activities
Davide Scaini
2026-04-27 15:20:19 +02:00
090d4bd8dc
feat(mobile): search/filter tab — sport, date, sort; hidden on Karoo
Davide Scaini
2026-04-27 15:10:35 +02:00
be772bd3df
fix(upload): prevent false 422s and EMFILE crash during bulk uploads
Davide Scaini
2026-04-27 14:33:05 +02:00
7a65ed2078
fix(mobile): clear technical debt — real SHA-256, feed pagination, search
Davide Scaini
2026-04-27 11:53:43 +02:00
93247d510f
feat(mobile/upload): upload_format setting + Option A local update from server response
Davide Scaini
2026-04-27 11:44:32 +02:00
0d2176aef0
feat(mobile/upload): send original FIT file via /api/upload/raw when available
Davide Scaini
2026-04-27 11:18:29 +02:00
cfb3ba5871
fix(merge): serialize merge_all per user-dir to prevent concurrent rmtree race
Davide Scaini
2026-04-27 11:11:05 +02:00
220efb0d05
fix(mobile/upload): activities now appear in browser after upload; reconcile synced_at on fresh server
Davide Scaini
2026-04-27 11:03:00 +02:00
b1cf18a2f0
fix(feed): update feed.json after every upload so browser sees new activities
Davide Scaini
2026-04-26 21:37:19 +02:00
1c9b89cd1c
fix(dev): raise macOS open-file limit before astro dev to prevent EMFILE
Davide Scaini
2026-04-26 21:16:33 +02:00
cbe3e0eeaf
feat(mobile): Karoo GPU crash fix, server-side extraction, upload fix, feed redesign
Davide Scaini
2026-04-26 21:00:12 +02:00
4cabbea0d4
fix(mobile): three-patch compat shim for Chrome <80 (Karoo WebView 61)
Davide Scaini
2026-04-26 15:19:39 +02:00
f6885fecfa
fix(mobile): use split/join for import() patch, gate behind Chrome<63 check
Davide Scaini
2026-04-26 15:05:33 +02:00
1410be7427
fix(mobile): patch pyodide.js at runtime to bypass Chrome 61 import() syntax
Davide Scaini
2026-04-26 14:59:28 +02:00
a5c2810568
fix(mobile): gate watch directory on instance URL; skip auto-scan if unconfigured
Davide Scaini
2026-04-25 22:20:02 +02:00
42d829737c
fix(mobile): auto-save watch directory on blur, not via Save button
Davide Scaini
2026-04-25 22:12:59 +02:00
e062ef5837
fix(mobile): watch-folder button visibility + Karoo file picker crash
Davide Scaini
2026-04-25 22:08:32 +02:00
44a70f4c18
feat(mobile): watch-folder scan button + Karoo file picker fix + docs
Davide Scaini
2026-04-25 21:52:03 +02:00
749d90c79d
fix(android): bundle JS + add armeabi-v7a to ABI splits for Karoo support
Davide Scaini
2026-04-25 21:44:44 +02:00
2f53fbc359
feat(mobile): batch import + Karoo auto-import from watch folder
Davide Scaini
2026-04-25 21:25:54 +02:00
a796bf8cae
fix: write timeseries directly when wheel's write_activity silently skips it
Davide Scaini
2026-04-25 20:39:55 +02:00
2e520137ac
fix: palette changes now propagate immediately via ThemeContext
Davide Scaini
2026-04-25 15:45:27 +02:00
91d747c54a
feat: seasonal race palette auto-detection on web
Davide Scaini
2026-04-25 15:41:45 +02:00
dfe5307ab4
feat: seasonal race palette (Giro/Tour/Vuelta) + mobile picker
Davide Scaini
2026-04-25 15:41:20 +02:00
5330b7b489
app icon
Davide Scaini
2026-04-25 15:33:51 +02:00
1ac35c84e0
feat: add delete button for local activities (single and bulk)
Davide Scaini
2026-04-25 13:43:12 +02:00
c077fceba6
fix: validate activity file exists before treating cached hash as known
Davide Scaini
2026-04-25 09:54:38 +02:00
e08b024d15
fix: add instanceUrl+token to useEffect deps; add MapLibre Expo plugin
Davide Scaini
2026-04-25 09:42:25 +02:00
d8b3a69564
fix: allow HTTP to local instances in release build; fix activity 404 in dev
Davide Scaini
2026-04-25 09:30:02 +02:00
69571c1306
fix: pass wheel filename through extraction chain to fix micropip install
Davide Scaini
2026-04-25 09:29:33 +02:00
ef45d4f4bb
fix: move PyodideWebView into Import tab; fix micropip blob URL error
Davide Scaini
2026-04-24 23:26:39 +02:00
fc814f5026
fix: replace Buffer.from().toString('base64') with btoa helper — Buffer not available in Expo RN
Davide Scaini
2026-04-24 23:16:50 +02:00
21b421fdc3
fix: wrap root layout in flex:1 View so Stack fills full screen alongside hidden WebView
Davide Scaini
2026-04-24 23:15:52 +02:00
84e5cead08
fix: pre-fetch bincio wheel via RN networking to avoid ATS blocking HTTP in WKWebView
Davide Scaini
2026-04-24 23:13:24 +02:00
966528a0bf
feat: Phase 1 — FIT/GPX/TCX extraction via Pyodide in hidden WebView
Davide Scaini
2026-04-24 22:54:59 +02:00
ed738ffc97
docs: document current mobile app state — gaps, stubs, and missing plan items
Davide Scaini
2026-04-24 22:42:20 +02:00
c7c7fe9395
feat: bidirectional sync — upload local activities to remote instance
Davide Scaini
2026-04-24 22:26:13 +02:00
a1e56e5308
feat: tabbed metric charts — elevation, speed, HR, cadence, power
Davide Scaini
2026-04-24 22:03:51 +02:00
3ce365e439
feat: tap map thumbnail to open full-screen interactive map
Davide Scaini
2026-04-24 21:55:56 +02:00
a306682b52
feat: add sync mode setting — summaries only vs full data download
Davide Scaini
2026-04-24 21:52:25 +02:00
bb44b80e97
fix: upgrade react-native-svg to 15.15.4 to fix Fabric crash on RN 0.81
Davide Scaini
2026-04-24 18:20:36 +02:00
c1e4ab5af7
feat: add reset synced data button to settings
Davide Scaini
2026-04-24 15:45:51 +02:00
f054869b04
feat: add --api-host to bincio dev and --mobile to dev_test.py for local mobile testing
Davide Scaini
2026-04-24 15:43:30 +02:00
97c7fae9be
feat: Phase 4 — MapLibre route map + SVG elevation chart on activity screen
Davide Scaini
2026-04-24 15:40:10 +02:00
02726034c7
fix: read activity shards in GET /api/feed; improve sync feedback
Davide Scaini
2026-04-24 15:07:52 +02:00
44b2878b14
feat: Phase 0.5 — remote feed sync via Bearer token auth
Davide Scaini
2026-04-24 12:07:49 +02:00
79c572bf8b
fix: align expo packages to SDK 54 expected versions
Davide Scaini
2026-04-24 11:45:23 +02:00
10b515f3bf
fix: pin react-dom to 19.1.0 to prevent npm resolving 19.2.5
Davide Scaini
2026-04-24 11:39:02 +02:00
6f5abf634d
fix: downgrade to Expo SDK 54 for Expo Go compatibility
Davide Scaini
2026-04-24 11:32:56 +02:00
6e0b619ad3
fix: pin react to 19.2.5 and @types/react to ~19.2.0
Davide Scaini
2026-04-24 11:24:16 +02:00
18726699f1
fix: update react to 19.2.3 to satisfy react-native 0.85.2 peer dep
Davide Scaini
2026-04-24 11:16:14 +02:00
02bb8a3dd7
feat: serve bincio wheel locally for mobile dev testing
Davide Scaini
2026-04-24 11:01:24 +02:00
b37df88fe1
feat: Phase 0 mobile app scaffold — Expo 55, SQLite, Feed/Import/Settings screens
Davide Scaini
2026-04-24 10:39:06 +02:00
565f5a3ff1
docs: complete mobile app plan — phased roadmap, Android/iOS divergences, data model
Davide Scaini
2026-04-24 10:26:58 +02:00
61479fe554
docs: mobile app — Pyodide/hidden-WebView extraction model, algorithm-travels-to-data pattern
Davide Scaini
2026-04-24 10:18:49 +02:00
e952d9bdc1
docs: expand mobile app design — hybrid extraction, Karoo integration, platform independence vision
Davide Scaini
2026-04-24 10:12:36 +02:00
81ed5e1b0b
docs: add mobile app design document (local-first, Expo/React Native)
Davide Scaini
2026-04-24 10:04:13 +02:00
7329c8f5e8
Merge branch 'main' into mobile_app
Davide Scaini
2026-04-24 09:52:27 +02:00
0f1876a33c
chore: untrack CLAUDE.md, publish.sh, docs/squash-for-github.md; gitignore dns/nginx scratch files
Davide Scaini
2026-04-22 17:22:31 +02:00
7c171c9e9d
docs: replace VPS IP with placeholder in elevation.md
Davide Scaini
2026-04-22 17:14:10 +02:00
a69a2f240a
docs: mark changelog 0.1.0 public release (2026-04-22)
Davide Scaini
2026-04-22 17:09:44 +02:00
6dc1fb6f20
fix: prune dist/data before rsync in _trigger_rebuild and manual rebuild endpoint
Davide Scaini
2026-04-22 11:01:01 +02:00
df496a017f
fix: refine hysteresis recalculation with MA pre-smoothing and lower thresholds
Davide Scaini
2026-04-22 10:57:28 +02:00
88b24a6274
docs: update elevation docs and changelog for two-button recalculation and DEM fix
Davide Scaini
2026-04-20 21:43:28 +02:00
ebac3f50f4
fix: DEM elevation overcounting and add hysteresis-only recalculation button
Davide Scaini
2026-04-20 21:41:23 +02:00
2b7a37ed41
docs: update changelog, CLI reference, user guide, and elevation notes
Davide Scaini
2026-04-20 21:18:50 +02:00
0c659db6cb
fix: default DEM URL to api.open-elevation.com
Davide Scaini
2026-04-20 21:17:03 +02:00
1940e2409b
feat: DEM-based elevation recalculation via edit drawer button
Davide Scaini
2026-04-20 20:45:06 +02:00
872651f471
metrics: replace naive elevation accumulation with hysteresis dead-band
Davide Scaini
2026-04-20 20:29:20 +02:00
696f538f56
ci: add fastapi/bcrypt to dev dependency group so all tests pass
Davide Scaini
2026-04-20 20:23:06 +02:00
6491e4fd8c
fix: show total activity count in global feed counter
Davide Scaini
2026-04-20 17:12:50 +02:00
104328bc50
fix: stable y-axis range and sane dist_km in activity charts
Davide Scaini
2026-04-20 17:06:56 +02:00
631e814d64
fix: load all year shards into combined feed, not just top 2
Davide Scaini
2026-04-20 16:14:40 +02:00
db7047f210
perf: combined feed index for multi-user global feed
Davide Scaini
2026-04-20 15:31:35 +02:00
e8a5fbbaba
docs: add nginx gzip configuration for JSON compression
Davide Scaini
2026-04-20 15:24:16 +02:00
d069716068
fix: clamp stats tooltip within viewport on mobile
Davide Scaini
2026-04-20 15:07:52 +02:00
cea1dbc2fb
ops: fix data/ triple-duplication costing ~24 GB on VPS
Davide Scaini
2026-04-19 23:34:55 +02:00
5227b30456
fix: EditDrawer correctly reads and labels unlisted privacy
Davide Scaini
2026-04-19 22:58:09 +02:00
8a3e7831d3
fix: prevent double URL-rewrite in nested shard resolution
Davide Scaini
2026-04-19 22:46:36 +02:00
8575a7015b
fix: delete activity removes it from index.json; detail page uses lazy load
Davide Scaini
2026-04-19 22:31:20 +02:00
cada2bcb03
perf: year-shard index.json to cut initial load from MBs to ~1 year
Davide Scaini
2026-04-19 22:21:10 +02:00
bb253cc2c1
site: accept gzip MIME types in upload file picker
Davide Scaini
2026-04-16 18:54:18 +02:00
cd1cdca33b
extract: auto-detect gzip by magic bytes, not just .gz extension
Davide Scaini
2026-04-16 18:49:01 +02:00
b22b5deb9e
fix tests: update merge tests for private→unlisted rename and client-side filtering
Davide Scaini
2026-04-16 18:16:46 +02:00
219308bdb5
ci: install serve/edit/strava extras so bcrypt and fastapi are available for tests
Davide Scaini
2026-04-16 18:14:00 +02:00
c68dfa9057
chore: update changelog, remove stale files, scrub VPS IP
Davide Scaini
2026-04-16 18:09:32 +02:00
a78f6ee3bd
fix: strip local image refs with spaces/parens in filenames before markdown render
Davide Scaini
2026-04-16 10:29:13 +02:00
cfdd8d2744
fix: image refs in description and broken gallery URLs
Davide Scaini
2026-04-16 10:19:32 +02:00
395182649b
improve docs
Davide Scaini
2026-04-15 23:07:52 +02:00
bfb6432666
fix: force black text in Plot tooltips (white bg, grey text was unreadable)
Davide Scaini
2026-04-15 22:53:48 +02:00
5205a41224
fix: theme-aware chart colors — readable axes and tooltips in light mode
Davide Scaini
2026-04-15 22:18:06 +02:00
a95dd07e22
fix: remove TS type annotation from define:vars script (plain JS only)
Davide Scaini
2026-04-15 20:48:11 +02:00
7142ac8f2e
settings: split danger zone into delete originals / delete all activities
Davide Scaini
2026-04-15 20:42:31 +02:00
87a69bcc8b
settings: add nav visibility prefs and per-user Strava credentials
Davide Scaini
2026-04-15 20:37:42 +02:00
4fd5ba428e
settings: add self-service user settings page
Davide Scaini
2026-04-15 20:24:04 +02:00
764da09130
upload: add overwrite option to replace existing activities
Davide Scaini
2026-04-15 20:17:32 +02:00
a33fea91cf
admin: mark ghost users (no DB account) and add Delete dir button
Davide Scaini
2026-04-15 14:58:54 +02:00
dfd56e4448
fix: handle absolute track_url paths in ActivityDetail
Davide Scaini
2026-04-15 14:50:10 +02:00