tag=tag,
song_list=render_template("song-list.html", songs=songs))
+@app.get("/site-news")
+def site_news():
+ return render_template("news.html")
+
def flash_and_log(msg, category=None):
flash(msg, category)
username = session["username"] if "username" in session else "N/A"
--purple: #9986a6;
--pink: #bc80af;
--blue: #8dcbc2;
+ --black: #695c73;
}
body {
background: var(--yellow);
- color: var(--purple);
+ color: var(--black);
font-family: sans-serif;
border-color: var(--purple);
max-width: 700px;
}
a {
+ color: var(--black);
+}
+
+h1, h2, h3, h4 {
color: var(--purple);
}
font-family: sans-serif;
font-weight: bold;
color: var(--yellow);
- background: var(--pink);
+ background: var(--purple);
border: 0px;
border-radius: 5px;
padding: 8px;
.profile-link {
font-weight: bold;
- color: var(--pink);
+ /* color: var(--purple); */
}
.user-list-entry {
div.song {
box-shadow: 0px 0px 5px 0px;
border-radius: 10px;
- padding-left: 10px;
}
div.song-main {
display: flex;
- flex-wrap: wrap;
+ flex-wrap: nowrap;
gap: 10px;
align-items: center;
margin: 5px;
div.song-info {
display: flex;
flex-wrap: wrap;
+ flex-direction: row;
gap: 10px;
- align-items: center;
+ align-items: flex-start;
flex-grow: 1;
+ margin: 10px
+}
+
+/* Artist on separate line for mobile */
+@media screen and (max-width: 480px) {
+ div.song-info {
+ flex-direction: column;
+ }
+
+ div.song-info-sep {
+ display: none;
+ }
}
div.song-buttons {
#player-position-bar {
position: absolute;
display: inline-block;
- background-color: var(--purple);
+ background-color: var(--black);
left: 100;
top: 14px;
width: 100%;
position: absolute;
display: inline-block;
visibility: hidden;
- background-color: var(--pink);
+ background-color: var(--purple);
top: 6px;
width: 20px;
height: 20px;
<!-- Navbar -->
<div class="navbar">
<a href="/">Home</a>
+ <a href="/site-news">News</a>
{% if "username" in session %}
<a href="/users/{{ session["username"] }}">My Profile</a>
<a href="/logout">Sign Out</a>
--- /dev/null
+{% extends "base.html" %}
+
+{% block title %}Site News{% endblock %}
+
+{% block body %}
+
+<h1>Site News</h1>
+
+<h2>2025-01-25 - Launch Day!</h2>
+<p>
+A few minor tweaks right out of the gate!
+</p>
+<ul>
+ <li>Added site news!</li>
+ <li>You can now click a song title to get a direct link for the song</li>
+ <li>A much needed visual contrast bump</li>
+ <li>Song lists now look way better on mobile</li>
+</ul>
+
+{% endblock %}
+
<div class="song-title"><a href="/song/{{ song.userid }}/{{ song.songid }}?action=view">{{ song.title }}</a></div>
<!-- Separator -->
- -
-
+ <div class="song-info-sep">
+ -
+ </div>
+
<!-- Song Artist -->
- <a href="/users/{{ song.username }}" class="profile-link">{{ song.username }}</a>
+ <div class="song-artist">
+ <a href="/users/{{ song.username }}" class="profile-link">{{ song.username }}</a>
<!-- Song Collaborators -->
- <div class="song-collabs">
{% for collab in song.collaborators %}
{% if collab.startswith("@") %}
<a href="/users/{{ collab[1:] }}" class="profile-link">{{ collab[1:] }}</a>
assert songs[0]["title"] == "song1"
assert songs[0]["username"] == "user1"
+################################################################################
+# Site News
+################################################################################
+
+def test_site_news(client):
+ response = client.get("/site-news")
+ assert response.status_code == 200
+ assert b"Site News" in response.data
-TODO (BEFORE RELEASE)
-
-- Automated backups
-
-- RELEASE IT
-
-TODO (AFTER RELEASE)
+- Dark mode?
+- Autoplay toggle
- Comments, notifications
- Tips and Tricks
- Multiline descriptions