Skip to content

Commit eac8442

Browse files
fixed console errors for component client errors
1 parent 4397c70 commit eac8442

File tree

15 files changed

+1642
-201
lines changed

15 files changed

+1642
-201
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,4 @@ yarn-error.log*
2828
next-env.d.ts
2929
.vercel
3030

31+
.firebase

app/api/github/auth/route.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ export async function POST(request: NextRequest) {
3838
)
3939
}
4040

41-
// Store token in Supabase user metadata
4241
const cookieStore = cookies()
4342
const supabase = createServerClient(
4443
process.env.NEXT_PUBLIC_SUPABASE_URL!,

app/globals.css

Lines changed: 67 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -14,75 +14,81 @@ body {
1414

1515
@layer base {
1616
:root {
17-
/* GitHub Light Mode */
18-
--background: 0 0% 100%; /* #ffffff */
19-
--foreground: 213 13% 17%; /* #24292f */
20-
--card: 210 40% 98%; /* #f6f8fa */
21-
--card-foreground: 213 13% 17%; /* #24292f */
17+
/* Loveable.dev Inspired Light Mode */
18+
--background: 0 0% 99%; /* #fcfcfc */
19+
--foreground: 0 0% 20%; /* #333333 */
20+
--card: 0 0% 100%; /* #ffffff */
21+
--card-foreground: 0 0% 20%; /* #333333 */
2222
--popover: 0 0% 100%; /* #ffffff */
23-
--popover-foreground: 213 13% 17%; /* #24292f */
24-
--primary: 212 92% 43%; /* #0969da */
23+
--popover-foreground: 0 0% 20%; /* #333333 */
24+
--primary: 323 100% 45%; /* #e6007e */
2525
--primary-foreground: 0 0% 100%; /* #ffffff */
26-
--secondary: 210 40% 98%; /* #f6f8fa */
27-
--secondary-foreground: 213 13% 17%; /* #24292f */
28-
--muted: 210 40% 98%; /* #f6f8fa */
29-
--muted-foreground: 213 12% 40%; /* #656d76 */
30-
--accent: 210 40% 96%; /* #eef2f7 */
31-
--accent-foreground: 213 13% 17%; /* #24292f */
32-
--destructive: 0 84% 60%; /* #f85149 */
26+
--secondary: 0 0% 96%; /* #f5f5f5 */
27+
--secondary-foreground: 0 0% 20%; /* #333333 */
28+
--muted: 0 0% 96%; /* #f5f5f5 */
29+
--muted-foreground: 0 0% 40%; /* #666666 */
30+
--accent: 323 100% 95%; /* #ffe5f6 */
31+
--accent-foreground: 323 100% 45%; /* #e6007e */
32+
--destructive: 0 72% 51%; /* #e53e3e */
3333
--destructive-foreground: 0 0% 100%; /* #ffffff */
34-
--border: 214 32% 85%; /* #d0d7de */
35-
--input: 214 32% 85%; /* #d0d7de */
36-
--ring: 212 92% 43%; /* #0969da */
37-
--chart-1: 212 92% 43%;
38-
--chart-2: 142 71% 45%;
39-
--chart-3: 262 83% 58%;
40-
--chart-4: 47 96% 53%;
41-
--chart-5: 0 84% 60%;
34+
--border: 0 0% 87%; /* #dedede */
35+
--input: 0 0% 87%; /* #dedede */
36+
--ring: 323 100% 45%; /* #e6007e */
37+
--chart-1: 323 100% 45%; /* #e6007e */
38+
--chart-2: 197 71% 55%; /* #47a8d9 */
39+
--chart-3: 270 50% 60%; /* #9966cc */
40+
--chart-4: 35 100% 60%; /* #ffb333 */
41+
--chart-5: 130 50% 55%; /* #66c277 */
4242
--radius: 6px;
43-
--sidebar-background: 0 0% 100%;
44-
--sidebar-foreground: 213 13% 17%;
45-
--sidebar-primary: 212 92% 43%;
46-
--sidebar-primary-foreground: 0 0% 100%;
47-
--sidebar-accent: 210 40% 98%;
48-
--sidebar-accent-foreground: 213 13% 17%;
49-
--sidebar-border: 214 32% 85%;
50-
--sidebar-ring: 212 92% 43%;
43+
--sidebar-background: 0 0% 99%; /* #fcfcfc */
44+
--sidebar-foreground: 0 0% 20%; /* #333333 */
45+
--sidebar-primary: 323 100% 45%; /* #e6007e */
46+
--sidebar-primary-foreground: 0 0% 100%; /* #ffffff */
47+
--sidebar-accent: 323 100% 95%; /* #ffe5f6 */
48+
--sidebar-accent-foreground: 323 100% 45%; /* #e6007e */
49+
--sidebar-border: 0 0% 87%; /* #dedede */
50+
--sidebar-ring: 323 100% 45%; /* #e6007e */
51+
--foreground-rgb: 51, 51, 51; /* #333333 */
52+
--background-start-rgb: 252, 252, 252; /* #fcfcfc */
53+
--background-end-rgb: 252, 252, 252; /* #fcfcfc */
5154
}
5255
.dark {
5356
/* GitHub Dark Mode */
54-
--background: 220 13% 6%; /* #0d1117 */
55-
--foreground: 213 31% 91%; /* #e6edf3 */
56-
--card: 215 28% 10%; /* #161b22 */
57-
--card-foreground: 213 31% 91%; /* #e6edf3 */
58-
--popover: 215 28% 10%; /* #161b22 */
59-
--popover-foreground: 213 31% 91%; /* #e6edf3 */
60-
--primary: 212 92% 45%; /* #2f81f7 */
61-
--primary-foreground: 220 13% 6%; /* #0d1117 */
62-
--secondary: 215 28% 10%; /* #161b22 */
63-
--secondary-foreground: 213 31% 91%; /* #e6edf3 */
64-
--muted: 215 28% 10%; /* #161b22 */
65-
--muted-foreground: 217 10% 55%; /* #8b949e */
66-
--accent: 216 12% 15%; /* #21262d */
67-
--accent-foreground: 213 31% 91%; /* #e6edf3 */
68-
--destructive: 0 81% 67%; /* #f85149 */
57+
--background: 222 30% 6%; /* #0d1117 */
58+
--foreground: 210 40% 90%; /* #e6edf3 */
59+
--card: 215 28% 11%; /* #161b22 */
60+
--card-foreground: 210 40% 90%; /* #e6edf3 */
61+
--popover: 215 28% 11%; /* #161b22 */
62+
--popover-foreground: 210 40% 90%; /* #e6edf3 */
63+
--primary: 212 100% 67%; /* #58a6ff */
64+
--primary-foreground: 222 30% 6%; /* #0d1117 */
65+
--secondary: 215 28% 11%; /* #161b22 */
66+
--secondary-foreground: 210 40% 90%; /* #e6edf3 */
67+
--muted: 215 28% 11%; /* #161b22 */
68+
--muted-foreground: 217 9% 57%; /* #8b949e */
69+
--accent: 216 15% 15%; /* #21262d */
70+
--accent-foreground: 210 40% 90%; /* #e6edf3 */
71+
--destructive: 1 65% 52%; /* #da3633 */
6972
--destructive-foreground: 0 0% 100%; /* #ffffff */
70-
--border: 215 14% 19%; /* #30363d */
71-
--input: 215 14% 19%; /* #30363d */
72-
--ring: 212 92% 45%; /* #2f81f7 */
73-
--chart-1: 212 92% 45%;
74-
--chart-2: 142 71% 45%;
75-
--chart-3: 262 83% 58%;
76-
--chart-4: 47 96% 53%;
77-
--chart-5: 0 81% 67%;
78-
--sidebar-background: 220 13% 6%;
79-
--sidebar-foreground: 213 31% 91%;
80-
--sidebar-primary: 212 92% 45%;
81-
--sidebar-primary-foreground: 220 13% 6%;
82-
--sidebar-accent: 215 28% 10%;
83-
--sidebar-accent-foreground: 213 31% 91%;
84-
--sidebar-border: 215 14% 19%;
85-
--sidebar-ring: 212 92% 45%;
73+
--border: 214 14% 21%; /* #30363d */
74+
--input: 214 14% 21%; /* #30363d */
75+
--ring: 212 100% 67%; /* #58a6ff */
76+
--chart-1: 212 100% 67%; /* #58a6ff */
77+
--chart-2: 130 60% 55%; /* #56d364 */
78+
--chart-3: 270 70% 70%; /* #b392f0 */
79+
--chart-4: 35 90% 65%; /* #f0c674 */
80+
--chart-5: 340 80% 70%; /* #f778ba */
81+
--sidebar-background: 215 28% 11%; /* #161b22 */
82+
--sidebar-foreground: 210 40% 90%; /* #e6edf3 */
83+
--sidebar-primary: 212 100% 67%; /* #58a6ff */
84+
--sidebar-primary-foreground: 222 30% 6%; /* #0d1117 */
85+
--sidebar-accent: 216 15% 15%; /* #21262d */
86+
--sidebar-accent-foreground: 210 40% 90%; /* #e6edf3 */
87+
--sidebar-border: 214 14% 21%; /* #30363d */
88+
--sidebar-ring: 212 100% 67%; /* #58a6ff */
89+
--foreground-rgb: 230, 237, 243; /* #e6edf3 */
90+
--background-start-rgb: 13, 17, 23; /* #0d1117 */
91+
--background-end-rgb: 13, 17, 23; /* #0d1117 */
8692
}
8793
}
8894

app/layout.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
import './globals.css'
22
import { PostHogProvider, ThemeProvider } from './providers'
33
import { Toaster } from '@/components/ui/toaster'
4-
import { Analytics } from '@vercel/analytics/next'
54
import type { Metadata } from 'next'
65
import { Inter } from 'next/font/google'
76

87
const inter = Inter({ subsets: ['latin'] })
98

109
export const metadata: Metadata = {
1110
metadataBase: new URL('https://codingit.vercel.app'),
12-
title: '#1 Open Source AI Software Engineer',
11+
title: 'CodinIT #1 Open Source AI Software Engineer',
1312
keywords: [
1413
'AI software engineer',
1514
'open source',
@@ -60,7 +59,6 @@ export default function RootLayout({
6059
{children}
6160
</ThemeProvider>
6261
<Toaster />
63-
<Analytics />
6462
</body>
6563
</PostHogProvider>
6664
</html>

app/page.tsx

Lines changed: 39 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use client"
22

3-
import type React from "react"
3+
import React from "react"
44

55
import type { ViewType } from "@/components/auth"
66
import { AuthDialog } from "@/components/auth-dialog"
@@ -22,7 +22,9 @@ import type { DeepPartial } from "ai"
2222
import { experimental_useObject as useObject } from "ai/react"
2323
import { usePostHog } from "posthog-js/react"
2424
import { type SetStateAction, useCallback, useEffect, useState } from "react"
25-
import { useLocalStorage } from "usehooks-ts"
25+
import { useLocalStorage } from "usehooks-ts";
26+
import posthog from "posthog-js"
27+
2628
const TEMPLATE_IDS = {
2729
CODE_INTERPRETER_V1: "code-interpreter-v1",
2830
NEXTJS_DEVELOPER: "nextjs-developer",
@@ -259,7 +261,10 @@ export default function Home() {
259261
})
260262

261263
const currentModel = filteredModels.find((model) => model.id === languageModel.model)
262-
const currentTemplate = selectedTemplate === "auto" ? templates : { [selectedTemplate]: templates[selectedTemplate] }
264+
const currentTemplate = React.useMemo(
265+
() => selectedTemplate === "auto" ? templates : { [selectedTemplate]: templates[selectedTemplate] },
266+
[selectedTemplate]
267+
)
263268

264269
const {
265270
object,
@@ -433,11 +438,11 @@ export default function Home() {
433438
}
434439
}, [error, stop])
435440

436-
async function handleSubmitAuth(
441+
const handleSubmitAuth = useCallback(async (
437442
e: React.FormEvent<HTMLFormElement>,
438443
projectFiles?: File[],
439444
projectAnalysis?: ProjectAnalysis
440-
) {
445+
) => {
441446
e.preventDefault()
442447

443448
if (isLoading) {
@@ -550,9 +555,9 @@ export default function Home() {
550555
console.error("[handleSubmitAuth] Submit error:", error)
551556
setErrorMessage("Failed to submit request. Please try again.")
552557
}
553-
}
558+
}, [isLoading, session, userTeam, currentModel, isSubmitting, stop, chatInput, files, messages, currentTemplate, languageModel, setAuthDialog, setErrorMessage, setCurrentRequestId, setChatInput, setFiles, setCurrentTab, setIsRateLimited, setProjectContext, posthog, submit, selectedTemplate])
554559

555-
function retry() {
560+
const retry = useCallback(() => {
556561
if (!session?.user?.id || !userTeam?.id) {
557562
console.error("[retry] Missing authentication data")
558563
setErrorMessage("Authentication error. Please sign out and sign in again.")
@@ -592,37 +597,36 @@ export default function Home() {
592597
})
593598

594599
submit(submitData)
595-
}
600+
}, [session, userTeam, currentModel, messages, currentTemplate, languageModel, projectContext, setErrorMessage, setIsRateLimited, setIsPreviewLoading, setCurrentRequestId, submit])
596601

597-
function handleSaveInputChange(e: React.ChangeEvent<HTMLTextAreaElement> | React.ChangeEvent<HTMLInputElement>) {
602+
const handleSaveInputChange = useCallback((e: React.ChangeEvent<HTMLTextAreaElement> | React.ChangeEvent<HTMLInputElement>) => {
598603
setChatInput(e.target.value)
599-
}
604+
}, [setChatInput]);
600605

601-
function handleFileChange(change: SetStateAction<File[]>) {
606+
const handleFileChange = useCallback((change: SetStateAction<File[]>) => {
602607
setFiles(change)
603-
}
608+
}, [setFiles]);
604609

605-
function logout() {
610+
const logout = useCallback(() => {
606611
supabase ? supabase.auth.signOut() : console.warn("Supabase is not initialized")
607-
}
612+
}, []); // supabase is stable
608613

609-
function handleLanguageModelChange(e: LLMModelConfig) {
614+
const handleLanguageModelChange = useCallback((e: LLMModelConfig) => {
610615
setLanguageModel({ ...languageModel, ...e })
611-
}
616+
}, [languageModel, setLanguageModel]);
612617

613-
function handleSocialClick(target: "github" | "x" | "discord") {
618+
const handleSocialClick = useCallback((target: "github" | "x" | "discord") => {
614619
if (target === "github") {
615620
window.open("https://github.com/Gerome-Elassaad/CodinIT", "_blank")
616621
} else if (target === "x") {
617622
window.open("https://x.com/codinit_dev", "_blank")
618623
} else if (target === "discord") {
619624
window.open("https://discord.gg/codinit", "_blank")
620625
}
621-
622626
posthog.capture(`${target}_click`)
623-
}
627+
}, [posthog]);
624628

625-
function handleClearChat() {
629+
const handleClearChat = useCallback(() => {
626630
stop()
627631
setChatInput("")
628632
setFiles([])
@@ -635,32 +639,38 @@ export default function Home() {
635639
setIsRateLimited(false)
636640
setCurrentRequestId(null)
637641
setProjectContext({ files: [], analysis: null })
638-
}
642+
}, [stop, setChatInput, setFiles, setMessages, setFragment, setResult, setCurrentTab, setIsPreviewLoading, setErrorMessage, setIsRateLimited, setCurrentRequestId, setProjectContext]);
639643

640-
function setCurrentPreview(preview: {
644+
const setCurrentPreview = useCallback((preview: {
641645
fragment: DeepPartial<FragmentSchema> | undefined
642646
result: ExecutionResult | undefined
643-
}) {
647+
}) => {
644648
setFragment(preview.fragment)
645649
setResult(preview.result)
646-
}
650+
}, [setFragment, setResult]);
647651

648-
function handleUndo() {
652+
const handleUndo = useCallback(() => {
649653
if (messages.length > 1) {
650654
setMessages((previousMessages) => [...previousMessages.slice(0, -2)])
651655
setCurrentPreview({ fragment: undefined, result: undefined })
652656
setErrorMessage("")
653657
setIsPreviewLoading(false)
654658
}
655-
}
659+
}, [messages.length, setMessages, setCurrentPreview, setErrorMessage, setIsPreviewLoading]);
656660

657-
function handleRetryAuth() {
661+
const handleRetryAuth = useCallback(() => {
658662
if (supabase) {
659663
supabase.auth.signOut().then(() => {
660664
setTimeout(() => setAuthDialog(true), 500)
661665
})
662666
}
663-
}
667+
}, [setAuthDialog]); // supabase is a stable import, setAuthDialog is a stable state setter
668+
669+
const handlePreviewClose = useCallback(() => {
670+
setFragment(undefined);
671+
setResult(undefined);
672+
setCurrentTab("code");
673+
}, [setFragment, setResult, setCurrentTab]);
664674

665675
if (isLoading) {
666676
return (
@@ -739,11 +749,7 @@ export default function Home() {
739749
isPreviewLoading={isPreviewLoading}
740750
fragment={fragment}
741751
result={result as ExecutionResult}
742-
onClose={() => {
743-
setFragment(undefined)
744-
setResult(undefined)
745-
setCurrentTab("code")
746-
}}
752+
onClose={handlePreviewClose}
747753
/>
748754
</div>
749755
)}

components/chat-picker.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ export function ChatPicker({
5656
<SelectItem key={templateId} value={templateId}>
5757
<div className="flex items-center space-x-2">
5858
<Image
59-
className="flex"
6059
src={`/thirdparty/templates/${templateId}.svg`}
6160
alt={templateId}
6261
width={14}
@@ -89,7 +88,6 @@ export function ChatPicker({
8988
<SelectItem key={model.id} value={model.id}>
9089
<div className="flex items-center space-x-2">
9190
<Image
92-
className="flex"
9391
src={`/thirdparty/logos/${model.providerId}.svg`}
9492
alt={model.provider}
9593
width={14}

0 commit comments

Comments
 (0)