@@ -5,46 +5,8 @@ import {
55 CardHeader ,
66 CardTitle ,
77} from "@/components/ui/card" ;
8- import { Input } from "@/components/ui/input" ;
9- import { Label } from "@/components/ui/label" ;
108import { Badge } from "@/components/ui/badge" ;
11- import { Separator } from "@/components/ui/separator" ;
12-
13- const PUBLISH_DAYS = [ "Mon" , "Tue" , "Wed" , "Thu" , "Fri" , "Sat" , "Sun" ] ;
14- const DEFAULT_PUBLISH_DAYS = [ "Mon" , "Wed" , "Fri" ] ;
15-
16- const CONTENT_CATEGORIES = [
17- "JavaScript" ,
18- "TypeScript" ,
19- "React" ,
20- "Next.js" ,
21- "Angular" ,
22- "Svelte" ,
23- "Node.js" ,
24- "CSS" ,
25- "DevOps" ,
26- "AI / ML" ,
27- "Web Performance" ,
28- "Tooling" ,
29- ] ;
30-
31- const RATE_CARD_TIERS = [
32- {
33- name : "Pre-roll Mention" ,
34- description : "15-second sponsor mention at the start of the video" ,
35- price : "$200" ,
36- } ,
37- {
38- name : "Mid-roll Segment" ,
39- description : "60-second dedicated sponsor segment mid-video" ,
40- price : "$500" ,
41- } ,
42- {
43- name : "Dedicated Video" ,
44- description : "Full sponsored video with product deep-dive" ,
45- price : "$1,500" ,
46- } ,
47- ] ;
9+ import { SettingsForm } from "./settings-form" ;
4810
4911const INTEGRATIONS = [
5012 {
@@ -112,150 +74,42 @@ export default function SettingsPage() {
11274 </ p >
11375 </ div >
11476
115- < div className = "rounded-lg border border-dashed bg-muted/50 p-4 text-sm text-muted-foreground" >
116- < strong > Note:</ strong > Settings are currently read-only. Editing will be
117- enabled in a future phase once a settings schema is added to Sanity.
118- </ div >
119-
120- < div className = "grid gap-6 md:grid-cols-2" >
121- { /* Publishing Cadence */ }
122- < Card >
123- < CardHeader >
124- < CardTitle > Publishing Cadence</ CardTitle >
125- < CardDescription >
126- Control how often videos are published and on which days.
127- </ CardDescription >
128- </ CardHeader >
129- < CardContent className = "space-y-4" >
130- < div className = "space-y-2" >
131- < Label htmlFor = "videos-per-week" > Videos per week</ Label >
132- < Input
133- id = "videos-per-week"
134- type = "number"
135- defaultValue = { 3 }
136- min = { 1 }
137- max = { 7 }
138- disabled
139- className = "w-24"
140- />
141- </ div >
142- < Separator />
143- < div className = "space-y-2" >
144- < Label > Preferred publish days</ Label >
145- < div className = "flex flex-wrap gap-2" >
146- { PUBLISH_DAYS . map ( ( day ) => (
147- < Badge
148- key = { day }
149- variant = {
150- DEFAULT_PUBLISH_DAYS . includes ( day )
151- ? "default"
152- : "outline"
153- }
154- className = "cursor-default"
155- >
156- { day }
157- </ Badge >
158- ) ) }
159- </ div >
160- </ div >
161- < p className = "text-xs text-muted-foreground" >
162- Settings will be stored in Sanity once a settings schema is
163- created.
164- </ p >
165- </ CardContent >
166- </ Card >
77+ < SettingsForm />
16778
168- { /* Content Categories */ }
169- < Card >
170- < CardHeader >
171- < CardTitle > Content Categories</ CardTitle >
172- < CardDescription >
173- Categories used for content idea classification and YouTube
174- metadata.
175- </ CardDescription >
176- </ CardHeader >
177- < CardContent className = "space-y-4" >
178- < div className = "flex flex-wrap gap-2" >
179- { CONTENT_CATEGORIES . map ( ( category ) => (
180- < Badge key = { category } variant = "secondary" >
181- { category }
182- </ Badge >
183- ) ) }
184- </ div >
185- < p className = "text-xs text-muted-foreground" >
186- Custom category management will be available in a future phase.
187- </ p >
188- </ CardContent >
189- </ Card >
190-
191- { /* Sponsor Rate Card */ }
192- < Card >
193- < CardHeader >
194- < CardTitle > Sponsor Rate Card</ CardTitle >
195- < CardDescription >
196- Sponsorship tiers and pricing used by the sponsor portal and
197- pipeline.
198- </ CardDescription >
199- </ CardHeader >
200- < CardContent >
201- < div className = "space-y-3" >
202- { RATE_CARD_TIERS . map ( ( tier ) => (
203- < div
204- key = { tier . name }
205- className = "flex items-center justify-between rounded-lg border p-3"
206- >
207- < div >
208- < p className = "text-sm font-medium" > { tier . name } </ p >
209- < p className = "text-xs text-muted-foreground" >
210- { tier . description }
211- </ p >
212- </ div >
213- < span className = "text-sm font-semibold" > { tier . price } </ span >
79+ { /* Integrations Status — server-rendered */ }
80+ < Card >
81+ < CardHeader >
82+ < CardTitle > Integrations Status</ CardTitle >
83+ < CardDescription >
84+ Connection status for external services. Green indicates the
85+ environment variable is configured.
86+ </ CardDescription >
87+ </ CardHeader >
88+ < CardContent >
89+ < div className = "space-y-3" >
90+ { integrationStatus . map ( ( integration ) => (
91+ < div
92+ key = { integration . name }
93+ className = "flex items-center gap-3"
94+ >
95+ < IntegrationDot connected = { integration . connected } />
96+ < div className = "flex-1" >
97+ < p className = "text-sm font-medium" > { integration . name } </ p >
98+ < p className = "text-xs text-muted-foreground" >
99+ { integration . description }
100+ </ p >
214101 </ div >
215- ) ) }
216- </ div >
217- < p className = "mt-4 text-xs text-muted-foreground" >
218- Rate card editing will be available once the sponsor rate card
219- schema is finalized.
220- </ p >
221- </ CardContent >
222- </ Card >
223-
224- { /* Integrations Status */ }
225- < Card >
226- < CardHeader >
227- < CardTitle > Integrations Status</ CardTitle >
228- < CardDescription >
229- Connection status for external services. Green indicates the
230- environment variable is configured.
231- </ CardDescription >
232- </ CardHeader >
233- < CardContent >
234- < div className = "space-y-3" >
235- { integrationStatus . map ( ( integration ) => (
236- < div
237- key = { integration . name }
238- className = "flex items-center gap-3"
102+ < Badge
103+ variant = { integration . connected ? "default" : "outline" }
104+ className = "text-xs"
239105 >
240- < IntegrationDot connected = { integration . connected } />
241- < div className = "flex-1" >
242- < p className = "text-sm font-medium" > { integration . name } </ p >
243- < p className = "text-xs text-muted-foreground" >
244- { integration . description }
245- </ p >
246- </ div >
247- < Badge
248- variant = { integration . connected ? "default" : "outline" }
249- className = "text-xs"
250- >
251- { integration . connected ? "Connected" : "Not configured" }
252- </ Badge >
253- </ div >
254- ) ) }
255- </ div >
256- </ CardContent >
257- </ Card >
258- </ div >
106+ { integration . connected ? "Connected" : "Not configured" }
107+ </ Badge >
108+ </ div >
109+ ) ) }
110+ </ div >
111+ </ CardContent >
112+ </ Card >
259113 </ div >
260114 ) ;
261115}
0 commit comments