Pebble Nutrition

Dashboard Help

How to use the Pebble Nutrition client dashboard

Back to Dashboard

Contents

  1. The Dashboard
  2. Views
  3. Filtering & Searching
  4. Client Detail
  5. Notes
  6. Email
  7. Files
  8. Products & Services
  9. Actions & Bulk Operations
  10. Reports
  11. Keyboard Shortcuts
  12. Automation & Pollers
  13. Admin & Configuration
  14. Change History

The Dashboard

The dashboard is the main screen showing all your clients. From here you can search, filter, open client records, and perform bulk actions.

Top bar

Adding a client

Click Add Client in the top bar. A blank client form opens. Fill in the details and click Save Client. The record is created in monday.com and immediately appears in the dashboard.

Fields auto-save as you type — you don't need to click Save after each change when editing an existing client. A "Saved" toast confirms each save.

Views

Use the view toggle buttons (top right of the dashboard) to switch how clients are displayed. You can also press / when no client panel is open to cycle through views.

Today view

The default view on load. Shows cards for any client with a consultation scheduled in the next 30 days, plus clients with recent emails, files, or notes. Cards are grouped by their monday.com board group.

Each card shows the client name, practitioner, planned consult month, status tags, and recent emails / files / notes for that client. You can edit the practitioner, month, and status tags directly on the card — click the pill or the tag area to open a popup editor without leaving the today view.

Each card can be collapsed to show only the name, practitioner, and month row — click the chevron next to the group label, or hover over a card and press Space. Use the Collapse All / Expand All buttons above the card grid to collapse or expand every card at once. Collapsed state is remembered per client across page reloads. Hover over any card and press Enter to open the client detail panel.

Active view

A sortable, paginated table showing all active clients (hidden groups such as Gone Quiet and Waiting List are excluded). Each row shows name, status tags, practitioner, services, consult month, and contact. Rows have two quick-action buttons:

Click any status tags, practitioner, or month pill directly in the row to change that value inline — a popup editor appears without needing to open the client record. Status tags open the same two-column Available / Selected picker as the client detail view.

Tick the checkbox on any row to select it for bulk actions (see Actions & Bulk Operations). Column headers are clickable to sort.

Inactive view

Shows clients from groups that are hidden in the Active view (Gone Quiet, Waiting List, Waiting for Genetic Tests, Historical Clients). Same table layout and inline editing as Active view. Useful for reviewing dormant or historical clients.

Calendar view

Shows clients by their scheduled consultation date in a monthly grid. Navigate months with the arrow buttons. Click any event to open the client record.

List view

The same consultation date data as the calendar, shown as a chronological list. Useful for seeing upcoming consultations in order.

Planned Consult bar

Below the filter controls, colour-coded month pills show how many clients are scheduled per month. Click a pill to filter to that month. The bar chart within each pill is proportional to the busiest month.

Filtering & Searching

Search

Type in the search box to filter by client name, contact name, email, or phone. Results update as you type. Press / to focus the search box from anywhere on the dashboard.

Filter dropdowns

The filter panel (press f to show/hide) contains dropdowns for:

Click the × button at the left of the filter bar to clear all active filters at once.

Practitioner bar (admin only)

Admin users see a row of practitioner buttons below the main filters. Click a practitioner name to show only their clients. Non-admin users automatically see only their own clients.

Non-admin users are automatically filtered to their own clients and cannot see other practitioners' records.

Client Detail

Click any client row (or card, or calendar event) to open the client detail panel. It slides in from the right and shows the full client record alongside the dashboard.

Navigating between clients

When you have a filtered list, use the ← / → arrow buttons at the top of the detail panel (or the keyboard arrow keys) to move to the previous or next client without returning to the dashboard.

Left column — client details & invite status

Middle column — contact details & notes

Opening in monday.com

Click the Open in monday.com link (top right of the detail panel) to view the raw record in monday.com in a new tab.

Auto-save

Changes save automatically 800 ms after you stop typing or change a field. A small "Saving…" then "Saved" toast confirms each save. You can also force an immediate save with Ctrl+Enter (or Cmd+Enter on Mac).

Notes

The Notes section is in the middle column of the client detail form.

Adding a note

Click Add Note, or click anywhere inside the notes area. A modal opens with a pre-filled timestamp and your name. Type your note and click Add Note (or press Ctrl+Enter). The new note is prepended to the top of the notes field.

Editing notes

Click the Edit button (or click directly in the notes display area) to switch to a plain text editor where you can freely edit the entire notes field. Click Done or click away to save.

Quick notes from the table

Click the icon on any table row to add a timestamped note without opening the full client record.

Automated notes

Certain actions automatically prepend a timestamped entry to the notes field — for example, when an invite, test order, or results email is sent, when a file is uploaded or deleted, or when a questionnaire is automatically received and uploaded.

Email

The Email tab (default tab in the right column of the client detail panel) shows the full email history for the client's email address and lets you send new emails.

