Skip to content

Merge source safely#3

Open
TreeReFurrm wants to merge 21 commits intomainfrom
merge-source-safely
Open

Merge source safely#3
TreeReFurrm wants to merge 21 commits intomainfrom
merge-source-safely

Conversation

@TreeReFurrm
Copy link
Owner

No description provided.

tmfurr97-prog and others added 21 commits December 11, 2025 07:39
# 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.
@TreeReFurrm
Copy link
Owner Author

commit

@TreeReFurrm TreeReFurrm reopened this Jan 11, 2026
@gemini-code-assist
Copy link

Summary of Changes

Hello @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

  • Comprehensive Platform Expansion: This pull request introduces a vast array of new features and pages, effectively building out a full-fledged e-commerce and creator platform. It covers core functionalities like product management, order processing, and subscription handling.
  • Advanced Analytics and Reporting: New analytics dashboards have been added, providing insights into customer segments, geographic distribution, cohort retention, reviews, and social media performance, enabling data-driven decision-making.
  • AI-Powered Tools and Automation: The platform now includes AI-driven capabilities for generating product copy, email campaigns, and social media captions, alongside tools for managing email templates and DM campaigns.
  • Affiliate Program Integration: A complete affiliate program has been implemented, allowing users to sign up as affiliates, track earnings, manage links, and access marketing kits, fostering growth through partnerships.
  • Robust Administrative and User Management Features: Extensive admin panels for managing products, orders, subscriptions, support tickets, and VIP users are introduced, alongside user-facing profile and settings pages.
  • Legal and Policy Documentation: A suite of legal and policy pages, including AI Output Safety, Acceptable Use Policy, Beta Tester Agreement, CCPA, Community Guidelines, Cookie Policy, Creator Rights, Data Processing Agreement, EULA, Merchant Guidelines, and Refund Policy, ensures comprehensive legal compliance and user understanding.
  • Integration with External Services: New integrations for Printify, Printful, and Google Calendar are included, streamlining order fulfillment and booking management, with a framework for future social media and e-commerce platform connections.
  • Onboarding and Storefront Enhancements: A guided onboarding process helps new users set up their first product, customize their storefront, and configure essential settings. The storefront experience is also enhanced with collection displays and product cards.
Ignored Files
  • Ignored by pattern: .github/workflows/** (1)
    • .github/workflows/generator-generic-ossf-slsa3-publish.yml
Using Gemini Code Assist

The 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 /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

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 .gemini/ folder in the base of the repository. Detailed instructions can be found here.

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

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

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.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok

@TreeReFurrm TreeReFurrm reopened this Jan 11, 2026
@tmfurr97-prog
Copy link

commit

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants