Pinny's Platters Β· Admin
Edit names, descriptions, prices, and upload new images. Changes save automatically.
Upload additional images to show in the public gallery. Default images are always included.
UPLOADED images can be permanently deleted with Γ. DEFAULT images can be hidden from the public site with Γ (not deleted β click βΊ to restore).
Build this week's flyer from your catalog. Accurate, instant, consistent β no AI guessing.
Customer orders placed through the website checkout. Click an order to expand its full details. Late orders (past Thursday 8pm) appear in Needs Review.
Total items to prepare across all confirmed orders. Tick each product as you finish prepping it. Resets when you click Reset checks.
Week-over-week revenue, order count, and product breakdown. Each card is one Friday's delivery batch. Test orders excluded; cancelled orders excluded. Most recent week first.
Auto-detected payments we couldn't match with confidence. Assign each to the right order, or dismiss it.
Moderate customer-submitted reviews. Only approved reviews appear on the public site.
Send this link to past customers β it opens the review form on your site with a friendly intro message.
https://pinnysplatters.com/review
After re-seeding or updating SAMPLE_REVIEWS, run Clean Up Sample Reviews to do everything in one shot: tag matching reviews as [SAMPLE], refresh their names to the current list, and delete duplicates. Real customer reviews are never touched. The other buttons run individual steps if you need finer control.
Leads from the Events & Custom Orders section on the public site. Click a phone or email to contact directly.
Submissions from the public /feedback form. Each entry is a raffle entry. Click Pick Raffle Winner to randomly select one from non-archived entries in the current tab. Promote to Public Review creates a pending review (admin still has to approve) β only available when the submitter checked the "okay to share publicly" box.
Send this to past customers β opens the feedback form on the site with raffle entry.
https://pinnysplatters.com/feedback
Customers who reshare your WhatsApp Status flyer enter via pinnysplatters.com/raffle. Each entry is one raffle ticket. Click Save-Contact Message on a new entry to send them a quick WhatsApp asking them to save your number so they catch future giveaways + Status updates.
π Designing this week's reshare flyer? The flyer designer moved to Marketing β Content Machine β π Reshare raffle flyer. This tab is for managing entries + picking the winner.
Two ready-to-share messages. Edit the text once, copy whenever you need it. Auto-saves to Firebase. Share to WhatsApp opens WhatsApp directly with the message pre-filled.
Generate WhatsApp flyers from one or more source images. Pick a flyer type below, then images + compose. The prompt enforces pixel-lock on the food + trays β and tells the AI not to invent a container when a source is a macro shot.
Regular content flyer β pick scene, mood, headline. Optionally toggle a small Raffle CTA footer below.
Dedicated reshare-raffle flyer β pick a visual style. Headline + Status caption + raffle URL are baked in.
No images selected yet β click a thumbnail above to add.
Logo is always included as the last panel β no need to copy it separately. Surprise me picks a random scene, mood, and headline so you can experiment fast. Then Copy All Images as Collage β paste once into ChatGPT.
Single-purpose prompt templates for specific generation tasks (new tray design, adding garnishes to a real photo, lid + logo sticker, macro strip, etc.). For weekly WhatsApp Status content, use Content Machine instead.
A new flyer flow β AI generates only the hero food image. Logo, hechsher, menu QR, and headline are composited in-browser with the real brand assets. Pixel-perfect every time, short AI prompt that fits inline in ChatGPT, no redrawn logos or fake kosher stamps.
Drives the AI prompt (next section). The food stays exactly as you uploaded; only the background scene changes.
Short focused prompt β fits inline in ChatGPT (no document attachment). Covers the scene + tray meshing nicely. Tells the AI to skip logo / hechsher / QR / headline β those get composited here.
Upload either: a source platter photo you want to paste into ChatGPT alongside the prompt above (then ChatGPT returns the scened version), OR a final AI-generated / real prep photo to drop directly into the flyer.
Pre-built caption with the brand voice + tap-link. Copy-paste alongside the flyer image when you post.
Preview Β· 1080Γ1920 (9:16)
β Drag the bottom band to reposition. Keep it ABOVE the dotted line for WhatsApp Status (caption overlay covers below). Lower works fine for Group / Feed posts.
Pickup address, markup formula, and Uber Direct endpoints. Customer-facing delivery fee = (Uber's quote Γ markup %) + flat markup, rounded up to whole dollar. If the result exceeds the max fee, the address is told pickup only.
Paste these in once you've deployed the functions (functions/ folder at project root). Format: https://us-central1-pinnys-platters.cloudfunctions.net/deliveryQuote
Customers see both Zelle and Credit Card options on the order confirmation, receipt email, and WhatsApp receipt. The credit card link auto-fills the amount + order # on MerchPay's page so the customer just types in their card.
Get a WhatsApp message on your phone every time a new customer places an order on the website. Uses CallMeBot (free).
1234567). Copy it.+19173846592) and the API key into the fields below, then Save.Update the password for your own admin account. You'll be asked for your current password to confirm. Other admin users manage their own passwords the same way.
To add or remove admin users: Firebase Console β Authentication β Users.
Currently using localStorage (this browser only). Firebase integration will swap this out once the Firebase project is configured.
Configures Firebase Storage so the flyer generator can read your uploaded product images. Run this once, after the setStorageCors Cloud Function is deployed and its URL is pasted into the field above. Without it, flyers fall back to local hero files instead of using your uploads.
Use this if a "Reset Products" or bad import overwrote your image URLs with default paths (e.g. images/hero/*.jpg instead of long Firebase URLs). Scans products/ in Firebase Storage, finds the most recent uploaded image per product (matched by filename pattern products/{productId}-{timestamp}.jpg), and re-links it back to the Firestore product doc. Only updates products whose current image is a default path β products with valid Firebase Storage URLs are left alone. Click Preview first to see what would change without writing anything.
Pushes any product in products.js that doesn't yet exist in Firestore. Use this after I've added a new product to the defaults β it adds the new one without touching your existing ones (no overwriting custom images/prices).
Creates 9 realistic-looking reviews (varied names, products, ratings) so the Reviews section looks populated. All seeded reviews are already approved and tagged [SAMPLE] so you can spot them in the Reviews tab. Safe to run multiple times β it only adds, doesn't duplicate-detect.