Email history

Emails are listed with date, direction (sent/received), which mailbox they came from, subject, and a preview. Click any email to read the full message. Use the arrow keys to navigate the list once you have clicked into the email panel.

Email history is searched across all configured mailboxes. Each email shows which mailbox it came from so you can see the full picture across the team.

Shared email addresses

If two clients share the same email address (e.g. siblings booked under a parent's email), emails to that address show a shared indicator on each message. Click This email is about… in the email viewer to assign the message to the correct client. Once assigned, future emails on the same thread (same subject, ignoring Re:/Fwd: prefixes) are automatically associated with the same client.

Composing a new email

Click New Email. The compose panel opens with:

Replying to an email

When viewing an email, click Reply. The compose panel opens with the subject pre-filled and the original message quoted at the bottom.

Saving a template

After composing an email, click Save as Template to save the current subject and body as a reusable template in the Templates board.

Quick email from the table

Click the icon on any table row to open the compose window for that client without opening the full record.

Files

The Files tab shows all files attached to the client in monday.com and lets you upload new ones.

Uploading a file

Click Upload. Choose a file from your computer (maximum 25 MB). The file is uploaded to the client's monday.com record and a note is automatically added recording the upload.

Opening a file

Click any file name or the open icon. The file is fetched from monday.com and opened in a new browser tab.

Deleting a file

Click the delete icon on a file and confirm. The file is removed from monday.com and a note is automatically added recording the deletion.

File deletion is permanent and cannot be undone.

Products & Services

Products tab (WooCommerce)

Shows a summary of all WooCommerce orders matched to the client's email address(es). The summary table shows each product, total quantity ordered, total spend, and date of most recent order. Below the summary is a chronological timeline of individual orders — click any order card to open it in WooCommerce. If the client has multiple email addresses, all are checked.

Services tab (QuickBooks)

Shows a summary of QuickBooks Online invoices matched to the client's email address. The summary table shows each service, total quantity, total spend, and most recent invoice date. Below the summary is a chronological timeline of individual invoices with their status (Paid, Overdue, Open).

If QuickBooks is not connected, a connect button is shown.

Actions & Bulk Operations

Single-client actions

At the bottom of the client detail panel, the following actions are available for existing clients:

Email-sending actions (Send Invite, Test Order, Chase, etc.) require the appropriate email templates to be set up in the Templates board in monday.com.

Bulk actions

Tick the checkboxes on table rows to select multiple clients. A bulk action bar appears pinned below the filter bar, showing how many clients are selected and the available action buttons. Use Select All to select every client in the current filtered view, or Select None to clear the selection.

Bulk email actions send each client their own individually personalised email immediately — there is no preview step. A toast notification reports how many succeeded and how many failed at the end. Which actions appear in the bulk bar is controlled per-action in the Actions board in monday.com (the "Bulk allowed" checkbox column).

Clients with no email address are silently skipped for email actions and counted as failures in the results toast.

Inline quick-edit

In the Active and Inactive table views, click any status tags area, practitioner badge, or month pill to change that value immediately — no need to open the client record. Status tags open the two-column Available / Selected dual-list popup; practitioner and month show a simple dropdown. The row updates in place when you save or select.

The same inline editing is available on Today view cards — click the practitioner badge, month pill, or status tags area on any card.

Reports

Click Reports in the top bar to open the reports overlay. Reports are based on the clients currently visible in your dashboard (respecting any active filters).

By Practitioner

A stacked bar chart and summary table showing how many clients each practitioner has per planned consult month. Useful for spotting capacity imbalances.

By Service

The same chart and table broken down by service type (HTMA, GI Map, OAT, etc.) per month.

Hover over chart bars to see exact counts. The table below the chart shows the full breakdown with totals per practitioner/service and a grand total row.

Keyboard Shortcuts

Today view

Key Action
Space Collapse / expand the card the mouse is hovering over
Enter Open the client detail panel for the card the mouse is hovering over

Active / Inactive / List views (no client panel open)

Key Action
/ Focus the search box
f Show / hide the filter control panel
/ Navigate to the previous / next client in the filtered list
/ Cycle through dashboard views (Today → Active → Inactive → Calendar → List)
Enter Open the hovered or first visible client

Client detail panel open

Key Action
/ Navigate to the previous / next client in the list. After clicking into the email panel, navigates the email list instead.
/ Cycle through the right-column tabs (Email, Files, Products, Services, History)
Space or Enter Close the client panel and return to the dashboard
Ctrl+Enter Force an immediate save of the current client record
Esc Close any open modal (services picker, notes, email compose, confirm dialog)

Anywhere

Key Action
R Refresh the current client record or reload the client list
Keyboard shortcuts are disabled when the cursor is in a text input, textarea, or select field.

Automation & Pollers

The dashboard includes several background services that run automatically on the server and handle incoming emails without any manual action.

Test results poller

Monitors the results inbox for incoming test results emails from the lab. When a result email arrives, it is automatically matched to the client's monday.com record, the file is uploaded, the client's notes are updated, and a notification is sent to the practitioner.

Questionnaire poller

Monitors all configured mailboxes (Inbox only) for unread emails with PDF attachments whose filename contains "Questionnaire". When a questionnaire is received:

  1. The client's name is read from the PDF form (the Name field at the top of page 1).
  2. The name is matched against monday.com client records.
  3. If a match is found and the file is not already uploaded, it is automatically attached to the client record in monday.com.
  4. A note is added to the client record and a notification email is sent to the practitioner (with admin CC'd).
  5. The email is marked as read to prevent reprocessing.
If no matching client is found, or if the PDF name field is blank, an alert email is sent to the admin address so the file can be handled manually.
The questionnaire poller only processes PDF attachments. Word document (.docx) questionnaires cannot be automatically parsed — clients should be instructed to use Acrobat Reader to fill and return the PDF version.

Contact form poller

Monitors the contact mailbox for new enquiry emails from the website contact form and routes notifications to the team.

list-questionnaires.js (maintenance script)

A script for bulk-scanning email history for questionnaire attachments. Useful for catching up on questionnaires that arrived before the poller was active. Run from the server terminal:

Admin & Configuration

Non-sensitive configuration is stored in backend/.env on the server. The following settings are available:

Mailbox settings

VariableDescription
MAIL_DOMAIN Your email domain (e.g. pebblenutrition.co.uk). Used to expand bare usernames to full addresses.
MAIL_SEARCH_MAILBOXES Comma-separated list of mailbox usernames (or full addresses) to search when loading email history and scanning for questionnaires. Example: contact,kathryn,charlotte,hayley.
MAIL_FROM The default "from" address for outgoing emails.

Active view

VariableDescription
HIDE_GROUPS_IN_COMPACT_VIEW Comma-separated monday.com group names to hide in the Active view (shown instead in the Inactive view). Default: Gone Quiet,Waiting List,Waiting for Genetic Tests,Historical Clients. These groups still appear in the Today, Calendar, and List views.

Poller settings

VariableDescription
ENABLE_RESULTS_POLLER Set to true to enable the test results poller.
RESULTS_POLL_INTERVAL_MINS How often (in minutes) the results poller checks for new emails. Default: 1.
ENABLE_QUESTIONNAIRE_POLLER Set to true to enable the questionnaire poller.
QUESTIONNAIRE_POLL_INTERVAL_MINS How often (in minutes) the questionnaire poller checks for new emails. Default: 5.
RESULTS_ADMIN_EMAIL Admin email address for alert notifications when a questionnaire or result cannot be matched to a client.
ENABLE_CONTACT_POLLER Set to true to enable the contact form poller.
After editing backend/.env, restart the service with sudo systemctl restart pebble-dashboard for changes to take effect.

Change History

A summary of recent updates to the dashboard, most recent first.

Monday, 6 July 2026

  • Phase 4 Batch 5: contact-poller, questionnaire/results pollers, practitioner-email
  • Fix: chunk Client id batch-fetch in recent-files/recent-notes to Monday's 100-item limit
  • Phase 4 Batch 4: Today-view endpoints, QBO, Royal Mail, Woo, Files, attachment-sync
  • Phase 4 Batch 3: dynamic actions engine + call-reminder-poller
  • Phase 4 Batch 2: Clients/Bookings write paths
  • Phase 4 Batch 1: Clients/Bookings join foundation + read-only endpoints
  • Allow /var/pebble-dashboard store paths to be overridden via env
  • History tab: label dashboard-made changes as "via Pebble Dashboard"
  • Fix Products/Services tabs: long summary tables hid the timeline below
  • Add Message of the Day popup shown once per browser after login
  • Fix consult date/time not migrating, remove 6 dead columns, real single-select Planned consult
  • Fix TDZ crash, missing status labels, and idempotency gaps found in test batch
  • Resolve conflicting Client fields per-field, preferring "Current clients"
  • Add CSV round-trip for the migration review file
  • Add Clients/Bookings matching + migration script (Phase 2/3)
  • Add Clients/Bookings board config (Phase 1 of migration)
  • Invoice modal: update in place instead of duplicating; log note on Save/Send only
  • Ship Test Kit: prefill Address Line 1 with full address minus postcode
  • Fix call reminder emails missing the HTML template header/footer

Sunday, 5 July 2026

  • Add QBO invoice creation from client detail page
  • Remove dead backend endpoints/exports, consolidate poller duplication
  • Remove dead CSS and fix undefined --pn-bg/--pn-card variables
  • Skip auto-uploading standard boilerplate docs (questionnaires, price lists)
  • Fix Left/Right arrow-key tab cycling to include History, drop dead timeline
  • Add client "History" tab backed by Monday's activity_logs API
  • Fix broken inline (cid:) images in the email viewer
  • Make ambiguous/unassigned emails more visually obvious
  • Attachment sync ambiguity fix; upload-to-client button; Today card cleanup

Saturday, 4 July 2026

  • Mobile topbar: search overlay + fixes; Today card tweaks
  • Email history: bulk delete; attachment sync: no notes, no Today files
  • Files tab: multi-select + bulk delete; Products tab: sort by last ordered
  • Actions editor: tabular layout; topbar hamburger; email attachment sync; fix email delete
  • Today cards: restructure rows + last-updated in row 1 + styled chevron
  • Today cards: colour-code last-updated timestamp by recency
  • Actions config page + Today card last-updated timestamp

Friday, 3 July 2026

  • Help: update Today view, bulk actions, keyboard shortcuts
  • Today cards: Space uses hover (mouseover) not focus for card target
  • Today cards: capture-phase keydown on document; tabindex=-1 on all inner buttons
  • Today cards: document-level capture click handler to block Space-click
  • Today cards: use pointerdown to distinguish mouse vs keyboard click
  • Today cards: suppress Space-click via capture-phase flag on grid
  • Today cards: remove onclick from card; use delegated mouse click only
  • Today cards: use event.detail===0 to suppress keyboard-synthesised clicks
  • Today cards: fix Space triggering click via flag suppression
  • Today cards: Space toggles collapse, Enter opens client; focus ring
  • Today cards: group label left-aligned; hide collapse/expand until rendered
  • Today cards: move chevron to group row; more top padding on header
  • Today view: collapse/expand individual cards and collapse/expand all
  • Bulk bar: fix top position to calc(topbar-h + filters-h)
  • Bulk bar: increase vertical padding to 10px / min-height 52px
  • Fix fetchAllActions to push full action object not just name string
  • Bulk bar: fix bulkAllowed check (Monday boolean = 'v'); fix layout
  • Bulk bar: fix z-index (51 > filters 50); fix offsetHeight timing
  • Bulk bar: pin to top below filters; track height in --bulk-bar-h
  • Actions board: bulkAllowed flag filters bulk bar
  • Dynamic actions board; bulk email sending
  • Templates editor: open to all users; hide Reports for non-admins
  • Templates editor: migrate into dashboard as full-page view
  • Today view: inline note composer on client cards
  • Today view: group chip click-to-edit with live card update
  • Client deeplinks; admin email from-name; mailbox error resilience
  • Inactive client search; Outlook calendar sync; CDP inline editing; email sort; UI polish
  • Remove dead code; call reminder timezone fix; filter bar click area

Thursday, 2 July 2026

  • Action system: field updates, email-less actions, dynamic config
  • Dynamic action buttons from Monday Templates board
  • Email composer: template tags, Salutation/Signoff templates, booking details improvements
  • Restore 24h Today window; API timing off by default
  • Today view: timing debug, Graph/Monday query reduction, 12h window

Wednesday, 1 July 2026

  • Email history cache: invalidate on Refresh button; disable API timing
  • Performance: board + email-history caching; Today card layout; API timing
  • Reply composer: support template insertion; Products tab: remove Period column
  • Redistribute status tag colours across full spectrum
  • Status tag colours; help page updates; remove deleted Monday columns
  • Fix mobile main-content padding not applying (specificity order)
  • Fix thread assignment in Today view; mobile padding; calendar overflow
  • Move order/invoice timelines into Products and Services tabs; remove History tab
  • Multi-email support via text column; today view email sort fix
  • Email thread assignment: auto-associate replies to same client
  • Mobile polish: filter bar fixed position, filter/tab/layout fixes
  • Email composer: multi-select template picker
  • Today view: chronological ordering, group chip on card, single-column layout; Test Order: compose-first workflow; contact-poller: BST timestamp fix
  • Contact poller: no auto-reply, match existing clients by email+name; email history: surface contact form emails via replyTo; refresh button: refresh current client only when detail panel is open

Tuesday, 30 June 2026

  • Remove unused Royal Mail Click & Drop API spec
  • Mobile-responsive pass: topbar, client detail, table, bulk bar, filters, Today view
  • Move client To Do panel into middle column, add popup + clear-all
  • Polish To Do feature: drop practitioner field, collapsible Today panel, quick-view shortcut
  • Add dashboard-native To Do feature for clients
  • Add Files quick-view shortcut to Today cards and table rows
  • Show attachment badge in Today view; retry Graph requests on throttling
  • Add manual email-to-client assignment for shared addresses
  • Fix Today view: include Historical group in hidden-group filter, search Archive by date
  • Add Royal Mail Click & Drop integration for shipping test kits
  • Today view: show shared-address emails on every matching client's card
  • Add Outlook email flag support: badges, toggle, and age-bypass in Today view
  • Validate client email before sending to Monday, return clear 400 instead of raw GraphQL error
  • Add Enter-to-save and Escape-to-cancel for inline popup editors

Monday, 29 June 2026

  • Sort status tags alphabetically when rendering
  • Security hardening: fix XSS, escaping, auth and injection findings
  • Today consult panel: apply group colour background to appointment rows
  • UI polish: contact name inline, group colour header, active-only filters
  • Remove Invite Status, Questionnaire, Commission fields from client detail view; add migration scripts and static tag colours
  • Add PWA manifest and PNG favicon for Chrome app install
  • Today cards: show only email/notes activity, not upcoming consults
  • Today view auto-refresh at configurable interval
  • Hide consult panel until data is ready
  • Remove Today heading from initial load skeleton in dashboard.js
  • Today view renders immediately; remove list view code; fix stale header
  • Remove Today heading and List view
  • Support comma-separated multiple email addresses per client
  • Add delete email, client count badge, and filter pill fixes
  • Fix toolbar pill-select sizing and add group colours
  • Replace plain filter selects with coloured pill-select dropdowns
  • Consultation panel: top-align consult time with multi-line client details
  • Consultation panel: remove border radius
  • Consultation panel: bump font sizes by 2px throughout
  • Consultation panel: split contact and call onto separate lines
  • Consultation panel: show contact name and call details below client name
  • Consultation panel: show practitioner as coloured badge
  • Fix today layout rebuild: check for today-consult-panel not today-grid
  • Always show view-switcher button labels
  • Today view: two-panel layout with consultation list on the left
  • Add inline Services dual-list editor to today and table views
  • Update help page to reflect current dashboard functionality
  • Inline dual-list Status Tags editor + today-view inline editing
  • Consolidate table views: one Compact table + new Inactive view
  • Silence git config warnings from version lookup under systemd sandbox
  • Remove app reads/writes of legacy Status 1/2 columns (data kept in Monday)
  • Status Tags dual-list editor; remove unused Kanban (Columns) view
  • Today view: query only active groups for recently-updated items

Sunday, 28 June 2026

  • Status Tags: replace Status 1 + Status 2 with one multi-select column
  • Status tags: column-creation + migration scripts, config wiring
  • Dashboard: collapsible filters, view-switcher relocation, compact Consult column
  • Highlight today-view emails from the last hour
  • Products/Services tab counts show unique items, not order/invoice count
  • Add auto-generated change history to the help page
  • Products summary: thumbnails, shop links; fix Services scroll
  • Group client files by category; always show HTMA Analyse button
  • Restructure client tabs: Products, Services, History timeline
  • Add combined order + invoice history timeline
  • QBO invoices: paid date on cards + service summary section
  • QBO: clearer "no matching customer" message showing what was searched
  • QBO: match customers via targeted queries, not a full-table scan
  • QBO: expired/invalid refresh token drops to clean reconnect state
  • Fix .env.example: move inline comments to their own lines
  • Re-enable QuickBooks Invoices tab for sandbox testing
  • QBO: capture intuit_tid on API errors for support diagnostics
  • QBO compliance: encrypt tokens, redirect callback, secure cookies, headers
  • Add disaster-recovery artifacts for clean-server rebuild
  • Sample nginx: raise body limit on email endpoint for attachments
  • Improve compose attachments and booking-section styling
  • Show and open attachments in sent/received emails
  • Add QBO disconnect endpoint and in-app disconnect control
  • Allow pebblenutrition.co.uk as email attachment host
  • Add public privacy policy and terms pages for QBO production access
  • Add email/note quick-action icons to today cards
  • Fix today-view note times showing one hour ahead
  • Put note text on its own line, un-bolded, below timestamp + username
  • Defer hidden-view groups to background for faster today/compact paint
  • Restyle reply signature: left-aligned header, blue logo, consolidated text
  • Prefill salutation/booking/signoff in compose; refresh view after send
  • Open prefilled compose for email actions; defer side effects to send
  • Add Schedule Call action to prefill consultation email
  • Refresh button now clears today view email/files/notes cache
  • Fix practitioner filter bar disappearing after page load

Saturday, 27 June 2026

  • Fix pebble loader vertical centering — use fixed positioning
  • Remove dot dot dot from pebble loader
  • Pebble loader: larger size, heartbeat pulse animation instead of rotation
  • Centre pebble loader vertically in today and table loading states
  • Replace all remaining text spinners with pebble logo loader
  • Use pebble logo loader in Today view loading state
  • Use full pebble logo SVG in loaders instead of shape-only inline SVG
  • Use spinning pebble logo as shared loader on initial load and HTMA modal
  • HTMA modal: minimum 1.2s loader display so animation is visible
  • HTMA modal: spinning pebble logo loader animation
  • Fix HTMA filename detection for double-underscore names
  • Fix file open to preserve filename in address bar
  • Broaden HTMA file detection to match LAST_FIRST_NUM_NUM pattern
  • Add HTMA PDF analysis — CLI script and in-app modal
  • Fix email modal key handling, today spinner, and eh-item scope bug
  • Refactor initial load: single render after all data ready
  • Fix Today view scroll/overflow; add bottom padding to all views
  • Today view: respect filters; remove Recent view; fix practitioner bar
  • recent-files/notes: use Monday __last_updated__ filter instead of full board scan
  • recent-files/notes: filter out inactive groups using HIDE_GROUPS_IN_COMPACT_VIEW
  • Fix recent-files and recent-notes: paginate all board items (was capped at 100)
  • Today view: show recent notes (last 24h) per client card
  • Today view: open file directly in new tab instead of client files tab
  • Today view: show files uploaded in last 24h per client card
  • Today view: arrange groups in 3 columns instead of stacked rows
  • Today view: reduce recent emails window from 48h to 24h

Friday, 26 June 2026

  • Today view: add margin-top to email section for breathing room
  • Today view cards: border-radius 0, add drop shadow
  • Today view: fix card group colour tint — pass colour from _renderGrid instead of using empty groupColorMap
  • Today view: tint cards with group colour at 10% opacity, matching compact view
  • Today view: make consult date/time prominent, revert pill size change
  • Today view cards: remove dividers, compact padding and gaps
  • Today view: make planned consult pill more prominent on card row 1
  • Today view: reduce card min-width to 380px for 3 columns at 1440px
  • Today view cards: float services to right of row 2
  • Fix ReferenceError: remove stale servicesRow reference from card template
  • Today view cards: move planned consult to row 1, merge services into row 2
  • Today view: remove contact name from cards
  • Fix four code review bugs in Today view and email modal
  • Today view: group client cards by Monday board Group
  • Today view: group cards by Monday board Group
  • Fix recent-emails missing mailbox field in response
  • Fix today view blank on launch: ensure div is shown when openTodayPage called
  • Make Today the default view on launch
  • Today cards: cap height at 50vh, scroll email section if overflow
  • Today view: fix icon to ti-calendar-due (ti-calendar-today not in Tabler 3.19)
  • Today cards: increase client name font size to 17px
  • Today cards: restore min-width to 480px
  • Today cards: restructure header layout to four rows
  • Email modal: client name as header, subject as sub-header; Today as view
  • Today page: cards show same fields as compact view
  • Today page: 30-day consultations, wider cards, email rows open email modal
  • Today page: unified single grid, one card per client with consult + emails
  • Today page: card grids for both panels; consultations use same card style
  • Today page: group emails by client cards, remove recent-updates panel
  • Fix recent emails: correct $filter date syntax; filter to known clients only
  • Add Today page: consultations, recent emails, client updates
  • Fix logo version tooltip: remove extra 'v' prefix and 'Open last client' suffix
  • Add reply signature; rework compose layout; fix scrollbar and padding
  • Fix reply email editor empty; fix order last-date rounding; fix scrollbar flicker
  • Fix nginx blocking file uploads over 100 KB
  • Update help documentation with all features added since initial release
  • Add questionnaire email poller
  • Add questionnaire attachment scanner with Monday upload
  • UX improvements: modal layout, tab styling, and keyboard navigation
  • Remove order totals display, fix order summary scroll, and improve col1 layout
  • Compact view: distribute unused space equally across columns
  • Fix user display name and practitioner filter visibility
  • Add compact view with configurable group filtering

Thursday, 25 June 2026

  • Restyle topbar buttons and move version to logo tooltip
  • Fix XSS vulnerabilities identified in security audit
  • Show mailbox name in email history cards; add MAIL_DOMAIN support
  • Add MAIL_SEARCH_MAILBOXES support for configurable email history mailboxes
  • Add help documentation page
  • Remove Invite Status column from client history tab
  • Refactor server-side to use shared Monday utilities and add index.html
  • Refactor client-side JS to use shared utilities
  • Add click-to-edit notes, index.html redirect, fix file extension fallback
  • Remove stale index.html (superseded by dashboard.html)
  • Add vertical gap between stacked service pills to match status pills
  • Add right padding to client detail tab pane
  • Add inline pill editing for status, priority, planned consult and practitioner; order summary total column
  • Add inline quick status change by clicking status pill in table row
  • Add client history tab, consult month filter, hide QBO tab
  • Add consultation month dropdown filter to toolbar
  • Switch to dashboard.pebblenutrition.co.uk with Let's Encrypt cert
  • Update README to reflect current architecture and features
  • Show 'No active orders' in summary when all orders are excluded
  • Add bulk PDF upload script and fix Monday items_page limit
  • Fix file list item text alignment
  • Add WooCommerce order summary, multi-mailbox email history, keyboard nav, and security hardening
  • Use SameSite=none in production to allow cookie in cross-site iframes
  • Change session cookie SameSite from strict to lax for iframe support
  • Remove Monday Code platform support
  • Add deploy script, shorten session to 2h, add log rotation
  • Move users.json to /etc/pebble-dashboard, set NODE_ENV=production
  • Harden auth: HttpOnly cookies, firewall, login alerting, HSTS, auto-updates
  • Fix 9 security vulnerabilities identified in full codebase audit

Wednesday, 24 June 2026

  • Fix wooGet to parse JSON regardless of content-type header
  • Show Saving… toast during autosave, replaced by Saved on completion
  • Fix Enter close: stopImmediatePropagation prevents dashboard re-opening client
  • Enter closes client detail panel back to dashboard view
  • Enter opens hovered client row/card in list/kanban/calendar views
  • Fix tab cycle order to match HTML: email→files→orders→invoices
  • Keyboard shortcuts: R=refresh, ↑↓=navigate clients, ←→=cycle tabs
  • Add Space shortcut to toggle client detail panel
  • Debounce ←/→ client navigation at 300ms
  • Add keyboard shortcuts: ←/→ navigate clients, Ctrl+Enter force-save
  • Use coloured pill-selects for Invite Status, Commission, Questionnaire
  • Increase sync status dot size from 7px to 11px
  • Show progress updates in sync status during historical client load
  • Fix topbar click swallowing user menu toggle
  • Add git version badge to topbar
  • v17: QBO integration, WooCommerce diagnostics, gitignore qbo-token
  • v29: QBO invoices polish — line items, row clicks, multi-customer match
  • v28: QuickBooks invoices tab + Monday app deploy fix
  • v27: Style right-column tab titles to match section headings
  • v26: Show item counts in Email / Files / Orders tab titles
  • v25: Include full email body in contact form admin notifications
  • v24: Contact form poller admin notifications
  • v23: Results poller — middle name stripping, robust duplicate check, diagnostics
  • v22: Duplicate file detection in results poller
  • v21: Automated test results ingestion via email poller
  • v20: WooCommerce order link, Files tab before Orders tab
  • v19: Delete file from Monday Files column via column value update
  • v18: Monday Files column — list, open, and upload files from client detail
  • v17: WooCommerce order history, search auto-revert, UX improvements

Tuesday, 23 June 2026

  • Styled
  • v16: Results Back + Ready for Call actions, list view layout, UI polish
  • v87: Fix check-security false positive for systemd-resolved ports
  • v86: Add security hardening check script
  • v85: Set Planned Consult Month = "Pending" on new contact form clients
  • v84: Prepend timestamp and "Contact Form" to notes on new contact records
  • v83: Set Status = "Initial contact made" on new contact form clients
  • v82: Make contact poller interval configurable via CONTACT_POLL_INTERVAL_MINS
  • v81: Make nginx/frontend setup optional in setup-server.sh
  • v80: Gate contact poller behind ENABLE_CONTACT_POLLER env var
  • v79: Prepend timestamped note for archive, gone-quiet, and duplicate actions

Monday, 22 June 2026

  • v78: Add PM2 config and server deployment scripts
  • v77: Fix contact poller reprocessing emails
  • v76: Fix contact form field parsing for HTML emails
  • v75: Restrict contact poller to Inbox folder only
  • v74: Contact form poller — replaces Zapier automation
  • v73: Widen email header label column to fit Subject
  • v72: Sanitize email HTML via DOMParser to silence blocked-script errors
  • v71: Increase email header padding
  • v70: Add Subject to email viewer header
  • v69: Strip script tags from email preview HTML to silence console errors
  • v68: Restore allow-same-origin on email preview iframe
  • v67: Fix iframe sandbox — links work in email preview, no escape warning
  • v66: Chase Questionnaire action — sends email, sets questionnaire status
  • v65: Invite also sets Invite Sent status to 'Sent'
  • v64: In-app Invite email workflow, replacing Monday automation
  • v63: Re-render client detail view after Test Order / Chase
  • v62: In-app Chase email workflow, replacing Monday automation
  • v61: Refresh client detail and email history after Test Order
  • v60: Add greeting and booking details to Test Order emails
  • v59: Prepend Test Order note instead of appending
  • v58: In-app Test Order email workflow, replacing Monday automation
  • v57: Add all client actions to bulk selection bar
  • v56: Fix refresh from client view loading wrong client
  • v55: Fix view switching to re-sort via applyFilters
  • v54: Table view resets sort to restore Monday group ordering
  • v53: Recent view forces sort by Last Updated descending
  • v52: Rename table column headings Month/Consult
  • v51: Topbar click toggles dashboard/client view
  • v51: reorder client detail action buttons
  • v50: remove Reset button and function from client detail view
  • v49: duplicate sets Planned Consult to Pending instead of blank
  • v48: fix duplicate — copy raw column values directly from Monday API
  • v47: show Call field below consult date in table column
  • v46: duplicate client resets status/dates/commission, targets Current Clients group
  • v45: all table column widths explicit and summing to 100%
  • v44: table-layout fixed with CSS percentage column widths
  • v43: compact email dialog — slim header, Template+Attach on one row
  • v42: wire Subject column (text_mm4jneq6) to email template picker
  • v41: reduce form-label to 10px at <=1280px
  • v40: Load Historical moved to topbar as icon button
  • v39: table-layout auto, columns flex to fill width
  • v38: Remove inline px font-sizes from table cells — use em so media query applies
  • v37: Broaden 1280px font-size rules to cover all explicit 13/14px elements
  • v36: Toolbar nowrap, slimmer topbar (56px), fixed table col widths, th nowrap
  • v35: Unified topbar — cdp-page starts below topbar, client name moves to name bar below topbar

Sunday, 21 June 2026

  • v34: Client view always shows a client within current filter/search set
  • v33: Hide view selector text labels on screens ≤1960px, show icons only
  • v32: Lock body scroll when client view opens to remove spurious scrollbar
  • v31: Unified topbar — same height/logo in client view, search in client view, logo opens last client, sync dot left of username, non-sticky filters at ≤720px height
  • v30: Client detail — remove resizers, cream bg, fixed cols, nav to header right, Clear Notes, btn-action pale blue
  • v29: Reduce font sizes by 2px on screens ≤1280px
  • v28: Revert table column widths to pre-autofit state
  • v27: Table — fixed column widths to fill 1280px viewport
  • v26: Toolbar — remove Refresh, replace Clear with filter-x icon
  • v25: Topbar — Refresh button between username and sync dot
  • v24: Client detail — swap Contact Details and Invite section positions
  • v23: Planned Consult filter — month name only, MMM on small screens
  • v22: Table — auto-fit column widths
  • v21: Table — remove Actions + Commission cols, move Contact to end
  • v20: Topbar — user menu dropdown, remove sync status text
  • v19: 3-col layout, email popup, laptop compact mode, prev/next nav

Saturday, 20 June 2026

  • v18: Client detail UX polish (title, equal cols, resizers, button colours)
  • v17: Full-page client detail view with embedded email panel
  • v16: Email reply — quoted thread, no template wrapper
  • Cleanup: remove legacy files, gitignore build artifact
  • v15: Codebase unification — single client/ dir for both deployments

Friday, 19 June 2026

  • v14: Email history + compose unified into single modal window
  • v13: Document attachments, CC practitioner, management reports

Thursday, 18 June 2026

  • monday-app: route templates via Monday SDK, remove MONDAY_API_KEY

Wednesday, 17 June 2026

  • v11: Email compose overlay with embedded Quill editor
  • Layout and filter UX polish
  • Filter bar layout: Add Client to topbar, Group By below view, full-width bars, icon All buttons
  • Load Historical Clients on demand via toolbar button
  • v9: Historical/Gone Quiet actions; Columns kanban; pill styling; deactivation filters; Clear filter button

Tuesday, 16 June 2026

  • Fix code.tar.gz to include full app (src, package.json, client)

Monday, 15 June 2026

  • v8: board colours for Status/Priority; Add Note in edit modal
  • Quick note modal: input above existing notes, prepend new entries
  • Pill-select dropdowns for Practitioner and Planned Consult Month
  • Preserve monday board order as default table sort
  • Practitioner bar buttons fill full width
  • Add commission column to monday-app data layer
  • UI polish, Commission column, and filter/modal improvements
  • Move Group By controls into the page header row beside Add Client
  • Cap modal left column at 50% max while allowing it to shrink
  • Auto-size modal left column to fit content (auto 1fr)
  • Fix left modal column overflowing into right column
  • Make modal footer sticky — always visible when scrolling
  • Move Services to right column of edit modal; equal column widths
  • Sync frontend with monday-app UI changes
  • Multiple dashboard UX improvements
  • Fix practitioner auto-detection in monday app via localStorage

Sunday, 14 June 2026

  • Stop tracking backend/node_modules
  • Update .gitignore to exclude .claude/settings.json
  • Improve services editor and practitioner auto-detection
  • monday app
  • commit
  • updates
  • settings
  • Colour-code services by category everywhere they appear
  • Show existing notes in quick-note modal
  • Fix note icon alignment and size in checkbox cell
  • Move quick-note to icon button in checkbox cell
  • Move monday.com button to bottom-left of modal footer, relabel 'Open'
  • Add quick-note button to table rows
  • Move monday.com link button to modal footer
  • Add 'Open in monday.com' button to client modal
  • Improve notes readability in client modal
  • Fix Recent view: truly flat list with no group headers
  • Add Recent view: flat table sorted by last updated time
  • settings
  • UI: bigger practitioner chips, uniform month bar height
  • Layout: practitioner bar on top row, full-width month buttons, bigger logo
  • Add Last Updated column to client table
  • update

Saturday, 13 June 2026

  • update settings
  • Security fixes: remove secrets from tracking, harden routes
  • remove .env from tracking, add .gitignore
  • initial commit