Add an in-memory sliding-window rate limiter and wire it into signup,
resend-verification, reset-password, and verify-email routes. Store
password reset tokens as SHA-256 hashes, raise bcrypt cost to 12, and
switch verification codes to a CSPRNG. Stop echoing calendar
access/refresh tokens back to API clients, bound the weather cache
size, return JSON 401s for unauthenticated API calls instead of an
HTML redirect, and drop the dead mock login route.
v1.113.0
API routes (goal, weather, calendar/sync, calendar/events):
- All user lookups now use session email instead of session ID so stale
JWTs after DB restore/migration no longer break requests (P2003 FK error)
WeeklyView QuickSettings sidebar:
- effectiveCellDuration now uses local cellDuration state as fallback
instead of stale profile.cellDuration — slot buttons now actually update
the time grid
- Added 20m slot option to all three button groups (sidebar, header, mobile)
- Added :15/:30/:45 sub-hour slots toggle to QuickSettings sidebar
- Slot controls now highlight using effectiveCellDuration (per-view aware)
- Someday and All-day toggles now use effective value, not global profile
v1.81.15
- Weather API returns empty hourly data (200) when lat/lon not configured,
matching the 502 fix — no more browser console errors for weather
- Calendar sync route falls back to email lookup when session user ID
doesn't match a DB record (handles stale JWT after DB restore/migration)
v1.81.14
- All-day label column uses flex-start so label is visible in small area
- Weather API returns empty data (200) instead of 502 when forecast range
is out of bounds, suppressing console noise on future/past navigation
- QuickSettings toggles for project icons and checkboxes now use effective
(per-view-aware) value, consistent with other toggles
v1.81.13
Users can now pick which weather data to show per time slot: icon,
temperature, feels like, wind speed, gusts, rain probability,
precipitation, humidity, and UV index. API now fetches all data
from Open-Meteo. Also fixed slot height for 20min duration.
v1.52.0
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Per-view settings (cellDuration, showSomeday, etc.) now persist across
page reloads by using a ref to avoid stale closure bugs in saveViewSetting
and removing global state pollution from per-view onChange handlers.
Weather display fixed to use effectiveWeatherEnabled for fetch/render.
Added weatherRecentCities (max 8) as quick-switch pill buttons.
Kanban checkboxes now respect the showTaskCheckboxes per-view setting.
v1.51.0
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add weather feature with Open-Meteo API: hourly temp/icon overlay on time slots,
location search via geocoding, weather toggle in settings
- Move project management to dedicated settings tab with emoji icon picker
- Fix iPhone single-day view starting on yesterday instead of today
- Fix deleted Apple calendar events persisting until app reboot by
scheduling a delayed re-fetch after stale background sync
v1.44.0
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>