diff --git a/src/PowderCoating.Web/Controllers/HelpController.cs b/src/PowderCoating.Web/Controllers/HelpController.cs index 216388a..34c0621 100644 --- a/src/PowderCoating.Web/Controllers/HelpController.cs +++ b/src/PowderCoating.Web/Controllers/HelpController.cs @@ -125,5 +125,13 @@ namespace PowderCoating.Web.Controllers { return View(); } + + /// + /// Serves the Customer Intake Kiosk help article explaining the tablet kiosk setup, the staff-triggered intake flow, and the Intakes review page. + /// + public IActionResult CustomerIntakeKiosk() + { + return View(); + } } } diff --git a/src/PowderCoating.Web/Helpers/HelpKnowledgeBase.cs b/src/PowderCoating.Web/Helpers/HelpKnowledgeBase.cs index 2937120..c0c8281 100644 --- a/src/PowderCoating.Web/Helpers/HelpKnowledgeBase.cs +++ b/src/PowderCoating.Web/Helpers/HelpKnowledgeBase.cs @@ -109,6 +109,7 @@ public static class HelpKnowledgeBase - Job Priority Board → /JobsPriority - Online Payments → /Invoices/OnlinePayments - Gift Certificates → /GiftCertificates + - Intake Sessions → /Kiosk/Intakes (walk-in and remote intake sessions submitted via the kiosk tablet) **Inventory section:** - Catalog Items → /CatalogItems @@ -1265,6 +1266,55 @@ public static class HelpKnowledgeBase --- + ## CUSTOMER INTAKE KIOSK + + **Where:** Kiosk Setup → [/Kiosk/Activate](/Kiosk/Activate) | Intake Sessions → [/Kiosk/Intakes](/Kiosk/Intakes) + + **What it does:** Lets walk-in customers fill out their own intake form on a front-desk tablet. On submission, a Pending Job and Customer record are auto-created and staff receive an in-app notification. Also supports remote intake via email link so customers fill out the form on their own phone before arriving. + + **Setup (one-time per device):** + 1. Go to Settings → Kiosk Setup (or /Kiosk/Activate) + 2. Click Activate Kiosk — generates a secure activation token and sets a device cookie (365-day lifespan) + 3. On the tablet browser, navigate to /Kiosk/Welcome — the tablet is now in kiosk mode + 4. Add to Home Screen on iOS/Android for a full-screen PWA experience that preserves camera permissions + + **Starting an in-person intake:** + 1. Customer approaches the tablet — it shows the Welcome screen with company logo and a green "Ready" dot + 2. Staff member clicks "Start Intake" on the Dashboard (Kiosk card) + 3. Tablet picks up the new session within 3 seconds and auto-navigates to the intake form + 4. Customer completes 3 steps: Contact info → Job description → Terms & drawn signature + 5. On submit: thank-you screen shown, kiosk returns to Welcome after 30 seconds + 6. If idle for 45 seconds during any intake step, the form resets to the Welcome screen automatically + + **Sending a remote intake link:** + - Click "Send Intake Link" on the Dashboard Kiosk card OR from /Kiosk/Intakes → Send Intake Link + - Enter the customer's email → they receive a link to complete the form on their own device + - Remote sessions use a checkbox agreement instead of a drawn signature + + **What happens on submission:** + - Customer is matched by email (first), then phone; if no match, a new non-commercial customer is created + - A Pending job (Normal priority) is created with the customer's description as the Job Description + - SMS opt-in updates the customer record with NotifyBySms = true and a TCPA-compliant consent timestamp + - In-app notification fires: "Walk-in Intake Submitted" with link to /Kiosk/Intakes + + **Reviewing submissions (Intake Sessions page):** + - Filter tabs: All / Submitted / Pending / Expired + - Each row shows customer name, phone, email, job description snippet, session type badge, SMS opt-in icon + - "View Job" button → opens the auto-created Pending job so staff can quote, assign, and move it through the workflow + - "Customer" button → opens the matched/created customer record + - If job creation failed (e.g. seed data not run), the session is still marked Submitted but the buttons won't appear — the raw intake data is still visible so staff can create manually + + **Dashboard Kiosk card:** Shows whether the kiosk is activated. Contains "Start Intake" (triggers in-person session) and "Send Intake Link" (opens email dialog) buttons. Both are disabled if the kiosk is not activated. + + **Troubleshooting:** + - "Connection issue — retrying…" on tablet: Wi-Fi problem; dot auto-recovers when connectivity returns + - Tablet doesn't respond to Start Intake: waits up to 3 s; reload Welcome page if still stuck + - No View Job button after submission: Seed Data not run — Platform Admin must run it from Platform Management → Seed Data + - Signature pad not working: requires capacitive touch (finger or stylus); ensure "Request Desktop Site" is off in browser settings + - AI quote times out on mobile: photos are auto-compressed; "Still analyzing…" message appears after 30 s; retry on stronger connection + + --- + ## COMMON WORKFLOWS **New company first-time setup:** @@ -1279,6 +1329,12 @@ public static class HelpKnowledgeBase **Prospect to customer:** Create Quote for prospect → Quote Approved → Convert Prospect to Customer → Convert Quote to Job + **Walk-in customer intake (kiosk):** + Staff clicks "Start Intake" on Dashboard → tablet Welcome screen navigates to intake form within 3 s → customer fills out 3 steps (contact, job description, terms + signature) → system creates Customer + Pending Job automatically → staff notification fires → staff reviews at /Kiosk/Intakes → clicks "View Job" to open the job and continue the workflow + + **Remote intake (customer fills out before arriving):** + Staff clicks "Send Intake Link" on Dashboard or Intakes page → enters customer email → customer receives link and completes form on their own device → same auto-create flow as in-person + **Walk-in / phone quote (quick estimate):** Click the AI Quick Quote button (dark-blue floating button, bottom-right) → type description → AI returns price estimate → Save as draft under "Walk-In / Phone" → open the quote → reassign the Customer dropdown on Quote Details to the real customer record once you have their info diff --git a/src/PowderCoating.Web/Views/Help/CustomerIntakeKiosk.cshtml b/src/PowderCoating.Web/Views/Help/CustomerIntakeKiosk.cshtml new file mode 100644 index 0000000..9ad361d --- /dev/null +++ b/src/PowderCoating.Web/Views/Help/CustomerIntakeKiosk.cshtml @@ -0,0 +1,176 @@ +@{ + ViewData["Title"] = "Customer Intake Kiosk"; +} + +
+ + +
+ +
+
+ +
+

