Skip to content

Commit 68ab19f

Browse files
chelojimenezclaude
andauthored
Soundcheck: dogfood @mcpjam/design-system (#1850)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 745ea53 commit 68ab19f

17 files changed

Lines changed: 579 additions & 1013 deletions

package-lock.json

Lines changed: 76 additions & 306 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

soundcheck/package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,22 @@
1111
"typecheck": "tsc --noEmit"
1212
},
1313
"dependencies": {
14+
"@mcpjam/design-system": "*",
1415
"@workos-inc/authkit-nextjs": "^0.14.0",
1516
"next": "^15.5.9",
1617
"react": "19.1.0",
1718
"react-dom": "19.1.0"
1819
},
1920
"devDependencies": {
21+
"@tailwindcss/postcss": "^4.1.11",
2022
"@types/node": "^20.14.10",
2123
"@types/react": "^19",
2224
"@types/react-dom": "^19",
23-
"autoprefixer": "^10.4.19",
2425
"eslint": "^8.57.0",
2526
"eslint-config-next": "^15.5.9",
2627
"postcss": "^8.4.38",
27-
"tailwindcss": "^3.4.4",
28+
"tailwindcss": "^4.1.11",
29+
"tw-animate-css": "^1.3.5",
2830
"typescript": "^5.5.2"
2931
}
3032
}

soundcheck/postcss.config.js

Lines changed: 0 additions & 6 deletions
This file was deleted.

soundcheck/postcss.config.mjs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const config = {
2+
plugins: {
3+
"@tailwindcss/postcss": {}
4+
}
5+
};
6+
7+
export default config;

soundcheck/src/app/globals.css

