• 1.6.2 0a89ec3652

    john-okeefe released this 2026-09-01 20:26:29 -04:00 | 0 commits to main since this release

    Summary

    This release fixes a long-standing breakage in the AniList "Sync Changes" flow on the anime page, along with the follow-up issues it uncovered in the MAL/Simkl sync path. Submitting changes now correctly saves to all connected services and updates the on-page services table.

    Note: tag 1.6.1 was an intermediate fix for the same overall issue. The changes below cover everything since 1.6.0.

    What was broken

    Clicking Sync Changes on an anime page:

    • Sent a malformed GraphQL mutation to AniList, so changes were never actually saved to your AniList list.
    • Because the app ignored AniList's error response, the page's AniList data was replaced with empty values — making it look like AniList had logged you off.
    • Once errors were surfaced (1.6.1), a separate decoding bug caused the AniList response to fail parsing, which skipped the MyAnimeList and Simkl syncs entirely and left the services table unrefreshed.

    Fixes

    AniList

    • Repaired the SaveMediaListEntry mutation. The standardized media field block had been pasted in without its media { … } wrapper, leaving media-level fields on the wrong type, list-level fields at the mutation root, and an unbalanced brace. The mutation now matches the tested API request, and entries save correctly again.
    • Fixed response decoding for array-shaped fields. AniList returns airingSchedule.nodes and relations.nodes as arrays, but the app's internal types declared them as single objects. Every full-media response failed to decode partway through. Both are now proper lists (with named sub-types), so responses decode completely — which also means genres and tags now refresh properly after a submit (the old copy-from-previous-value workaround has been removed).
    • Update and delete failures are no longer silent. The app previously discarded AniList's HTTP status and returned zeroed data on failure. Both AniListUpdateEntry and AniListDeleteEntry now report authentication errors, non-200 responses, and unparseable payloads, and log the status plus response body to the terminal for diagnosis.

    Multi-service sync resilience

    • One service failing no longer skips the others. Sync Changes and Delete Entries previously ran all three services inside a single error handler, so any AniList failure aborted the MyAnimeList and Simkl syncs without notice. Each service now runs in its own error-isolated block.
    • Visible error reporting. If a service fails to sync, an error modal now names the service and the reason (with a retry option), instead of only logging to the developer console.

    Internal

    • Regenerated Wails frontend bindings for the corrected AniList types (MediaAiringSchedule, MediaRelations, AiringScheduleNode, etc.).
    • Bumped productVersion to 1.6.2.

    Known issues

    • svelte-check still reports pre-existing type errors in frontend/wailsjs/go/models.ts and frontend/src/helperDefaults/AniListGetSingleAnime.ts (generated/legacy types); these do not affect the build or runtime.
    Downloads
  • 1.6.0 a16c804692

    john-okeefe released this 2026-08-29 13:26:40 -04:00 | 2 commits to main since this release

    AniTrack v1.6.0

    More reliable MyAnimeList login

    Two MyAnimeList login quirks are fixed:

    • The "It is now safe to close your browser tab" dialog no longer appears for a silent background token refresh — it is now shown only when you actually complete a browser login.
    • If both the access token and the refresh token are invalid, AniTrack now clears the stale tokens and automatically takes you through a fresh browser login, instead of leaving the app looking logged in without a username.

    Login status indicators

    When the app starts and verifies your accounts, the header now shows exactly what it's doing — Checking AniList, Checking MAL, and Checking Simkl — with spinners while each service is being resolved. The same spinners appear on the login entries in the user menu. No more wondering whether the app is stuck or whether you're actually signed in.

    Toolchain & dependency updates

    • Bumped the build toolchain to Go 1.25 and updated the associated golang.org/x dependencies.
    • Upgraded Wails to v2.15.0, which unlocks the cross-platform notification API in the runtime bindings.
    • Cleaned up .gitignore so compiled binaries and packaging archives are never committed.

    Supported Services

    Service Status
    AniList Sync, search, browse, genres, tags, sorting
    MyAnimeList Sync, search, automatic re-auth
    Simkl Sync, search

    What's Changed

    • Rewrite the standard AniList media call with a shared typed model
    • Regenerate Wails Go bindings for the AniList Browse feature
    • Fix MyAnimeList silent token refresh showing a spurious browser dialog
    • Auto re-login MyAnimeList when the refresh token is no longer valid
    • Add per-service login status spinners to the header and user menu
    • Upgrade Wails to v2.15.0 and Go to 1.25
    • Ignore build binaries and archive artifacts in .gitignore
    Downloads
  • 1.5.5 23960e0613

    john-okeefe released this 2026-05-27 20:59:33 -04:00 | 11 commits to main since this release

    Release Notes

    v1.5.5

    Bug Fixes

    • Linux install script reliability and idempotency — Fixed tilde expansion by replacing quoted ~ paths with $HOME so they resolve correctly. Added existence checks before copying files so the script is idempotent and skips already-installed resources. Added progress/status echo messages for each installation step.

    Chores

    • Upgrade Go to 1.25 and update dependencies
      • Bump Go toolchain from 1.24.0 to 1.25.0
      • Upgrade Wails from v2.10.1 to v2.12.0
      • Upgrade tidwall/gjson from v1.18.0 to v1.19.0
      • Upgrade labstack/echo from v4.13.3 to v4.15.2
      • Upgrade labstack/gommon from v0.4.2 to v0.5.0
      • Upgrade samber/lo from v1.49.1 to v1.53.0
      • Upgrade gorilla/websocket to v1.5.3 (new transitive dep)
      • Upgrade go-webview2 from v1.0.19 to v1.0.23
      • Upgrade danieljoos/wincred from v1.2.2 to v1.2.3
      • Upgrade godbus/dbus/v5 from v5.1.0 to v5.2.2
      • Upgrade jchv/go-winloader to latest
      • Upgrade mattn/go-isatty from v0.0.20 to v0.0.22
      • Upgrade tidwall/match from v1.1.1 to v1.2.0
      • Upgrade golang.org/x/crypto, net, sys, term to latest
      • Add go-toast/v2 as new transitive dependency from Wails
    • Bump version to 1.5.5
    Downloads
  • 1.5.1 3621b66437

    john-okeefe released this 2026-05-27 17:33:39 -04:00 | 17 commits to main since this release

    AniTrack v1.5.1

    A small patch release to address a bug that prevented certain anime from loading when using MyAnimeList integration.

    Bug Fix

    MyAnimeList statistics parsing

    Fixed a crash that occurred when fetching anime details from MyAnimeList for titles where a statistics count (watching, completed, on_hold, dropped, or plan_to_watch) was zero. The MyAnimeList API returns non-zero counts as quoted strings (e.g. "8217") but zero counts as bare numbers (e.g. 0), which caused a JSON unmarshal error in the Go backend. A custom FlexString type now handles both formats transparently.

    Downloads
  • 1.5.0 7f92b1714e

    john-okeefe released this 2026-04-24 23:05:40 -04:00 | 18 commits to main since this release

    AniTrack v1.5.0

    A feature release adding AniList watchlist sorting and UI improvements.

    Highlights

    AniList Watchlist Sorting

    A new sort dropdown in the watchlist header lets you dynamically reorder your AniList watchlist by various parameters, including:

    • Media title (Romaji, English, Native)
    • Score, Status, Progress
    • Popularity, Priority, Repeat count
    • Started On, Finished On, Added Time, Updated Time

    Each sort option is available in ascending and descending order. Selecting a new sort immediately refreshes the watchlist.

    Refresh Button Relocated

    The refresh button has been moved out of the watchlist header into its own component at the top of the home page, making it more accessible and always visible.

    UI Polish

    • Removed extraneous spacing between pagination controls and the per-page selector

    What's Changed

    • feat(frontend): add AniList watchlist sort dropdown component with 30 sort options
    • refactor(frontend): extract refresh button into standalone component and move to home page, replace with sort dropdown in watchlist header
    • fix(frontend): remove extraneous top margin from pagination controls
    Downloads
  • 1.0.0 6a662cdf6e

    john-okeefe released this 2026-04-24 19:48:31 -04:00 | 24 commits to main since this release

    AniTrack v1.0.0

    After months of iteration and refinement, AniTrack has reached its first stable release! This milestone marks the transition from an evolving prototype to a reliable, polished desktop app for tracking the anime you watch.

    Highlights

    Built against webkit2gtk 4.1

    The Linux build now targets webkit2gtk-4.1, bringing improved compatibility with modern Linux distributions. A Makefile has been added with the webkit2_41 build tag configured out of the box — simply run make build or make dev on Linux.

    Comprehensive error handling

    All three supported services — AniList, MyAnimeList, and Simkl — now have robust error handling throughout the backend. A new error modal component on the frontend surfaces issues to the user instead of failing silently.

    UI polish

    • Added a refresh button to the watchlist with smart refresh-on-navigation behavior
    • Pagination buttons now properly disable at boundary pages
    • Progress adjustment buttons have disabled-state constraints to prevent invalid values
    • Media cover images are correctly sized in the watchlist
    • Dark mode is now the default across all elements

    Supported Services

    Service Status
    AniList Sync, search, genres, tags
    MyAnimeList Sync, search
    Simkl Sync, search

    Building from Source

    Please refer to the README for instructions on setting up API keys, installing Wails, and building the application. Linux users can use the provided Makefile targets:

    make dev    # run in development mode
    make build  # build a production binary
    

    What's Changed (since v0.7.0)

    • Add Makefile with webkit2_41 build tag for Linux builds
    • Integrate comprehensive error handling into the frontend application
    • Add error modal component for surfacing API failures
    • Add API error state management
    • Add comprehensive error handling for Simkl, MAL, and AniList backends
    • Implement dynamic sort parameter for AniList watchlist
    • Standardize code formatting across components
    • Update author contact information

    Downloads
  • 0.7.0 a3b4857175

    john-okeefe released this 2026-03-30 20:16:10 -04:00 | 30 commits to main since this release

    🎉 AniTrack v0.7.0 Release Notes

    🚨 Major Feature: Comprehensive Error Handling

    This release brings massive improvements to application stability and user experience. The app will no longer crash when API services are down or experiencing errors!


    What's New

    🛡️ Graceful API Error Handling

    • Application Stability: App now remains running even when AniList, MAL, or Simkl APIs are down
    • Visual Error Feedback: Beautiful modal dialogs display error details instead of silent crashes
    • Manual Retry: Users can retry failed API connections with a single button click
    • Continue Using App: Dismiss error messages and continue with limited functionality

    🐛 Bug Fixes

    • Critical: Fixed app crashes when AniList API returns 403 Forbidden errors
    • Critical: Fixed app crashes when AniList API is down or unreachable
    • Critical: Fixed MAL OAuth server crashing on connection errors
    • Critical: Fixed Simkl JSON marshaling errors crashing the app
    • Improved: Better error messages for all API failures

    Version: 0.7.0
    Release Date: March 2026

    Downloads
  • 0.6.5 58c9f449e0

    john-okeefe released this 2026-03-22 21:54:13 -04:00 | 41 commits to main since this release

    AniTrack v0.6.5 Release Notes

    Overview

    This release focuses on improving user experience through enhanced disabled state handling, visual consistency improvements, and code quality enhancements. The changes prevent invalid user actions, provide better visual feedback, and maintain type safety throughout the application.


    🎨 UI/UX Improvements

    Enhanced Button Disabled States

    Anime Component

    Progress adjustment buttons now properly disable when reaching boundary conditions:

    • Decrement button disabled at progress 0 to prevent negative values
    • Increment button disabled when progress exceeds total episodes or next airing episode boundaries
    • Improved visual feedback with background color removal on disabled state

    Pagination Component

    Navigation buttons now respect page boundaries:

    • Previous page button disabled when on first page
    • Next page button disabled when on last page
    • Prevents unnecessary API calls and improves UX by clearly indicating navigation limits

    Visual Consistency

    WatchList Component

    Fixed media cover image sizing:

    • Applied uniform dimensions (230px × 330px) across all cover images
    • Added object-fit styling to maintain aspect ratios
    • Eliminates visual inconsistencies in the watch list grid

    AvatarMenu Component

    New service status indicator:

    • Avatar dot indicator shows login status across all services
    • Green dot: All services (AniList, MAL, Simkl) are logged in
    • Yellow dot: One or more services not logged in
    • Provides quick visual feedback for service availability

    🔧 Code Quality & Type Safety

    TypeScript Enhancements

    Pagination Component

    Fixed type safety issues in event handlers:

    • Added proper type annotations for KeyboardEvent and Event handlers
    • Migrated from e.target to e.currentTarget for type-safe DOM element access
    • Resolved TypeScript errors related to EventTarget property access

    Code Formatting

    Pagination Component

    Comprehensive code formatting:

    • Standardized indentation from 4-space to 2-space convention
    • Reorganized import statements and function declarations
    • Improved code readability and maintainability

    AvatarMenu Component

    Code style improvements:

    • Standardized indentation from 4-space to 2-space convention
    • Improved import statement formatting and alignment
    • Fixed semicolon usage throughout the component
    • Added missing newline at end of file for standards compliance

    📊 Statistics

    • Files Changed: 5
    • Lines Added: 397
    • Lines Removed: 281
    • Net Change: +116 lines

    🐛 Bug Fixes

    • Fixed media cover image sizing inconsistencies in WatchList
    • Resolved TypeScript type safety issues in Pagination event handlers
    • Prevented invalid progress adjustments that could exceed episode boundaries
    • Prevented invalid pagination requests beyond available pages
    • Fixed syntax error in App.svelte

    Downloads
  • 0.6.0 b2a8a504f3

    john-okeefe released this 2026-03-21 13:36:43 -04:00 | 48 commits to main since this release

    Release Notes - AniTrack v0.6.0

    Navigation & Performance Improvements

    Smart Watchlist Refresh

    • Implemented intelligent watchlist refresh system that only fetches updated data when changes have actually been made
    • Eliminated unnecessary API calls and reduced server load
    • Added dirty flag tracking to detect when users update anime status, progress, or delete entries
    • Automatic refresh when navigating back to homepage, ensuring data stays current without manual intervention
    • Parallel refresh support for multiple services (AniList, MAL, Simkl) when logged in
      Client-Side Routing
    • Fixed header logo navigation to use svelte-spa-router's link action instead of full page reloads
    • Prevents app remounting and redundant authentication checks on logo click
    • Smoother navigation experience with instant page transitions
    • Maintains application state across navigation

    UI/UX Enhancements

    WatchList Component Updates

    • Added manual "Refresh WatchList" button for on-demand data updates
    • Improved header layout with flexbox for proper alignment (title left, button right)
    • Better visual hierarchy and spacing consistency
    • Enhanced responsive design with improved button styling

    Technical Improvements

    • Fixed TypeScript compilation errors
    • Cleaned up VSCode workspace configuration
    • Improved code organization and maintainability
    • Enhanced reactive state management patterns

    Bug Fixes

    • Resolved syntax errors in App.svelte that prevented compilation
    • Fixed navigation flow to prevent unnecessary re-authentication
    Downloads
  • 0.5.3 ca8c8beaf3

    john-okeefe released this 2026-03-20 15:58:02 -04:00 | 53 commits to main since this release

    Updated to 0.5.3 to fix a bug where the spinner kept loading after submit and the genres were not brought back in after update.

    Downloads