diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index afd2e74..6854ca4 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -15,4 +15,4 @@ updates:
- "*"
update-types:
- "minor"
- - "patch"
\ No newline at end of file
+ - "patch"
diff --git a/.github/workflows/dependabotautomerge.yml b/.github/workflows/dependabotautomerge.yml
index ffc9ef2..744c796 100644
--- a/.github/workflows/dependabotautomerge.yml
+++ b/.github/workflows/dependabotautomerge.yml
@@ -19,4 +19,4 @@ jobs:
run: gh pr merge --auto --rebase "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
- GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
\ No newline at end of file
+ GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
diff --git a/.github/workflows/eslint.yml b/.github/workflows/eslint.yml
deleted file mode 100644
index 08ea6a4..0000000
--- a/.github/workflows/eslint.yml
+++ /dev/null
@@ -1,47 +0,0 @@
-# This workflow uses actions that are not certified by GitHub.
-# They are provided by a third-party and are governed by
-# separate terms of service, privacy policy, and support
-# documentation.
-# ESLint is a tool for identifying and reporting on patterns
-# found in ECMAScript/JavaScript code.
-# More details at https://github.com/eslint/eslint
-# and https://eslint.org
-
-name: ESLint
-
-on:
- push:
- branches: [ "main" ]
- pull_request:
- # The branches below must be a subset of the branches above
- branches: [ "main" ]
-jobs:
- eslint:
- name: Run eslint scanning
- runs-on: ubuntu-latest
- permissions:
- contents: read
- security-events: write
- actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - uses: pnpm/action-setup@v4
- name: Install pnpm
- with:
- version: 10
- run_install: false
-
- - name: Install Node.js
- uses: actions/setup-node@v4
- with:
- node-version: 20
- cache: 'pnpm'
-
- - name: Install dependencies
- run: pnpm install ${{ github.actor == 'dependabot[bot]' && '--no-frozen-lockfile' || '--frozen-lockfile' }}
-
- - name: run ESLint + Prettier
- run: pnpm run quality:eslint
-
diff --git a/.github/workflows/generate-apk.yml b/.github/workflows/generate-apk.yml
index df040b4..371989d 100644
--- a/.github/workflows/generate-apk.yml
+++ b/.github/workflows/generate-apk.yml
@@ -18,7 +18,7 @@ jobs:
if: startsWith(github.ref, 'refs/tags/')
steps:
- uses: actions/checkout@v4
-
+
- name: Set version env vars
run: |
TAG=${GITHUB_REF#refs/tags/v}
@@ -105,4 +105,3 @@ jobs:
android/app/build/outputs/apk/release/shazarr-signed.apk
- run: echo Build status report=${{ job.status }}
-
diff --git a/.github/workflows/generate-pr-apk.yml b/.github/workflows/generate-pr-apk.yml
index d933d3e..43dfbac 100644
--- a/.github/workflows/generate-pr-apk.yml
+++ b/.github/workflows/generate-pr-apk.yml
@@ -62,7 +62,6 @@ jobs:
working-directory: ./android
run: chmod +x gradlew
-
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
@@ -92,4 +91,3 @@ jobs:
with:
name: app-bundle
path: android/app/build/outputs/apk/release/shazarr-signed.apk
-
\ No newline at end of file
diff --git a/.github/workflows/oxlint.yml b/.github/workflows/oxlint.yml
new file mode 100644
index 0000000..f360ef4
--- /dev/null
+++ b/.github/workflows/oxlint.yml
@@ -0,0 +1,69 @@
+# This workflow uses actions that are not certified by GitHub.
+# They are provided by a third-party and are governed by
+# separate terms of service, privacy policy, and support
+# documentation.
+
+name: Oxc (oxlint + oxfmt)
+
+on:
+ push:
+ branches: ["main"]
+ pull_request:
+ branches: ["main"]
+
+jobs:
+ oxlint:
+ name: Run oxlint scanning
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ security-events: write
+ actions: read
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - uses: pnpm/action-setup@v4
+ name: Install pnpm
+ with:
+ version: 10
+ run_install: false
+
+ - name: Install Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ cache: "pnpm"
+
+ - name: Install dependencies
+ run: pnpm install ${{ github.actor == 'dependabot[bot]' && '--no-frozen-lockfile' || '--frozen-lockfile' }}
+
+ - name: Run Oxlint
+ run: pnpm run quality:lint
+
+ oxfmt:
+ name: Check formatting with oxfmt
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - uses: pnpm/action-setup@v4
+ name: Install pnpm
+ with:
+ version: 10
+ run_install: false
+
+ - name: Install Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ cache: "pnpm"
+
+ - name: Install dependencies
+ run: pnpm install ${{ github.actor == 'dependabot[bot]' && '--no-frozen-lockfile' || '--frozen-lockfile' }}
+
+ - name: Check formatting
+ run: pnpm run quality:format-check
diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml
index dbb36c5..71cc52a 100644
--- a/.github/workflows/playwright.yml
+++ b/.github/workflows/playwright.yml
@@ -1,17 +1,17 @@
name: Playwright Tests
on:
push:
- branches: [ main ]
+ branches: [main]
pull_request:
- branches: [ main ]
+ branches: [main]
concurrency:
group: ${{ github.ref }}
- cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
+ cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
jobs:
test:
timeout-minutes: 60
runs-on: ubuntu-latest
- name: 'Playwright Tests'
+ name: "Playwright Tests"
steps:
- name: Checkout
uses: actions/checkout@v4
@@ -25,14 +25,14 @@ jobs:
- uses: actions/setup-node@v4
with:
node-version: "22.x"
- cache: 'pnpm'
+ cache: "pnpm"
- name: Install dependencies
run: pnpm install ${{ github.actor == 'dependabot[bot]' && '--no-frozen-lockfile' || '--frozen-lockfile' }}
- name: Run Playwright tests
run: pnpm run testing:ci
-
+
- uses: actions/upload-artifact@v4
if: failure()
with:
diff --git a/.oxfmtrc.json b/.oxfmtrc.json
new file mode 100644
index 0000000..aa2a2f1
--- /dev/null
+++ b/.oxfmtrc.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "https://raw.githubusercontent.com/oxc-project/oxc/main/schemas/oxfmtrc.json",
+
+ "ignorePatterns": [
+ "**/node_modules",
+ "**/public",
+ "**/playwright-report",
+ "**/dist",
+ "**/android",
+ "**/ios",
+ "**/.git"
+ ],
+
+ "settings": {
+ "typescript": {
+ "tsconfig": "./tsconfig.json"
+ }
+ },
+
+ "options": {
+ "quoteStyle": "double",
+ "semicolons": "always",
+ "trailingCommas": "es5",
+ "indentWidth": 2,
+ "useTabs": false,
+ "lineEndings": "lf"
+ }
+}
diff --git a/.oxlintrc.json b/.oxlintrc.json
new file mode 100644
index 0000000..1125b36
--- /dev/null
+++ b/.oxlintrc.json
@@ -0,0 +1,62 @@
+{
+ "$schema": "https://raw.githubusercontent.com/oxc-project/oxc/main/schemas/oxlintrc.json",
+
+ "ignorePatterns": [
+ "**/node_modules",
+ "**/public",
+ "**/playwright-report",
+ "**/dist",
+ "**/android",
+ "**/ios"
+ ],
+
+ "plugins": ["react", "jsx_a11y"],
+
+ "rules": {
+ "react/exhaustive-deps": "warn",
+ "react/forward-ref-uses-ref": "warn",
+ "react/jsx-key": "error",
+ "react/no-children-prop": "error",
+ "react/no-danger-with-children": "error",
+
+ "jsx_a11y/alt-text": "error",
+ "jsx_a11y/anchor-has-content": "error",
+ "jsx_a11y/anchor-is-valid": "error",
+ "jsx_a11y/aria-activedescendant-has-tabindex": "error",
+ "jsx_a11y/aria-props": "error",
+ "jsx_a11y/aria-proptypes": "error",
+ "jsx_a11y/aria-role": "error",
+ "jsx_a11y/aria-unsupported-elements": "error",
+ "jsx_a11y/autocomplete-valid": "error",
+ "jsx_a11y/click-events-have-key-events": "error",
+ "jsx_a11y/control-has-associated-label": "error",
+ "jsx_a11y/heading-has-content": "error",
+ "jsx_a11y/html-has-lang": "error",
+ "jsx_a11y/iframe-has-title": "error",
+ "jsx_a11y/img-redundant-alt": "error",
+ "jsx_a11y/interactive-supports-focus": "error",
+ "jsx_a11y/label-has-associated-control": "error",
+ "jsx_a11y/lang": "error",
+ "jsx_a11y/media-has-caption": "error",
+ "jsx_a11y/mouse-events-have-key-events": "error",
+ "jsx_a11y/no-access-key": "error",
+ "jsx_a11y/no-autofocus": "error",
+ "jsx_a11y/no-distracting-elements": "error",
+ "jsx_a11y/no-interactive-element-to-noninteractive-role": "error",
+ "jsx_a11y/no-noninteractive-element-interactions": "error",
+ "jsx_a11y/no-noninteractive-element-to-interactive-role": "error",
+ "jsx_a11y/no-noninteractive-tabindex": "error",
+ "jsx_a11y/no-redundant-roles": "error",
+ "jsx_a11y/no-static-element-interactions": "error",
+ "jsx_a11y/role-has-required-aria-props": "error",
+ "jsx_a11y/role-supports-aria-props": "error",
+ "jsx_a11y/scope": "error",
+ "jsx_a11y/tabindex-no-positive": "error"
+ },
+
+ "settings": {
+ "typescript": {
+ "tsconfig": "./tsconfig.json"
+ }
+ }
+}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ed29422..3658569 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,163 +1,250 @@
# Changelog
+
Shazarr notable changes.
[Keep a Changelog](http://keepachangelog.com/en/1.0.0/) format.
## ๐ฆ 0.3.7
+
### ๐ Changed
-* Remove alarm and reminder permission request #366
+
+- Remove alarm and reminder permission request #366
## ๐ฆ 0.3.6
+
### ๐ Added
-* Add Soulsync support #358
+
+- Add Soulsync support #358
+
### ๐ Changed
-* Move from Matomo to Umami
+
+- Move from Matomo to Umami
## ๐ฆ 0.3.5
+
### ๐ Added
-* Add new option to auto-shazam on app open #337
-* Dedup records on new tags and store previous tag dates #339
+
+- Add new option to auto-shazam on app open #337
+- Dedup records on new tags and store previous tag dates #339
## ๐ฆ 0.3.4
-### ๐ Changed
-* Wait for Lidarr's artist sync to actually finish instead of guessing with a timeout
+### ๐ Changed
+
+- Wait for Lidarr's artist sync to actually finish instead of guessing with a timeout
## ๐ฆ 0.3.3
+
### ๐ Changed
-* Keep tidarr and lidarr button state instead of returning to initial state
+
+- Keep tidarr and lidarr button state instead of returning to initial state
## ๐ฆ 0.3.2
+
### ๐ Added
-* Use back button to close panel
+
+- Use back button to close panel
+
### ๐ Changed
-* Download the APK directly on update
+
+- Download the APK directly on update
+
### ๐ Fixed
-* Rewrite Lidarr album monitoring #308
+
+- Rewrite Lidarr album monitoring #308
## ๐ฆ 0.3.1
+
### ๐ Fixed
-* Fix Lidarr monitored artist instead of album only #308
+
+- Fix Lidarr monitored artist instead of album only #308
## ๐ฆ 0.3.0
+
### ๐ Changed
-* Results shows now as a inline card instead of a dedicated screen.
-* Enhance UI for landscape mode
+
+- Results shows now as a inline card instead of a dedicated screen.
+- Enhance UI for landscape mode
## ๐ฆ 0.2.1
+
### ๐ Fixed
-* Fix Tidarr network error
+
+- Fix Tidarr network error
## ๐ฆ 0.2.0
+
### ๐ Added
-* Lidarr button now auto seearch if API key is set #241
-* Tidarr search is now integrated in the app if API key is set
+
+- Lidarr button now auto seearch if API key is set #241
+- Tidarr search is now integrated in the app if API key is set
+
### ๐ Changed
-* Gradle version is synched with the github tag in ci #227
+
+- Gradle version is synched with the github tag in ci #227
+
### ๐งน Renovate
-* Dependencies update
+
+- Dependencies update
## ๐ฆ 0.1.6
+
### ๐ Changed
-* Use github tag as project version
+
+- Use github tag as project version
## ๐ฆ 0.1.5
+
### ๐ Fixed
-* Fix issue with android navigation button overlap in history
+
+- Fix issue with android navigation button overlap in history
## ๐ฆ 0.1.4
+
### ๐ Fixed
-* Fix issue with android navigation button overlap
+
+- Fix issue with android navigation button overlap
+
### ๐งน Renovate
-* Update other node dependencies
+
+- Update other node dependencies
## ๐ฆ 0.1.3
+
### ๐ Fixed
-* Update tidarr search url according version 0.3.0
+
+- Update tidarr search url according version 0.3.0
+
### ๐งน Renovate
-* Update `Android SDK` from version 34 to 35
-* Move from `npm`to `pnpm`
-* Update other node dependencies
+
+- Update `Android SDK` from version 34 to 35
+- Move from `npm`to `pnpm`
+- Update other node dependencies
## ๐ฆ 0.1.2
+
### ๐งน Renovate
-* Update `capacitor` from version 6 to 7
-* Update `react` from version 18 to 19
-* Update other node dependencies
-* Move from `react-scripts`to `vite`
+
+- Update `capacitor` from version 6 to 7
+- Update `react` from version 18 to 19
+- Update other node dependencies
+- Move from `react-scripts`to `vite`
## ๐ฆ 0.1.1
-### ๐ Fixed
-* Fix application crash when track result does not have album information
-### ๐งน Renovate
-* Add Matomo cookie free and anonimyzed data
+### ๐ Fixed
+
+- Fix application crash when track result does not have album information
+
+### ๐งน Renovate
+
+- Add Matomo cookie free and anonimyzed data
## ๐ฆ 0.1.0
+
### ๐ Changed
-* Change notification message to specify prerelease ou release update status
+
+- Change notification message to specify prerelease ou release update status
+
### ๐ Fixed
-* Fix issue with track image not updating when picking an history item
-* Fix readme apk download link
+
+- Fix issue with track image not updating when picking an history item
+- Fix readme apk download link
+
### ๐งน Renovate
-* Update node deps
-* Migrate capacitor from v5 to v6
-* Typescript 5
-* Eslint 9
+
+- Update node deps
+- Migrate capacitor from v5 to v6
+- Typescript 5
+- Eslint 9
## ๐ฆ 0.0.9
+
### ๐ Added
-* Playwright testing
-* Github CI Eslint + testing
+
+- Playwright testing
+- Github CI Eslint + testing
+
### ๐ Fixed
-* Fix history order issue on delete / recognize offline record
+
+- Fix history order issue on delete / recognize offline record
## ๐ฆ 0.0.8
+
### ๐ Fixed
-* Fix missing "not found" message
+
+- Fix missing "not found" message
## ๐ฆ 0.0.7
+
### ๐ Changed
-* Update `shazam-api` node package to 0.2.0
-* Remove git patch package and clean code
+
+- Update `shazam-api` node package to 0.2.0
+- Remove git patch package and clean code
+
### ๐ Fixed
-* Fix datetime issue on android
+
+- Fix datetime issue on android
## ๐ฆ 0.0.6
+
### ๐ Changed
-* Use Lidarr in lazy mode to avoid API issue
+
+- Use Lidarr in lazy mode to avoid API issue
Clean code - code style
## ๐ฆ 0.0.5
+
### ๐ Fixed
-* Fix Audio player keeps playing issue
+
+- Fix Audio player keeps playing issue
+
### ๐ Added
-* Add error handling on Shazam and Lidarr queries.
+
+- Add error handling on Shazam and Lidarr queries.
## ๐ฆ 0.0.4
+
### ๐ Changed
-* Remove FFmpeg
-* Use JS Audio API (make song identification much faster)
+
+- Remove FFmpeg
+- Use JS Audio API (make song identification much faster)
+
### ๐ Fixed
-* Fix offline record
+
+- Fix offline record
## ๐ฆ 0.0.3
+
### ๐ Added
-* Add app update notifications
+
+- Add app update notifications
+
### ๐ Changed
-* Refacto transcoding
+
+- Refacto transcoding
+
### ๐ Fixed
-* Fix Lidarr API fetches
+
+- Fix Lidarr API fetches
## ๐ฆ 0.0.2
+
### ๐ Added
-* Add github page
+
+- Add github page
+
### ๐ Changed
-* Improve ffmpeg
+
+- Improve ffmpeg
+
### ๐ Fixed
-* Fix "not found" response
+
+- Fix "not found" response
## ๐ฆ 0.0.1
+
### ๐ Added
-* Initial project package
\ No newline at end of file
+
+- Initial project package
diff --git a/README.md b/README.md
index 26a4b07..15c7a6b 100644
--- a/README.md
+++ b/README.md
@@ -14,6 +14,7 @@ Shazarr is a mobile app (Android, iOS) providing Shazam song recognition with de
## Features
### Core
+
- Audio microphone capture and song recognition using reverse Shazam API with [node-shazam-api](https://github.com/asivery/node-shazam-api)
- Listen on streaming apps: Spotify, Apple Music and Deezer
- Show lyrics for recognized tracks
@@ -22,6 +23,7 @@ Shazarr is a mobile app (Android, iOS) providing Shazam song recognition with de
- Privacy: No login, no tracking, no mandatory API key
### Music Services Integration
+
- **Lidarr**: Auto-search and download discovered albums via API
- **Tidarr**: Search Tidal content in-app, queue tracks or full album downloads, add to Tidal favorites
- **SoulSync**: Add to wishlist to trigger automatic download via API
@@ -32,7 +34,7 @@ Shazarr is a mobile app (Android, iOS) providing Shazam song recognition with de
- **Android**: โ
Download APK [here](https://github.com/cstaelen/shazarr/releases/latest/download/shazarr-signed.apk)
- **iOS**: โ ๏ธ Build from Xcode only (requires Xcode and paired device)
-Get last release :
+Get last release :
[
](https://github.com/cstaelen/shazarr-app/releases/latest)
@@ -41,10 +43,12 @@ Get last release :
Configure Shazarr to connect with your music automation services:
### Services
+
- **Lidarr URL**: `http://` (optional API key for auto-search, falls back to browser)
- **Tidarr URL**: `http://` (optional API key for auto-search)
### SoulSync
+
- **SoulSync URL**: `http://:8008`
- **SoulSync API Key**: `your-api-key` (generated from SoulSync settings: Settings > API)
- **SoulSync Profile ID**: `1` (optional, defaults to profile 1)
@@ -52,6 +56,7 @@ Configure Shazarr to connect with your music automation services:
> **Note**: When configured with API key, Shazarr will automatically search and add tracks/albums to your SoulSync wishlist, triggering automatic downloads based on your SoulSync configuration.
### Custom Service
+
- **Custom service URL**: `http://?query=` (e.g., `http://my-service.local/search?q=`)
- **Custom service name**: Display name for the button (e.g., "My Music Service")
@@ -74,17 +79,21 @@ Configure Shazarr to connect with your music automation services:
6. After a few seconds, the app will be installed on your iPad/iPhone
## Roadmap
+
- [x] Android app
- [x] Record history: access last shazamed songs
- [x] Offline record: record without API access, recognize song later
-- [x] Update notifications
+- [x] Update notifications
- [ ] iOS app: find a way to distribute packaged app without using app store and without have to clone and build it
## Development
+
- Android + iOS mobile app (ReactJS + Ionic/Capacitor)
### Watch mode
+
Start app in watch mode :
+
```sh
pnpm run start # Listening on http://localhost:3000/
pnpm run android:live # Listening on http://localhost:8100/ + emulate
@@ -92,11 +101,15 @@ pnpm run ios:live # Listening on http://localhost:8100/ + emulate
```
### Build
+
Build APK with Android studio:
+
```
pnpm run android:build
```
+
Build ios app with Xcode:
+
```
make ios/build
```
@@ -108,9 +121,9 @@ If you like this project you can support here:
## Credits
+
- Big thanks to the [node-shazam-api](https://github.com/asivery/node-shazam-api) team for the awesome works and reactivness ๐๐ช๐
- UI inspiration : https://github.com/codrops/ShazamButtonEffect
-- See Lidarr project: https://github.com/linuxserver/docker-lidarr
+- See Lidarr project: https://github.com/linuxserver/docker-lidarr
- See Tidarr project: https://github.com/cstaelen/tidarr
- See SoulSync project: https://github.com/Nezreka/SoulSync
-
diff --git a/capacitor.config.json b/capacitor.config.json
index 1b4e1b2..d9945a4 100644
--- a/capacitor.config.json
+++ b/capacitor.config.json
@@ -1,8 +1,8 @@
{
- "appId": "io.ionic.shazarr",
- "appName": "Shazarr",
- "bundledWebRuntime": false,
- "npmClient": "pnpm",
- "webDir": "dist",
- "cordova": {}
- }
\ No newline at end of file
+ "appId": "io.ionic.shazarr",
+ "appName": "Shazarr",
+ "bundledWebRuntime": false,
+ "npmClient": "pnpm",
+ "webDir": "dist",
+ "cordova": {}
+}
diff --git a/eslint.config.mjs b/eslint.config.mjs
deleted file mode 100644
index 5d4a6e9..0000000
--- a/eslint.config.mjs
+++ /dev/null
@@ -1,63 +0,0 @@
-import js from "@eslint/js";
-import jsxA11Y from "eslint-plugin-jsx-a11y";
-import reactHooksEslint from "eslint-plugin-react-hooks";
-import reactRefresh from 'eslint-plugin-react-refresh'
-import simpleImportSort from "eslint-plugin-simple-import-sort";
-
-import globals from 'globals'
-import tseslint from 'typescript-eslint'
-
-export default tseslint.config(
- { ignores: [
- "**/node_modules",
- "**/public",
- "**/playwright-report",
- "**/dist",
- "**/android",
- "**/ios",
- ], },
- {
- extends: [js.configs.recommended,
- ...tseslint.configs.recommended],
- files: ['**/*.{ts,tsx}'],
- languageOptions: {
- ecmaVersion: 2020,
- globals: globals.browser,
- },
- plugins: {
- 'react-hooks': reactHooksEslint,
- 'react-refresh': reactRefresh,
- "jsx-a11y": jsxA11Y,
- "simple-import-sort": simpleImportSort,
- },
- rules: {
- ...reactHooksEslint.configs.recommended.rules,
- 'react-refresh/only-export-components': [
- 'warn',
- { allowConstantExport: true },
- ],
- "simple-import-sort/imports": [
- "error",
- {
- groups: [
- // Packages `react` related packages come first.
- ["^react", "^@?\\w"],
- // Internal packages.
- ["^(@|components)(/.*|$)"],
- // Internal packages.
- ["^(assets/js)(/.*|$)"],
- // Side effect imports.
- ["^\\u0000"],
- // Parent imports. Put `..` last.
- ["^\\.\\.(?!/?$)", "^\\.\\./?$"],
- // Other relative imports. Put same-folder imports and `.` last.
- ["^\\./(?=.*/)(?!/?$)", "^\\.(?!/?$)", "^\\./?$"],
- // Style imports.
- ["^.+\\.?(css)$"],
- ],
- },
- ],
- "simple-import-sort/exports": "error",
- },
- },
-)
\ No newline at end of file
diff --git a/index.html b/index.html
index a83117a..1c08b15 100644
--- a/index.html
+++ b/index.html
@@ -1,19 +1,17 @@
-
+
+
+
+
+
+
-
-
-
-
-
+ Shazarr - Unoffical Shazam app
+
- Shazarr - Unoffical Shazam app
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+