Skip to content

Releases: Horrid-12/Snowball

v7.7.0

Choose a tag to compare

@Horrid-12 Horrid-12 released this 18 Sep 12:43

Features & Enhancements

Next Occurrence Date on Recurring Tasks:

  • Daily, weekly, monthly, and custom recurring tasks now dynamically display their next occurrence date directly on the card.
  • Rendered as an accent pill (e.g., Next: Sep 21) in compact mode, or inline with the recurrence badge in expanded mode.

Discord Rich Presence Toggle:

  • Added a desktop toggle under Settings > Technical to enable or disable Discord Rich Presence on the fly without needing to restart the app.

Frequency-Based Tag Sorting:

  • Tags in the TaskBoard filter bar, Study Timer subject dropdown, and Settings modal are now sorted by how frequently they are used in tasks rather than purely alphabetically.
  • The Study Timer now remembers and automatically defaults to your last selected study subject.
  • Replaced legacy popup prompt dialogs with a modern inline text input in Settings > Themes & Tags: supports Enter to save, Escape to cancel, and dedicated Save/Cancel buttons.

Security Hardening

CSRF Protection on Authenticated Auth Routes:

  • Replaced the blanket /api/auth/ CSRF bypass with an explicit whitelist of only public unauthenticated endpoints (/login, /register, /forgot-password).
  • Authenticated endpoints (PUT /api/auth/me and POST /api/auth/logout) now enforce the X-Requested-With: XMLHttpRequest header.
  • CORS "null" Origin Attack Protection:
    Blocked literal "null" origins in CORS to prevent sandboxed iframe attacks from making authenticated cross-origin requests.

