返回 presentation-ai
seed.ts
根目录 / prisma / seed / seed.ts
1 // prisma/seed.ts
2 import { env } from "@/env";
3 import { PrismaPg } from "@prisma/adapter-pg";
4 import { PrismaClient } from "../migrate/generated/client";
5 // Import themes - Note: This requires a TypeScript runner like tsx or ts-node
6 // If using plain Node.js, you may need to: pnpm add -D tsx
7 // Then update prisma.config.ts seed command to: "tsx prisma/seed.js"
8
9 const prisma = new PrismaClient({
10 adapter: new PrismaPg({ connectionString: env.DATABASE_URL }),
11 });
12
13 export const themes = {
14 // ==================== DAKTILO / NOIR ====================
15 daktilo: {
16 name: "Daktilo",
17 description: "Modern and clean",
18 mode: "light",
19 colors: {
20 primary: "#3B82F6",
21 secondary: "#1F2937",
22 accent: "#60A5FA",
23 background: "#FFFFFF",
24 text: "#1F2937",
25 heading: "#3B82F6",
26 smartLayout: "#3B82F6",
27 cardBackground: "#F3F4F6",
28 },
29 fonts: {
30 heading: "Inter",
31 body: "Inter",
32 },
33 borderRadius: "0.5rem",
34 transitions: {
35 default: "all 0.2s ease-in-out",
36 },
37 shadows: {
38 card: "0 1px 3px rgba(0,0,0,0.12)",
39 button: "0 2px 4px rgba(59,130,246,0.1)",
40 },
41 background: {
42 type: "radial",
43 override: `
44 radial-gradient(circle at 10% 10%, #3B82F615 0%, transparent 30%),
45 radial-gradient(circle at 90% 20%, #60A5FA15 0%, transparent 40%),
46 radial-gradient(circle at 50% 80%, #1F293710 0%, transparent 50%),
47 #FFFFFF
48 `,
49 },
50 },
51
52 noir: {
53 name: "Noir",
54 description: "Sleek film noir aesthetic",
55 mode: "dark",
56 colors: {
57 primary: "#60A5FA",
58 secondary: "#E5E7EB",
59 accent: "#93C5FD",
60 background: "#111827",
61 text: "#E5E7EB",
62 heading: "#60A5FA",
63 smartLayout: "#60A5FA",
64 cardBackground: "#1F2937",
65 },
66 fonts: {
67 heading: "Inter",
68 body: "Inter",
69 },
70 borderRadius: "0.5rem",
71 transitions: {
72 default: "all 0.2s ease-in-out",
73 },
74 shadows: {
75 card: "0 1px 3px rgba(0,0,0,0.3)",
76 button: "0 2px 4px rgba(96,165,250,0.2)",
77 },
78 background: {
79 type: "radial",
80 override: `
81 radial-gradient(circle at 10% 10%, #60A5FA20 0%, transparent 30%),
82 radial-gradient(circle at 90% 20%, #93C5FD20 0%, transparent 40%),
83 radial-gradient(circle at 50% 80%, #E5E7EB15 0%, transparent 50%),
84 #111827
85 `,
86 },
87 },
88
89 // ==================== CORNFLOWER / INDIGO ====================
90 cornflower: {
91 name: "Cornflower",
92 description: "Professional and bold",
93 mode: "light",
94 colors: {
95 primary: "#4F46E5",
96 secondary: "#312E81",
97 accent: "#818CF8",
98 background: "#F8FAFC",
99 text: "#334155",
100 heading: "#4F46E5",
101 smartLayout: "#4F46E5",
102 cardBackground: "#FFFFFF",
103 },
104 fonts: {
105 heading: "Poppins",
106 body: "Source Sans Pro",
107 },
108 borderRadius: "0.75rem",
109 transitions: {
110 default: "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)",
111 },
112 shadows: {
113 card: "0 4px 6px rgba(0,0,0,0.05)",
114 button: "0 4px 6px rgba(79,70,229,0.1)",
115 },
116 background: {
117 type: "radial",
118 override: `
119 radial-gradient(circle at 10% 10%, #4F46E515 0%, transparent 30%),
120 radial-gradient(circle at 90% 20%, #818CF815 0%, transparent 40%),
121 radial-gradient(circle at 50% 80%, #312E8110 0%, transparent 50%),
122 #F8FAFC
123 `,
124 },
125 },
126
127 indigo: {
128 name: "Indigo",
129 description: "Deep and immersive",
130 mode: "dark",
131 colors: {
132 primary: "#818CF8",
133 secondary: "#C7D2FE",
134 accent: "#A5B4FC",
135 background: "#1E1B4B",
136 text: "#E2E8F0",
137 heading: "#818CF8",
138 smartLayout: "#818CF8",
139 cardBackground: "#312E81",
140 },
141 fonts: {
142 heading: "Poppins",
143 body: "Source Sans Pro",
144 },
145 borderRadius: "0.75rem",
146 transitions: {
147 default: "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)",
148 },
149 shadows: {
150 card: "0 4px 6px rgba(0,0,0,0.2)",
151 button: "0 4px 6px rgba(129,140,248,0.2)",
152 },
153 background: {
154 type: "radial",
155 override: `
156 radial-gradient(circle at 10% 10%, #818CF820 0%, transparent 30%),
157 radial-gradient(circle at 90% 20%, #A5B4FC20 0%, transparent 40%),
158 radial-gradient(circle at 50% 80%, #C7D2FE15 0%, transparent 50%),
159 #1E1B4B
160 `,
161 },
162 },
163
164 // ==================== ORBIT / COSMOS ====================
165 orbit: {
166 name: "Orbit",
167 description: "Futuristic and dynamic",
168 mode: "light",
169 colors: {
170 primary: "#312E81",
171 secondary: "#4338CA",
172 accent: "#3B82F6",
173 background: "#FFFFFF",
174 text: "#1F2937",
175 heading: "#312E81",
176 smartLayout: "#312E81",
177 cardBackground: "#F3F4F6",
178 },
179 fonts: {
180 heading: "Space Grotesk",
181 body: "IBM Plex Sans",
182 },
183 borderRadius: "1rem",
184 transitions: {
185 default: "all 0.4s cubic-bezier(0.16, 1, 0.3, 1)",
186 },
187 shadows: {
188 card: "0 8px 16px rgba(0,0,0,0.1)",
189 button: "0 4px 12px rgba(49,46,129,0.1)",
190 },
191 background: {
192 type: "radial",
193 override: `
194 radial-gradient(circle at 10% 10%, #312E8115 0%, transparent 30%),
195 radial-gradient(circle at 90% 20%, #3B82F615 0%, transparent 40%),
196 radial-gradient(circle at 50% 80%, #4338CA10 0%, transparent 50%),
197 #FFFFFF
198 `,
199 },
200 },
201
202 cosmos: {
203 name: "Cosmos",
204 description: "Deep space exploration",
205 mode: "dark",
206 colors: {
207 primary: "#818CF8",
208 secondary: "#A5B4FC",
209 accent: "#60A5FA",
210 background: "#030712",
211 text: "#E5E7EB",
212 heading: "#818CF8",
213 smartLayout: "#818CF8",
214 cardBackground: "#111827",
215 },
216 fonts: {
217 heading: "Space Grotesk",
218 body: "IBM Plex Sans",
219 },
220 borderRadius: "1rem",
221 transitions: {
222 default: "all 0.4s cubic-bezier(0.16, 1, 0.3, 1)",
223 },
224 shadows: {
225 card: "0 8px 16px rgba(0,0,0,0.4)",
226 button: "0 4px 12px rgba(129,140,248,0.2)",
227 },
228 background: {
229 type: "radial",
230 override: `
231 radial-gradient(circle at 10% 10%, #818CF820 0%, transparent 30%),
232 radial-gradient(circle at 90% 20%, #60A5FA20 0%, transparent 40%),
233 radial-gradient(circle at 50% 80%, #A5B4FC15 0%, transparent 50%),
234 #030712
235 `,
236 },
237 },
238
239 // ==================== PIANO / EBONY ====================
240 piano: {
241 name: "Piano",
242 description: "Classic and elegant",
243 mode: "light",
244 colors: {
245 primary: "#1F2937",
246 secondary: "#374151",
247 accent: "#4B5563",
248 background: "#F3F4F6",
249 text: "#374151",
250 heading: "#1F2937",
251 smartLayout: "#1F2937",
252 cardBackground: "#FFFFFF",
253 },
254 fonts: {
255 heading: "Playfair Display",
256 body: "Lora",
257 },
258 borderRadius: "0.25rem",
259 transitions: {
260 default: "all 0.2s ease",
261 },
262 shadows: {
263 card: "0 2px 4px rgba(0,0,0,0.08)",
264 button: "0 1px 2px rgba(0,0,0,0.05)",
265 },
266 background: {
267 type: "radial",
268 override: `
269 radial-gradient(circle at 10% 10%, #1F293715 0%, transparent 30%),
270 radial-gradient(circle at 90% 20%, #4B556315 0%, transparent 40%),
271 radial-gradient(circle at 50% 80%, #37415110 0%, transparent 50%),
272 #F3F4F6
273 `,
274 },
275 },
276
277 ebony: {
278 name: "Ebony",
279 description: "Refined dark elegance",
280 mode: "dark",
281 colors: {
282 primary: "#E5E7EB",
283 secondary: "#D1D5DB",
284 accent: "#9CA3AF",
285 background: "#111827",
286 text: "#E5E7EB",
287 heading: "#E5E7EB",
288 smartLayout: "#E5E7EB",
289 cardBackground: "#1F2937",
290 },
291 fonts: {
292 heading: "Playfair Display",
293 body: "Lora",
294 },
295 borderRadius: "0.25rem",
296 transitions: {
297 default: "all 0.2s ease",
298 },
299 shadows: {
300 card: "0 2px 4px rgba(0,0,0,0.2)",
301 button: "0 1px 2px rgba(255,255,255,0.1)",
302 },
303 background: {
304 type: "radial",
305 override: `
306 radial-gradient(circle at 10% 10%, #E5E7EB20 0%, transparent 30%),
307 radial-gradient(circle at 90% 20%, #9CA3AF20 0%, transparent 40%),
308 radial-gradient(circle at 50% 80%, #D1D5DB15 0%, transparent 50%),
309 #111827
310 `,
311 },
312 },
313
314 // ==================== MYSTIQUE / PHANTOM ====================
315 mystique: {
316 name: "Mystique",
317 description: "Mysterious and sophisticated",
318 mode: "light",
319 colors: {
320 primary: "#7C3AED",
321 secondary: "#5B21B6",
322 accent: "#8B5CF6",
323 background: "#FFFFFF",
324 text: "#1F2937",
325 heading: "#7C3AED",
326 smartLayout: "#7C3AED",
327 cardBackground: "#F5F3FF",
328 },
329 fonts: {
330 heading: "Montserrat",
331 body: "Raleway",
332 },
333 borderRadius: "0.5rem",
334 transitions: {
335 default: "all 0.3s ease-out",
336 },
337 shadows: {
338 card: "0 4px 8px rgba(124,58,237,0.1)",
339 button: "0 4px 12px rgba(124,58,237,0.15)",
340 },
341 background: {
342 type: "radial",
343 override: `
344 radial-gradient(circle at 10% 10%, #7C3AED15 0%, transparent 30%),
345 radial-gradient(circle at 90% 20%, #8B5CF615 0%, transparent 40%),
346 radial-gradient(circle at 50% 80%, #5B21B610 0%, transparent 50%),
347 #FFFFFF
348 `,
349 },
350 },
351
352 phantom: {
353 name: "Phantom",
354 description: "Ethereal and haunting",
355 mode: "dark",
356 colors: {
357 primary: "#A78BFA",
358 secondary: "#8B5CF6",
359 accent: "#C4B5FD",
360 background: "#18181B",
361 text: "#D4D4D8",
362 heading: "#A78BFA",
363 smartLayout: "#A78BFA",
364 cardBackground: "#27272A",
365 },
366 fonts: {
367 heading: "Montserrat",
368 body: "Raleway",
369 },
370 borderRadius: "0.5rem",
371 transitions: {
372 default: "all 0.3s ease-out",
373 },
374 shadows: {
375 card: "0 4px 8px rgba(167,139,250,0.2)",
376 button: "0 4px 12px rgba(167,139,250,0.25)",
377 },
378 background: {
379 type: "radial",
380 override: `
381 radial-gradient(circle at 10% 10%, #A78BFA20 0%, transparent 30%),
382 radial-gradient(circle at 90% 20%, #C4B5FD20 0%, transparent 40%),
383 radial-gradient(circle at 50% 80%, #8B5CF615 0%, transparent 50%),
384 #18181B
385 `,
386 },
387 },
388
389 // ==================== ALLWEONE / NEON ====================
390 allweoneLight: {
391 name: "Allweone",
392 description: "Clean and high contrast",
393 mode: "light",
394 colors: {
395 primary: "#06B6D4",
396 secondary: "#0E7490",
397 accent: "#0EA5E9",
398 background: "#FFFFFF",
399 text: "#0F172A",
400 heading: "#06B6D4",
401 smartLayout: "#06B6D4",
402 cardBackground: "#ECFEFF",
403 },
404 fonts: {
405 heading: "JetBrains Mono",
406 body: "Inter",
407 },
408 borderRadius: "0.375rem",
409 transitions: {
410 default: "all 0.25s cubic-bezier(0.4, 0, 0.2, 1)",
411 },
412 shadows: {
413 card: "0 4px 12px rgba(6,182,212,0.1)",
414 button: "0 4px 16px rgba(6,182,212,0.15)",
415 },
416 background: {
417 type: "radial",
418 override: `
419 radial-gradient(circle at 10% 10%, #06B6D415 0%, transparent 30%),
420 radial-gradient(circle at 90% 20%, #0EA5E915 0%, transparent 40%),
421 radial-gradient(circle at 50% 80%, #0E749010 0%, transparent 50%),
422 #FFFFFF
423 `,
424 },
425 },
426
427 allweoneDark: {
428 name: "Allweone",
429 description: "Cyberpunk glow",
430 mode: "dark",
431 colors: {
432 primary: "#22D3EE",
433 secondary: "#67E8F9",
434 accent: "#38BDF8",
435 background: "#0F172A",
436 text: "#E2E8F0",
437 heading: "#22D3EE",
438 smartLayout: "#22D3EE",
439 cardBackground: "#1E293B",
440 },
441 fonts: {
442 heading: "JetBrains Mono",
443 body: "Inter",
444 },
445 borderRadius: "0.375rem",
446 transitions: {
447 default: "all 0.25s cubic-bezier(0.4, 0, 0.2, 1)",
448 },
449 shadows: {
450 card: "0 4px 12px rgba(34,211,238,0.15)",
451 button: "0 4px 16px rgba(34,211,238,0.2)",
452 },
453 background: {
454 type: "radial",
455 override: `
456 radial-gradient(circle at 10% 10%, #22D3EE20 0%, transparent 30%),
457 radial-gradient(circle at 90% 20%, #38BDF820 0%, transparent 40%),
458 radial-gradient(circle at 50% 80%, #67E8F915 0%, transparent 50%),
459 #0F172A
460 `,
461 },
462 },
463
464 // ==================== CRIMSON / EMBER ====================
465 crimson: {
466 name: "Crimson",
467 description: "Bold and passionate",
468 mode: "light",
469 colors: {
470 primary: "#DC2626",
471 secondary: "#991B1B",
472 accent: "#F87171",
473 background: "#FFFFFF",
474 text: "#1F2937",
475 heading: "#DC2626",
476 smartLayout: "#DC2626",
477 cardBackground: "#FEF2F2",
478 },
479 fonts: {
480 heading: "Merriweather",
481 body: "Source Sans Pro",
482 },
483 borderRadius: "0.5rem",
484 transitions: {
485 default: "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)",
486 },
487 shadows: {
488 card: "0 4px 8px rgba(220,38,38,0.1)",
489 button: "0 4px 12px rgba(220,38,38,0.15)",
490 },
491 background: {
492 type: "radial",
493 override: `
494 radial-gradient(circle at 10% 10%, #DC262615 0%, transparent 30%),
495 radial-gradient(circle at 90% 20%, #F8717115 0%, transparent 40%),
496 radial-gradient(circle at 50% 80%, #991B1B10 0%, transparent 50%),
497 #FFFFFF
498 `,
499 },
500 },
501
502 ember: {
503 name: "Ember",
504 description: "Smoldering intensity",
505 mode: "dark",
506 colors: {
507 primary: "#F87171",
508 secondary: "#FCA5A5",
509 accent: "#EF4444",
510 background: "#18181B",
511 text: "#E5E7EB",
512 heading: "#F87171",
513 smartLayout: "#F87171",
514 cardBackground: "#27272A",
515 },
516 fonts: {
517 heading: "Merriweather",
518 body: "Source Sans Pro",
519 },
520 borderRadius: "0.5rem",
521 transitions: {
522 default: "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)",
523 },
524 shadows: {
525 card: "0 4px 8px rgba(248,113,113,0.2)",
526 button: "0 4px 12px rgba(248,113,113,0.25)",
527 },
528 background: {
529 type: "radial",
530 override: `
531 radial-gradient(circle at 10% 10%, #F8717120 0%, transparent 30%),
532 radial-gradient(circle at 90% 20%, #EF444420 0%, transparent 40%),
533 radial-gradient(circle at 50% 80%, #FCA5A515 0%, transparent 50%),
534 #18181B
535 `,
536 },
537 },
538
539 // ==================== SUNSET / DUSK ====================
540 sunset: {
541 name: "Sunset",
542 description: "Warm and inviting",
543 mode: "light",
544 colors: {
545 primary: "#EA580C",
546 secondary: "#C2410C",
547 accent: "#FB923C",
548 background: "#FFFBEB",
549 text: "#292524",
550 heading: "#EA580C",
551 smartLayout: "#EA580C",
552 cardBackground: "#FFFFFF",
553 },
554 fonts: {
555 heading: "DM Serif Display",
556 body: "DM Sans",
557 },
558 borderRadius: "0.625rem",
559 transitions: {
560 default: "all 0.25s ease-in-out",
561 },
562 shadows: {
563 card: "0 4px 8px rgba(234,88,12,0.1)",
564 button: "0 4px 12px rgba(234,88,12,0.15)",
565 },
566 background: {
567 type: "radial",
568 override: `
569 radial-gradient(circle at 10% 10%, #EA580C15 0%, transparent 30%),
570 radial-gradient(circle at 90% 20%, #FB923C15 0%, transparent 40%),
571 radial-gradient(circle at 50% 80%, #C2410C10 0%, transparent 50%),
572 #FFFBEB
573 `,
574 },
575 },
576
577 dusk: {
578 name: "Dusk",
579 description: "Twilight tranquility",
580 mode: "dark",
581 colors: {
582 primary: "#FB923C",
583 secondary: "#FDBA74",
584 accent: "#F97316",
585 background: "#1C1917",
586 text: "#E7E5E4",
587 heading: "#FB923C",
588 smartLayout: "#FB923C",
589 cardBackground: "#292524",
590 },
591 fonts: {
592 heading: "DM Serif Display",
593 body: "DM Sans",
594 },
595 borderRadius: "0.625rem",
596 transitions: {
597 default: "all 0.25s ease-in-out",
598 },
599 shadows: {
600 card: "0 4px 8px rgba(251,146,60,0.2)",
601 button: "0 4px 12px rgba(251,146,60,0.25)",
602 },
603 background: {
604 type: "radial",
605 override: `
606 radial-gradient(circle at 10% 10%, #FB923C20 0%, transparent 30%),
607 radial-gradient(circle at 90% 20%, #F9731620 0%, transparent 40%),
608 radial-gradient(circle at 50% 80%, #FDBA7415 0%, transparent 50%),
609 #1C1917
610 `,
611 },
612 },
613
614 // ==================== FOREST / CANOPY ====================
615 forest: {
616 name: "Forest",
617 description: "Natural and serene",
618 mode: "light",
619 colors: {
620 primary: "#059669",
621 secondary: "#047857",
622 accent: "#34D399",
623 background: "#F0FDF4",
624 text: "#1F2937",
625 heading: "#059669",
626 smartLayout: "#059669",
627 cardBackground: "#FFFFFF",
628 },
629 fonts: {
630 heading: "Bitter",
631 body: "Source Sans Pro",
632 },
633 borderRadius: "0.75rem",
634 transitions: {
635 default: "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)",
636 },
637 shadows: {
638 card: "0 4px 12px rgba(5,150,105,0.08)",
639 button: "0 3px 8px rgba(5,150,105,0.15)",
640 },
641 background: {
642 type: "radial",
643 override: `
644 radial-gradient(circle at 10% 10%, #05966915 0%, transparent 30%),
645 radial-gradient(circle at 90% 20%, #34D39915 0%, transparent 40%),
646 radial-gradient(circle at 50% 80%, #04785710 0%, transparent 50%),
647 #F0FDF4
648 `,
649 },
650 },
651
652 canopy: {
653 name: "Canopy",
654 description: "Deep forest sanctuary",
655 mode: "dark",
656 colors: {
657 primary: "#34D399",
658 secondary: "#6EE7B7",
659 accent: "#10B981",
660 background: "#064E3B",
661 text: "#E5E7EB",
662 heading: "#34D399",
663 smartLayout: "#34D399",
664 cardBackground: "#065F46",
665 },
666 fonts: {
667 heading: "Bitter",
668 body: "Source Sans Pro",
669 },
670 borderRadius: "0.75rem",
671 transitions: {
672 default: "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)",
673 },
674 shadows: {
675 card: "0 4px 12px rgba(52,211,153,0.15)",
676 button: "0 3px 8px rgba(52,211,153,0.2)",
677 },
678 background: {
679 type: "radial",
680 override: `
681 radial-gradient(circle at 10% 10%, #34D39920 0%, transparent 30%),
682 radial-gradient(circle at 90% 20%, #10B98120 0%, transparent 40%),
683 radial-gradient(circle at 50% 80%, #6EE7B715 0%, transparent 50%),
684 #064E3B
685 `,
686 },
687 },
688 aurora: {
689 name: "Aurora",
690 description: "Northern lights at dawn",
691 mode: "light",
692 colors: {
693 primary: "#06B6D4",
694 secondary: "#8B5CF6",
695 accent: "#34D399",
696 background: "#F0FDFA",
697 text: "#134E4A",
698 heading: "#0891B2",
699 smartLayout: "#06B6D4",
700 cardBackground: "#FFFFFF",
701 },
702 fonts: { heading: "Quicksand", body: "Nunito" },
703 borderRadius: "1rem",
704 transitions: { default: "all 0.3s ease-out" },
705 shadows: {
706 card: "0 4px 12px rgba(6,182,212,0.1)",
707 button: "0 4px 8px rgba(6,182,212,0.15)",
708 },
709 background: {
710 type: "radial",
711 override: `
712 radial-gradient(circle at 20% 20%, #06B6D420 0%, transparent 40%),
713 radial-gradient(circle at 80% 30%, #8B5CF620 0%, transparent 40%),
714 radial-gradient(circle at 50% 80%, #34D39915 0%, transparent 50%),
715 #F0FDFA
716 `,
717 },
718 },
719
720 borealis: {
721 name: "Borealis",
722 description: "Northern lights at midnight",
723 mode: "dark",
724 colors: {
725 primary: "#22D3EE",
726 secondary: "#A78BFA",
727 accent: "#4ADE80",
728 background: "#0C1222",
729 text: "#E2E8F0",
730 heading: "#67E8F9",
731 smartLayout: "#22D3EE",
732 cardBackground: "#1E293B",
733 },
734 fonts: { heading: "Quicksand", body: "Nunito" },
735 borderRadius: "1rem",
736 transitions: { default: "all 0.3s ease-out" },
737 shadows: {
738 card: "0 4px 12px rgba(34,211,238,0.15)",
739 button: "0 4px 8px rgba(34,211,238,0.2)",
740 },
741 background: {
742 type: "radial",
743 override: `
744 radial-gradient(circle at 20% 20%, #22D3EE25 0%, transparent 40%),
745 radial-gradient(circle at 80% 30%, #A78BFA25 0%, transparent 40%),
746 radial-gradient(circle at 50% 80%, #4ADE8020 0%, transparent 50%),
747 #0C1222
748 `,
749 },
750 },
751
752 // ==================== SAKURA / MIDNIGHT ====================
753 sakura: {
754 name: "Sakura",
755 description: "Cherry blossom spring",
756 mode: "light",
757 colors: {
758 primary: "#EC4899",
759 secondary: "#DB2777",
760 accent: "#F472B6",
761 background: "#FDF2F8",
762 text: "#831843",
763 heading: "#BE185D",
764 smartLayout: "#EC4899",
765 cardBackground: "#FFFFFF",
766 },
767 fonts: { heading: "Cormorant Garamond", body: "Lato" },
768 borderRadius: "0.75rem",
769 transitions: { default: "all 0.25s ease" },
770 shadows: {
771 card: "0 4px 12px rgba(236,72,153,0.1)",
772 button: "0 4px 8px rgba(236,72,153,0.15)",
773 },
774 background: {
775 type: "radial",
776 override: `
777 radial-gradient(circle at 10% 10%, #EC489920 0%, transparent 35%),
778 radial-gradient(circle at 90% 20%, #F472B620 0%, transparent 40%),
779 radial-gradient(circle at 50% 90%, #DB277715 0%, transparent 50%),
780 #FDF2F8
781 `,
782 },
783 },
784
785 midnight: {
786 name: "Midnight",
787 description: "Moonlit cherry blossoms",
788 mode: "dark",
789 colors: {
790 primary: "#F472B6",
791 secondary: "#FB7185",
792 accent: "#FDA4AF",
793 background: "#1A0A14",
794 text: "#FECDD3",
795 heading: "#F9A8D4",
796 smartLayout: "#F472B6",
797 cardBackground: "#2D1F2B",
798 },
799 fonts: { heading: "Cormorant Garamond", body: "Lato" },
800 borderRadius: "0.75rem",
801 transitions: { default: "all 0.25s ease" },
802 shadows: {
803 card: "0 4px 12px rgba(244,114,182,0.2)",
804 button: "0 4px 8px rgba(244,114,182,0.25)",
805 },
806 background: {
807 type: "radial",
808 override: `
809 radial-gradient(circle at 10% 10%, #F472B625 0%, transparent 35%),
810 radial-gradient(circle at 90% 20%, #FDA4AF20 0%, transparent 40%),
811 radial-gradient(circle at 50% 90%, #FB718520 0%, transparent 50%),
812 #1A0A14
813 `,
814 },
815 },
816
817 // ==================== OCEAN / ABYSS ====================
818 ocean: {
819 name: "Ocean",
820 description: "Sunlit tropical waters",
821 mode: "light",
822 colors: {
823 primary: "#0284C7",
824 secondary: "#0369A1",
825 accent: "#38BDF8",
826 background: "#F0F9FF",
827 text: "#0C4A6E",
828 heading: "#0369A1",
829 smartLayout: "#0284C7",
830 cardBackground: "#FFFFFF",
831 },
832 fonts: { heading: "Outfit", body: "Work Sans" },
833 borderRadius: "0.5rem",
834 transitions: { default: "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)" },
835 shadows: {
836 card: "0 4px 12px rgba(2,132,199,0.1)",
837 button: "0 4px 8px rgba(2,132,199,0.15)",
838 },
839 background: {
840 type: "radial",
841 override: `
842 radial-gradient(circle at 30% 20%, #0284C720 0%, transparent 40%),
843 radial-gradient(circle at 70% 60%, #38BDF820 0%, transparent 45%),
844 radial-gradient(circle at 50% 90%, #0369A115 0%, transparent 50%),
845 #F0F9FF
846 `,
847 },
848 },
849
850 abyss: {
851 name: "Abyss",
852 description: "Deep sea mysteries",
853 mode: "dark",
854 colors: {
855 primary: "#38BDF8",
856 secondary: "#7DD3FC",
857 accent: "#0EA5E9",
858 background: "#020617",
859 text: "#BAE6FD",
860 heading: "#7DD3FC",
861 smartLayout: "#38BDF8",
862 cardBackground: "#0F172A",
863 },
864 fonts: { heading: "Outfit", body: "Work Sans" },
865 borderRadius: "0.5rem",
866 transitions: { default: "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)" },
867 shadows: {
868 card: "0 4px 12px rgba(56,189,248,0.15)",
869 button: "0 4px 8px rgba(56,189,248,0.2)",
870 },
871 background: {
872 type: "radial",
873 override: `
874 radial-gradient(circle at 30% 20%, #38BDF825 0%, transparent 40%),
875 radial-gradient(circle at 70% 60%, #0EA5E920 0%, transparent 45%),
876 radial-gradient(circle at 50% 90%, #7DD3FC15 0%, transparent 50%),
877 #020617
878 `,
879 },
880 },
881
882 // ==================== SAND / OBSIDIAN ====================
883 sand: {
884 name: "Sand",
885 description: "Warm desert dunes",
886 mode: "light",
887 colors: {
888 primary: "#A16207",
889 secondary: "#854D0E",
890 accent: "#CA8A04",
891 background: "#FEFCE8",
892 text: "#422006",
893 heading: "#A16207",
894 smartLayout: "#CA8A04",
895 cardBackground: "#FFFFFF",
896 },
897 fonts: { heading: "Fraunces", body: "Commissioner" },
898 borderRadius: "0.25rem",
899 transitions: { default: "all 0.2s ease" },
900 shadows: {
901 card: "0 4px 12px rgba(161,98,7,0.1)",
902 button: "0 4px 8px rgba(161,98,7,0.12)",
903 },
904 background: {
905 type: "radial",
906 override: `
907 radial-gradient(circle at 20% 30%, #A1620715 0%, transparent 40%),
908 radial-gradient(circle at 80% 50%, #CA8A0415 0%, transparent 45%),
909 radial-gradient(circle at 40% 80%, #854D0E10 0%, transparent 50%),
910 #FEFCE8
911 `,
912 },
913 },
914
915 obsidian: {
916 name: "Obsidian",
917 description: "Volcanic glass night",
918 mode: "dark",
919 colors: {
920 primary: "#FACC15",
921 secondary: "#FDE047",
922 accent: "#EAB308",
923 background: "#0A0A0A",
924 text: "#E7E5E4",
925 heading: "#FDE047",
926 smartLayout: "#FACC15",
927 cardBackground: "#1C1917",
928 },
929 fonts: { heading: "Fraunces", body: "Commissioner" },
930 borderRadius: "0.25rem",
931 transitions: { default: "all 0.2s ease" },
932 shadows: {
933 card: "0 4px 12px rgba(250,204,21,0.12)",
934 button: "0 4px 8px rgba(250,204,21,0.15)",
935 },
936 background: {
937 type: "radial",
938 override: `
939 radial-gradient(circle at 20% 30%, #FACC1520 0%, transparent 40%),
940 radial-gradient(circle at 80% 50%, #EAB30820 0%, transparent 45%),
941 radial-gradient(circle at 40% 80%, #FDE04715 0%, transparent 50%),
942 #0A0A0A
943 `,
944 },
945 },
946
947 // ==================== MINT / JADE ====================
948 mint: {
949 name: "Mint",
950 description: "Fresh and cool",
951 mode: "light",
952 colors: {
953 primary: "#10B981",
954 secondary: "#059669",
955 accent: "#34D399",
956 background: "#ECFDF5",
957 text: "#064E3B",
958 heading: "#047857",
959 smartLayout: "#10B981",
960 cardBackground: "#FFFFFF",
961 },
962 fonts: { heading: "Plus Jakarta Sans", body: "Inter" },
963 borderRadius: "0.875rem",
964 transitions: { default: "all 0.25s ease-out" },
965 shadows: {
966 card: "0 4px 12px rgba(16,185,129,0.1)",
967 button: "0 4px 8px rgba(16,185,129,0.15)",
968 },
969 background: {
970 type: "radial",
971 override: `
972 radial-gradient(circle at 15% 25%, #10B98118 0%, transparent 40%),
973 radial-gradient(circle at 85% 35%, #34D39918 0%, transparent 45%),
974 radial-gradient(circle at 50% 85%, #05966912 0%, transparent 50%),
975 #ECFDF5
976 `,
977 },
978 },
979
980 jade: {
981 name: "Jade",
982 description: "Precious stone depths",
983 mode: "dark",
984 colors: {
985 primary: "#34D399",
986 secondary: "#6EE7B7",
987 accent: "#10B981",
988 background: "#022C22",
989 text: "#A7F3D0",
990 heading: "#6EE7B7",
991 smartLayout: "#34D399",
992 cardBackground: "#064E3B",
993 },
994 fonts: { heading: "Plus Jakarta Sans", body: "Inter" },
995 borderRadius: "0.875rem",
996 transitions: { default: "all 0.25s ease-out" },
997 shadows: {
998 card: "0 4px 12px rgba(52,211,153,0.15)",
999 button: "0 4px 8px rgba(52,211,153,0.2)",
1000 },
1001 background: {
1002 type: "radial",
1003 override: `
1004 radial-gradient(circle at 15% 25%, #34D39922 0%, transparent 40%),
1005 radial-gradient(circle at 85% 35%, #10B98120 0%, transparent 45%),
1006 radial-gradient(circle at 50% 85%, #6EE7B715 0%, transparent 50%),
1007 #022C22
1008 `,
1009 },
1010 },
1011
1012 // ==================== ROSE / WINE ====================
1013 rose: {
1014 name: "Rose",
1015 description: "Soft romantic petals",
1016 mode: "light",
1017 colors: {
1018 primary: "#E11D48",
1019 secondary: "#BE123C",
1020 accent: "#FB7185",
1021 background: "#FFF1F2",
1022 text: "#4C0519",
1023 heading: "#BE123C",
1024 smartLayout: "#E11D48",
1025 cardBackground: "#FFFFFF",
1026 },
1027 fonts: { heading: "Libre Baskerville", body: "Source Serif Pro" },
1028 borderRadius: "0.5rem",
1029 transitions: { default: "all 0.3s ease" },
1030 shadows: {
1031 card: "0 4px 12px rgba(225,29,72,0.1)",
1032 button: "0 4px 8px rgba(225,29,72,0.15)",
1033 },
1034 background: {
1035 type: "radial",
1036 override: `
1037 radial-gradient(circle at 10% 20%, #E11D4818 0%, transparent 35%),
1038 radial-gradient(circle at 90% 30%, #FB718518 0%, transparent 40%),
1039 radial-gradient(circle at 50% 85%, #BE123C12 0%, transparent 50%),
1040 #FFF1F2
1041 `,
1042 },
1043 },
1044
1045 wine: {
1046 name: "Wine",
1047 description: "Rich burgundy elegance",
1048 mode: "dark",
1049 colors: {
1050 primary: "#FB7185",
1051 secondary: "#FDA4AF",
1052 accent: "#F43F5E",
1053 background: "#1C0A10",
1054 text: "#FECDD3",
1055 heading: "#FDA4AF",
1056 smartLayout: "#FB7185",
1057 cardBackground: "#3F1525",
1058 },
1059 fonts: { heading: "Libre Baskerville", body: "Source Serif Pro" },
1060 borderRadius: "0.5rem",
1061 transitions: { default: "all 0.3s ease" },
1062 shadows: {
1063 card: "0 4px 12px rgba(251,113,133,0.18)",
1064 button: "0 4px 8px rgba(251,113,133,0.22)",
1065 },
1066 background: {
1067 type: "radial",
1068 override: `
1069 radial-gradient(circle at 10% 20%, #FB718522 0%, transparent 35%),
1070 radial-gradient(circle at 90% 30%, #F43F5E20 0%, transparent 40%),
1071 radial-gradient(circle at 50% 85%, #FDA4AF15 0%, transparent 50%),
1072 #1C0A10
1073 `,
1074 },
1075 },
1076
1077 // ==================== ARCTIC / GLACIER ====================
1078 arctic: {
1079 name: "Arctic",
1080 description: "Crisp icy morning",
1081 mode: "light",
1082 colors: {
1083 primary: "#6366F1",
1084 secondary: "#4F46E5",
1085 accent: "#818CF8",
1086 background: "#EEF2FF",
1087 text: "#312E81",
1088 heading: "#4338CA",
1089 smartLayout: "#6366F1",
1090 cardBackground: "#FFFFFF",
1091 },
1092 fonts: { heading: "Manrope", body: "Public Sans" },
1093 borderRadius: "1.25rem",
1094 transitions: { default: "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)" },
1095 shadows: {
1096 card: "0 4px 12px rgba(99,102,241,0.1)",
1097 button: "0 4px 8px rgba(99,102,241,0.15)",
1098 },
1099 background: {
1100 type: "radial",
1101 override: `
1102 radial-gradient(circle at 25% 25%, #6366F118 0%, transparent 40%),
1103 radial-gradient(circle at 75% 40%, #818CF818 0%, transparent 45%),
1104 radial-gradient(circle at 50% 80%, #4F46E512 0%, transparent 50%),
1105 #EEF2FF
1106 `,
1107 },
1108 },
1109
1110 glacier: {
1111 name: "Glacier",
1112 description: "Frozen twilight depths",
1113 mode: "dark",
1114 colors: {
1115 primary: "#A5B4FC",
1116 secondary: "#C7D2FE",
1117 accent: "#818CF8",
1118 background: "#0C0A1D",
1119 text: "#E0E7FF",
1120 heading: "#C7D2FE",
1121 smartLayout: "#A5B4FC",
1122 cardBackground: "#1E1B4B",
1123 },
1124 fonts: { heading: "Manrope", body: "Public Sans" },
1125 borderRadius: "1.25rem",
1126 transitions: { default: "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)" },
1127 shadows: {
1128 card: "0 4px 12px rgba(165,180,252,0.15)",
1129 button: "0 4px 8px rgba(165,180,252,0.2)",
1130 },
1131 background: {
1132 type: "radial",
1133 override: `
1134 radial-gradient(circle at 25% 25%, #A5B4FC22 0%, transparent 40%),
1135 radial-gradient(circle at 75% 40%, #818CF820 0%, transparent 45%),
1136 radial-gradient(circle at 50% 80%, #C7D2FE15 0%, transparent 50%),
1137 #0C0A1D
1138 `,
1139 },
1140 },
1141
1142 // ==================== HONEY / AMBER ====================
1143 honey: {
1144 name: "Honey",
1145 description: "Golden sweetness",
1146 mode: "light",
1147 colors: {
1148 primary: "#D97706",
1149 secondary: "#B45309",
1150 accent: "#FBBF24",
1151 background: "#FFFBEB",
1152 text: "#451A03",
1153 heading: "#B45309",
1154 smartLayout: "#D97706",
1155 cardBackground: "#FFFFFF",
1156 },
1157 fonts: { heading: "Bricolage Grotesque", body: "Atkinson Hyperlegible" },
1158 borderRadius: "0.625rem",
1159 transitions: { default: "all 0.25s ease-in-out" },
1160 shadows: {
1161 card: "0 4px 12px rgba(217,119,6,0.1)",
1162 button: "0 4px 8px rgba(217,119,6,0.15)",
1163 },
1164 background: {
1165 type: "radial",
1166 override: `
1167 radial-gradient(circle at 20% 30%, #D9770618 0%, transparent 40%),
1168 radial-gradient(circle at 80% 40%, #FBBF2418 0%, transparent 45%),
1169 radial-gradient(circle at 45% 85%, #B4530912 0%, transparent 50%),
1170 #FFFBEB
1171 `,
1172 },
1173 },
1174
1175 amber: {
1176 name: "Amber",
1177 description: "Fossilized warmth",
1178 mode: "dark",
1179 colors: {
1180 primary: "#FBBF24",
1181 secondary: "#FCD34D",
1182 accent: "#F59E0B",
1183 background: "#1A1207",
1184 text: "#FEF3C7",
1185 heading: "#FCD34D",
1186 smartLayout: "#FBBF24",
1187 cardBackground: "#2D2410",
1188 },
1189 fonts: { heading: "Bricolage Grotesque", body: "Atkinson Hyperlegible" },
1190 borderRadius: "0.625rem",
1191 transitions: { default: "all 0.25s ease-in-out" },
1192 shadows: {
1193 card: "0 4px 12px rgba(251,191,36,0.15)",
1194 button: "0 4px 8px rgba(251,191,36,0.2)",
1195 },
1196 background: {
1197 type: "radial",
1198 override: `
1199 radial-gradient(circle at 20% 30%, #FBBF2422 0%, transparent 40%),
1200 radial-gradient(circle at 80% 40%, #F59E0B20 0%, transparent 45%),
1201 radial-gradient(circle at 45% 85%, #FCD34D15 0%, transparent 50%),
1202 #1A1207
1203 `,
1204 },
1205 },
1206
1207 // ==================== CORAL / MAGMA ====================
1208 coral: {
1209 name: "Coral",
1210 description: "Vibrant reef life",
1211 mode: "light",
1212 colors: {
1213 primary: "#F97316",
1214 secondary: "#EA580C",
1215 accent: "#FB923C",
1216 background: "#FFF7ED",
1217 text: "#431407",
1218 heading: "#C2410C",
1219 smartLayout: "#F97316",
1220 cardBackground: "#FFFFFF",
1221 },
1222 fonts: { heading: "Sora", body: "Karla" },
1223 borderRadius: "0.75rem",
1224 transitions: { default: "all 0.3s ease" },
1225 shadows: {
1226 card: "0 4px 12px rgba(249,115,22,0.1)",
1227 button: "0 4px 8px rgba(249,115,22,0.15)",
1228 },
1229 background: {
1230 type: "radial",
1231 override: `
1232 radial-gradient(circle at 15% 20%, #F9731618 0%, transparent 40%),
1233 radial-gradient(circle at 85% 35%, #FB923C18 0%, transparent 45%),
1234 radial-gradient(circle at 50% 80%, #EA580C12 0%, transparent 50%),
1235 #FFF7ED
1236 `,
1237 },
1238 },
1239
1240 magma: {
1241 name: "Magma",
1242 description: "Molten volcanic fire",
1243 mode: "dark",
1244 colors: {
1245 primary: "#FB923C",
1246 secondary: "#FDBA74",
1247 accent: "#F97316",
1248 background: "#1A0F0A",
1249 text: "#FFEDD5",
1250 heading: "#FDBA74",
1251 smartLayout: "#FB923C",
1252 cardBackground: "#2D1A10",
1253 },
1254 fonts: { heading: "Sora", body: "Karla" },
1255 borderRadius: "0.75rem",
1256 transitions: { default: "all 0.3s ease" },
1257 shadows: {
1258 card: "0 4px 12px rgba(251,146,60,0.18)",
1259 button: "0 4px 8px rgba(251,146,60,0.22)",
1260 },
1261 background: {
1262 type: "radial",
1263 override: `
1264 radial-gradient(circle at 15% 20%, #FB923C22 0%, transparent 40%),
1265 radial-gradient(circle at 85% 35%, #F9731620 0%, transparent 45%),
1266 radial-gradient(circle at 50% 80%, #FDBA7415 0%, transparent 50%),
1267 #1A0F0A
1268 `,
1269 },
1270 },
1271
1272 // ==================== LAVENDER / VELVET ====================
1273 lavender: {
1274 name: "Lavender",
1275 description: "Calming purple fields",
1276 mode: "light",
1277 colors: {
1278 primary: "#9333EA",
1279 secondary: "#7C3AED",
1280 accent: "#A855F7",
1281 background: "#FAF5FF",
1282 text: "#3B0764",
1283 heading: "#7E22CE",
1284 smartLayout: "#9333EA",
1285 cardBackground: "#FFFFFF",
1286 },
1287 fonts: { heading: "Epilogue", body: "Rubik" },
1288 borderRadius: "0.5rem",
1289 transitions: { default: "all 0.3s ease-out" },
1290 shadows: {
1291 card: "0 4px 12px rgba(147,51,234,0.1)",
1292 button: "0 4px 8px rgba(147,51,234,0.15)",
1293 },
1294 background: {
1295 type: "radial",
1296 override: `
1297 radial-gradient(circle at 10% 25%, #9333EA18 0%, transparent 40%),
1298 radial-gradient(circle at 90% 35%, #A855F718 0%, transparent 45%),
1299 radial-gradient(circle at 50% 85%, #7C3AED12 0%, transparent 50%),
1300 #FAF5FF
1301 `,
1302 },
1303 },
1304
1305 velvet: {
1306 name: "Velvet",
1307 description: "Luxurious purple night",
1308 mode: "dark",
1309 colors: {
1310 primary: "#C084FC",
1311 secondary: "#D8B4FE",
1312 accent: "#A855F7",
1313 background: "#120A1C",
1314 text: "#E9D5FF",
1315 heading: "#D8B4FE",
1316 smartLayout: "#C084FC",
1317 cardBackground: "#2E1A47",
1318 },
1319 fonts: { heading: "Epilogue", body: "Rubik" },
1320 borderRadius: "0.5rem",
1321 transitions: { default: "all 0.3s ease-out" },
1322 shadows: {
1323 card: "0 4px 12px rgba(192,132,252,0.18)",
1324 button: "0 4px 8px rgba(192,132,252,0.22)",
1325 },
1326 background: {
1327 type: "radial",
1328 override: `
1329 radial-gradient(circle at 10% 25%, #C084FC22 0%, transparent 40%),
1330 radial-gradient(circle at 90% 35%, #A855F720 0%, transparent 45%),
1331 radial-gradient(circle at 50% 85%, #D8B4FE15 0%, transparent 50%),
1332 #120A1C
1333 `,
1334 },
1335 },
1336 };
1337
1338 async function main() {
1339 const systemUser = await prisma.user.upsert({
1340 where: { email: "system@allweone.com" },
1341 update: {},
1342 create: {
1343 id: "0",
1344 email: "system@allweone.com",
1345 name: "ALLWEONE System",
1346 },
1347 });
1348
1349 // Seed all built-in themes
1350 for (const [themeKey, data] of Object.entries(themes)) {
1351 const { name, description, ...themeData } = data;
1352 try {
1353 const customTheme = await prisma.presentationTheme.upsert({
1354 where: { id: themeKey },
1355 update: {
1356 name: name,
1357 description: description,
1358 themeData: themeData,
1359 isPublic: true,
1360 updatedAt: new Date(),
1361 },
1362 create: {
1363 id: themeKey,
1364 name: name,
1365 description: description,
1366 themeData: themeData,
1367 isPublic: true,
1368 userId: systemUser.id,
1369 isAdmin: true,
1370 },
1371 });
1372
1373 console.log(`✓ Seeded theme: ${customTheme.name} (${themeKey})`);
1374 } catch (error) {
1375 console.error(`✗ Failed to seed theme ${themeKey}:`, error);
1376 }
1377 }
1378
1379 console.log("\nTheme seeding completed!");
1380 }
1381
1382 main()
1383 .catch((e) => {
1384 console.error(e);
1385 process.exit(1);
1386 })
1387 .finally(() => {
1388 void prisma.$disconnect();
1389 });
1390
1390 lines TYPESCRIPT