Lines changed: 56 additions & 225 deletions
Original file line numberDiff line numberDiff line change
@@ -1,228 +1,59 @@
1-
@tailwind base;
2-
@tailwind components;
3-
@tailwind utilities;
4-
5-
:root {
6-
color-scheme: dark;
7-
8-
--bg-base: #0a0a0c;
9-
--bg-panel: #111116;
10-
--bg-panel-raised: #16161d;
11-
--edge-hairline: rgba(245, 244, 239, 0.06);
12-
--edge-strong: rgba(245, 244, 239, 0.12);
13-
--text-primary: #f5f4ef;
14-
--text-secondary: #9a9aa0;
15-
--text-muted: #5a5a68;
16-
}
17-
18-
html,
19-
body {
20-
background: var(--bg-base);
21-
color: var(--text-primary);
22-
}
23-
24-
body {
25-
margin: 0;
26-
font-feature-settings:
27-
"ss01" on,
28-
"cv11" on;
29-
-webkit-font-smoothing: antialiased;
30-
-moz-osx-font-smoothing: grayscale;
31-
min-height: 100vh;
32-
position: relative;
33-
}
34-
35-
/* Atmospheric background: radial warm glow + film grain.
36-
Both are purely decorative, pointer-events:none. */
37-
body::before {
38-
content: "";
39-
position: fixed;
40-
inset: 0;
41-
z-index: -2;
42-
background:
43-
radial-gradient(
44-
ellipse 80% 60% at 20% 0%,
45-
rgba(232, 195, 102, 0.04),
46-
transparent 60%
47-
),
48-
radial-gradient(
49-
ellipse 60% 50% at 90% 10%,
50-
rgba(140, 180, 216, 0.035),
51-
transparent 60%
52-
),
53-
radial-gradient(
54-
ellipse 100% 70% at 50% 120%,
55-
rgba(127, 217, 154, 0.025),
56-
transparent 60%
57-
);
58-
pointer-events: none;
59-
}
60-
61-
body::after {
62-
content: "";
63-
position: fixed;
64-
inset: 0;
65-
z-index: -1;
66-
opacity: 0.035;
67-
pointer-events: none;
68-
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.6 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
69-
}
70-
71-
/* Selection matches the editorial feel */
72-
::selection {
73-
background: rgba(232, 195, 102, 0.25);
74-
color: #f5f4ef;
75-
}
76-
77-
/* Thin, warm scrollbar */
78-
::-webkit-scrollbar {
79-
width: 10px;
80-
height: 10px;
81-
}
82-
::-webkit-scrollbar-track {
83-
background: transparent;
84-
}
85-
::-webkit-scrollbar-thumb {
86-
background: rgba(245, 244, 239, 0.08);
87-
border-radius: 10px;
88-
border: 2px solid transparent;
89-
background-clip: padding-box;
90-
}
91-
::-webkit-scrollbar-thumb:hover {
92-
background: rgba(245, 244, 239, 0.15);
93-
background-clip: padding-box;
94-
border: 2px solid transparent;
95-
}
96-
97-
/* Hairline divider utility */
98-
.hairline {
99-
background-image: linear-gradient(
100-
to right,
101-
transparent,
102-
var(--edge-hairline) 12%,
103-
var(--edge-hairline) 88%,
104-
transparent
105-
);
106-
height: 1px;
107-
}
108-
109-
/* Panel — the base card surface. Slightly raised, subtle inner highlight. */
110-
.panel {
111-
background:
112-
linear-gradient(
113-
180deg,
114-
rgba(245, 244, 239, 0.015),
115-
transparent 40%
116-
),
117-
var(--bg-panel);
118-
border: 1px solid var(--edge-hairline);
119-
border-radius: 14px;
120-
box-shadow:
121-
0 1px 0 rgba(245, 244, 239, 0.03) inset,
122-
0 20px 60px -20px rgba(0, 0, 0, 0.5);
123-
}
124-
125-
.panel-accent-go {
126-
border-left: 2px solid rgba(127, 217, 154, 0.7);
127-
}
128-
.panel-accent-stop {
129-
border-left: 2px solid rgba(240, 141, 135, 0.75);
130-
}
131-
.panel-accent-wait {
132-
border-left: 2px solid rgba(232, 195, 102, 0.75);
133-
}
134-
.panel-accent-info {
135-
border-left: 2px solid rgba(140, 180, 216, 0.5);
136-
}
137-
138-
/* Roman-numeral section marker */
139-
.numeral {
140-
font-family: var(--font-display);
141-
font-style: italic;
142-
font-weight: 400;
143-
font-size: 1.25rem;
144-
line-height: 1;
145-
color: var(--text-muted);
146-
letter-spacing: 0.01em;
147-
}
148-
149-
.display-hero {
150-
font-family: var(--font-display);
151-
font-weight: 400;
152-
letter-spacing: -0.02em;
153-
line-height: 0.95;
154-
}
155-
156-
/* Monospace tag used for SHAs — slight tracking in, subtle uppercase weight */
157-
.tag-mono {
158-
font-family: var(--font-mono);
159-
font-size: 0.72rem;
160-
letter-spacing: 0.02em;
161-
color: var(--text-secondary);
162-
}
163-
164-
/* Glow status dots — more refined than solid circles */
165-
.dot {
166-
position: relative;
167-
display: inline-block;
168-
width: 0.5rem;
169-
height: 0.5rem;
170-
border-radius: 9999px;
171-
box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.02);
172-
}
173-
.dot::after {
174-
content: "";
175-
position: absolute;
176-
inset: -6px;
177-
border-radius: 9999px;
178-
background: currentColor;
179-
opacity: 0.2;
180-
filter: blur(4px);
181-
}
182-
.dot-go {
183-
background: #7fd99a;
184-
color: #7fd99a;
185-
}
186-
.dot-stop {
187-
background: #f08d87;
188-
color: #f08d87;
189-
}
190-
.dot-wait {
191-
background: #e8c366;
192-
color: #e8c366;
193-
}
194-
.dot-info {
195-
background: #8cb4d8;
196-
color: #8cb4d8;
197-
}
198-
.dot-run {
199-
background: #8cb4d8;
200-
color: #8cb4d8;
201-
animation: pulse-soft 1.6s ease-in-out infinite;
202-
}
203-
.dot-neutral {
204-
background: #3a3a48;
205-
color: #3a3a48;
206-
}
207-
.dot-neutral::after {
208-
display: none;
209-
}
210-
211-
@keyframes pulse-soft {
212-
0%,
213-
100% {
214-
transform: scale(1);
215-
opacity: 1;
1+
@import "tailwindcss";
2+
@import "tw-animate-css";
3+
@import "@mcpjam/design-system/tokens.css";
4+
5+
@source "../../../design-system/src/**/*.tsx";
6+
7+
@custom-variant dark (&:is(.dark *));
8+
9+
@theme inline {
10+
--color-background: var(--background);
11+
--color-foreground: var(--foreground);
12+
--color-card: var(--card);
13+
--color-card-foreground: var(--card-foreground);
14+
--color-popover: var(--popover);
15+
--color-popover-foreground: var(--popover-foreground);
16+
--color-primary: var(--primary);
17+
--color-primary-foreground: var(--primary-foreground);
18+
--color-secondary: var(--secondary);
19+
--color-secondary-foreground: var(--secondary-foreground);
20+
--color-muted: var(--muted);
21+
--color-muted-foreground: var(--muted-foreground);
22+
--color-accent: var(--accent);
23+
--color-accent-foreground: var(--accent-foreground);
24+
--color-destructive: var(--destructive);
25+
--color-destructive-foreground: var(--destructive-foreground);
26+
--color-border: var(--border);
27+
--color-input: var(--input);
28+
--color-ring: var(--ring);
29+
--color-success: var(--success);
30+
--color-success-foreground: var(--success-foreground);
31+
--color-warning: var(--warning);
32+
--color-warning-foreground: var(--warning-foreground);
33+
--color-info: var(--info);
34+
--color-info-foreground: var(--info-foreground);
35+
--color-pending: var(--pending);
36+
--color-pending-foreground: var(--pending-foreground);
37+
--color-overlay: var(--overlay);
38+
39+
--font-sans: var(--font-sans);
40+
--font-mono: var(--font-mono);
41+
42+
--radius-sm: calc(var(--radius) - 4px);
43+
--radius-md: calc(var(--radius) - 2px);
44+
--radius-lg: var(--radius);
45+
--radius-xl: calc(var(--radius) + 4px);
46+
}
47+
48+
@layer base {
49+
* {
50+
@apply border-border;
21651
}
217-
50% {
218-
transform: scale(0.85);
219-
opacity: 0.55;
52+
html,
53+
body {
54+
min-height: 100%;
55+
}
56+
body {
57+
@apply bg-background text-foreground antialiased;
22058
}
221-
}
222-
223-
/* Focus ring — warm, accessible. The ring inherits whatever radius the
224-
focused element already has; we don't force a shape on it. */
225-
:focus-visible {
226-
outline: none;
227-
box-shadow: 0 0 0 2px rgba(232, 195, 102, 0.6);
22859
}

soundcheck/src/app/layout.tsx

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,7 @@
11
import type { Metadata } from "next";
2-
import { Instrument_Serif, Geist, Geist_Mono } from "next/font/google";
2+
import { Geist, Geist_Mono } from "next/font/google";
33
import "./globals.css";
44

5-
const display = Instrument_Serif({
6-
subsets: ["latin"],
7-
weight: ["400"],
8-
style: ["normal", "italic"],
9-
variable: "--font-display",
10-
display: "swap"
11-
});
12-
135
const sans = Geist({
146
subsets: ["latin"],
157
variable: "--font-sans",
@@ -34,11 +26,8 @@ export default function RootLayout({
3426
children: React.ReactNode;
3527
}) {
3628
return (
37-
<html
38-
lang="en"
39-
className={`${display.variable} ${sans.variable} ${mono.variable}`}
40-
>
41-
<body className="font-sans antialiased">{children}</body>
29+
<html lang="en" className={`dark ${sans.variable} ${mono.variable}`}>
30+
<body className="font-sans">{children}</body>
4231
</html>
4332
);
4433
}

0 commit comments

Comments
 (0)