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($name).'

'.h($c['subtitle']).'

'.h($c['body']).'

'; } // Service area line $serviceAreaLine = ''; if ($model === 'distance_fee') { $serviceAreaLine = 'Includes up to '.h($freeMiles !== '' ? $freeMiles : '0').' free miles, then $'.h($perMile !== '' ? $perMile : '0.00').'/mile'; } else { $serviceAreaLine = 'Up to '.h($maxMiles !== '' ? $maxMiles : '0').' miles'; } if ($zip !== '') $serviceAreaLine .= ' from '.h($zip).''; } catch (Throwable $e) { http_response_code(500); echo "Server error"; exit; } $bookUrl = booking_href($slug); ?> <?php echo h($displayName); ?> | Easy Notary Finder
Professional Notary Services
Notary Landing Page Call: Contact available below
Professional Notary

Secure & Confidential Clear Signing Process Reliable & On Time
Offered Services
Notary Services

Common notarizations handled professionally, with clear guidance and privacy-first execution.

Every Signing Handled Professionally
Reliable. Respectful. Detail Oriented.

Commissioned Notary Public
Professional Notary Services
🕑

Flexible Scheduling

Convenient appointment options.

We work to keep scheduling simple and the signing process clear from start to finish.

🔒

Confidential & Secure

Privacy-first handling of documents.

Your information is handled with care and discretion throughout the process.

Client Reviews
Top Reviews

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.

— Verified Customer
Mobile appointment

Very professional and detail-oriented. The signing was smooth and everything was completed correctly.

— Verified Customer
Business notarization

Responsive and reliable. Scheduling was easy and the whole experience was stress free.

— Verified Customer
In office appointment
Contact
Notary Contact Information

Contact the notary directly using the information below.

Phone
Email
Service Area
Travel rules and mileage fees are set during signup.
Booking
Book Appointment Availability and confirmation handled through the booking flow.