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).
Customer orders placed through the website checkout. Click an order to expand its full details. Late orders (past Thursday 8pm) appear in Needs Review.
What to make for orders already in. Tap + Made as you premake or finish each platter β Still to make updates itself. Any platters you make beyond what's ordered show up as extra and roll into "Available to sell" below. Works right through Thursday; hit Print prep tally for the paper copy (tally boxes + each platter's customer notes, pre-filled from these counts).
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.
Task timings + amounts Myra records from her Playbook (Stopwatch + Record Amounts). Use these to see how long things take and how much fish goes on each platter for costing.
Log what you spend on ingredients + supplies. Track raw fish, vegetables, trays, and packaging so you know your true cost per week.
Log each shift β hours calculate from clock-in/out, pay uses the hourly rate. Grouped by week (SunβSat), newest first.
The hours Myra can work each day. Add or remove time windows (e.g. mornings 7:00β7:30, then free again 10:30 onward). The Weekly Workflow uses these to flag when a step won't fit her hours.
Your recurring week: fish arrives β cure β process β slice + build β garnish/package/deliver β pickups. Enter this week's fish counts and the work rates; it computes how long each step takes and whether it fits Myra's hours. Edit any step's day or start time to adjust this week.
Auto-detected payments we couldn't match with confidence. Assign each to the right order, or dismiss it.
Upload a photo for each step and it shows on Myra's /playbook page (password pinny2026). Generate the image however you like, then upload it here. The step wording is set in the code for now.
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 the months you include below. 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.
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 style β None (recommended): the collage skips the logo + QR panels, ChatGPT reserves clean space top + bottom, and you stamp the real logo + info band in Step 3 below. Surprise me picks a random scene, mood, and headline so you can experiment fast. Then Copy All Images as Collage β paste once into ChatGPT.
When your image comes back from ChatGPT, load it below. Drag the real Pinny's logo into the clean top space (or tilt it flat onto a tray lid), switch on the brand band (menu QR Β· delivery zones Β· hechsher Β· upstate Β· raffle strips) and slide it into position β the dotted gold line marks where a WhatsApp Status caption covers the image, so keep the band above it for Status posts. Then Download. Works on any photo, not just ChatGPT output.
Drag the label right on the preview to place it. The vertical sliders work like an equalizer β middle = 0 (flat), with a center notch, and they snap back to 0 near the middle so a stray touch can't leave the logo crooked.
Which brand asset to stamp on. Applies to the currently-selected label (the one with the gold dashed outline).
The Template Builder's bottom info band, right here β menu QR, delivery zones + cutoff, CRC hechsher, plus optional upstate/raffle strips. Slide it up or down; the dotted gold line shows where WhatsApp's Status caption covers the image β keep the band above it for Status posts.
Strips work on their own too β leave the band off and add just the one you need. Drag them on the preview to position.
Placing labels on more than one tray? Add another and drag it into place. Tap a label on the preview to select it.
The base image the label goes onto. Big photos are scaled to a max of 4096px on the long edge for the download.
Cut the tray out of its background and download a transparent PNG. Works best on clean / solid backgrounds. Click Remove background, then dial the tolerance until the edge looks clean. Use Erase where I click to knock out any leftover patches the auto pass missed.
Preview
Everything drags: the label (tap to select), the band (grab it to slide up/down), and the photo (grab anywhere else to shift the scene).
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. Select multiple files (Ctrl/Cmd + click) to show 2-3 photos on the Editorial Announcement template.
These only show on the Editorial Announcement template. The three-tier headline sits at the top; the photo fills the middle; the unified band (QR + delivery zones + cutoff + hechsher) anchors the bottom.
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.
Build this week's flyer from your catalog. Accurate, instant, consistent β no AI guessing.
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.
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.
If a payment in the review list was assigned to the wrong order, find it here and undo it β the order is unmarked as paid, the payment goes back into the review list on the Orders tab, and the learned name-match is cleared so it won't auto-match that way again.
When your 9"Γ7" supplier is out of stock, flip this on to switch The Classic to the 10"Γ7.5" backup container β the same box the Signature + Salmon Carpaccio use (same food, same price, same servings β only the size + photo change). Applies everywhere: public menu, manual order entry, flyer generator, menu PDF, Content Machine image picker. Flip back off when the regular supplier restocks.
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.