strtoupper($m[1]), $s); return (string)$s; } $s = mb_strtolower($s, 'UTF-8'); $s = preg_replace_callback('/\b([a-z])/u', static fn($m) => mb_strtoupper($m[1], 'UTF-8'), $s); return (string)$s; } function slug_from_path(): string { // Expect /n/{slug} or /n/{slug}/ $path = (string)(parse_url($_SERVER['REQUEST_URI'] ?? '', PHP_URL_PATH) ?: ''); $path = rtrim($path, '/'); $parts = array_values(array_filter(explode('/', $path), static fn($p) => $p !== '')); // /n/{slug} if (count($parts) >= 2 && $parts[0] === 'n') return trim((string)$parts[1]); // Fallback: last segment (your old logic) $slug = end($parts) ?: ''; if ($slug === 'n') return ''; return trim((string)$slug); } function booking_href(string $slug): string { // You said book.html lives in public_html and uses ?notary=slug return '/book.html?notary=' . rawurlencode($slug); } function service_copy_map(): array { // Keys should match the service names you store from signup. return [ 'Acknowledgments' => [ 'subtitle' => 'Real estate, affidavits, and general documents.', 'body' => 'We confirm identity and ensure signatures are voluntary and properly executed.', ], 'Jurats' => [ 'subtitle' => 'Oaths/affirmations with signature verification.', 'body' => 'We administer the oath/affirmation and witness the signing per requirements.', ], 'Oaths & Affirmations' => [ 'subtitle' => 'Sworn statements and declarations.', 'body' => 'We administer an oath or affirmation as required and document the signing correctly.', ], 'Power of Attorney' => [ 'subtitle' => 'Professional handling and verification.', 'body' => 'We help keep the signing structured, compliant, and respectful.', ], 'Loan / Mortgage Signings' => [ 'subtitle' => 'Signing agent support (if applicable).', 'body' => 'Clear signing flow, careful attention to packaging, and on-time completion.', ], 'Mobile / Traveling Notary' => [ 'subtitle' => 'We travel to you (travel fees may apply).', 'body' => 'Convenient for homes, hospitals, offices, and time-sensitive appointments.', ], 'Remote Online Notarization (RON)' => [ 'subtitle' => 'Available where allowed; identity verification required.', 'body' => 'Fast for eligible documents when in-person is not practical.', ], 'Real Estate Documents / Closings' => [ 'subtitle' => 'Buyer/seller packages and related documents.', 'body' => 'We keep the signing organized and completed accurately and on time.', ], 'Signature Witnessing' => [ 'subtitle' => 'Witnessing signatures where permitted.', 'body' => 'We verify identity and witness signing according to jurisdiction requirements.', ], 'Apostille / Authentication' => [ 'subtitle' => 'Guidance for apostille-ready notarization.', 'body' => 'We notarize correctly for apostille processing; legal advice is not provided.', ], ]; } $slug = slug_from_path(); if ($slug === '') { http_response_code(404); echo "Not found"; exit; } try { $pdo = db(); $stmt = $pdo->prepare("SELECT id, email, display_name, slug, profile_json FROM notaries WHERE slug = ? LIMIT 1"); $stmt->execute([$slug]); $row = $stmt->fetch(PDO::FETCH_ASSOC); if (!$row) { http_response_code(404); echo "This Page Does Not Exist"; exit; } $profile = []; if (!empty($row['profile_json'])) { $decoded = json_decode((string)$row['profile_json'], true); if (is_array($decoded)) $profile = $decoded; } // Fields with safe fallbacks $displayName = trim((string)($profile['display_name'] ?? $row['display_name'] ?? '')); $displayName = $displayName !== '' ? title_case($displayName) : 'Notary'; $tagline = trim((string)($profile['tagline'] ?? 'Professional and reliable notary services you can trust.')); $contact = is_array($profile['contact'] ?? null) ? $profile['contact'] : []; $phone = trim((string)($contact['phone'] ?? '')); $email = trim((string)($contact['email'] ?? $row['email'] ?? '')); $location = is_array($profile['location'] ?? null) ? $profile['location'] : []; $zip = trim((string)($location['zip'] ?? '')); $serviceArea = is_array($profile['service_area'] ?? null) ? $profile['service_area'] : []; $model = (string)($serviceArea['model'] ?? 'radius_only'); $maxMiles = trim((string)($serviceArea['max_miles'] ?? '')); $freeMiles = trim((string)($serviceArea['free_miles'] ?? '')); $perMile = trim((string)($serviceArea['per_mile_rate'] ?? '')); $about = is_array($profile['about'] ?? null) ? $profile['about'] : []; $aboutBio = trim((string)($about['bio'] ?? '')); if ($aboutBio === '') { $aboutBio = 'Professional and client-focused notary services. Clear guidance, privacy-first execution, and a smooth signing experience.'; } $assets = is_array($profile['assets'] ?? null) ? $profile['assets'] : []; $heroImage = trim((string)($assets['hero_image_url'] ?? '/static/img/hero-handshake.png')); $defaultAbout = trim((string)($assets['default_about_photo_url'] ?? '/static/img/about-desk.png')); $aboutPhotoUrl = trim((string)($about['about_photo_url'] ?? '')); $aboutBg = $aboutPhotoUrl !== '' ? $aboutPhotoUrl : $defaultAbout; // Services $services = $profile['services'] ?? []; if (!is_array($services)) $services = []; $serviceNames = []; foreach ($services as $s) { if (is_string($s)) { $name = trim($s); } elseif (is_array($s)) { $name = trim((string)($s['name'] ?? '')); } else { $name = ''; } if ($name !== '') $serviceNames[] = $name; } if (count($serviceNames) === 0) { $serviceNames = [ 'Acknowledgments', 'Jurats', 'Power of Attorney', 'Loan / Mortgage Signings', 'Mobile / Traveling Notary', 'Real Estate Documents / Closings' ]; } $copyMap = service_copy_map(); // Build service cards $serviceCardsHtml = ''; foreach ($serviceNames as $name) { $c = $copyMap[$name] ?? [ 'subtitle' => 'Professional notary service.', 'body' => 'Handled with clear guidance, accurate execution, and privacy-first professionalism.', ]; $serviceCardsHtml .= '
'.h($c['subtitle']).'
'.h($c['body']).'
Common notarizations handled professionally, with clear guidance and privacy-first execution.
Convenient appointment options.
We work to keep scheduling simple and the signing process clear from start to finish.
Privacy-first handling of documents.
Your information is handled with care and discretion throughout the process.
Reviews will be added during signup in a later step. Placeholders shown for now.
On time, organized, and explained the process clearly. We were in and out quickly with zero confusion.
Very professional and detail-oriented. The signing was smooth and everything was completed correctly.
Responsive and reliable. Scheduling was easy and the whole experience was stress free.
Contact the notary directly using the information below.