+ Overview +

+

+ The Customer Intake Kiosk lets walk-in customers fill out their own intake form on a front-desk tablet + — no staff assistance required. When they're done, a Pending job and a + customer record are automatically created, and your team receives an in-app + notification so they know someone is waiting. +

+

+ The kiosk runs as a browser page (optimised for iPad and Android tablets) and can also send a + remote link so customers fill out the form on their own phone before they arrive. +

+
+ +
+

+ Setting Up the Kiosk +

+
    +
  1. + Go to Settings → Kiosk Setup (or /Kiosk/Activate). +
  2. +
  3. + Click Activate Kiosk. This generates a unique activation token for your company + and sets a secure cookie on the current device. +
  4. +
  5. + On the tablet, open a browser and navigate to /Kiosk/Welcome. You'll see your + company logo and a "Ready" indicator — the tablet is now in kiosk mode. +
  6. +
  7. + Add to Home Screen on iOS/Android for a full-screen, app-like experience that + also preserves camera permissions between sessions. +
  8. +
+
+ + The kiosk cookie is device-specific and lasts 365 days. If you swap tablets or clear the browser, + go back to Kiosk Setup and activate again. +
+
+ +
+

+ Starting an Intake Session +

+

There are two ways to start an intake:

+ +

In-Person (tablet at front desk)

+
    +
  1. The tablet sits on the Welcome screen — the customer sees your logo and a "Ready" status dot.
  2. +
  3. A staff member clicks Start Intake on the Dashboard (in the Kiosk card).
  4. +
  5. The tablet detects the new session within 3 seconds and automatically navigates to the intake form.
  6. +
  7. The customer fills out 3 steps: Contact info → Job description → Terms & signature.
  8. +
  9. On Submit, the kiosk shows a thank-you screen and returns to Welcome after 30 seconds.
  10. +
