From ca04de4885d97dff9a945af3e84e7d115e515b68 Mon Sep 17 00:00:00 2001 From: Kristen Hercules Date: Wed, 18 Feb 2026 23:02:58 -0600 Subject: [PATCH] Add favicon icons and update product/about pages --- backend/create_favicons.py | 78 ++++++++++++++++ backend/update_hero_image.py | 39 ++++++++ frontend/public/android-chrome-192x192.png | Bin 0 -> 10599 bytes frontend/public/android-chrome-512x512.png | Bin 0 -> 30888 bytes frontend/public/apple-touch-icon.png | Bin 0 -> 9906 bytes frontend/public/favicon-16x16.png | Bin 0 -> 497 bytes frontend/public/favicon-32x32.png | Bin 0 -> 1158 bytes frontend/public/favicon-48x48.png | Bin 0 -> 2051 bytes frontend/public/favicon-64x64.png | Bin 0 -> 2912 bytes frontend/public/favicon.ico | Bin 3654 -> 523 bytes frontend/public/index.html | 12 ++- frontend/public/manifest.json | 26 ++++++ frontend/src/components/cards/ProductCard.js | 92 ++++++++++++++++++- frontend/src/pages/About.js | 14 ++- frontend/src/pages/Products.js | 2 +- 15 files changed, 256 insertions(+), 7 deletions(-) create mode 100644 backend/create_favicons.py create mode 100644 backend/update_hero_image.py create mode 100644 frontend/public/android-chrome-192x192.png create mode 100644 frontend/public/android-chrome-512x512.png create mode 100644 frontend/public/apple-touch-icon.png create mode 100644 frontend/public/favicon-16x16.png create mode 100644 frontend/public/favicon-32x32.png create mode 100644 frontend/public/favicon-48x48.png create mode 100644 frontend/public/favicon-64x64.png create mode 100644 frontend/public/manifest.json diff --git a/backend/create_favicons.py b/backend/create_favicons.py new file mode 100644 index 0000000..496afcc --- /dev/null +++ b/backend/create_favicons.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python3 +""" +Create properly sized favicon images from the logo +""" +from PIL import Image +import os + +# Paths +logo_path = "/media/pts/Website/PromptTech_Solution_Site/Logo/PTB-logo.png" +public_dir = "/media/pts/Website/PromptTech_Solution_Site/frontend/public" + +# Load the original logo +print("Loading logo...") +logo = Image.open(logo_path) +print(f"Original size: {logo.size}") + +# Convert to RGBA if needed +if logo.mode != 'RGBA': + logo = logo.convert('RGBA') + +# Define sizes to create +sizes = [ + (16, 16, "favicon-16x16.png"), + (32, 32, "favicon-32x32.png"), + (48, 48, "favicon-48x48.png"), + (64, 64, "favicon-64x64.png"), + (180, 180, "apple-touch-icon.png"), + (192, 192, "android-chrome-192x192.png"), + (512, 512, "android-chrome-512x512.png"), +] + +# Create each size +for width, height, filename in sizes: + # Create a square canvas + size = (width, height) + + # Resize with high quality + resized = logo.copy() + resized.thumbnail(size, Image.Resampling.LANCZOS) + + # Create a new image with transparent background + new_img = Image.new('RGBA', size, (255, 255, 255, 0)) + + # Calculate position to center the logo + paste_x = (size[0] - resized.size[0]) // 2 + paste_y = (size[1] - resized.size[1]) // 2 + + # Paste the resized logo + new_img.paste(resized, (paste_x, paste_y), resized) + + # Save + output_path = os.path.join(public_dir, filename) + new_img.save(output_path, "PNG", optimize=True) + print(f"Created: {filename} ({width}x{height})") + +# Create favicon.ico with multiple sizes +print("\nCreating favicon.ico with multiple sizes...") +ico_sizes = [(16, 16), (32, 32), (48, 48)] +ico_images = [] + +for width, height in ico_sizes: + resized = logo.copy() + resized.thumbnail((width, height), Image.Resampling.LANCZOS) + + # Create centered image + new_img = Image.new('RGBA', (width, height), (255, 255, 255, 0)) + paste_x = (width - resized.size[0]) // 2 + paste_y = (height - resized.size[1]) // 2 + new_img.paste(resized, (paste_x, paste_y), resized) + + ico_images.append(new_img) + +# Save as ICO +favicon_path = os.path.join(public_dir, "favicon.ico") +ico_images[0].save(favicon_path, format='ICO', sizes=[(img.width, img.height) for img in ico_images]) +print(f"Created: favicon.ico with sizes: {[(img.width, img.height) for img in ico_images]}") + +print("\nāœ… All favicon images created successfully!") diff --git a/backend/update_hero_image.py b/backend/update_hero_image.py new file mode 100644 index 0000000..73978e0 --- /dev/null +++ b/backend/update_hero_image.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +"""Update the About page hero section image URL in the database.""" + +import asyncio +from sqlalchemy import text +from database import async_engine + +async def update_hero_image(): + """Update the hero section image_url in about_content table.""" + + image_url = "/uploads/media/aa5bcc15-3b1e-4ed8-8708-1a3dceb9494d.jpg" + + async with async_engine.begin() as conn: + # Update the hero section image_url + result = await conn.execute( + text(""" + UPDATE about_content + SET image_url = :image_url, + updated_at = NOW() + WHERE section = 'hero' + """), + {"image_url": image_url} + ) + + print(f"āœ… Updated hero section image_url to: {image_url}") + print(f" Rows affected: {result.rowcount}") + + # Verify the update + verify = await conn.execute( + text("SELECT section, image_url FROM about_content WHERE section = 'hero'") + ) + row = verify.fetchone() + if row: + print(f"āœ… Verified - Section: {row[0]}, Image URL: {row[1]}") + else: + print("āŒ No hero section found!") + +if __name__ == "__main__": + asyncio.run(update_hero_image()) diff --git a/frontend/public/android-chrome-192x192.png b/frontend/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..ddd4af057f3fc64747cd9fa0ed5773aac6f5a750 GIT binary patch literal 10599 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 literal 0 HcmV?d00001 diff --git a/frontend/public/android-chrome-512x512.png b/frontend/public/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..13ed78bffb88dd4b66fcafa0920b859c94b29cae GIT binary patch literal 30888 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 literal 0 HcmV?d00001 diff --git a/frontend/public/apple-touch-icon.png b/frontend/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..47fcc7df7cf3bdd6df1d302862a9358d8cb1c0cf GIT binary patch literal 9906 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 S76jv>0c0h=O4NuM2K^5xh$Wo> literal 0 HcmV?d00001 diff --git a/frontend/public/favicon-16x16.png b/frontend/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..1fbc004f84ffe8d9ff3365c0e761a2af90fc98e9 GIT binary patch literal 497 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 KMNUMnLSTZaCA2mG literal 0 HcmV?d00001 diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico index 0aa4c5cee27b69a0f515ec467a81326df20abdab..d35e15166b1df7a7e60f9ab20d359be412b68689 100644 GIT binary patch delta 498 zcmVK~#90)ss(1(_tLO zpZDjxwX{|ywB?^QVskoo5a!a-2!gDT@K(F%&65X3x_St^bjX9E2fKv?+w>+vAVhd+ z$APB=!*r5ZbD48)`~BXhgY)NR$93roUwC=>JkJZy_xlQxsHC)t)c?Xjp1+_{5Sj+0 zb|lu~jd~$}UnN_ETd4QsNkRy5PC%ZuGC&gh(V5_z4(CRn)5hoC>zwLw?|y&#>R~B! z+U7wSI!GeB5_L}m8#p*T!m;s}1$S$ppj~tDMSDHdk?Bw=TV_C|KpI#M_bhrnp2C;) z_3XFJP2Otu(bwS2-E_Hf?|S_S<}xKbiy@ML5J2XCmq>iw3Td`#IUiZDjy~zedv6v? zcP`1!E3ke}ru_Jkw3?c~rf}gR>uPL2H7WIcazmvpmytj%KJMkQnuhMGu^gbPNR0bezc-;5&b#r!C##ZCUmX@Ht_FL)kL+!{8UG_h?KZ&ajMP--^L01x*? zeCW|t+(4j-Z7n|b`I#IUDr&;8Va1film-w_YaBNTpy1HXG o!owe6uTv&dEb;&Ug^CUS0H+=X+?_Rk!vFvP07*qoM6N<$f+#EXDgXcg literal 3654 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 diff --git a/frontend/public/index.html b/frontend/public/index.html index e9932a9..ec60355 100644 --- a/frontend/public/index.html +++ b/frontend/public/index.html @@ -2,7 +2,17 @@ - + + + + + + + + + + + { +const ProductCard = ({ product, viewMode = "grid" }) => { const { addToCart } = useCart(); const { isAuthenticated } = useAuth(); @@ -41,6 +41,96 @@ const ProductCard = ({ product }) => { return product.image_url; }; + // List View Layout + if (viewMode === "list") { + return ( + + {/* Image Container - Fixed Size */} +
+ {product.name} + {/* Stock Badge */} + {product.stock <= 5 && product.stock > 0 && ( + + {product.stock} left + + )} + {product.stock === 0 && ( + + Out of Stock + + )} +
+ + {/* Content - Flex Container */} +
+
+ {/* Category & Brand */} +
+ + {product.category} + + {product.brand && ( + + {product.brand} + + )} +
+ + {/* Title */} +

+ {product.name} +

+ + {/* Description if available */} + {product.description && ( +

+ {product.description} +

+ )} +
+ + {/* Price & Actions */} +
+ + ${product.price.toFixed(2)} + +
+ + +
+
+
+ + ); + } + + // Grid View Layout (Default) return ( {
Tech Repair Services {
{member.name} { }`} > {filteredProducts.map((product) => ( - + ))}