Skip to content
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
9afaaa4
fix: brief description of what you changed
rohits1450 Feb 22, 2026
55ac9b3
chore: remove accidental font zip files
rohits1450 Feb 22, 2026
4cf2d6f
fix:adavnced story control - Pro Panels with presets and preset sharing
rohits1450 Feb 22, 2026
42911b4
feat: add Pro Panel with presets and preset sharing
rohits1450 Mar 1, 2026
e8b12c2
fix: resolve merge conflicts with upstream main
rohits1450 Mar 1, 2026
987a4a8
fix: resolve merge conflicts with upstream main
rohits1450 Mar 1, 2026
e3d9d5f
fix: resolve CodeRabbit review issues and hydration mismatch
rohits1450 Mar 1, 2026
57a9327
fix: address CodeRabbit nitpick comments for CSS and package.json
rohits1450 Mar 1, 2026
f291ef2
fix: enable Tailwind directives in Biome config
rohits1450 Mar 1, 2026
24537f9
fix: lint, JSDoc, model IDs, footer removal, route rename
rohits1450 Mar 1, 2026
0afc8d3
fix: resolve CI failures (ESLint, Lighthouse, dependency review)
rohits1450 Mar 1, 2026
73fef0a
style: apply Prettier formatting across codebase
rohits1450 Mar 1, 2026
502c710
fix: resolve new merge conflicts with upstream main
rohits1450 Mar 1, 2026
a59b349
style: fix Prettier formatting to pass CI lint checks
rohits1450 Mar 1, 2026
cd23870
fix: resolve merge conflicts with upstream main
rohits1450 Mar 1, 2026
fa4ba95
merge: sync feature/pro-panel with upstream/main (keep pro-panel chan…
rohits1450 Mar 5, 2026
42df796
fix: resolve lint/prettier errors and add missing Check/Copy imports …
rohits1450 Mar 5, 2026
43389de
feat(pro-panel): add accessibility, tooltips, rate limiting, and tests
rohits1450 Mar 6, 2026
4681e0f
Merge remote-tracking branch 'upstream/main' into feature/pro-panel
rohits1450 Mar 6, 2026
3512682
feat(pro-panel): enhanced tooltips, accessibility, API validation, an…
rohits1450 Mar 6, 2026
70d1eca
fix(api): resolve TS errors from upstream groq-service changes
rohits1450 Mar 6, 2026
c856d57
fix: prettier formatting and lint warnings
rohits1450 Mar 6, 2026
eba3dc3
fix(ci): pin wrangler version to 3.99.0 for stable deployments
rohits1450 Mar 6, 2026
66c8be3
fix(ci): correct deploy output directory to .vercel/output/static
rohits1450 Mar 6, 2026
9f23bad
fix(ci): let wrangler read output dir from wrangler.toml and fix bare…
rohits1450 Mar 6, 2026
871a9ef
fix(security): sanitize blob URLs in upload page to resolve CodeQL wa…
rohits1450 Mar 7, 2026
5b8aef5
fix: resolve ESLint errors and add missing @upstash/ratelimit dependency
rohits1450 Mar 7, 2026
1009cac
fix: add @upstash/ratelimit dependency and server-only guard to rate-…
rohits1450 Mar 7, 2026
2b8d998
fix(ci): explicitly install wrangler before deploy to avoid npx resol…
rohits1450 Mar 7, 2026
80c4827
fix(ci): remove next/font/google to avoid build-time font fetches; ex…
rohits1450 Mar 7, 2026
4a81687
fix(ci): replace wrangler-action with direct wrangler run to fix CLOU…
rohits1450 Mar 7, 2026
c54c86c
cloudfare issue solved
rohits1450 Mar 7, 2026
9075592
fix(api): replace any with typed body interface to resolve TS errors
rohits1450 Mar 7, 2026
d7701a6
Merge upstream/main into feature/pro-panel
rohits1450 Mar 8, 2026
122ddf4
Merge remote-tracking branch 'upstream/main' into feature/pro-panel
rohits1450 Mar 9, 2026
78e1b1b
fix(ci): fix CF Pages preview deployment URL and update env var names
rohits1450 Mar 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,10 @@ temp.md
*.wav
*.flac

# Font demo files
another-danger-rohit/
another-danger-rohit.zip

# Generated files
/public/sitemap*.xml
/public/robots.txt
Expand Down
40 changes: 32 additions & 8 deletions app/api/groq/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ import {
improveStoryContent,
testGroqConnection,
testGroqSpecialModel,
generateStoryWithProConfig,
} from '@/lib/groq-service';
import { ParametersSchema } from '@/lib/schemas/proPanelSchemas';

export async function POST(request: NextRequest) {
try {
const body = await request.json();
Expand All @@ -22,6 +25,8 @@ export async function POST(request: NextRequest) {
options,
focus,
apiKey,
proConfig, // Pro Panel configuration
title, // Story title for Pro Panel generation
} = body;
// Create updated options with API key if provided
const updatedOptions = apiKey ? { ...options, apiKey } : options;
Expand All @@ -34,14 +39,33 @@ export async function POST(request: NextRequest) {
{ status: 400 }
);
}
result = await generateStoryContent({
theme: prompt,
genre,
length,
tone: updatedOptions?.tone,
characters: updatedOptions?.characters,
setting: updatedOptions?.setting,
});

// If proConfig is provided, use Pro Panel generation
if (proConfig) {
// Validate the proConfig
const validationResult = ParametersSchema.safeParse(proConfig);
if (!validationResult.success) {
return NextResponse.json(
{ error: 'Invalid Pro Panel configuration', details: validationResult.error.errors },
{ status: 400 }
);
}

result = await generateStoryWithProConfig(prompt, validationResult.data, {
title,
apiKey: updatedOptions?.apiKey,
});
} else {
// Use standard generation
result = await generateStoryContent({
theme: prompt,
genre,
length,
tone: updatedOptions?.tone,
characters: updatedOptions?.characters,
setting: updatedOptions?.setting,
});
}
break;
case 'analyze':
if (!content) {
Expand Down
221 changes: 220 additions & 1 deletion app/globals.css
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@import url('https://fonts.googleapis.com/css2?family=Comic+Neue:wght@300;400;700&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Comic+Neue:wght@300;400;700&family=Playfair+Display:ital,wght@0,400;0,700;0,900;1,400;1,700;1,900&family=Space+Grotesk:wght@300;400;500;600;700&family=Permanent+Marker&family=Roboto+Condensed:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&display=swap');
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated

@tailwind base;
@tailwind components;
Expand Down Expand Up @@ -41,6 +41,10 @@
/* Sharp corners for comic look */

--font-comic: 'Comic Neue', cursive;
--font-display: 'Space Grotesk', sans-serif;
--font-marker: 'Permanent Marker', cursive;
--font-condensed: 'Roboto Condensed', sans-serif;
--font-noir-title: 'Playfair Display', serif;

/* Gen-Z Accent Colors */
--color-fire: #ff6600;
Expand Down Expand Up @@ -263,6 +267,37 @@
box-shadow: 4px 4px 0px 0px var(--shadow-color);
}

/* ── Page-Turn Animation for Dossier Panel ── */
@keyframes page-turn-out {
0% {
transform: perspective(2000px) rotateY(0deg) scale(1);
opacity: 1;
}
100% {
transform: perspective(2000px) rotateY(-12deg) scale(0.98);
opacity: 0;
}
}

@keyframes page-turn-in {
0% {
transform: perspective(2000px) rotateY(10deg) scale(0.98);
opacity: 0;
}
100% {
transform: perspective(2000px) rotateY(0deg) scale(1);
opacity: 1;
}
}

.dossier-page-enter {
animation: page-turn-in 0.7s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}

.dossier-page-exit {
animation: page-turn-out 0.4s cubic-bezier(0.4, 0, 1, 1) forwards;
}

/* Comic Glow Effect for UX Polish */
@keyframes comic-glow {
0% { box-shadow: 6px 6px 0px 0px var(--foreground); }
Expand Down Expand Up @@ -510,4 +545,188 @@
transition-duration: 0.01ms !important;
}
}

/* ==========================================================================
Pro Panel - Noir Dossier Styling
========================================================================== */

/* Text stroke utility for noir headers */
.text-stroke-black {
-webkit-text-stroke: 2px black;
text-shadow: 4px 4px 0px rgba(0, 0, 0, 1);
}

/* Tab clip path */
.clip-tab {
clip-path: polygon(0% 0%, 90% 0%, 100% 20%, 100% 100%, 0% 100%);
}

/* Jagged bottom clip path */
.clip-jagged-bottom {
clip-path: polygon(
0% 0%,
100% 0%,
100% 90%,
95% 100%,
85% 95%,
75% 100%,
65% 95%,
55% 100%,
45% 95%,
35% 100%,
25% 95%,
15% 100%,
5% 95%,
0% 100%
);
}

/* Halftone dot pattern background */
.halftone-bg {
background-image: radial-gradient(#222 1.5px, transparent 1.5px);
background-size: 8px 8px;
}

/* Mugshot scanline overlay */
.mugshot-overlay {
background-image:
linear-gradient(
rgba(0, 0, 0, 0) 0%,
rgba(0, 0, 0, 0) 90%,
rgba(0, 0, 0, 0.5) 90%,
rgba(0, 0, 0, 0.5) 100%
),
linear-gradient(
90deg,
rgba(0, 0, 0, 0.1) 0%,
rgba(0, 0, 0, 0.1) 1px,
transparent 1px
);
background-size: 100% 20px, 40px 100%;
}

/* Noir dossier paper texture */
.noir-paper-texture {
background-color: #E5E5E5;
background-image:
linear-gradient(90deg, rgba(0,0,0,0.03) 1px, transparent 1px),
linear-gradient(rgba(0,0,0,0.03) 1px, transparent 1px);
background-size: 20px 20px;
}

/* Pro Panel genre card styles */
.pro-panel-genre-card {
transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.pro-panel-genre-card:hover {
transform: translateY(-2px);
box-shadow: 6px 6px 0px 0px rgba(0,0,0,1);
}

.pro-panel-genre-card:active {
transform: translateY(0);
box-shadow: 2px 2px 0px 0px rgba(0,0,0,1);
}

/* Noir fingerprint decorative corner */
.noir-fingerprint::after {
content: '🔍';
position: absolute;
top: 1rem;
right: 1rem;
font-size: 3rem;
opacity: 0.08;
transform: rotate(12deg);
pointer-events: none;
}

/* ── Additional Pro Panel Noir Utilities ── */

/* Sidebar panel styling */
.noir-sidebar-panel {
background: rgba(255, 255, 255, 0.02);
backdrop-filter: blur(8px);
border: 1px solid rgba(255, 255, 255, 0.05);
}

/* Section label tab */
.noir-section-label {
display: inline-block;
background: #8a0000;
color: white;
padding: 0.375rem 1rem;
font-family: var(--font-marker);
Comment thread
coderabbitai[bot] marked this conversation as resolved.
text-transform: uppercase;
letter-spacing: 0.15em;
font-size: 0.875rem;
clip-path: polygon(0% 0%, 90% 0%, 100% 20%, 100% 100%, 0% 100%);
}

/* Dark-themed input */
.noir-input {
width: 100%;
background: rgba(0, 0, 0, 0.6);
color: white;
border: 2px solid rgba(255, 255, 255, 0.1);
padding: 0.75rem 1rem;
font-family: var(--font-condensed);
Comment thread
coderabbitai[bot] marked this conversation as resolved.
text-transform: uppercase;
letter-spacing: 0.1em;
font-size: 0.875rem;
transition: border-color 0.2s ease;
}

.noir-input:focus {
border-color: #8a0000;
outline: none;
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated

.noir-input::placeholder {
color: rgba(255, 255, 255, 0.2);
}

/* Compact range slider for sidebar */
input[type="range"].accent-noir-primary {
accent-color: #8a0000;
}

input[type="range"]::-webkit-slider-thumb {
cursor: pointer;
}

/* Pro Panel accordion refinements */
.pro-panel-accordion [data-state="open"] > [role="region"] {
animation: accordion-down 0.2s ease-out;
}

.pro-panel-accordion [data-state="closed"] > [role="region"] {
animation: accordion-up 0.2s ease-out;
}

/* Noir sticky sidebar */
@media (min-width: 1024px) {
.noir-sticky-sidebar {
position: sticky;
top: 1rem;
}
}

/* Bold slanted thick marker style for titles/headings */
.font-marker {
font-family: var(--font-marker);
font-weight: 700;
transform: skewX(-4deg);
-webkit-text-stroke: 0.5px currentColor;
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
paint-order: stroke fill;
}

/* Emoji color utilities — forces native emojis to white or black */
.emoji-white {
filter: grayscale(1) brightness(100);
}
.emoji-dark {
filter: grayscale(1) brightness(0);
}

}
33 changes: 33 additions & 0 deletions app/pro-panel/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/**
* Pro Panel Page
* Advanced story generation configuration with 70+ parameters
* Noir Dossier visual design
*/

import { Metadata } from 'next';
import { ProPanel } from '@/components/pro-panel/ProPanel';

export const metadata: Metadata = {
title: 'Pro Panel | GroqTales',
description: 'Advanced AI story generation with 70+ customizable parameters across 9 categories',
openGraph: {
title: 'Pro Panel | GroqTales',
description: 'Fine-tune every aspect of your AI-generated stories',
type: 'website',
},
};

export default function ProPanelPage() {
return (
<div className="bg-background-dark font-display overflow-x-hidden min-h-screen relative">
{/* Halftone dot background */}
<div className="fixed inset-0 z-0 halftone-bg pointer-events-none opacity-40" />

<div className="relative z-10 flex flex-col min-h-screen">
<main className="flex-grow">
<ProPanel />
</main>
</div>
</div>
);
}
2 changes: 2 additions & 0 deletions components/header.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ export function Header() {
src="/logo.png"
alt="GroqTales Logo"
fill
sizes="64px"
className="object-cover"
priority
/>
Expand Down Expand Up @@ -280,6 +281,7 @@ export function Header() {
src="/logo.png"
alt="Logo"
fill
sizes="32px"
className="object-contain"
/>
</div>
Expand Down
Loading