diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..cca4eb1a Binary files /dev/null and b/.gitignore differ diff --git a/backend/.gitignore b/backend/.gitignore index 5f493be1..bf60bf34 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -47,3 +47,4 @@ pytest_cache/ build/ dist/ *.egg-info/ + diff --git a/backend/music/.gitignore b/backend/music/.gitignore deleted file mode 100644 index c0f9ffd8..00000000 --- a/backend/music/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -.env -venv -__pycache__/ -*.pyc -*.pyo -*.pyd -*.db -*.sqlite3 \ No newline at end of file diff --git a/backend/streamify_api/.gitignore b/backend/streamify_api/.gitignore deleted file mode 100644 index fa15c54b..00000000 --- a/backend/streamify_api/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -.env -venv -__pycache__/ -*.pyc -*.pyo -*.pyd -*.db -*.sqlite3 -headers_auth.json \ No newline at end of file diff --git a/backend/streamify_api/settings.py b/backend/streamify_api/settings.py index cc860b13..cf5a29a2 100644 --- a/backend/streamify_api/settings.py +++ b/backend/streamify_api/settings.py @@ -12,6 +12,7 @@ from pathlib import Path import os + from dotenv import load_dotenv load_dotenv() import dj_database_url @@ -26,6 +27,9 @@ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = os.environ["DJANGO_SECRET_KEY"] + + + # SECURITY WARNING: don't run with debug turned on in production! DEBUG = os.environ["DEBUG"] diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 2d7e5f47..522b53b9 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -888,13 +888,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.2", + "version": "0.3.2", "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.2.tgz", "integrity": "sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.15.0", + "@eslint/core": "^0.15.2", "levn": "^0.4.1" }, "engines": { @@ -902,7 +902,7 @@ } }, "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { - "version": "0.15.0", + "version": "0.15.0", "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.0.tgz", "integrity": "sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==", "dev": true, @@ -3671,7 +3671,7 @@ } }, "node_modules/vite": { - "version": "6.3.5", + "version": "6.3.5", "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", "dev": true, diff --git a/frontend/src/components/Miniplayer.css b/frontend/src/components/Miniplayer.css index 936f22f1..68b2f309 100644 --- a/frontend/src/components/Miniplayer.css +++ b/frontend/src/components/Miniplayer.css @@ -1,3 +1,4 @@ +/* === Base (Desktop / Tablet) === */ .mini-player { display: flex; justify-content: space-between; @@ -69,8 +70,9 @@ gap: 0.8rem; } -.mini-like { - background: #3a2323; /* dark brown */ +.mini-like, +.mini-play { + background: #3a2323; border: none; color: white; cursor: pointer; @@ -86,57 +88,83 @@ padding: 0; } -.mini-like svg { - display: block; - margin: auto; +.mini-like:active, +.mini-play:active { + background: #4a2f2f; } -.mini-like svg path { - fill: none; - stroke: #fff; - stroke-width: 2.2; - transition: fill 0.2s, stroke 0.2s; +/* === Tablet view (below 700px) === */ +@media (max-width: 700px) { + .mini-player { + bottom: 64px; /* Above navbar */ + z-index: 1003; + } } -.mini-like.liked svg path { - fill: #fff !important; - stroke: #fff !important; -} +/* === Mobile view (below 480px) === */ +@media (max-width: 400px) { + .mini-player { + flex-direction: row; + height: auto; + justify-content: space-between; + padding: 0.6rem 0.8rem; + border-radius: 0; + bottom: 56px; /* slightly adjusted for smaller navbars */ + } -.mini-like:active { - background: #4a2f2f; -} + .mini-meta { + gap: 0.5rem; + } -.mini-play { - background: #3a2323; /* dark brown */ - border: none; - color: white; - cursor: pointer; - font-size: 1rem; - width: 40px; - height: 40px; - border-radius: 50%; - display: flex; - align-items: center; - justify-content: center; - transition: background 0.2s; - box-shadow: 0 2px 8px rgba(0,0,0,0.10); - padding: 0; -} + .mini-cover { + width: 30px; + height: 30px; + } -.mini-play svg { - display: block; - margin: auto; -} + .mini-title { + font-size: 0.8rem; + } -.mini-play:active { - background: #4a2f2f; + .mini-artist { + font-size: 0.7rem; + } + + .mini-controls { + gap: 0.5rem; + } + + .mini-like, + .mini-play { + width: 34px; + height: 34px; + font-size: 0.9rem; + } + + .mini-text { + max-width: 100px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } } -@media (max-width: 700px) { +/* === Very small devices (below 360px) === */ +@media (max-width: 360px) { .mini-player { - bottom: 64px; /* Place above navbar (navbar height is 64px) */ - z-index: 1003; + padding: 0.5rem 0.6rem; + } + + .mini-title { + font-size: 0.75rem; + } + + .mini-artist { + display: none; /* hide artist text to save space */ + } + + .mini-cover { + width: 36px; + height: 36px; } } .volume-container { @@ -196,4 +224,3 @@ border-radius: 2px; background: transparent; } -