From 8e17bf677155bdf088b45178ba39db35f03813f1 Mon Sep 17 00:00:00 2001 From: 213sanjana Date: Tue, 28 Oct 2025 11:18:37 +0530 Subject: [PATCH 1/4] Enhancement --- package-lock.json | 21 ++ package.json | 5 +- src/app/ai-generator/page.tsx | 205 ++-------------- src/app/api/chat-assignment/route.ts | 4 +- src/app/api/export-document/route.ts | 4 +- src/app/api/fetch-image/route.ts | 4 +- src/app/api/generate-assignment/route.ts | 88 ++----- src/app/contact/page.tsx | 283 +++++++++++++++++++++++ src/app/dashboard/page.tsx | 49 +--- src/app/form/page.tsx | 8 + src/app/layout.tsx | 8 +- src/app/page.tsx | 28 +-- src/app/sign/page.tsx | 3 - src/components/back-to-top.tsx | 58 +++++ src/components/footer.tsx | 192 +++++++++++++++ src/components/mwrap.tsx | 47 +++- src/components/nav.tsx | 23 +- src/components/navbar1.tsx | 1 - src/components/signup.tsx | 13 +- src/components/ui/resizable-navbar.tsx | 4 +- src/components/ui/textarea.tsx | 3 +- src/components/usage-tracker.tsx | 26 +-- src/lib/document-utils.ts | 116 +++------- src/lib/supabaseclient.ts | 9 +- 24 files changed, 748 insertions(+), 454 deletions(-) create mode 100644 src/app/contact/page.tsx create mode 100644 src/components/back-to-top.tsx create mode 100644 src/components/footer.tsx diff --git a/package-lock.json b/package-lock.json index 99452a1..63ce28d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,6 +42,7 @@ "devDependencies": { "@eslint/eslintrc": "^3", "@tailwindcss/postcss": "^4.1.10", + "@types/file-saver": "^2.0.7", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", @@ -3022,6 +3023,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/file-saver": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.7.tgz", + "integrity": "sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -6670,6 +6678,19 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/liquid-glass-react": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/liquid-glass-react/-/liquid-glass-react-1.1.1.tgz", + "integrity": "sha512-pKzaktaMAEztd93wpWcz2Z5Z9qdLJUNJdMX+n00Ca4XsnrLTQ5xJzm/+GQXZUeuFXe/PQ8ziVMZO6531PyaFJw==", + "license": "MIT", + "workspaces": [ + "liquid-glass" + ], + "peerDependencies": { + "react": ">=19", + "react-dom": ">=19" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", diff --git a/package.json b/package.json index bfdf599..8b6ace7 100644 --- a/package.json +++ b/package.json @@ -19,12 +19,12 @@ "@tabler/icons-react": "^3.34.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", + "file-saver": "^2.0.5", "framer-motion": "^12.19.1", "gsap": "^3.13.0", - "file-saver": "^2.0.5", + "html-docx-js": "^0.3.1", "html2canvas": "^1.4.1", "html2pdf.js": "^0.10.2", - "html-docx-js": "^0.3.1", "jspdf": "^2.5.2", "liquid-glass-react": "^1.1.1", "lucide-react": "^0.518.0", @@ -43,6 +43,7 @@ "devDependencies": { "@eslint/eslintrc": "^3", "@tailwindcss/postcss": "^4.1.10", + "@types/file-saver": "^2.0.7", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", diff --git a/src/app/ai-generator/page.tsx b/src/app/ai-generator/page.tsx index 8221dc0..73deffe 100644 --- a/src/app/ai-generator/page.tsx +++ b/src/app/ai-generator/page.tsx @@ -1,17 +1,20 @@ 'use client'; import { useState } from 'react'; +import Link from 'next/link'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Textarea } from '@/components/ui/textarea'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; -import { Download, FileText, Loader2, Sparkles, Brain, Upload, X, Send, MessageSquare, Edit3, Plus } from 'lucide-react'; +import { Download, FileText, Loader2, Sparkles, Brain, Upload, X, Send, MessageSquare, Plus } from 'lucide-react'; import { exportToPDF, exportToWord } from '@/lib/document-utils'; import Aurora from '@/components/Backgrounds/Aurora'; +import { NavbarDemo } from '@/components/nav'; +import Footer from '@/components/footer'; export default function AIGenerator() { const [formData, setFormData] = useState({ @@ -19,7 +22,6 @@ export default function AIGenerator() { subject: '', wordCount: '1000', level: 'undergraduate', -<<<<<<< HEAD requirements: '', includeImages: true, imageQuery: '' @@ -32,7 +34,6 @@ export default function AIGenerator() { const [chatMessages, setChatMessages] = useState<{role: 'user' | 'assistant', content: string}[]>([]); const [chatInput, setChatInput] = useState(''); const [isChatting, setIsChatting] = useState(false); - const [showChat, setShowChat] = useState(false); const getUsage = () => { const saved = localStorage.getItem('ai-generator-usage'); @@ -52,27 +53,11 @@ export default function AIGenerator() { if (usage.geminiUsage >= usage.geminiLimit) { alert('Your limit for today has exceeded. Please try again tomorrow.'); -======= - requirements: '' - }); - const [generatedContent, setGeneratedContent] = useState(''); - const [isGenerating, setIsGenerating] = useState(false); - const [isExporting, setIsExporting] = useState(false); - - const handleGenerate = async () => { - // Check usage limits - const savedUsage = localStorage.getItem('ai-generator-usage'); - const usage = savedUsage ? JSON.parse(savedUsage) : { geminiUsage: 0, geminiLimit: 100 }; - - if (usage.geminiUsage >= usage.geminiLimit) { - alert('Daily limit reached! You have generated ' + usage.geminiLimit + ' assignments today. Please try again tomorrow.'); ->>>>>>> 744373a (ai powered assignment generator added) return; } setIsGenerating(true); try { -<<<<<<< HEAD const formDataWithFiles = new FormData(); Object.entries(formData).forEach(([key, value]) => { formDataWithFiles.append(key, value.toString()); @@ -94,16 +79,6 @@ export default function AIGenerator() { } throw new Error(data.error); } -======= - const response = await fetch('/api/generate-assignment', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(formData) - }); - - const data = await response.json(); - if (data.error) throw new Error(data.error); ->>>>>>> 744373a (ai powered assignment generator added) // Clean the content to remove any CSS and HTML that might affect layout const cleanContent = data.content @@ -119,10 +94,8 @@ export default function AIGenerator() { .replace(/]*>/gi, '') .replace(/<\/body>/gi, ''); setGeneratedContent(cleanContent); -<<<<<<< HEAD setStatusMessage({type: 'success', text: 'Assignment generated successfully!'}); setChatMessages([]); - setShowChat(true); updateUsage('generation'); } catch (error) { @@ -132,20 +105,11 @@ export default function AIGenerator() { } else { alert('Generation failed: ' + errorMsg); } -======= - - // Update usage count - const newUsage = { ...usage, geminiUsage: usage.geminiUsage + 1 }; - localStorage.setItem('ai-generator-usage', JSON.stringify(newUsage)); - } catch (error) { - alert('Generation failed: ' + (error as Error).message); ->>>>>>> 744373a (ai powered assignment generator added) } finally { setIsGenerating(false); } }; -<<<<<<< HEAD const handleChatSubmit = async () => { if (!chatInput.trim() || !generatedContent) return; @@ -169,14 +133,14 @@ export default function AIGenerator() { }); const data = await response.json(); - if (data.error) throw new Error(data.error); + if (data.error) throw new Error(data.error as string); // Add assistant response and update content if modified setChatMessages(prev => [...prev, { role: 'assistant', content: data.response }]); if (data.updatedContent) { setGeneratedContent(data.updatedContent); } - } catch (error) { + } catch { setChatMessages(prev => [...prev, { role: 'assistant', content: 'Sorry, I encountered an error. Please try again.' }]); } finally { setIsChatting(false); @@ -185,12 +149,6 @@ export default function AIGenerator() { const handleExportToPDF = async () => { const usage = getUsage(); -======= - const handleExportToPDF = () => { - // Check export limits - const savedUsage = localStorage.getItem('ai-generator-usage'); - const usage = savedUsage ? JSON.parse(savedUsage) : { exportsToday: 0, exportLimit: 50 }; ->>>>>>> 744373a (ai powered assignment generator added) if (usage.exportsToday >= usage.exportLimit) { alert('Daily export limit reached! You have downloaded ' + usage.exportLimit + ' documents today. Please try again tomorrow.'); @@ -198,31 +156,15 @@ export default function AIGenerator() { } setIsExporting(true); -<<<<<<< HEAD const success = await exportToPDF(generatedContent, formData.topic || 'assignment'); if (!success) alert('PDF export failed'); updateUsage('export'); -======= - const success = exportToPDF(generatedContent, formData.topic || 'assignment'); - if (!success) alert('PDF export failed'); - - // Update export count - const newUsage = { ...usage, exportsToday: usage.exportsToday + 1 }; - localStorage.setItem('ai-generator-usage', JSON.stringify(newUsage)); - ->>>>>>> 744373a (ai powered assignment generator added) setIsExporting(false); }; const handleExportToWord = async () => { -<<<<<<< HEAD const usage = getUsage(); -======= - // Check export limits - const savedUsage = localStorage.getItem('ai-generator-usage'); - const usage = savedUsage ? JSON.parse(savedUsage) : { exportsToday: 0, exportLimit: 50 }; ->>>>>>> 744373a (ai powered assignment generator added) if (usage.exportsToday >= usage.exportLimit) { alert('Daily export limit reached! You have downloaded ' + usage.exportLimit + ' documents today. Please try again tomorrow.'); @@ -231,28 +173,8 @@ export default function AIGenerator() { setIsExporting(true); try { -<<<<<<< HEAD await exportToWord(generatedContent, formData.topic || 'assignment'); updateUsage('export'); -======= - const response = await fetch('/api/export-document', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - content: generatedContent, - format: 'docx', - title: formData.topic || 'assignment' - }) - }); - - const data = await response.json(); - - exportToWord(generatedContent, formData.topic || 'assignment'); - - // Update export count - const newUsage = { ...usage, exportsToday: usage.exportsToday + 1 }; - localStorage.setItem('ai-generator-usage', JSON.stringify(newUsage)); ->>>>>>> 744373a (ai powered assignment generator added) } catch (error) { alert('Word export failed: ' + (error as Error).message); } finally { @@ -262,20 +184,8 @@ export default function AIGenerator() { return (
- {/* Simple Header */} -
-
-
-
- - AsHelp AI -
- - ← Back to Home - -
-
-
+ {/* Navbar */} + {/* Aurora Background */}
@@ -287,11 +197,10 @@ export default function AIGenerator() { />
-
+
{/* Hero Section */}
-<<<<<<< HEAD

AI Assignment Generator

@@ -317,23 +226,10 @@ export default function AIGenerator() {
)} -======= -
- -

- AI Assignment Generator -

- -
-

- Generate professional academic assignments with AI. Get structured, well-formatted content in seconds. -

->>>>>>> 744373a (ai powered assignment generator added)
-<<<<<<< HEAD {/* Main Content */}
{!generatedContent && ( @@ -345,19 +241,6 @@ export default function AIGenerator() { -======= - {/* Main Content Grid */} -
- {/* Input Form */} - - - - - Assignment Details - - - ->>>>>>> 744373a (ai powered assignment generator added)
setFormData({...formData, topic: e.target.value})} placeholder="Enter assignment topic" className="bg-white/10 border-white/20 text-white placeholder:text-white/60" + suppressHydrationWarning />
@@ -377,6 +261,7 @@ export default function AIGenerator() { onChange={(e) => setFormData({...formData, subject: e.target.value})} placeholder="e.g., Computer Science, History" className="bg-white/10 border-white/20 text-white placeholder:text-white/60" + suppressHydrationWarning />
@@ -425,7 +310,6 @@ export default function AIGenerator() { />
-<<<<<<< HEAD
setFormData({...formData, imageQuery: e.target.value})} placeholder="e.g., sunflower, DNA structure, solar system" className="bg-white/10 border-white/20 text-white placeholder:text-white/60" + suppressHydrationWarning />
)} @@ -500,8 +385,6 @@ export default function AIGenerator() { )}
-======= ->>>>>>> 744373a (ai powered assignment generator added) -<<<<<<< HEAD )} @@ -594,7 +476,7 @@ export default function AIGenerator() {

Ask me to modify your assignment!

-

Try: "Make it shorter" or "Add examples"

+

Try: "Make it shorter" or "Add examples"

) : ( chatMessages.map((msg, idx) => ( @@ -627,6 +509,7 @@ export default function AIGenerator() { className="bg-white/10 border-white/20 text-white placeholder:text-white/60 text-sm" onKeyPress={(e) => e.key === 'Enter' && !e.shiftKey && handleChatSubmit()} disabled={isChatting} + suppressHydrationWarning />
-======= - - - - {/* Generated Content */} - - -
- - - Generated Content - - {generatedContent && ( -
- - -
- )} -
-
- - {generatedContent ? ( -
- ) : ( -
- -

Generated assignment will appear here

-

Fill in the details and click generate to start

-
- )} - - -
- - ->>>>>>> 744373a (ai powered assignment generator added) + + {/* Footer */} +