Lompat ke kandungan

Portal updates

Changelog

Everything we shipped to the portal in one place: what we added, what we fixed and what we polished. Entries are written in English so the history stays precise.

Live since August 2026

  • Added New pages, fields and workflows
  • Fixed Bugs and broken behaviour
  • Polished UI, wording and performance

19 releases · 103 updates · last updated 24 Oct 2026

  1. v1.8.3 Notifications Latest

    Background email delivery

    Every notification email now leaves the request 3 seconds after its trigger, so logging in, registering and submitting a form no longer wait for the mail server. Nothing is lost or sent twice.

    Added 4

    • All notification events — appointments, deposits, memberships, registration welcome, contact leads and login lockouts — are queued and delivered by WP-Cron 3 seconds after they fire.
    • The delay is central to Notification Management, so templates, recipients, routing switches and email content stay exactly as they were.
    • The delay can be changed with the nm_notification_delay filter (0 restores immediate delivery).
    • A background delivery that throws an error is recorded in Email Logs as failed instead of disappearing.

    Fixed 4

    • Login and registration no longer block on wp_mail(): sign-in redirects and new-account portal redirects complete in under half a second.
    • Login lockout alerts and contact-form leads no longer fall back to a second synchronous wp_mail(), which previously could send the same email twice.
    • Repeated triggers for the same notification within the delay window schedule a single job, and the dedupe window still blocks a second email to the same recipient.
    • If a job cannot be scheduled, the email is sent immediately instead of being dropped.

    Polished 1

    • Pending jobs, their dedupe locks and the cron entries are removed cleanly when the notification plugin is deactivated or uninstalled.
  2. v1.8.2 Portal

    Compact responsive dashboards

    Patient, solo practitioner, centre and platform screens were audited at desktop, tablet and mobile widths and tightened for space, with duplicate portal CSS consolidated along the way.

    Fixed 5

    • Mobile account pages no longer float the save bar over form fields; the action row now sits in normal flow below the form.
    • Patient dashboard empty states no longer show a stray dashed box around the note text.
    • My Account and notification list items on mobile collapsed to a fixed 200px each; they now size to their content.
    • Undefined CSS variables that silently dropped heading and booking-hint colours on platform and patient screens now resolve correctly.
    • Membership receipt rows no longer share the .prm-receipt selector with the printable receipt, so the two layouts cannot override each other.

    Polished 6

    • Portal shell: smaller page, header, card, table, button and form-control padding, plus a tighter type scale and gap rhythm at every breakpoint.
    • Patient dashboard: compact hero, three-up mobile stat tiles, side-by-side hero actions and denser booking and next-session cards.
    • Centre and solo practitioner dashboards: shared density rules moved into portal-base.css, shrinking portal-therapist.css from 2.2 KB to 0.7 KB; hero actions use a two-column grid on phones.
    • Membership: smaller plan cards, panels and coupon blocks; unused hero, progress and stat rules removed.
    • Auth, profile and membership screens use the same compact spacing, including the self-assessment dashboard card.
    • CSS cleanup: removed the duplicate patient-profile theme, obsolete navigation/counter/report-stat rules and duplicated centre and therapist overrides, and resolved the .prm-btn--soft, eyebrow and receipt selector conflicts.
  3. v1.8.1 Landing page

    Section switches and a CTA choice

    Landing page owners can switch any section off and choose whether the mid-page call to action opens WhatsApp or the booking system.

    Added 4

    • Every standard section (hero, about, services, features, process, packages, gallery, team, testimonials, CTA, FAQ and contact) has its own on/off switch in the Section Editor.
    • A hidden section keeps all of its content and settings, so switching it back on restores the page exactly as it was.
    • The Call to action section can point to WhatsApp or the booking system, and the editor shows only the settings for the chosen option.
    • Section switches and the CTA choice are stored per landing page, so one owner's settings never change another page.

    Fixed 3

    • Landing pages created before this release keep their existing button target until the owner picks a CTA option.
    • Invalid or missing CTA types fall back to the previous link order instead of rendering a dead button.
    • The CTA icon and new-tab behaviour now match the selected target, including when no WhatsApp number is set.

    Polished 1

    • The WhatsApp number used by the CTA is shown in the panel, with a pointer to the Contact section.
  4. v1.8.0 Portal

    Booking deposits

    Appointment slots can now hold a deposit before they are confirmed.

    Added 5

    • Patients pick a date and time, then pay a deposit (RM10 by default) by QR code or bank transfer.
    • Patient portal "Booking Deposit" page with payment instructions and receipt upload (JPG, PNG, WEBP or PDF, up to 5 MB).
    • Centre portal "Deposit" page to upload a QR code or account number and approve or reject patient receipts.
    • Deposit decisions are recorded with status, reviewer, date and notes; the appointment is confirmed automatically once the deposit is approved.
    • Portal notifications for a new receipt, an approved deposit and a rejected deposit.

    Polished 1

    • Deposit status is visible next to each appointment so staff can see what is still waiting for payment.
  5. v1.7.1 Portal

    Portal header and role titles

    The portal header is tighter and now names the role you are signed in as.

    Polished 4

    • Drawer toggle is icon-only with a rounder, larger tap target.
    • Portal titles follow the current role: Admin Pusat Rawatan, Founder Pusat Rawatan, Staff Pusat Rawatan, Perawat Pusat Rawatan and Portal Pesakit.
    • Navigation labels renamed: "Dashboard" becomes "Ringkasan" and "Tukar Dashboard" becomes "Tukar Portal".
    • Header account chip shows an avatar with the user initials.
  6. v1.7.0 Portal

    Centre staff management

    Centres can run their counter team from a single screen.

    Added 3

    • Centre dashboard "Staff" page to create staff accounts, update details, change role, reset a password and activate or deactivate an account.
    • Roles "Admin Pusat" (full access) and "Staff Kaunter" (Ringkasan, Temujanji, Pesakit and Akaun only).
    • Counter staff dashboard uses centre-wide statistics, with appointment management and CSV export.

    Fixed 2

    • Admins can no longer deactivate or demote their own account.
    • Every centre always keeps at least one active Admin Pusat.
  7. v1.6.2 Portal

    Lighter portal assets

    Each dashboard now loads only the CSS it needs.

    Fixed 2

    • Inline receipt styles moved out of the templates into their own stylesheet.
    • Centre switcher on the portal header is styled consistently with the rest of the header.

    Polished 3

    • Portal CSS is split per dashboard (base, auth, admin, centre, therapist, patient, receipt), so only the dashboard in use loads its assets.
    • Headers, stat cards, lists, tables, forms and timelines compressed across every dashboard.
    • Legacy admin portal controller and the merged portal stylesheet removed.
  8. v1.6.0 Portal

    Profile and account

    Practitioners and patients can maintain their own account details.

    Added 3

    • Practitioner portal "Profile & Account" page to update name, email, phone, specialties and bio.
    • Practitioners can change their own password with current-password verification.
    • Patients can update their account email and change their password from the portal Profile page.
  9. v1.5.1 Portal

    Dashboard refresh

    Practitioner and centre dashboards now lead with the next session and today's schedule.

    Added 5

    • Focus card "Sesi Seterusnya", weekly summary and supporting meta on every statistic card.
    • Today's schedule is a timeline with session duration, patient phone, patient notes and status actions on each row.
    • Pending-confirmation warning for centre admins with a direct link to the filtered appointment list.
    • Quick links to practitioners, services, patients, settings and membership by role.
    • Unread counts on notifications; session notes show the practitioner and the treatment.

    Polished 1

    • New formatting helpers: time-of-day greeting, relative day labels, week range and session length.
  10. v1.5.0 Portal

    Free trial plans

    Practitioners can start on a free trial without touching Stripe.

    Added 4

    • "Free Trial Days" field on membership plans.
    • Default plans (Trial 7 Days, Standard RM39, Advanced RM59, Pusat Rawatan RM99) created automatically on activation and database upgrade, without overwriting existing plans.
    • Free trial plan (RM0) can be activated by a practitioner without Stripe, with a trialing status and an automatic end date.
    • Plan features are listed in the practitioner plan list.

    Fixed 2

    • Expired trials move to "expired" automatically.
    • A free trial can only be used once per practitioner.

    Polished 1

    • Portal header uses icon buttons for "View Website" and "Logout" to save space; logout asks for confirmation.
  11. v1.4.0 Portal

    Unified sign-in

    Login, patient registration and centre registration now live on one tabbed page.

    Added 2

    • Login, patient registration and centre registration merged into a single tabbed page; the separate pages are gone.
    • Platform admins can open all four dashboards (Platform, Pusat Rawatan, Perawat, Pesakit) and switch from "Tukar Portal" in the portal drawer.

    Polished 2

    • Registration shortened: patients and centres only enter name, email and password; the rest is completed later in the profile.
    • Compact auth card with ARIA tabs, keyboard support and a no-JavaScript link fallback.
  12. v1.3.0 Portal

    Membership and Stripe

    Subscriptions, manual payments and receipts are managed inside the portal.

    Added 5

    • "Membership" menu in the platform dashboard: overview, plans, paying practitioners, receipts and payments, Stripe settings and the webhook log.
    • Stripe Checkout subscriptions, cancellation, webhook signatures and idempotency.
    • Manual payments (cash or transfer) with printable receipts and CSV export.
    • Practitioner portal "Keahlian" page with subscription status, pay or renew and receipt download.
    • New tables for plans, memberships, transactions and membership events.
  13. v1.2.1 Portal

    Sign-in fix

    Patient portal login is no longer limited to an email address.

    Fixed 1

    • Patient portal login accepts a username or an email address.
  14. v1.2.0 Portal

    Multi-tenant foundation

    The portal became a multi-tenant SaaS with centres and role-based dashboards.

    Added 3

    • Multi-tenant SaaS: centres, memberships, services and notifications tables.
    • Platform and centre/practitioner dashboards plus the full patient portal in the frontend.
    • Role model for platform, centre, practitioner and patient, with wp-admin restrictions.

    Fixed 2

    • Data is isolated per centre across queries, forms, exports and AJAX.
    • Booking validates the slot on the server and checks for conflicts.
  15. v1.0.0 Portal

    First release

    The first working version of the patient and practitioner portal.

    Added 1

    • Patient portal, practitioner portal, management dashboard, appointments, session notes and practitioner management.
  16. v1.0.2 Storage

    Storage hardening

    Upload, download and cleanup edge cases are handled properly.

    Added 3

    • File search, pagination (50 per page) and accurate "showing" counts.
    • Client-side size and format validation, duplicate-submit protection and upload progress.
    • Executable, browser-active and server configuration extensions can no longer be added to the allowed formats.

    Fixed 8

    • File names longer than 180 characters failed to save; stored names are shortened while keeping the extension.
    • The upload limit now respects the server maximum, so the screen no longer promises a size the server rejects.
    • PHP upload errors (interrupted upload, server limit, missing temp folder) show a specific message instead of a generic failure.
    • File deletion verifies the database row, so purging an account can no longer loop forever.
    • Uploads are rejected for accounts that no longer exist; an unknown owner shows a notice instead of empty storage.
    • Upload categories are validated against the registered list before they are stored.
    • Downloads of a record whose file is missing return a clear notice, the row is flagged and a Repair action reconciles records with the files on disk.
    • The account list no longer runs one usage query and one count query per account.

    Polished 1

    • Stores and limits share the same unit, remaining capacity is shown, the progress bar turns red at 100% and destructive actions ask for confirmation.
  17. v1.1.1 Forum

    Forum rendering fixes

    Duplicate output and landmark issues on the community forum are resolved.

    Fixed 3

    • The forum page no longer renders twice when the page content contains duplicate shortcodes.
    • Removed the nested main landmark from the thread list and added the missing page heading on thread and new-thread views.
    • Duplicate category panel removed from the sidebar; categories live in the filter chips above the thread list.

    Polished 1

    • Forum colours and radii inherit the active theme tokens.
  18. v1.3.0 Notifications

    Faster notification logs

    Delivery logs stay quick even with thousands of records.

    Added 2

    • "Recent deliveries" and Email Logs load with fetch and pagination, so thousands of deliveries can be reviewed without a reload.
    • Log filters (search, event, status, recipient, date) are sent with fetch, with 10/25/50/100 rows per page and an updated URL.

    Polished 2

    • Status chips on the dashboard, loading indicators and a "Showing X–Y of Z deliveries" summary.
    • Dashboard screen titled "Email Notification".
  19. v1.7.2 Self-Assessment

    Report identity

    Every assessment report now carries the patient name and a stable report number.

    Added 3

    • Full reports show the patient full name and a unique report number in the header.
    • Report numbers (SA-YYYYMMDD-XXXXXXXX) are generated from the result key, stay the same every time a report is opened and are stored with the result.
    • Assessment history shows the report number so each record is easy to tell apart.