Skip to content

Commit da92c38

Browse files
piyushxpc7claude
andcommitted
Migrate auth from Kinde/Clerk to WorkOS + NextAuth, add Fireworks AI, new marketing pages and UI components
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent f1f99a1 commit da92c38

70 files changed

Lines changed: 3693 additions & 1312 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.env.example

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,22 @@ UPSTASH_REDIS_REST_TOKEN=
2121
# ── AI Keys ───────────────────────────────────────────────
2222
GOOGLE_AI_API_KEY=
2323
GEMINI_MODEL=gemini-2.0-flash
24-
GROQ_API_KEY=
25-
GROQ_MODEL=llama-3.1-8b-instant
26-
GROQ_AGENT_DELAY_MS=3000
27-
MISTRAL_API_KEY=
24+
# ── Fireworks (DeepSeek) — primary LLM provider ──────────
25+
# Workhorse: DeepSeek-V4-Flash (cheap, used for ~all calls)
26+
# Escalation: DeepSeek-V4-Pro (deep reasoning only)
27+
FIREWORKS_API_KEY=
28+
FIREWORKS_MODEL_FLASH=accounts/fireworks/models/deepseek-v4-flash
29+
FIREWORKS_MODEL_PRO=accounts/fireworks/models/deepseek-v4-pro
30+
FIREWORKS_AGENT_DELAY_MS=300
31+
# Optional per-slot overrides (default to FLASH except DEEP which defaults to PRO):
32+
# FIREWORKS_MODEL_TRIAGE=
33+
# FIREWORKS_MODEL_INVESTIGATOR=
34+
# FIREWORKS_MODEL_NETWORK=
35+
# FIREWORKS_MODEL_DA=
36+
# FIREWORKS_MODEL_SCRIBE=
37+
# FIREWORKS_MODEL_QUICK=
38+
# FIREWORKS_MODEL_ANALYSIS=
39+
# FIREWORKS_MODEL_DEEP=
2840

2941
# ── Upstox (Portfolio / market data) ─────────────────────
3042
UPSTOX_API_KEY=

app/(admin)/layout.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
import { redirect } from "next/navigation";
2-
import { getKindeServerSession } from "@kinde-oss/kinde-auth-nextjs/server";
2+
import { withAuth } from "@workos-inc/authkit-nextjs";
33
import prisma from "@/lib/prisma";
44

55
export default async function AdminLayout({
66
children,
77
}: {
88
children: React.ReactNode;
99
}) {
10-
const { isAuthenticated, getUser } = getKindeServerSession();
11-
if (!(await isAuthenticated())) {
10+
const { user: workosUser } = await withAuth();
11+
if (!workosUser) {
1212
redirect("/sign-in");
1313
}
1414

15-
const kindeUser = await getUser();
1615
const user = await prisma.user.findUnique({
17-
where: { authId: kindeUser!.id },
16+
where: { authId: workosUser.id },
1817
});
1918

2019
if (user?.role !== "ADMIN") {

app/(analyst)/layout.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
import { redirect } from "next/navigation";
2-
import { getKindeServerSession } from "@kinde-oss/kinde-auth-nextjs/server";
2+
import { withAuth } from "@workos-inc/authkit-nextjs";
33
import prisma from "@/lib/prisma";
44

55
export default async function AnalystLayout({
66
children,
77
}: {
88
children: React.ReactNode;
99
}) {
10-
const { isAuthenticated, getUser } = getKindeServerSession();
11-
if (!(await isAuthenticated())) {
10+
const { user: workosUser } = await withAuth();
11+
if (!workosUser) {
1212
redirect("/sign-in");
1313
}
1414

15-
const kindeUser = await getUser();
1615
const user = await prisma.user.findUnique({
17-
where: { authId: kindeUser!.id },
16+
where: { authId: workosUser.id },
1817
});
1918

2019
if (!user || (user.role !== "ANALYST" && user.role !== "ADMIN")) {

app/(app)/alerts/page.tsx

Lines changed: 9 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ import {
1212
DoubleRule,
1313
} from "@/components/ui/bl-primitives";
1414
import { cn } from "@/lib/utils";
15-
import { Filter, Zap, FileText, X, BellOff, Archive, ChevronRight, Sliders } from "lucide-react";
15+
import { Zap, Sliders } from "lucide-react";
16+
import { AlertHeaderActions } from "@/components/alerts/alert-header-actions";
17+
import { AlertPreviewActions } from "@/components/alerts/alert-preview-actions";
1618

1719
export const dynamic = "force-dynamic";
1820

@@ -199,28 +201,7 @@ function AlertPreview({ alert }: { alert: Alert | null }) {
199201
confidence <span className="num text-ink">{confidence}%</span>
200202
</div>
201203
{/* Actions */}
202-
<div className="mt-3 flex flex-wrap items-center gap-2">
203-
<BlBtn
204-
tone="ink"
205-
size="sm"
206-
icon={<ChevronRight className="h-3.5 w-3.5" />}
207-
>
208-
Open dossier
209-
</BlBtn>
210-
<BlBtn
211-
tone="bone"
212-
size="sm"
213-
icon={<FileText className="h-3.5 w-3.5" />}
214-
>
215-
Add to memo
216-
</BlBtn>
217-
<BlBtn tone="ghost" size="sm" icon={<BellOff className="h-3.5 w-3.5" />}>
218-
Mute 7d
219-
</BlBtn>
220-
<BlBtn tone="ghost" size="sm" icon={<X className="h-3.5 w-3.5" />}>
221-
Dismiss
222-
</BlBtn>
223-
</div>
204+
<AlertPreviewActions alertId={alert.id} ticker={alert.ticker} />
224205
</div>
225206

226207
{/* Sections */}
@@ -448,17 +429,11 @@ export default async function AlertsPage({
448429
<h1 className="ff-display text-[44px] leading-none tracking-tight text-ink">
449430
The triage queue.
450431
</h1>
451-
<div className="flex items-center gap-2 pb-1">
452-
<BlBtn tone="ghost" size="sm" icon={<Archive className="h-3.5 w-3.5" />}>
453-
Mark all read
454-
</BlBtn>
455-
<BlBtn tone="ghost" size="sm" icon={<Filter className="h-3.5 w-3.5" />}>
456-
Filter
457-
</BlBtn>
458-
<BlBtn tone="ink" size="sm" icon={<Sliders className="h-3.5 w-3.5" />}>
459-
Tune signals
460-
</BlBtn>
461-
</div>
432+
<AlertHeaderActions
433+
filters={filters}
434+
activeFilter={activeFilter}
435+
activeAlertId={activeAlertId}
436+
/>
462437
</div>
463438

464439
{/* Filter chips */}

0 commit comments

Comments
 (0)