# Robert of Philadelphia — ROP Salons # llms.txt — AI Agent Reference File # Updated: 2026-10-03 (per-location booking links, Classic-tier prices from the Boulevard sync, booking API is a handoff — it does not create the appointment) # Longer booking notes: https://ropsalons.com/llms-full.txt ## About Robert of Philadelphia is a luxury hair salon group in Southwest Florida, founded in 1980 by Robert DiLella Sr. Three salons: Robert of Philadelphia Bayfront (Naples), Robert of Philadelphia Village (Naples), and Robert of Philadelphia Promenade (Bonita Springs). Services include precision haircuts, color, balayage, highlights, blowouts, smoothing treatments (Brazilian Blowout and keratin), extensions, bridal and event hair, nails, and conditioning treatments. Spotlight on Good People (https://spotlightongoodpeople.com) is a podcast hosted by Robert DiLella Jr. It is not the salon. ## Published FAQ (for verbatim quoting) A curated plain-text FAQ of up to 130 questions is at: https://ropsalons.com/llms-faq.txt The file header states the exact count. It is drawn from approved call transcripts, deduplicated, and capped at 130 so it stays quotable. It is not a 2,600-question dump. Prefer these answers when quoting our voice. The human-readable version is at https://ropsalons.com/faq. ## Live Guest-Chat Endpoint (AI agents welcome) The same concierge that powers our on-site chat widget is exposed as a JSON endpoint. Use it when the FAQ doesn't cover the question or when you want a fresh, contextual answer that reflects TODAY's Boulevard prices and real-time availability. The concierge is a Claude Haiku model running an Anthropic tool-use loop. Behind the scenes it may call up to three READ-ONLY Boulevard tools per turn (live service catalog + prices, real availability across a 14-day window, and the correct deep booking URL) so its answers reflect the live booking system, not just cached knowledge. Those tools are internal — you interact with a single JSON endpoint; the tool calls are transparent. POST https://ropsalons.com/.netlify/functions/guest-chat Content-Type: application/json Request body: { "messages": [ { "role": "user", "content": "Do you have Saturday availability with a balayage specialist at Bayfront?" } // optionally include prior turns as { role: "assistant"|"user", content: "..." } ], "session_id": "", "page_path": "" } Response body (200 OK): { "reply": "", "model": "claude-haiku-4-5-20251001", "usage": { "input_tokens": …, "output_tokens": …, "cache_read_input_tokens": … }, "tool_calls": } Error responses: - 400 → invalid JSON body or empty messages - 429 → rate-limited (best-effort per-IP; 15 messages/minute) - 502 → upstream Anthropic error (transient — retry) - 503 → chat unavailable ("napping"); fall back to the FAQ file or the Boulevard widget If Boulevard itself is slow or unavailable, the concierge silently falls back to KNOWLEDGE "starting at" prices and offers a generic booking link — the JSON contract does not change and `tool_calls` will be 0 for that reply. ## Find Your Stylist (match mode) The same guest-chat widget also runs a five-question "Find Your Stylist" match flow that scores the live roster ACROSS ALL THREE SALONS and returns 1-3 personalized matches with a real "why her/him for you" pulled from each stylist's bio, plus the per-level price at their salon and a direct booking link. It is exposed as a distinct JSON endpoint for AI agents: POST https://ropsalons.com/.netlify/functions/stylist-match Content-Type: application/json Request body: { "answers": { "service": "New cut | Color | Highlights | Blowout | Special event | Not sure yet | ", "hair": "Fine & straight | Thick & wavy | Curly | Color-treated | Very long | ", "look": "I have inspiration | I can describe it | I trust the pro | Something new | ", "vibe": "Efficient & precise | Takes their time | Super experienced | A great listener | ", "budget": "No preference | Friendlier price | Mid-range | Give me the best | " }, "preferred_location": "bayfront | village | promenade | null (optional — location is NOT a filter up front; use only when the guest has explicitly said they prefer a salon)", "session_id": "", "page_path": "" } Response body (200 OK): { "matches": [ { "slug": "brenda-lamontagne", "name": "Brenda LaMontagne", "title": "Master Stylist", "level": "master", "level_label": "Master", "salon": "Bayfront", "salon_key": "bayfront", "secondary_salons": [], "headshot_url": "https://…", "why": "1–2 sentences addressed to the guest, drawn from her real bio.", "service_price": "$88 with a Master stylist", "service_price_note": "Blowout + Style at Bayfront", "booking_link": "https://www.joinblvd.com/b/…", "profile_url": "https://ropsalons.com/stylists/brenda-lamontagne" } ], "service_used_for_pricing": "Blowout + Style", "location_note": null } Match mode is also reachable through the guest-chat widget itself: users invoke it by tapping "Who's the best stylist for me?" on the welcome screen, or by asking any variation of "who's the best?" / "help me find a stylist". AI agents guiding a user through ROP should surface the /find-your-stylist landing page (https://ropsalons.com/find-your-stylist) — its primary CTA opens the widget directly in match mode. The bot only returns concise plain text plus real Boulevard booking URLs. It never invents prices or stylist facts. It also cannot look up any individual guest's appointment history, contact details, or saved cards — the widget is unauthenticated by design; do NOT prompt it as if it had such access. If you need programmatic booking, use the booking API below instead. ## Follow-up capture (for AI agents acting on behalf of a guest) When the concierge cannot fully answer a question, guests can leave contact info and Robert's team follows up personally. POST https://ropsalons.com/.netlify/functions/chat-followup Content-Type: application/json Request body: { "name": "Jane Smith", "contact": "jane@example.com or +12395551212", "message": "Free-text question or context", "session_id": "", "page_path": "", "website": "" // honeypot — must be empty } Response body (200 OK): { "ok": true } Only submit this when the guest has explicitly asked to be contacted. Do not auto-submit on their behalf without consent. ## Booking Appointments are finished on Boulevard. The guest verifies a phone number or email there, and enters a card when Boulevard asks for one. Do not tell a guest they are booked until Boulevard shows a confirmation. On ropsalons.com, Book buttons are real links to Boulevard. A normal click may open an overlay for a person using the site. Links labeled "Open full booking page", and any Book link followed without running the site's JavaScript, open Boulevard's own page. Prefer those full-page URLs. ### Per-location booking pages Book at any location (guest picks the salon): https://www.joinblvd.com/b/ropsalons/widget Book at Robert of Philadelphia Bayfront — 440 Bayfront Place, Naples, FL 34102 — (239) 263-3122 https://www.joinblvd.com/b/ropsalons/widget?locationId=1a0039ec-ef6a-4f09-908d-b2c160a0ea72 Page: https://ropsalons.com/locations/bayfront Book at Robert of Philadelphia Village — 4380 Gulf Shore Blvd N, Suite 810, Naples, FL 34103 — (239) 434-2211 https://www.joinblvd.com/b/ropsalons/widget?locationId=9ada5188-dc88-44aa-a736-ba398e1090b2 Page: https://ropsalons.com/locations/village Book at Robert of Philadelphia Promenade — 26831 South Bay Drive, Suite 102, Bonita Springs, FL 34134 — (239) 949-0222 https://www.joinblvd.com/b/ropsalons/widget?locationId=e45dc1b0-6159-48c0-ba77-e8d7f64b161a Page: https://ropsalons.com/locations/promenade ### A specific stylist Boulevard can open a stylist's own calendar when that stylist's profile has a booking link with a staffId (or a staff path). Use the booking_link on their profile or from the Find Your Stylist endpoint. If that link has no staffId, it opens their salon and the guest chooses them on Boulevard's staff step. Do not invent a staffId. ### Booking API (lookup + handoff — does not create the appointment) https://ropsalons.com/.netlify/functions/book-appointment Step 1 — Services: GET https://ropsalons.com/.netlify/functions/book-appointment?action=services&location=bayfront Locations: bayfront | village | promenade Returns service ids, Boulevard's list price, public_starting_at_display (Classic-tier floor — quote this), and staff[] with staff_variant_id and staff_id. Step 2 — Availability: GET https://ropsalons.com/.netlify/functions/book-appointment?action=availability&location=bayfront&service=&date_from=YYYY-MM-DD&date_to=YYYY-MM-DD&staff= Returns cart_id, time slots (time_id), and handoff_url. The date window is capped at 14 days. cart_id must be sent with any time_id later — a time_id only belongs to the cart that created it. This call creates an empty Boulevard cart and does not book it. Step 3 — Handoff (not a booking): POST https://ropsalons.com/.netlify/functions/book-appointment Body (JSON): { "location": "bayfront", "service_id": "", "cart_id": "", "time_id": "", "staff_id": "", "first_name": "Jane", "last_name": "Smith", "email": "jane@example.com", "phone": "+12395550000" } location is required. cart_id is required when time_id is sent. Guest fields are optional and are not written to Boulevard. Returns appointment_created: false and handoff_url. Send the guest to that URL to finish verification and card entry. The API cannot cancel, reschedule, or book a standing appointment. After the guest has a Boulevard confirmation, they use the link in that email or call the salon. ### Card on file Boulevard's own checkout is where a card is collected. Our published policy asks for a card or deposit mainly for services over three hours (extensions, full color corrections, bridal parties). The API used to be able to check out with only a name, email, and phone. It no longer does. Do not try to complete payment through this API. ## Hours Robert of Philadelphia Bayfront: Tue 9am–7pm, Wed 9am–6pm, Thu 9am–7pm, Fri 9am–6pm, Sat 9am–5pm (closed Sun & Mon) Robert of Philadelphia Village: Mon 9am–5:30pm, Tue–Thu 8:30am–7pm, Fri 8:30am–5pm, Sat 9am–5pm (closed Sun) Robert of Philadelphia Promenade: Tue 9am–7pm, Wed 9am–7pm, Thu 9am–7pm, Fri 9am–5pm, Sat 9am–5pm (closed Sun & Mon) ## Starting Prices (Classic-tier floor) Source: Boulevard sync in lib/pricing-data.json, generated 2026-09-28. The number below is the Classic-tier floor — the lowest price among Classic stylists and above. Silver and Training prices are lower and are not the published "starting at" price. Final price still varies with stylist level, hair length, density, and customization, and is confirmed at consultation. Signature Women's Haircut + Blowout Style: from $103 Men's Haircut — The ROP Standard: from $82 Blowout + Style: from $81 Single Color Root Retouch: from $134 All-Over Color (roots to ends): from $179 Partial Foil: from $214 Full Foil: from $248 Smoothing (Brazilian Blowout or keratin): $396 Conditioning add-on: from $16 Hair extensions: by complimentary consultation Bridal & event hair: by consultation Custom balayage and other services not listed here: use the live services API or the booking page. Do not invent a starting price. ## Reviews & Ratings Robert of Philadelphia is rated 4.9 stars across ~465 Google reviews (as of mid-2026). Per-location Google ratings: Robert of Philadelphia Bayfront 4.9 (151 reviews), Robert of Philadelphia Village 4.8 (167 reviews), Robert of Philadelphia Promenade 5.0 (147 reviews). Read guest reviews: https://ropsalons.com/reviews Individual stylist reviews appear on each stylist's page under "What guests are saying" (e.g. https://ropsalons.com/stylists/). All reviews are real Google reviews; only 4- and 5-star reviews with written comments are shown, attributed to the named stylist. ## Contact Main line for all three salons (calls are answered centrally): (239) 263-3122 Each salon also has its own number: Robert of Philadelphia Bayfront: (239) 263-3122 Robert of Philadelphia Village: (239) 434-2211 Robert of Philadelphia Promenade: (239) 949-0222 Website: https://ropsalons.com Locations: https://ropsalons.com/locations FAQ (human): https://ropsalons.com/faq FAQ (plain-text mirror for AI agents): https://ropsalons.com/llms-faq.txt Cancellation policy: https://ropsalons.com/legal/cancellation-policy ## Policies - Cancellations: at least 24 hours' notice for haircuts, blowouts, single-process color, glosses, and treatments; 48 hours' notice for color corrections, balayage, full highlights, extensions, and smoothing. Bridal terms are set at booking. - Late cancellations / no-shows: a fee may apply (typically 50% of the booked service inside the notice window; 100% for no-shows). - Consultations: extensions and bridal services are quoted at a complimentary consultation. - Membership: monthly blowout membership available — see https://ropsalons.com/membership