{"id":28399836,"url":"https://github.com/andrejkoller/notorium-frontend","last_synced_at":"2026-04-15T09:31:30.973Z","repository":{"id":295464647,"uuid":"988407209","full_name":"andrejkoller/notorium-frontend","owner":"andrejkoller","description":"🎼 Sheet music library platform with PDF viewing, user profiles, and advanced search filters. Built with React + TypeScript.","archived":false,"fork":false,"pushed_at":"2026-03-09T10:02:49.000Z","size":1563,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-09T14:54:22.649Z","etag":null,"topics":["axios","css3","html5","music-sheet-reading","pdfjs","react","react-pdf","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andrejkoller.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-22T13:57:21.000Z","updated_at":"2026-03-09T10:02:53.000Z","dependencies_parsed_at":"2025-05-25T18:32:48.228Z","dependency_job_id":"2c775568-c9a7-4ec1-ad8b-7e4ffcef678e","html_url":"https://github.com/andrejkoller/notorium-frontend","commit_stats":null,"previous_names":["andrejkoller/notorium-frontend"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/andrejkoller/notorium-frontend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrejkoller%2Fnotorium-frontend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrejkoller%2Fnotorium-frontend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrejkoller%2Fnotorium-frontend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrejkoller%2Fnotorium-frontend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andrejkoller","download_url":"https://codeload.github.com/andrejkoller/notorium-frontend/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrejkoller%2Fnotorium-frontend/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31834505,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T07:17:56.427Z","status":"ssl_error","status_checked_at":"2026-04-15T07:17:30.007Z","response_time":63,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["axios","css3","html5","music-sheet-reading","pdfjs","react","react-pdf","typescript"],"created_at":"2025-06-01T08:11:21.238Z","updated_at":"2026-04-15T09:31:30.965Z","avatar_url":"https://github.com/andrejkoller.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Short description\n\nA modern web application for browsing, uploading, and managing sheet music. Built with React, TypeScript, and Vite, featuring user authentication, advanced filtering capabilities, PDF viewing, and a responsive dark/light theme interface.\n\n## ✨ Features\n\n- User Authentication - Secure registration and login system\n- Sheet Music Library - Browse, upload, and manage your personal collection\n- Advanced Filtering - Search by genre, difficulty level, and instrument\n- PDF Viewer - Integrated PDF viewing with react-pdf\n- User Profiles - Manage your account and favorites\n- Theme Support - Light and dark mode with seamless switching\n- Responsive Design - Optimized for all screen sizes\n- Favorites System - Save and organize your favorite sheet music\n\n## 🛠️ Technologies Used\n\n- Framework: React 19 with TypeScript\n- Build Tool: Vite 6\n- UI Library: Chakra UI v3\n- Routing: React Router v7\n- HTTP Client: Axios\n- PDF Rendering: react-pdf \u0026 pdfjs-dist\n- Icons: Lucide React\n- Animations: Framer Motion\n- State Management: React Context API\n- Theming: next-themes\n\n## 📋 Prerequisites\n\n- Node.js (v18 or higher)\n- npm or yarn\n\n## 📦 Installation\n\n1. Clone the repository\n\n```bash\ngit clone https://github.com/andrejkoller/notorium-frontend.git\ncd notorium-frontend\n```\n\n2. Install dependencies\n\n```bash\nnpm install\n```\n\n3. Start development server\n\n```bash\nnpm run dev\n```\n\nThe application will be available at http://localhost:5173 (or another port if 5173 is in use).\n\n## 🔌 API Integration\n\nThe application communicates with a backend API through the axios instance configured in `src/services/axios-instance.ts`.\n\nKey Features:\n\n- Automatic JWT token injection from localStorage\n- Automatic redirect to login on 401 (Unauthorized)\n- Centralized error handling\n\nServices:\n\n- `auth-service.ts` - Authentication (login, register)\n- `user-service.ts` - User management\n- `sheet-music-service.ts` - Sheet Music CRUD operations\n\n## 🔐 Authentication\n\nThe app uses JWT-based authentication:\n\n1. User logs in via `/login`\n2. JWT token is stored in localStorage\n3. Token is automatically included in API requests\n4. Protected routes redirect to login if token is missing/invalid\n\n## 🔗 Related\n\n- Backend Repository: [Notorium API](https://github.com/andrejkoller/NotoriumAPI)\n\n## 📸 Screenshots\n\n\u003cimg width=\"1920\" height=\"1080\" alt=\"Screenshot 1\" src=\"https://github.com/user-attachments/assets/f38064e0-6ab4-4227-b25c-333c90e6bc6e\" /\u003e\n\u003cimg width=\"1920\" height=\"1080\" alt=\"Screenshot 2\" src=\"https://github.com/user-attachments/assets/c140e751-2347-4abb-ad3c-49e09c9f531e\" /\u003e\n\u003cimg width=\"1920\" height=\"1080\" alt=\"Screenshot 3\" src=\"https://github.com/user-attachments/assets/8f7db3ff-5226-40be-8b42-5f4a8c0e80da\" /\u003e\n\u003cimg width=\"1920\" height=\"1080\" alt=\"Screenshot 4\" src=\"https://github.com/user-attachments/assets/f319b2f3-3772-4740-9f20-27c9969c846a\" /\u003e\n\u003cimg width=\"1920\" height=\"1080\" alt=\"Screenshot 5\" src=\"https://github.com/user-attachments/assets/30992bdf-6bb2-4f65-9062-ebd757f6d57c\" /\u003e\n\u003cimg width=\"1920\" height=\"1080\" alt=\"Screenshot 6\" src=\"https://github.com/user-attachments/assets/64ef07e0-d35b-455a-9869-911ddd9567ad\" /\u003e\n\u003cimg width=\"1920\" height=\"1080\" alt=\"Screenshot 7\" src=\"https://github.com/user-attachments/assets/a965636e-11c9-4017-befb-ba47c67fb217\" /\u003e\n\u003cimg width=\"1920\" height=\"1080\" alt=\"Screenshot 8\" src=\"https://github.com/user-attachments/assets/63c5b66e-cf73-4624-bced-58a78abeb9e5\" /\u003e\n\u003cimg width=\"1920\" height=\"1080\" alt=\"Screenshot 9\" src=\"https://github.com/user-attachments/assets/b77c1d73-958c-4fb5-aa5d-f7cd7db699f8\" /\u003e\n\u003cimg width=\"1920\" height=\"1080\" alt=\"Screenshot 10\" src=\"https://github.com/user-attachments/assets/ed5c9c69-5056-4464-9386-824b2359ad86\" /\u003e\n\u003cimg width=\"1920\" height=\"1080\" alt=\"Screenshot 11\" src=\"https://github.com/user-attachments/assets/0eb39e4b-bf58-4060-9268-92fc21b4b3b6\" /\u003e\n\u003cimg width=\"1920\" height=\"1080\" alt=\"Screenshot 12\" src=\"https://github.com/user-attachments/assets/bf656ff1-f220-4d04-9b3f-b7072ec87f43\" /\u003e\n\u003cimg width=\"1920\" height=\"1080\" alt=\"Screenshot 13\" src=\"https://github.com/user-attachments/assets/f077609d-8aa9-4bb6-8d8d-375497aafa08\" /\u003e\n\u003cimg width=\"1920\" height=\"1080\" alt=\"Screenshot 14\" src=\"https://github.com/user-attachments/assets/c08d95ba-abc2-4d4e-9f1c-b5480adb7f1f\" /\u003e\n\u003cimg width=\"1920\" height=\"1080\" alt=\"Screenshot 15\" src=\"https://github.com/user-attachments/assets/74345630-7d03-4dc6-a933-ad08ffdf51b5\" /\u003e\n\u003cimg width=\"1920\" height=\"1080\" alt=\"Screenshot 16\" src=\"https://github.com/user-attachments/assets/07e37e45-3a53-432f-9180-75bbe6e8542a\" /\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrejkoller%2Fnotorium-frontend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandrejkoller%2Fnotorium-frontend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrejkoller%2Fnotorium-frontend/lists"}