+
+ + If the customer leaves the form untouched for 45 seconds, it automatically + resets to the Welcome screen. +
+ +

Remote Link (customer fills out on their phone)

+
    +
  1. Go to Kiosk → Customer Intakes and click Send Intake Link.
  2. +
  3. Or use the Send Intake Link button on the Dashboard Kiosk card.
  4. +
  5. Enter the customer's email address and send.
  6. +
  7. The customer receives an email with a secure link and completes the same 3-step form on their own device.
  8. +
  9. Remote sessions don't require a drawn signature — a checkbox agreement is used instead.
  10. +
+
+ +
+

+ What Happens on Submission +

+

When a customer submits their intake form, the system automatically:

+
    +
  • Matches or creates a Customer — searches by email first, then phone. If no match, a new non-commercial customer record is created.
  • +
  • Creates a Pending Job — Normal priority, with the customer's description as the job description and the intake source noted in Special Instructions.
  • +
  • Applies SMS consent — if the customer opted in, their customer record is updated with NotifyBySms = true and the consent timestamp (TCPA-compliant).
  • +
  • Fires an in-app notification — your team's notification bell shows "Walk-in Intake Submitted" with a link to the Intakes page.
  • +
+
+ +
+

+ Reviewing Submissions (Staff) +

+

+ Go to Operations → Intake Sessions to see all sessions. + Filter by Submitted, Pending, or Expired. +

+

Each row shows:

+
    +
  • Customer name, phone, and email
  • +
  • Job description snippet
  • +
  • Session type (In-Person or Remote) and status badge
  • +
  • SMS opt-in indicator
  • +
  • View Job button — opens the auto-created job directly so you can add a quote, assign a worker, or update status
  • +
  • Customer button — opens the matched or created customer record
  • +
+
+ + If submission failed (e.g. a configuration issue), the session is still marked Submitted but the + View Job / Customer buttons won't appear. The raw intake data (name, phone, description) is still + visible so staff can create the job manually. +
+
+ +
+

+ Troubleshooting +

+
+
Kiosk Welcome screen shows "Connection issue — retrying…"
+
The tablet can't reach the server. Check the tablet's Wi-Fi connection. Once connectivity is restored the status dot automatically turns green — no refresh needed.
+ +
Kiosk doesn't respond when staff clicks Start Intake
+
The tablet polls every 3 seconds. Wait up to 3 seconds after clicking Start Intake. If it still doesn't respond, reload the Welcome page on the tablet. Make sure the tablet is on the same domain as the server (use HTTPS).
+ +
The tablet shows the wrong company logo or no logo
+
Upload your company logo at Settings → Company Settings → Logo. The kiosk reads your logo directly — no separate kiosk logo setting is needed.
+ +
Signature pad doesn't work on the tablet
+
Use a capacitive stylus or fingertip — the signature pad requires touch input. Make sure the browser isn't in desktop mode (check "Request Desktop Site" is off). The signature is only required for In-Person sessions.
+ +
Submission fails — no job or customer created
+
This usually means Seed Data hasn't been run for your company. Ask your administrator to go to Platform Management → Seed Data and run the seed. This creates the required job status and priority lookup rows.
+ +
AI quote on the quote wizard times out on mobile
+
Photos are automatically compressed before upload. If it still times out, your connection may be slow — the spinner will say "Still analyzing…" if it's taking longer than 30 seconds. Try again on a stronger connection.
+
+
+ +
+ +
+ @await Html.PartialAsync("_HelpNav") + + +
+
diff --git a/src/PowderCoating.Web/Views/Help/_HelpNav.cshtml b/src/PowderCoating.Web/Views/Help/_HelpNav.cshtml index 89f903b..620623e 100644 --- a/src/PowderCoating.Web/Views/Help/_HelpNav.cshtml +++ b/src/PowderCoating.Web/Views/Help/_HelpNav.cshtml @@ -25,6 +25,10 @@ asp-controller="Help" asp-action="Jobs"> Jobs + + Customer Intake Kiosk + Quotes