Conversation
Created from https://vercel.com/new
# Please enter a commit message to explain why this merge is necessary, # especially if it merges an updated upstream into a topic branch. # # Lines starting with '#' will be ignored, and an empty message aborts # the commit.
|
commit |
Summary of ChangesHello @TreeReFurrm, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request represents a significant leap in the application's capabilities, transforming it into a holistic platform for creators and businesses. The changes focus on providing a rich, integrated experience for managing an online presence, from product creation and sales to customer engagement and operational oversight. The introduction of AI tools aims to automate and simplify complex tasks, empowering users to focus on their creative endeavors. This extensive update lays the groundwork for a scalable and feature-rich ecosystem. Highlights
Ignored Files
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Code Review
This pull request introduces a large number of minified JavaScript files and their corresponding source maps into the build/assets/ directory. Committing build artifacts to a version control system is generally considered a poor practice. It unnecessarily increases the repository size, complicates code reviews, and can lead to frequent merge conflicts. These generated files should be excluded from the repository by adding the build/ directory to your .gitignore file. The build process should be part of your deployment pipeline, not the repository itself. I have also identified a potential bug in the form handling logic where invalid number inputs are not being validated, which could lead to NaN values being sent to the database.
| @@ -0,0 +1 @@ | |||
| {"version":3,"file":"AffiliateDashboard-tqpEbFOf.js","sources":["../../src/components/affiliate/AffiliateLinks.tsx","../../src/components/affiliate/AffiliateEarnings.tsx","../../src/components/affiliate/AffiliateMarketingKit.tsx","../../src/pages/AffiliateDashboard.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Label } from '@/components/ui/label';\nimport { Copy, ExternalLink } from 'lucide-react';\nimport { useToast } from '@/hooks/use-toast';\n\nexport function AffiliateLinks() {\n const { toast } = useToast();\n const affiliateCode = 'SARAH2024';\n const baseUrl = 'https://yourstore.com';\n\n const links = [\n { name: 'Homepage', url: `${baseUrl}?ref=${affiliateCode}`, clicks: 234 },\n { name: 'Product Page', url: `${baseUrl}/products?ref=${affiliateCode}`, clicks: 156 },\n { name: 'Storefront', url: `${baseUrl}/storefront?ref=${affiliateCode}`, clicks: 89 },\n ];\n\n const copyToClipboard = (text: string) => {\n navigator.clipboard.writeText(text);\n toast({\n title: \"Copied!\",\n description: \"Link copied to clipboard\",\n });\n };\n\n return (\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Your Affiliate Code</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"flex gap-2\">\n <Input value={affiliateCode} readOnly className=\"font-mono\" />\n <Button onClick={() => copyToClipboard(affiliateCode)}>\n <Copy className=\"w-4 h-4\" />\n </Button>\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Your Affiliate Links</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {links.map((link) => (\n <div key={link.name} className=\"border rounded-lg p-4\">\n <div className=\"flex justify-between items-start mb-2\">\n <Label className=\"font-semibold\">{link.name}</Label>\n <span className=\"text-sm text-muted-foreground\">{link.clicks} clicks</span>\n </div>\n <div className=\"flex gap-2\">\n <Input value={link.url} readOnly className=\"text-sm\" />\n <Button size=\"sm\" onClick={() => copyToClipboard(link.url)}>\n <Copy className=\"w-4 h-4\" />\n </Button>\n <Button size=\"sm\" variant=\"outline\" onClick={() => window.open(link.url, '_blank')}>\n <ExternalLink className=\"w-4 h-4\" />\n </Button>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n","import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table';\nimport { Badge } from '@/components/ui/badge';\n\nexport function AffiliateEarnings() {\n const earnings = [\n { id: 1, date: '2024-01-20', customer: 'John D.', product: 'Premium Course', commission: 45.00, status: 'paid' },\n { id: 2, date: '2024-01-19', customer: 'Sarah M.', product: 'Digital Art Pack', commission: 28.50, status: 'paid' },\n { id: 3, date: '2024-01-18', customer: 'Mike K.', product: 'Coaching Session', commission: 60.00, status: 'pending' },\n { id: 4, date: '2024-01-17', customer: 'Emma L.', product: 'E-book Bundle', commission: 22.00, status: 'pending' },\n { id: 5, date: '2024-01-16', customer: 'David R.', product: 'Workshop Access', commission: 85.00, status: 'paid' },\n ];\n\n return (\n <Card>\n <CardHeader>\n <CardTitle>Earnings History</CardTitle>\n </CardHeader>\n <CardContent>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Date</TableHead>\n <TableHead>Customer</TableHead>\n <TableHead>Product</TableHead>\n <TableHead>Commission</TableHead>\n <TableHead>Status</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {earnings.map((earning) => (\n <TableRow key={earning.id}>\n <TableCell>{earning.date}</TableCell>\n <TableCell>{earning.customer}</TableCell>\n <TableCell>{earning.product}</TableCell>\n <TableCell className=\"font-semibold\">${earning.commission.toFixed(2)}</TableCell>\n <TableCell>\n <Badge variant={earning.status === 'paid' ? 'default' : 'secondary'}>\n {earning.status}\n </Badge>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </CardContent>\n </Card>\n );\n}\n","import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';\nimport { Button } from '@/components/ui/button';\nimport { Textarea } from '@/components/ui/textarea';\nimport { Download, Copy, Image as ImageIcon } from 'lucide-react';\nimport { useToast } from '@/hooks/use-toast';\n\nexport function AffiliateMarketingKit() {\n const { toast } = useToast();\n\n const emailTemplate = `Hi [Name],\n\nI wanted to share an amazing platform I've been using called [Brand Name]. \n\nIt's perfect for [benefit]. I've been using it for [time] and it's helped me [result].\n\nCheck it out here: [Your Affiliate Link]\n\nLet me know what you think!`;\n\n const socialPost = `Just discovered @BrandName - the easiest way to [benefit]! \n\nIf you're a creator/entrepreneur, you need to check this out.\n\n[Your Affiliate Link] 🚀`;\n\n const copyToClipboard = (text: string) => {\n navigator.clipboard.writeText(text);\n toast({\n title: \"Copied!\",\n description: \"Template copied to clipboard\",\n });\n };\n\n return (\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Email Template</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <Textarea value={emailTemplate} readOnly rows={8} />\n <Button onClick={() => copyToClipboard(emailTemplate)}>\n <Copy className=\"w-4 h-4 mr-2\" />\n Copy Template\n </Button>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Social Media Post</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <Textarea value={socialPost} readOnly rows={6} />\n <Button onClick={() => copyToClipboard(socialPost)}>\n <Copy className=\"w-4 h-4 mr-2\" />\n Copy Post\n </Button>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Marketing Assets</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <Button variant=\"outline\" className=\"w-full justify-start\">\n <ImageIcon className=\"w-4 h-4 mr-2\" />\n Download Banner Images (1200x628)\n </Button>\n <Button variant=\"outline\" className=\"w-full justify-start\">\n <ImageIcon className=\"w-4 h-4 mr-2\" />\n Download Social Graphics (1080x1080)\n </Button>\n <Button variant=\"outline\" className=\"w-full justify-start\">\n <Download className=\"w-4 h-4 mr-2\" />\n Download Brand Kit (ZIP)\n </Button>\n </CardContent>\n </Card>\n </div>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';\nimport { Button } from '@/components/ui/button';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';\nimport { DollarSign, Link2, TrendingUp, Package } from 'lucide-react';\nimport { AffiliateLinks } from '@/components/affiliate/AffiliateLinks';\nimport { AffiliateEarnings } from '@/components/affiliate/AffiliateEarnings';\nimport { AffiliateMarketingKit } from '@/components/affiliate/AffiliateMarketingKit';\n\nexport default function AffiliateDashboard() {\n const [totalEarnings, setTotalEarnings] = useState(1247.50);\n const [pendingEarnings, setPendingEarnings] = useState(342.00);\n const [totalSales, setTotalSales] = useState(87);\n const [conversionRate, setConversionRate] = useState(3.2);\n\n return (\n <div className=\"container mx-auto p-6 max-w-7xl\">\n <div className=\"mb-8\">\n <h1 className=\"text-3xl font-bold mb-2\">Affiliate Dashboard</h1>\n <p className=\"text-muted-foreground\">Track your earnings and promote products</p>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-4 gap-6 mb-8\">\n <Card>\n <CardHeader className=\"pb-2\">\n <CardTitle className=\"text-sm font-medium\">Total Earnings</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">${totalEarnings.toFixed(2)}</div>\n <p className=\"text-xs text-muted-foreground\">All time</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"pb-2\">\n <CardTitle className=\"text-sm font-medium\">Pending</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">${pendingEarnings.toFixed(2)}</div>\n <p className=\"text-xs text-muted-foreground\">Awaiting payout</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"pb-2\">\n <CardTitle className=\"text-sm font-medium\">Total Sales</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{totalSales}</div>\n <p className=\"text-xs text-muted-foreground\">Conversions</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"pb-2\">\n <CardTitle className=\"text-sm font-medium\">Conversion Rate</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{conversionRate}%</div>\n <p className=\"text-xs text-muted-foreground\">Click to sale</p>\n </CardContent>\n </Card>\n </div>\n\n <Tabs defaultValue=\"links\" className=\"space-y-6\">\n <TabsList>\n <TabsTrigger value=\"links\"><Link2 className=\"w-4 h-4 mr-2\" />My Links</TabsTrigger>\n <TabsTrigger value=\"earnings\"><DollarSign className=\"w-4 h-4 mr-2\" />Earnings</TabsTrigger>\n <TabsTrigger value=\"marketing\"><Package className=\"w-4 h-4 mr-2\" />Marketing Kit</TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"links\">\n <AffiliateLinks />\n </TabsContent>\n\n <TabsContent value=\"earnings\">\n <AffiliateEarnings />\n </TabsContent>\n\n <TabsContent value=\"marketing\">\n <AffiliateMarketingKit />\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n"],"names":["AffiliateLinks","toast","useToast","affiliateCode","baseUrl","links","copyToClipboard","text","jsxs","Card","jsx","CardHeader","CardTitle","CardContent","Input","Button","Copy","link","Label","ExternalLink","AffiliateEarnings","earnings","Table","TableHeader","TableRow","TableHead","TableBody","earning","TableCell","Badge","AffiliateMarketingKit","emailTemplate","socialPost","Textarea","ImageIcon","Download","AffiliateDashboard","totalEarnings","setTotalEarnings","useState","pendingEarnings","setPendingEarnings","totalSales","setTotalSales","conversionRate","setConversionRate","Tabs","TabsList","TabsTrigger","Link2","DollarSign","Package","TabsContent"],"mappings":"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"} No newline at end of file | |||
There was a problem hiding this comment.
The emailTemplate and socialPost variables are hardcoded within the AffiliateMarketingKit component. To improve maintainability and make these templates easier to manage and update, consider moving them to a separate constants file or a configuration store. This would also make it easier to internationalize them in the future if needed.
|
commit |
No description provided.