AniDash is a premium, high-end personal anime tracker with a focus on Ethereal Glass aesthetics and high-performance list management. Powered by Svelte 5 (Runes), Tailwind CSS v4, and the MyAnimeList API.
- Ethereal Glass UI: A custom-crafted design system using frosted glassmorphism, fluid animations, and high-contrast OLED black themes.
- Offline-First Resilience: Full IndexedDB caching for your entire watch list. Browse, check stats, and view anime details even without an internet connection.
- Fused Filtering Logic: Optimized
+page.svelteby consolidating chained filter calls into a singleO(N)pass, reducing intermediate array allocations and GC pressure during user interaction. - Offline Sync Queue: Implemented a discrete
syncQueueIndexedDB store (DB_VERSION 2) to natively sequester offline or failed user mutations. Ensures offline mutations are maintained optimistically and re-attempted sequentially upon resolvingnavigator.onLineor triggeringflushPersistentQueue. - Zero-Dependency Visuals: Implemented score and media format distribution charts using pure CSS/Svelte logic, maintaining high performance and small bundle size while providing premium analytics.
- Bi-Directional Sync: Modern MAL API v2 integration with proper PKCE OAuth, real-time status updates, and permanent list deletion support.
- MAL-Dubs Integration: Instantly identify which anime have English dubs available using the MAL-Dubs dataset with a persistent 7-day TTL cache.
- Advanced Recommendations: Dual-source suggestions from both MyAnimeList and the Jikan community, unified into a premium suggested gallery.
- Dynamic Stats & Sorting: Comprehensive dashboard tracking your watching habits, episode distribution, and rating history with responsive visualizations. Enhanced data navigation with "MAL Rating" sorting for your personal list and seasonal anime.
- Smart Data Insights: Community rating and member statistics (e.g., "8.3 | 250K") displayed on poster overlays using short-scale formatting (K/M) for maximum density.
- Bilingual Title Support: Global settings toggle to seamlessly switch between English and Romaji (Japanese) anime titles, complete with smooth flip animations and persistent local preferences.
- Interactive Discovery: Turn empty states into opportunities with glassmorphic "Plan to Watch Roulette" and "Seasonal Surprise" widgets built directly into the Browse page.
- Enhanced Detail Gallery: Lazy-loaded characters, community recommendations from Jikan, and a "Quick Stats" row with precise scoring user counts.
- Integrated Airing Schedules: Stay ahead of the season with native MAL broadcast times (e.g. "Airs Mondays at 23:30 JST") displayed directly on anime detail pages for accurate airing information.
- Visual Analytics Dashboard: Deep dive into your watch history with score distribution histograms and media format charts built natively for maximum performance.
- Detailed Search Context: Search and browse results now explicitly show your list status (Watching, Completed, etc.) and real-time watch progress (e.g. 12/24) directly on the posters.
- Type-Safe OAuth: End-to-end Zod schema validation ensures authentication logic is resilient to unexpected API changes.
- Environment-Aware Logging: Centralized logging utility silences debug warnings in production builds for a cleaner end-user experience.
AniDash is a unified SvelteKit application optimized for Cloudflare Pages.
- Frontend: SvelteKit SPA using Svelte 5's fine-grained reactivity (Runes).
- Backend: Serverless Edge Functions that handle secure MAL token exchange and CORS proxying.
- Database: Client-side IndexedDB for lightning-fast performance and offline availability.
- Go to MyAnimeList API Settings.
- Create a new ID.
- App Type:
web - Redirect URI:
http://localhost:5173/auth/callback(for local development)
- App Type:
Create a .env file in the root for the frontend:
VITE_MAL_CLIENT_ID=your_mal_client_idFor local development of server-side routes, create a .dev.vars file in the root (used by Wrangler):
MAL_CLIENT_ID=your_mal_client_id
MAL_CLIENT_SECRET=your_mal_client_secretnpm install
npm run devThe app will run on http://localhost:5173.
AniDash is optimized for Cloudflare Pages.
- Ensure your MAL API Client settings include your production URL in the Redirect URIs:
https://your-app.pages.dev/auth/callback
-
Connect your repository to Cloudflare Pages.
-
Build settings:
- Framework preset:
SvelteKit - Build command:
npm run build - Build output directory:
.svelte-kit/cloudflare
- Framework preset:
-
Environment Variables: In the Cloudflare Dashboard, go to Settings > Variables and Secrets and add:
Variable Type Description VITE_MAL_CLIENT_IDEnvironment Variable Public Client ID for the frontend build. MAL_CLIENT_IDEnvironment Variable / Secret Client ID for backend proxying. MAL_CLIENT_SECRETSecret Your MAL Client Secret (Keep this private). -
Compatibility Date: Ensure the compatibility date is set to at least
2024-04-01in the dashboard orwrangler.toml.
This project is licensed under the GNU General Public License v3.0.