Anti-Caching Headers for API Routes:

  • Enforced Cache-Control: no-store, no-cache, must-revalidate, proxy-revalidate, Pragma: no-cache, and Expires: 0 on all /api/* endpoints to protect sensitive user data from CDN/browser caching.

Serverless Token Revocation Race Condition Fix:

  • Cache misses in sessionStore.js now query the Supabase token_blacklist table directly with a 30-second TTL cache, preventing revoked tokens from being accepted on cold-started or multi-instance serverless Lambdas.

Production Error Masking:

  • 5xx errors in production now return a sanitized 'Internal Server Error' message, preventing raw database/system details from leaking to clients.

Schema Payload Bounding:

  • Enforced boundedJson() size limits (20 KB–100 KB) on timer_state, appearance_settings, tag_colors, and study_timer_state in validate.js.

Bug Fixes & Stability

Fixed prompt() is not supported Crash on Windows Desktop:

  • Resolved runtime crashes in Microsoft WebView2 / Tauri when renaming tags or configuring recurrences by moving to inline inputs and try...catch guards.

Suppressed AbortError Console Noise:

  • Filtered out expected AbortError / signal is aborted without reason cancellations in apiClient.js (caused by debounced presence heartbeats), eliminating console warning noise.

Native Confirm Dialogs:

  • Upgraded tag deletion and desktop reset confirmations in SettingsModal.jsx to use
    nativeConfirm.

v7.6.2

Choose a tag to compare

@Horrid-12 Horrid-12 released this 09 Sep 09:11

Full Changelog: v7.6.1...v7.6.2

Fixes:

  • Fixed Tags added with (+) Button not Showing up on Study Timer Panel
  • Fixed Deleted Timer Not Deleting Properly
  • Fixed Pixel Inconsistency for Android History Vault

v7.6.1

Choose a tag to compare

@Horrid-12 Horrid-12 released this 30 Aug 10:05

v7.6.1

This patch release brings Study Timer usability enhancements, resolves an initial authentication race condition, and updates project security policies and documentation.

Improvements & New Features

  • Custom Subject Creation: Added a new + button directly beside the main subject selector in the Study Timer card, allowing users to create and switch to custom study subjects on the fly. Custom subjects persist across reloads.
  • Study Timer Layout Fixes: Resolved an issue where datetime inputs (specifically the End time input) overflowed outside the timer card boundary in both the Add Session form and Session Editor modal.

Bug Fixes & Stability

  • Fixed Initial Habits Load Race Condition: Resolved an issue where /api/habits and /api/activity/stats returned 401 errors on startup. apiFetch now automatically ensures auth tokens stored in IndexedDB are restored to memory before firing initial requests.
  • Context Refresh Sync: Added refresh event dispatching upon session confirmation and login to guarantee habit lists and lifetime stats update without requiring a manual page refresh.
    Security & Documentation
  • Updated Security Policy (SECURITY.md): Documented Snowball's multi-platform security architecture, Row Level Security (RLS) policies, CSRF protections, token isolation model, and formal vulnerability reporting channels (GitHub Private Advisories and dedicated security email).
  • README Updates: Updated tech stack references and license declarations across repository documentation.

v7.6.0

Choose a tag to compare

@Horrid-12 Horrid-12 released this 29 Aug 12:13

Full Changelog: v7.5.0...v7.6.0
Snowball v7.6.0

New Features & Improvements

  • Multi-Tasking Study Timers: You can now run up to 3 timers simultaneously. Track your study sessions across multiple subjects at the exact same time without losing momentum.
  • Editable Timer Sessions: Missed tracking a session? Forgot to stop the timer? You can now manually Add, Edit, or Delete individual study sessions directly from the Deep Work Timer card.
  • Markdown Notes Support: The expanded notes editor has been upgraded. It now fully supports Markdown formatting natively (via tiptap-markdown), allowing for richer and more robust note-taking.

Bug Fixes

  • Midnight Date Fix: Fixed a bug where tasks scheduled exactly for midnight (00:00) were incorrectly having their logical dates shifted.
  • Cleaned up UI code: Removed duplicate imports and cleaned up component rendering in TaskForm.jsx.

Security Hardening & Audit

Completely overhauled the security posture of Snowball:

  • Vulnerability Sweep: Patched over 30 GitHub Dependabot security alerts across the frontend and backend (including DoS and CRLF injections in deeply nested dependencies).
  • Auth Token Protection: Moved JWT (snowball_token) and user PII out of raw localStorage and into secure IndexedDB and HttpOnly cookies.
  • CSRF Protection: Enforced X-Requested-With: XMLHttpRequest headers for all state-changing API routes.
  • Row Level Security (RLS): Safely restricted backend database queries by implementing strict Supabase RLS policies tied to user JWTs.
  • Code Execution Protection: Removed the use of eval() in the Calculator widget, replacing it with a safe mathematical recursive descent parser (safeEvaluate).
  • XSS Protection: Added comprehensive DOMPurify sanitization to prevent Cross-Site Scripting when rendering raw HTML in Notes.

v7.5.0

Choose a tag to compare

@Horrid-12 Horrid-12 released this 16 Aug 17:16

Full Changelog: v7.4.1...v7.5.0

  • Updated Node.js
  • Fixed Tags not getting added in Settings

v7.4.1

Choose a tag to compare

@Horrid-12 Horrid-12 released this 14 Aug 19:11

Full Changelog: v7.4.0...v7.4.1

  • Fixed Productivity Score

v7.4.0

Choose a tag to compare

@Horrid-12 Horrid-12 released this 10 Aug 13:03

Full Changelog: v7.3.6...v7.4.0

-Backend Performance Improved
-Frontend Components Improved
-Fixed CSS Theme Layout Leak after Zooming out

v7.3.6

Choose a tag to compare

@Horrid-12 Horrid-12 released this 06 Aug 15:33

Full Changelog: v7.3.5...v7.3.6

  • Fixed Sync For Study Timer
  • Fixed Lazy Loading of Friends List and Statistics on Android

v7.3.5

Choose a tag to compare

@Horrid-12 Horrid-12 released this 20 Jul 12:18

Full Changelog: v7.3.4...v7.3.5
Features :-

  • Added Detection which chooses theme as system theme by default
  • Added Habits Headmap

Fixes :-
Android Performance

v7.3.4

Choose a tag to compare

@Horrid-12 Horrid-12 released this 21 Jun 14:35

Full Changelog: v7.3.3...v7.3.4

Fixed Study-Timer for Cross Device Broken Again
Added Control + S to Quick Save notes and Control + Tab to Wheel Between them