Skip to content

Commit 06bb835

Browse files
Refine dashboard management and app surfaces
1 parent 6ad0d69 commit 06bb835

25 files changed

+2758
-1121
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
CREATE TABLE channel_owned_official_dlcs (
2+
id text PRIMARY KEY NOT NULL,
3+
channel_id text NOT NULL REFERENCES channels(id),
4+
source_key text NOT NULL,
5+
source_app_id text,
6+
artist_name text NOT NULL,
7+
title text NOT NULL,
8+
album_name text,
9+
file_path text,
10+
arrangements_json text NOT NULL DEFAULT '[]',
11+
tunings_json text NOT NULL DEFAULT '[]',
12+
created_at integer NOT NULL DEFAULT (unixepoch() * 1000),
13+
updated_at integer NOT NULL DEFAULT (unixepoch() * 1000)
14+
);
15+
16+
CREATE INDEX channel_owned_official_dlcs_channel_idx
17+
ON channel_owned_official_dlcs (channel_id);
18+
19+
CREATE UNIQUE INDEX channel_owned_official_dlcs_channel_source_uidx
20+
ON channel_owned_official_dlcs (channel_id, source_key);
21+
22+
CREATE INDEX channel_owned_official_dlcs_artist_title_idx
23+
ON channel_owned_official_dlcs (channel_id, artist_name, title);

public/backgrounds/grit.svg

Lines changed: 7 additions & 0 deletions
Loading

src/app.css

Lines changed: 47 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
--border-strong: rgba(255, 255, 255, 0.14);
2929
--shadow: 0 28px 80px rgba(0, 0, 0, 0.45);
3030
--shadow-soft: 0 12px 32px rgba(0, 0, 0, 0.24);
31+
--app-grit: url("/backgrounds/grit.svg");
3132
--app-background:
3233
linear-gradient(180deg, #121a24 0%, #0c1219 44%, #091017 100%),
3334
radial-gradient(circle at 7% 5%, rgba(255, 255, 255, 0.14), transparent 20%),
@@ -92,52 +93,60 @@ body.overlay-mode {
9293
background: transparent;
9394
}
9495

96+
body::before {
97+
content: "";
98+
position: absolute;
99+
inset: 0;
100+
z-index: -1;
101+
pointer-events: none;
102+
opacity: 0.42;
103+
background-image: var(--app-grit), var(--app-grit);
104+
background-size: 250px, 360px;
105+
background-position:
106+
0 0,
107+
137px 89px;
108+
background-repeat: repeat, repeat;
109+
filter: grayscale(1) brightness(1.6) contrast(1.04);
110+
}
111+
95112
html::after {
96113
content: "";
97114
position: fixed;
98115
inset: 0;
99116
z-index: -1;
100117
pointer-events: none;
101118
opacity: 0.22;
102-
background:
119+
background-image:
103120
radial-gradient(
104121
circle at 10% 8%,
105-
rgba(255, 255, 255, 0.035),
106-
transparent 26%
107-
),
108-
repeating-linear-gradient(
109-
90deg,
110-
rgba(255, 255, 255, 0.016) 0,
111-
rgba(255, 255, 255, 0.016) 1px,
112-
transparent 1px,
113-
transparent 22px
122+
rgba(255, 255, 255, 0.045),
123+
transparent 20%
114124
),
115-
repeating-linear-gradient(
116-
0deg,
117-
rgba(255, 255, 255, 0.012) 0,
118-
rgba(255, 255, 255, 0.012) 1px,
119-
transparent 1px,
120-
transparent 5px
125+
radial-gradient(
126+
circle at top right,
127+
rgba(145, 159, 188, 0.03),
128+
transparent 18%
121129
);
122130
background-size:
123131
100% 100%,
124-
340px 260px,
125-
340px 260px;
132+
100% 100%;
126133
background-position:
127-
0 0,
128134
0 0,
129135
0 0;
130-
background-repeat: no-repeat;
131-
mix-blend-mode: soft-light;
136+
background-repeat: no-repeat, no-repeat;
137+
mix-blend-mode: normal;
138+
}
139+
140+
html.overlay-mode::after {
141+
display: none;
132142
}
133143

134-
html.overlay-mode::after,
135-
html.overlay-mode::before {
144+
html.extension-mode::after {
136145
display: none;
137146
}
138147

139-
html.extension-mode::after,
140-
html.extension-mode::before {
148+
body.overlay-mode::before,
149+
body.extension-mode::before {
141150
display: none;
142151
}
143152

@@ -180,13 +189,19 @@ h6 {
180189
bottom: 0;
181190
left: var(--shell-gutter);
182191
width: 1px;
183-
background: linear-gradient(
184-
180deg,
185-
transparent 0,
186-
var(--border) 2.5rem,
187-
var(--border) calc(100% - 2.5rem),
188-
transparent 100%
189-
);
192+
background: var(--border);
193+
pointer-events: none;
194+
z-index: 0;
195+
}
196+
197+
.app-shell::after {
198+
content: "";
199+
position: absolute;
200+
top: 0;
201+
bottom: 0;
202+
right: var(--shell-gutter);
203+
width: 1px;
204+
background: var(--border);
190205
pointer-events: none;
191206
z-index: 0;
192207
}

src/components/channel-community-panel.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ export function ChannelCommunityPanel(props: {
239239

240240
return (
241241
<section className="grid gap-6 max-[960px]:gap-4 max-[960px]:border-t max-[960px]:border-(--border) max-[960px]:pt-4">
242-
<div className="grid gap-2">
242+
<div className="grid gap-2 px-8 max-[960px]:px-6">
243243
<h2 className="text-2xl font-semibold tracking-tight text-(--text)">
244244
Community controls
245245
</h2>

src/components/channel-rules-panel.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ type SearchResponse = {
3333

3434
export function ChannelRulesPanel(props: {
3535
slug: string;
36+
channelDisplayName?: string | null;
3637
blacklistEnabled: boolean;
3738
setlistEnabled: boolean;
3839
letSetlistBypassBlacklist: boolean;
@@ -232,9 +233,11 @@ export function ChannelRulesPanel(props: {
232233

233234
return (
234235
<section className="grid gap-6 max-[960px]:gap-4 max-[960px]:border-t max-[960px]:border-(--border) max-[960px]:pt-4">
235-
<div className="grid gap-2">
236+
<div className="grid gap-2 px-8 max-[960px]:px-6">
236237
<h2 className="text-2xl font-semibold tracking-tight text-(--text)">
237-
Channel rules
238+
{props.channelDisplayName
239+
? `${props.channelDisplayName}'s channel rules`
240+
: "Channel rules"}
238241
</h2>
239242
</div>
240243

0 commit comments

Comments
 (0)