πŸ“– Help & User Guide β€” preview of the built-in help system ← Software page Try the demo β†’
Help Index β€” click any topic to jump to it
Getting started
⚠ Installation & GDPR πŸš€ Getting Started πŸ” Access Levels βš™ Setup
Patient records
πŸ‘€ Patients πŸ“‹ Sessions 🦴 Examination πŸ“Ž Attachments βœ‰ Letters
Clinical pages
πŸ“‹ Case History (P2) πŸ’Š Prescriptions & Treatment (P3) πŸ“‹ Treatment Plan ☯ Five Elements & Astrology (P5) πŸ‘£ Podiatry & Chiropody (P6)
Practice management
πŸ“… Schedule πŸ’· Accounts πŸŽ“ CPD πŸ“‡ Contacts
Research & data
πŸ” Audit & Search πŸ“Š Statistics πŸ“€ Import / Export
Installation guides
🫐 Raspberry Pi Installation 🍎 Mac Installation πŸͺŸ Windows Installation πŸ“¦ Synology NAS Installation πŸ§™ Setup Wizard πŸ”‘ Licence 🩺 Clinical Reference
⚠ GDPR πŸš€ Start πŸ‘€ Patients πŸ“‹ Sessions 🦴 Exam πŸ“‹ P2 πŸ’Š P3 πŸ“‹ Plan ☯ P5 πŸ‘£ P6 πŸ“… Schedule πŸ’· Accounts βœ‰ Letters πŸŽ“ CPD πŸ“‡ Contacts πŸ” Audit πŸ“Š Stats πŸ“€ Import/Export βš™ Setup πŸ” Access 🫐 Pi 🍎 Mac πŸͺŸ Windows πŸ“¦ NAS πŸ§™ Wizard πŸ”‘ Licence 🏠 Dashboard 🩺 Clinical
⚠ Installation Requirements & Data Protection
Important β€” please read before using with real patient data.
This system handles sensitive personal health information. You have legal obligations under UK GDPR and the Data Protection Act 2018 before going live with real patients.

Testing vs live use

This system may be tested with dummy records on any internet-accessible server β€” as demonstrated at soul-trade.com/cspractice. However, once you begin entering real patient data, the system must be moved to a secure, private environment.

Minimum technical requirements

ComponentMinimumRecommended
PHP PHP 8.0+ PHP 8.2 or 8.3
Database MySQL 5.7+ or MariaDB 10.4+ MySQL 8.0+
Web server Apache 2.4 with mod_rewrite Apache 2.4 or Nginx
SSL certificate Required for any live use Let's Encrypt (free) or commercial cert
Hosting Private intranet or dedicated server Self-hosted on practice premises or UK-based private server
Backups Daily automated database backup Daily backup with off-site copy, tested monthly

Internet vs intranet β€” why it matters

An intranet installation runs on a server that is only accessible from within your practice network (or via VPN). Patient data never leaves your building. This is the recommended approach for any practice holding real patient records. This can be as simple as using an older computer (e.g. a Raspberry Pi 4 β€” around Β£55 new, silent, pocket-sized, uses 3W of power and runs 24/7 β€” an old Mac or Windows laptop, or NAS device running Linux) and simply copy/pasting the commands shown in the 🫐 Raspberry Pi installation guide, Apple Mac installation guide or the Windows installation guide β€” all written for non-technical practitioners.

An internet installation is accessible from anywhere β€” convenient for multi-site practices, but requires stronger security measures: strong passwords, regular security updates, firewall rules, and ideally IP whitelisting.

Never use an internet-accessible installation with real patient data unless you have:
  • A valid SSL certificate (https://)
  • Strong unique passwords for all user accounts
  • Completed a Data Protection Impact Assessment (DPIA)
  • Registered with the ICO as a data controller
  • A written data processing policy

Intranet setup options

  • Local server on practice premises β€” a small dedicated machine (e.g. a Raspberry Pi 4, old Mac or Windows laptop or desktop, or NAS device running Linux) running Apache, PHP and MySQL. Accessible only on your practice WiFi. Low cost, high control.
  • Practice network with VPN β€” server on your local network, accessible remotely via VPN tunnel. Practitioners can access from home or between sites securely.
  • Private cloud server (UK-based) β€” a virtual private server (VPS) with a UK hosting provider, firewall-restricted to your IP addresses. Examples: Mythic Beasts, Bytemark, IONOS UK. Avoid US-based providers unless you have specific legal advice on international data transfers.

UK GDPR obligations for healthcare practitioners

Patient health data is special category data under UK GDPR (Article 9). As a data controller you are required to:

  • Register with the ICO β€” most healthcare practitioners must register as data controllers. Annual fee applies (currently Β£40–£60 for small organisations). Check ico.org.uk.
  • Privacy notice β€” provide patients with a clear privacy notice explaining what data you hold, why, how long you keep it, and their rights. This can be a leaflet or a statement on your website.
  • Lawful basis β€” for healthcare, the lawful basis is typically vital interests or legitimate interests combined with explicit consent for special category health data.
  • Retention policy β€” NHS guidelines recommend retaining adult patient records for 8 years after last treatment (longer for children). You must define and document your retention period.
  • Data subject rights β€” patients can request a copy of their data (Subject Access Request), ask for corrections, or request deletion. You must be able to respond within 30 days.
  • Data breach procedure β€” you must have a process for identifying and reporting data breaches to the ICO within 72 hours if required.

Professional body requirements

The GOsC, GCC, CNHC and other UK regulatory bodies all require members to comply with data protection law as a condition of registration. Your indemnity insurance provider may also have specific requirements around clinical record keeping and data storage.

Recommended reading

  • ICO Guide to UK GDPR β€” ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources
  • NHS Records Management Code of Practice β€” england.nhs.uk
  • GOsC Standards of Practice β€” osteopathy.org.uk
  • CNHC Code of Conduct β€” cnhc.org.uk
In summary: Test freely with dummy data on any server. Before entering a single real patient name, move to a private intranet installation, register with the ICO, and have a privacy notice ready for patients. This is not just good practice β€” it is a legal requirement.
πŸ“Ž Attachments

Each patient record has an Attachments tab for storing scanned documents, X-ray reports, GP letters, referral notes, insurance forms and any other files relating to that patient.

Supported file types

PDF, JPG, PNG, GIF and WebP. Maximum file size 10MB per file. For larger files (e.g. high-resolution X-rays) reduce the scan resolution before uploading.

Uploading a file

Open the patient record, click the Attachments tab, and use the upload form. You can:

  • Add a title to describe the document (e.g. "GP referral letter Jan 2025")
  • Optionally link to a session β€” useful for X-rays or reports from a specific visit
  • Optionally link to a letter β€” useful for the incoming letter that prompted an outgoing referral
  • Add notes about the document

Viewing files

Uploaded files appear as a card grid. PDFs show a document icon, images show a thumbnail preview. Click Open to view the file in a new browser tab. PDFs open directly in the browser; images display inline.

Emails

Emails don't need a separate attachment mechanism β€” copy and paste the relevant content into the patient's yellow notes field or save it as a letter record. For emails with important attached documents, save the attachment as a PDF and upload it here.

Server setup required

Attachments are stored in a folder called cs_attachments located one level above the web root β€” outside publicly accessible directories. This must be created manually and the path configured in config.php:

define('ATTACH_PATH', '/full/path/to/cs_attachments');

See the Mac or Windows installation guide for the correct path for your setup.

GDPR note: Uploaded files containing patient data are subject to the same data protection obligations as all other patient records. Files are served through the application (not accessible by direct URL) and require login to view. However, ensure your server backup process includes the cs_attachments folder β€” it is outside the web root and may not be included in standard web backups automatically.

Access control

All logged-in users can view attachments. Only Medium Level and above can upload or delete files.

πŸ” Audit & Search

The Audit page is accessed from the main navigation. It provides a cross-tab query builder that searches across all clinical fields simultaneously β€” demographics, conditions, examination findings, medicines, treatments, practice details and dates. This is the feature that makes structured data entry pay off.

Example: Find all female patients aged 20–45 with neck conditions, SLR positive, showing improvement of 50% or more, referred by their own GP β€” across any combination of fields. Tag the results as a yellow cohort for further analysis, then clear the tag when done.

Building a search

The left panel is the query builder. Start with one empty row β€” choose a field from the dropdown, the input type changes automatically to match:

  • Text fields β€” free text, searches for any match containing your value
  • Select fields β€” dropdown of available values (Sex, Smoker, Prognosis etc.)
  • Boolean fields β€” ticked fields like State Acute, Maintenance, New Condition β€” just shows "is set", no value needed
  • Age range β€” min and max age in years
  • Date range β€” from and to date pickers
  • SLR degrees β€” finds patients with SLR at or below the value entered
  • Improvement min % β€” finds patients at or above the improvement level

Click + Add criterion to add more rows. All criteria are combined with AND β€” every condition must be met. Click Search to run.

Searchable fields

GroupFields
DemographicsSex, Age range, Postcode, Employment type
ConditionPrimary condition, Secondary conditions, Therapy type, State (acute/chronic), New condition, Maintenance, Nerve radiation
HistoryPMH/Cranial, Accident/RTA, Condition duration
ExaminationExam findings, Better, Worse, Smoker, Improvement %, SLR left, SLR right
Clinical (P3)Diagnosis, Prognosis, Treatment history, Medicine history, Movement/Emotion, Five Element
SessionsSession treatment, Session condition
PracticePractice location, Referral source, Practitioner
DatesLast seen range, First contact range, Date of birth range

Results

Results show Name, Age, Sex, Primary condition, Location, Last seen, Treatment, Improvement and Practitioner. Click any name to open that patient record. Results are limited to 500 β€” if your search returns the limit, refine your criteria.

Tagging a cohort

Once you have a results list, click 🏷 Tag cohort to reveal the colour picker. Select a colour and click Apply Tag β€” all matching patients are tagged with that colour simultaneously. You can then filter the Patients list by that colour to work with the cohort.

Colours carry no fixed meaning β€” you decide what each colour represents for a given audit project. Clear the colour when your analysis is complete.

Tip: For statistics to work accurately, treatment values must contain no spaces, hyphens or commas β€” e.g. SoftTissue not Soft Tissue. This is already enforced in the treatment value list.

Saving searches

After running a search, a Save this search panel appears below the query builder. Give it a name, an optional description, and optionally tick Share with all users to make it available to all practitioners. Saved searches appear in the Saved Searches panel and can be run again with one click.

πŸ“Š Statistics

The Statistics page is accessed from the main navigation. It has three tabs β€” Practice Dashboard, Clinical, and Cohort β€” filtered by year and practitioner.

Practice Dashboard

Summary cards at the top show sessions this month, sessions this year, sessions all time, income this month, income this year, new patients and active patients. Below these are four charts:

  • Sessions per month β€” bar chart of the last 12 months
  • Income per month β€” bar chart of the last 12 months
  • Top conditions β€” horizontal bar chart of the most common presenting conditions for the selected year
  • Referral sources β€” doughnut chart showing how patients found the practice

Clinical tab

Deeper clinical analysis for the selected year:

  • Sex breakdown β€” doughnut chart of patient sex distribution
  • Age breakdown β€” bar chart by age group
  • Improvement distribution β€” doughnut showing what percentage of sessions resulted in each level of reported improvement
  • Treatment frequency β€” horizontal bar of most used treatments
  • Average improvement by condition β€” table showing mean improvement % per condition (minimum 3 sessions)
  • Average sessions per patient by condition β€” table showing how many sessions on average it takes per condition

Cohort / Audit tab

Select a colour-tagged patient cohort to analyse. Colour-tagged cohorts are created on the Audit page β€” search for patients, then tag the results with a colour. The cohort tab then shows:

  • Summary cards β€” patient count, total sessions, average sessions per patient, average improvement
  • Six charts β€” conditions, sex, age, therapy type, improvement distribution, treatments used

This is the research view β€” tag a cohort on the Audit page, then come here to see the statistical breakdown of that specific group.

Filters

Year and practitioner dropdowns at the top apply across all three tabs. Select a specific practitioner to see their individual statistics, or leave on All practitioners for the whole practice.

Tip: For the income figures to be accurate, make sure fee receipts are recorded in Accounts rather than just on session records. The statistics draw income from the Accounts module.
πŸ“‹ Case History (Page 2)

The Case History page is the detailed clinical intake record β€” accessed via the πŸ“‹ Case History button on any patient record. It has four tabs, each saving independently so you can fill them in stages without losing work.

The mosaic input pattern

Throughout Page 2, input works on the mosaic principle β€” choose a value from the dropdown, click the ↓ arrow, and it appends to the yellow text field below on a new line. You can then type freely in the text field to add your own words. Come back and add more at any time. Type the first letter of a value to jump to that part of the list.

The yellow text field is what gets saved β€” it becomes a cumulative, readable clinical record that also feeds the audit search engine.

Tab 1 β€” Medical History & Cranial

  • Past Medical History & Cranial β€” mosaic field covering Surgery, RTA, Fracture, Ca, Hysterectomy, Children, Serious illness, Operations, and cranial findings (Stuck, Free, Torsion, Equal)
  • Secondary Conditions β€” mosaic field for concurrent presenting complaints, same value list as primary condition
  • Condition Duration β€” how long the condition has been present and in what units
  • Accident / RTA β€” type of trauma and how long ago
  • Pain Map β€” interactive front and back body diagram. Select a paint colour (yellow = mild through to purple = very severe), then click any body zone to colour it. Click again to change colour. Accumulated over time β€” update when the pain picture changes.

Tab 2 β€” Examination

Seven satellite dropdowns (Structural, CV/Resp, Abdominal, Neurological, Smell, Eyes/Skin, Bowels/Tongue) each feed into one central yellow findings text box. Choose a finding from any satellite, click ↓, and it appends to the findings record.

  • State β€” Acute, Chronic, New condition, Maintenance, Nerve radiation
  • SLR β€” straight leg raise in degrees, left and right
  • Better / Worse β€” aggravating and relieving factors
  • Smoker β€” status and how long ago if ex-smoker
  • Improvement β€” percentage improvement reported by patient
  • Pain Colour Indicator β€” overall pain intensity summary
Tip: Tab 2 captures the patient-level baseline examination picture. Per-session examination changes are recorded in the session form and tracked separately in the Examination tab of the patient record.

Tab 3 β€” Movement & Emotion

A mosaic snapshot of the patient's lifestyle and emotional context β€” one of the most clinically useful fields in the system. "Dog, gardening, recently divorced, fragile, needs holiday" tells you more about a patient in five seconds than a structured questionnaire.

The value list covers exercise, hobbies, mobility, social situation, emotional state, beliefs and lifestyle. All values are editable in Setup β†’ Value Lists β†’ Movement & Emotion.

The Five Elements dropdown (Wood / Fire / Earth / Metal / Water) sets a colour indicator and shows the associated organ systems, season, emotion and characteristics. Links to the Five Elements & Pulse History page (coming soon).

Tab 4 β€” GPs & Admin

  • GP β€” linked from the Contacts database. Used to auto-populate GP referral letters. Note: the GP dropdown will be empty on a fresh installation β€” add your GPs first via Contacts β†’ New Contact (type: GP), then return here to link them to patients.
  • Other Therapists β€” free text list of other healthcare providers
  • Referral Source β€” how this patient found the practice
  • Relationship β€” patient's relationship to the practice (Patient, Son, Daughter, Husband, Wife etc.)
  • Insurance β€” insurance company

Editing value lists

All the dropdown lists in Page 2 are editable in Setup β†’ Value Lists. The page shows an index at the top β€” click any list name to jump to it. Add new values with the + Add button. Remove values with the βœ• button. Changes take effect immediately.

Clinical note: As Jolyon wrote in the original CrystalSolutions documentation β€” "This is not a comprehensive input of therapeutic case history taking, which we expect to be on the patient's written notes. It is designed to allow the practitioner to record quickly the pertinent facts, and thus allow quality audit β€” with final reference to the patient's written notes."
πŸ’Š Prescriptions & Treatment (Page 3)

Page 3 is accessed via the πŸ’Š Rx button on any patient record. It records the prescribing and treatment picture β€” diagnosis, prognosis, medicines prescribed and treatments given β€” all using the mosaic append pattern.

Layout

The page is divided into four quadrants:

  • Top left β€” Medicine History β€” five dropdown lists feeding one yellow text box
  • Bottom left β€” Treatment History β€” treatment list with date stamp button feeding a yellow text box
  • Top right β€” Differential Diagnosis β€” mosaic dropdown feeding a yellow text box
  • Bottom right β€” Prognosis β€” mosaic dropdown feeding a yellow text box

Medicine History

Five separate dropdown lists each feed the same central medicine history text box:

  • Standard β€” conventional prescription and OTC medicines
  • Supplement β€” vitamins, minerals and nutritional supplements
  • Herbal β€” herbal medicines and tinctures
  • Homeopathic A–N β€” homeopathic remedies A through N
  • Homeopathic O–Z β€” homeopathic remedies O through Z

Select from any list, click ↓ to append to the medicine history. Type the first letter to jump to that part of the list. The text box is fully editable β€” add dosages, frequencies and notes freely.

Treatment History

The treatment list covers the full range of techniques used across therapy types:

GOT Β· AK Β· Meridian Β· Mobilize Β· Recommend Β· TreatmentIncluded Β· HVT Β· Cranial Β· Facial Β· SoftTissue Β· Hydrotherapy Β· StrainCounterStrain Β· MET Β· Naturopathic Β· Osteopathy Β· Acupuncture Β· Chiropractic Β· Physiotherapy Β· Chiropody Β· Counselling Β· Reiki Β· Herbalism Β· Aromatherapy Β· Reflexology

The πŸ“… Date button inserts today's date as a divider β€” useful for building a chronological treatment record across multiple visits.

No spaces, hyphens or commas in treatment values β€” this ensures the statistics and audit engine can search and count treatments accurately.

Differential Diagnosis

Choose from the diagnosis value list (Musculoskeletal, Neurological, Visceral, Cranial, Naturopathic etc.) and append to the diagnosis text box. Add your own clinical detail freely in the text box.

Prognosis

Excellent / Good / Fair / Guarded / Poor / Refer β€” append and annotate as the clinical picture evolves.

Medicine lists

The standard medicine, supplement, herbal and homeopathic lists are large reference lists. They can be managed via Setup β†’ Value Lists. A dedicated medicines management interface with search and pagination will be added in a future version for easier management of the full lists.

Clinical note: Page 3 records the prescribing picture at patient level β€” a cumulative history. Per-session medicines and treatments are also recorded on the session form for session-by-session audit. Both feed the audit search engine.
πŸ“‹ Treatment Plan

The Treatment Plan is accessed via the πŸ“‹ Plan button on any patient record. It records a structured plan of up to 5 clinic-based and 5 home-based goals, tracks achievement, and produces a printable summary to show the patient.

Milestone 1 β€” Clinic Based (Practitioner Goals)

Up to 5 practitioner-led goals β€” techniques, referrals or clinical objectives. Choose from the dropdown list or type your own. Goals show in red when still to do. Click the checkbox when a goal is achieved β€” it turns green with strikethrough. A positive image for both patient and practitioner.

Milestone 2 β€” Home Based (Patient Goals)

Up to 5 patient-led goals β€” exercise, lifestyle, self-care. Same layout and colour coding as Milestone 1. The same goal list is available for both milestones.

Review tab

Shows both milestones side by side with a progress bar (e.g. 3/5 achieved) and achievement dates. The Print / Show Patient button opens a clean printable page β€” red for still to do, green strikethrough for achieved. This can be printed and given to the patient or displayed on screen during the consultation.

Goal value list

The Treatment Plan Goals list is editable in Setup β†’ Value Lists β†’ Treatment Plan Goals. Add your own goals, remove ones you don't use. Both milestones share the same list.

Clinical use: The treatment plan is designed to be shown to the patient β€” a shared agreement between practitioner and patient about what will be done in clinic and what the patient will do at home. Checking off achieved goals provides positive reinforcement and a clear record of progress.
πŸ‘£ Podiatry & Chiropody (Page 6)

The Podiatry page is accessed via the πŸ‘£ Podiatry button which sits to the left of the Edit Baseline button at the top right of the Examination Findings card on the patient's Examination tab.

Six finding groups

GroupExample findings
GeneralVerrucae, Diabetes, Flat foot, Orthotics, Gait
ForefootBunions, Morton's neuroma, Metatarsalgia, Hallux Rigidus
ToeHammer toe, Ingrown toenails, Dorsal corns
AnkleAchilles tendonitis, Ankle sprain, Peroneal tendon injury
MidfootPlantar fasciitis, Lisfranc's injury, Cuboid compression
HindfootHaglund's deformity, Tarsal tunnel syndrome, Heel spur

How to use

Select Left, Right or Both at the top. Choose a finding from any dropdown and click β†’ to append to the yellow notes field as:

Left Β· Forefoot Β· Bunions

Type the first letter in any dropdown to jump to that part of the list. The notes field is fully editable β€” add your own observations freely.

Where findings appear

Podiatry notes appear as a read-only yellow card at the bottom of the Examination tab on the patient record, with an Edit link back to Page 6. They are stored separately from the baseline examination findings.

Value lists

All six podiatry finding lists are editable in Setup β†’ Value Lists β€” look for the six Podiatry entries in the index. Add new conditions, remove ones you don't need.

☯ Five Elements & Astrology (Page 5)

Page 5 is accessed via the ☯ Elements button on any patient record. It requires a Date of Birth to be recorded for the astrological calculations. It has five tabs.

Aide memoire: Page 5 is a constitutional reference tool β€” a rapid structured snapshot of the patient's elemental and astrological profile. The detail of your five elements assessment and astrological interpretation lives in your written notes. This page finds the pattern quickly and prompts the right questions.

Tab 1 β€” Five Elements

An interactive pentagon showing the five elements in their generating cycle. Click any element in the pentagon to make it central β€” all text panels, the organ line, the pulse dropdown and the colour scheme update instantly to reflect that element.

  • Left panel β€” elemental personality text (the Wood person has high morals...)
  • Centre β€” the pentagon with generating cycle (outer) and controlling cycle (inner dashed lines). The organ/emotion/taste/smell line shows below it.
  • Right panel β€” direction and environmental text (Wood = East, growth, new beginnings...)
  • Controls β€” element dropdown, Yin/Yang/Strong/Weak radio buttons, pulse quality dropdown (auto-set from element), two practitioner note boxes

Tab 2 β€” Feng Shui

The same five elements component with the panels repositioned β€” direction text on the left, pentagon in the centre, personality text on the right. The same click-to-recentre interaction applies.

Tab 3 β€” Pulse History

A structured pulse recording tool. Set a date, select quality and value for each of the 6 positions (3 left hand, 3 right hand), then click the ↓ arrow to append a timestamped entry to the pulse history record:

02/10/2024 * +5 +4 +3 +5 +4 +3 * floating sinking rapid hesitant slow hesitant

The history accumulates over time, providing a longitudinal pulse record for comparison across visits. Left hand positions shown in red/green/blue, right hand in green/yellow/red.

Tab 4 β€” Astrology (3 sub-tabs)

Western β€” sun sign calculated automatically from DOB. Shows the sign symbol, dates, element, modality and ruling planet. Below are the full sign description (yellow), sign group text (blue) and modality text (red). The sign can be overridden via dropdown if needed.

Chinese β€” zodiac animal, element and yin/yang calculated from birth year, with character description. Note: simplified calculation β€” for births in January or February check the exact Chinese New Year date.

Indian β€” a reference table showing the correspondence between Western signs, Indian (Vedic) signs and Chinese signs with their elements. The current patient's sign is highlighted.

Tab 5 β€” Profile

Step-by-step instructions for building a complete five elements and astrological profile for a patient. Explains the workflow from DOB entry through to syndrome identification.

Recommended workflow

  • Ensure DOB is recorded on the patient record
  • Click ☯ Elements β†’ Profile tab to read the instructions
  • Check Chinese sign element (Astrology β†’ Chinese)
  • Check Western sign element (Astrology β†’ Western)
  • Compare both with the Five Elements tab β€” adjust if needed
  • Note the organ syndromes shown below the pentagon
  • Record pulse findings on the Pulse History tab after each relevant session
πŸš€ Getting Started
The design philosophy of PraxisClinic:
This system is an aide memoire β€” a structured clinical prompt, not a replacement for written notes. It allows a practitioner to record quickly the pertinent facts of a patient's history and treatment (perhaps quickly input some notes at the end of a busy day), and thus enable quality audit β€” with final reference to the patient's written notes found alphabetically. Put simply, it allows you to find a patient by condition, treatment and a myriad of other factors β€” age, sex, address, examination findings β€” which is impossible with a simple alphabetic written system on its own. The detail lives in your written notes. This system finds the patient, tells the story, and makes the connections.

First steps after installation

Before adding patients, configure the system in Setup:

  • Setup β†’ Practice β€” enter your practice name, address, therapy type and currency symbol. This information appears on letters and receipts.
  • Setup β†’ Locations β€” add your practice location(s). If you work across multiple sites, add each one here and set a default location per user.
  • Setup β†’ Users β€” add any additional practitioners or reception staff. Set their access level appropriately.
  • Setup β†’ Schedule β€” add your appointment types (e.g. New Patient 60 mins, Follow-up 30 mins) and treatment rooms.
  • Setup β†’ Value Lists β€” customise the occupation and therapy type dropdowns.

Recommended first-use order

  • 1. Configure Setup as above
  • 2. Add your GP contacts (Contacts β†’ New Contact, type GP)
  • 3. Add your first patient
  • 4. Record baseline examination findings for that patient
  • 5. Record their first session
  • 6. Write a letter if needed
Tip: Button tooltips are on by default β€” hover over any button to see what it does. Once you're familiar, turn them off in Setup β†’ Practice.

Changing your password

Go to Setup β†’ Password. You'll need to enter your current password before setting a new one. Minimum 8 characters.

πŸ‘€ Patients

Adding a new patient

Click + New Patient from the Patients list. The only required field is Surname β€” all other fields can be filled in later. After saving you'll be taken directly to the patient record.

Searching for patients

The search bar on the Patients list searches across: surname, forename, phone, mobile, email and postcode. You can also filter by status (New, Existing, Regular etc.) and by practice location.

The patient record β€” top strip

The coloured strip at the top of every patient record shows the key clinical facts at a glance:

  • Name, DOB, age, sex β€” always visible
  • Primary condition β€” the original presenting complaint, set once and rarely changed
  • Therapy type and practice location
  • Precautions β€” shown in bold red if recorded (allergies, pacemakers, anticoagulants etc.)
  • Arrow buttons ↑ ↓ β†’ β€” set the patient's current trajectory (improving, worsening, stable)
  • Colour tag β€” for grouping patients in audit projects (see below)
  • Priority star β˜… β€” shown when Priority is ticked in Edit

Patient record tabs

  • Details β€” contact information, GP, insurance, practice details, and the yellow notes field
  • Clinical β€” presenting condition, precautions, past medical history, other therapists. Also shows a read-only summary of Page 3 fields (diagnosis, prognosis, medicine history, treatment history) if populated β€” each with an Edit link going straight to Page 3.
  • Sessions β€” full treatment history, most recent first
  • Examination β€” baseline examination findings, plus a read-only summary of Page 2 history fields and the pain map thumbnail
  • Letters β€” all letters written for this patient
  • Attachments β€” uploaded files (PDFs, images) linked to this patient

The three note types

TypeAppearancePurpose
Yellow notes Yellow background, black text Per-patient narrative notepad. Informal, free text. Record secondary conditions, memorable details, date-stamped observations. "Great guitarist β€” came in with neck pain after long recording session."
Precautions Bold red text Safety-critical information β€” latex allergy, pacemaker, anticoagulants, contrast media reactions. Shown prominently on all views.
Practice notes Small turquoise text Practice-wide noticeboard β€” the same text appears on every patient record. Use for admin reminders relevant to all staff: "Buy couch roll", "Parking suspended 15th-17th".

The colour tag β€” audit and research tool

The colour dots in the patient top strip are a temporary grouping tool for audit work, not a permanent clinical indicator. For example:

  • Search for all female patients aged 20–40 with neck conditions
  • Set them all to Yellow using the colour tag
  • Filter the patient list by Yellow to work with that cohort
  • Clear the colour when your analysis is complete

Colours available: Green, Yellow, Red, Blue, Grey and Clear. They carry no fixed clinical meaning β€” you decide what each colour represents for a given project.

Primary condition vs session condition

The Primary Condition on the patient record is the original presenting complaint β€” it's set once at first contact and reflects why this person became your patient. It doesn't change when they come in with something different one week.

Each Session records its own primary and secondary condition for that visit. Secondary conditions and evolving presentations are captured in the yellow notes and per-session records.

Clinical note: If a long-standing patient presents with a new unrelated condition, consider whether to update their primary condition or simply record it in the session and yellow notes. Most practitioners leave the original condition in place.
πŸ“‹ Sessions

Recording a session

Sessions are individual treatment appointments. Add a new session from the patient record (+ Session button) or from the Sessions list. Sessions require Medium Level access or above β€” reception staff can view sessions but cannot add or edit them.

Session fields

  • Date β€” defaults to today
  • Primary condition β€” what you treated this visit
  • Secondary condition β€” any concurrent presenting complaint
  • State β€” Acute, Sub-acute, or Chronic
  • Nerve radiation β€” free text description of any radiation pattern
  • SLR β€” straight leg raise result in degrees (left and right)
  • Worse / Better β€” aggravating and relieving factors
  • Accident β€” whether trauma is involved and how long ago
  • Treatments β€” what techniques you used
  • Treatment notes β€” free text clinical notes
  • Improvement β€” patient's reported improvement level
  • Maintenance β€” whether this is a maintenance visit
  • Medicines β€” standard medications, supplements, herbs, homeopathics
  • Fee and payment β€” amount, paid status, payment method

Examination findings in sessions

The session form includes all 7 examination tabs. You only need to record what has changed from the baseline β€” the baseline findings are shown as hints (blue dots). If nothing has changed neurologically, leave the Neurological tab blank.

The session view shows changed findings highlighted in blue with a "new" badge, making it easy to see what was different at that visit compared to the patient's baseline.

Tip: The Sessions list (top nav) shows all sessions across all patients, filterable by date range, practitioner, location, condition and paid status β€” useful for end-of-month income reconciliation.
🦴 Examination Findings

Baseline vs session findings

Examination findings work on a two-tier system:

  • Baseline β€” recorded on the patient record, updated only when there is a significant change to the overall clinical picture. This is the reference against which future sessions are compared.
  • Session changes β€” recorded per-session, only when findings differ from the baseline. If cranial nerve examination is normal and unchanged, leave it blank.

The 7 examination tabs

TabWhat it covers
🧠 NeurologicalCranial nerves I–XII individually, Valsalva, reflexes
🦴 Structural / OrthopaedicFP, SLR, ADAMS, KEMPS, percussion, compression, distraction, ROM restrictions, Tinnels, sacroiliac
🫁 AbdominalTenderness, guarding, quadrant locations, hernia, aortic pulse, organ enlargement
πŸ‘… Bowels / TongueBowel habit, IBS, colitis, blood/fatty stools, tongue appearance
πŸ‘ Eyes / SkinBP signs, pupils, skin conditions, jaundice, cyanosis
πŸ«€ CV / RespiratorySOB, pulse quality, oedema, breath sounds, cough type
πŸ‘ƒ Smell / HearingCharacteristic smells, halitosis, hearing changes, tinnitus
Red flag findings: Several examination findings indicate the need for urgent referral. The red flag field on the patient record should be set whenever a finding warrants GP notification. Use the GP referral letter template to document this formally.

Audit trail

The patient examination page shows the full history of session-level changes with dates, each linking back to the original session record. This provides a longitudinal record of how the clinical picture has evolved over time.

History and pain map on the Examination tab

The Examination tab on the patient record also shows a read-only summary of the Page 2 case history fields β€” secondary conditions, condition duration, accident/RTA, PMH & cranial text, and the examination findings mosaic. The pain map (front and back body diagram) appears as a compact thumbnail alongside these fields, with only the painted zones coloured. All fields link back to Page 2 for editing.

Podiatry & Chiropody

The Examination tab has a πŸ‘£ Podiatry button in the top right of the baseline findings card. This opens a dedicated podiatry page with six finding groups β€” General, Forefoot, Toe, Ankle, Midfoot and Hindfoot β€” each with a dropdown value list. Select Left / Right / Both, choose a finding and click β†’ to append to the podiatry notes field. Podiatry notes are stored separately from the baseline examination findings and shown in their own card at the bottom of the Examination tab when recorded.

πŸ“… Schedule

Views

  • Week view (default) β€” a time grid from your diary start to end time, with one column per day. Click any empty slot to book an appointment.
  • Day view β€” single day, same grid. Click a day number in week view to jump to day view for that date.
  • Month view β€” calendar overview. Shows up to 3 appointments per day. Click a day to go to day view.

Booking an appointment

Click any empty time slot or the + New Appointment button. The booking form lets you set:

  • Patient β€” select from your patient list
  • Appointment type β€” automatically sets the duration (configurable in Setup β†’ Schedule)
  • Duration β€” overridable per booking
  • Room / Resource β€” if you have multiple treatment rooms
  • Notes β€” clinical or admin notes for this appointment
  • Special needs β€” downstairs room required, extra time, latex allergy etc. Shown prominently in orange.
  • Confirmed β€” tick when patient has confirmed attendance
  • Send reminder β€” flag for reminder (reminder sending infrastructure will be added in a future version)
  • Recurring β€” set a repeat pattern (weekly, fortnightly, monthly) with an end date

Entry types

  • Appointment β€” patient booking
  • Blocked β€” unavailable time (grey)
  • Admin β€” administration time
  • Holiday β€” practitioner holiday or absence

Viewing other practitioners' diaries

Use the practitioner dropdown at the top of the schedule to switch between diaries. Administrators can view all diaries. The Side by side button (admin only) shows all practitioners in columns simultaneously.

Editing another practitioner's appointments

If you try to edit an appointment belonging to another practitioner, you will be asked to enter that practitioner's password. This prevents accidental changes to someone else's diary while still allowing reception staff to make bookings on behalf of practitioners.

Marking attendance

Click an appointment to open the popup, then click βœ“ Attended to mark the patient as attended. This can be done by reception at the time of the appointment. Attended appointments are shown with reduced opacity.

Diary settings

Click βš™ Diary Settings to configure your personal diary preferences:

  • Day start and end time
  • Appointment slot duration (15, 20, 30, 45, 60, 90 mins)
  • Show or hide weekends

Each practitioner has their own diary settings. Administrators can set settings for any user.

Tip: The slot duration sets the grid granularity β€” it doesn't restrict appointment length. A 30-minute slot grid can still have 60-minute appointments that span two slots.
πŸ’· Accounts

Income tab

Records payments received from patients. Each receipt records: date, patient (optional), amount, payment method, status (stored/pending/void), practitioner and notes.

Income receipts can be added by reception staff (Low Level access). Only Medium Level and above can add expenditure or delete records.

Expenditure tab

Records business outgoings. Expense types include: courses, equipment, materials, postage, rent, software, stationery and more. Each expense records: date, type, recipient, amount, payment method, and optional tax rate.

The Debit / Credit field distinguishes outgoing payments from refunds received.

Filtering

Filter by year and month. The summary bar at the top always shows the filtered totals for Income, Expenditure and Net β€” useful for monthly reconciliation and annual returns.

Payment methods

Cash, Cheque, Debit Card, Credit Card, BACS, Insurance, Trade, Unpaid, Gratis.

Tip: For end-of-year accounts, filter to the full year and use the Net total as your starting point. The accounts module is a cash book β€” for VAT returns and formal accounts you'll still need your accountant, but this gives them clean data to work from.
βœ‰ Letters

Writing a letter

Open a patient record and click βœ‰ Letter. Choose a template or start blank. The letter is pre-populated with patient and practice details via merge variables.

Merge variables

Templates use {{double curly braces}} for merge fields. Available variables:

VariableFills with
{{patient_name}}Patient's full name
{{patient_address}}Patient's full address
{{patient_dob}}Patient's date of birth
{{gp_name}}Patient's GP name (from linked contact)
{{gp_address}}Patient's GP address
{{practitioner}}Logged-in practitioner's name
{{practice_name}}Practice name from Setup
{{practice_address}}Practice address from Setup
{{letter_date}}Today's date
{{presenting_condition}}Most recent session's primary condition
{{treatments}}Most recent session's treatments

Starter templates

  • Appointment Reminder β€” includes appointment date/time placeholders
  • Discharge Letter to Patient
  • GP Referral Letter β€” includes patient details, presenting complaint, examination findings placeholder
  • GP Letter β€” Treatment Report
  • Dietary Advice Letter
  • General Letter β€” blank template

Audit trail

Every saved letter is stored against the patient record with the date, recipient, subject and the name of who wrote it. Letters appear in the Letters tab of the patient record and in the main Letters list.

GP referral tip: For the GP referral template to auto-populate the GP's name and address, make sure the patient has a GP linked in their record (Edit β†’ GP field) and that GP's details are in Contacts.
πŸŽ“ CPD β€” Continuing Professional Development

Recording CPD

Each entry records: date, category, title, provider, hours, whether a certificate is held, notes and a reflection. The reflection field is required by most UK regulatory bodies for audit purposes.

CPD categories

  • Course / Workshop
  • Conference / Seminar
  • Webinar / Online Learning
  • Reading / Research
  • Supervision / Mentoring
  • Peer Review
  • Teaching / Presenting
  • Clinical Observation
  • Self-directed Study
  • Other

Printing for your regulatory body

Click Print / Export to open a clean print-ready version of your CPD log. This opens in a new tab and triggers the print dialog automatically. It includes all entries for the selected year, your reflection notes, and a total hours summary showing verified vs unverified hours.

Filter by year before printing to produce your annual CPD return. The GOsC and other regulatory bodies typically require a minimum of 30 hours per year.

Multiple practitioners

Each practitioner sees only their own CPD log. Administrators can switch between practitioners using the dropdown at the top of the CPD page.

Tip: Log CPD as you go rather than trying to reconstruct it at annual review time. A brief reflection written immediately after a course is much more valuable than one written six months later.
πŸ“‡ Contacts

What contacts are for

Contacts stores GPs, specialists, referrers, associates and other healthcare providers. A patient can have a GP linked to their record β€” when you write a GP referral letter, the GP's name and address auto-populate from this contact record.

Contact types

GP, Specialist, Physiotherapist, Osteopath, Chiropractor, Acupuncturist, Herbalist, Homeopath, Naturopath, Counsellor, Podiatrist, Reflexologist, Aromatherapist, Insurer, Solicitor, Associate, Staff, Reception, Other.

Dual address

Each contact can have two addresses β€” typically a surgery/practice address (A) and a home address (B). The secondary address is hidden by default and expands when needed.

Linked patients

When viewing a GP contact record, all patients who have that GP linked to their record are listed at the bottom β€” useful for managing practice populations and referral relationships.

βš™ Setup

Practice tab

Sets the practice name, address, default practitioner, therapy type, currency symbol, tax rate, date format, review period and the practice-wide noticeboard (global notes). Also controls hover tips and the welcome screen.

Review Period

Set a default review period (e.g. 6 Months, 12 Months) to flag patients who haven't been seen within that time. Once set, a πŸ• review flag appears in four places:

  • Patient list β€” a πŸ• clock icon next to the Last Seen date for overdue patients
  • Patient record β€” a yellow banner at the top showing how long since their last visit, with a quick + Book Session button
  • Welcome dashboard β€” a "Due for Review" pane showing the most overdue patients
  • Audit page β€” a "Due for Review" quick search button that shows all overdue patients in the patient list

The review message (optional) appears in the patient record banner β€” useful for a standard reminder such as "Consider booking a maintenance appointment."

Password tab

Change your own login password. Requires your current password. Minimum 8 characters.

Locations tab

Add and manage practice locations. Each location has a full address, phone and email. The default location table at the bottom lets you set which location each user is based at β€” this pre-selects the location when adding patients and sessions.

Schedule tab

Manage appointment types (name, default duration, colour) and treatment rooms/resources. Changes here affect all practitioners. The colour assigned to an appointment type is used in the diary grid.

Colour Labels tab

Label each of the five audit colours to describe what cohort they currently represent. For example: Green = "Female patients, low back, under 45", Red = "Maintenance patients due review". Labels appear as tooltips on colour dots throughout the system β€” on patient records, the Audit page and Statistics. Clear the label when the audit project is complete.

Locations, Schedule, Colour Labels tabs

Available to High Level and Administrator. Locations manages practice sites. Schedule manages appointment types and treatment rooms. Colour Labels sets the meaning of each audit colour tag.

Value Lists tab

Available to High Level and Administrator. Shows all dropdown lists used across the system with an index at the top. High Level users can add new values to any list. Only Administrators can delete values β€” this prevents one practitioner accidentally removing entries needed by another.

Users tab

Administrator only. Create and manage user accounts, access levels and enabled status. You cannot delete your own account or reduce your own access level.

πŸ“€ Import / Export

Import/Export is in the main navigation. High Level access or above required.

Export tab

Five CSV export buttons β€” Patients, Sessions, Income, Expenditure and Contacts. Each downloads a UTF-8 CSV file that opens correctly in Excel, Numbers or any spreadsheet. Exports include all fields including clinical data from Pages 2 and 3.

GDPR: Exported files contain personal health data. Store them securely, do not email them unencrypted, and delete them when no longer needed.

Import tab

Import patients from any CSV file β€” FileMaker export, another practice management system, or a spreadsheet. Two steps:

  • Step 1 β€” Upload your CSV file. A preview of the first few rows is shown.
  • Step 2 β€” Map each column to the correct field. Common field names (including FileMaker field names) are auto-detected. Columns you don't need can be skipped.

Rows without a surname are skipped. All other validation errors are reported after the import with a count of imported vs skipped records.

FileMaker users: In FileMaker go to File β†’ Export Records, choose Comma-Separated Values (.csv), and export your patient layout. CrystalSolutions will auto-detect common FileMaker field names in the column mapping step.

Patient Record Export tab

Export a single patient's complete record as a printable document. Select the patient and which sections to include (contact details, clinical, Pages 2 and 3, sessions, letters, attachments). Opens as a clean print-ready page β€” use Print β†’ Save as PDF in your browser to generate a PDF.

The πŸ“€ Export button on every patient record goes directly here. Useful for subject access requests, referrals, or patient handover.

Subject Access Requests: You have 30 days to respond. This export provides the complete patient record. Seek legal advice before withholding any clinical notes from a SAR.
πŸ” Access Levels

The four access levels

LevelTypical userKey permissions
Low Level Receptionist / admin View patients and sessions, add patients, add income receipts, book appointments, view letters and contacts. Cannot add sessions, write letters, add expenditure, access CPD or Setup.
Medium Level Practitioner Everything Low Level can do, plus: add and edit sessions, write letters, add expenditure, log CPD, access Setup (Practice and Password tabs only).
High Level Senior practitioner Everything Medium Level can do, plus: view and edit all practitioners' sessions and records. Setup access including Locations, Schedule, Value Lists (add only β€” cannot delete) and Colour Labels. Import/Export access.
Administrator Practice owner / manager Full access including user management, delete any record, delete value list entries, side-by-side diary view.

Diary access

All access levels can view the schedule and book appointments. Editing another practitioner's existing appointment requires entering that practitioner's password β€” this prevents accidental changes while still allowing reception to manage bookings.

Note: Access levels are enforced on the server β€” simply knowing a URL does not grant access. Attempting to access a restricted page redirects to the patient list with an access denied message.
🫐 Raspberry Pi Installation Guide

Why a Raspberry Pi?

A Raspberry Pi 4 or Pi 5 is the ideal practice server for CrystalSolutions:

  • Costs around Β£55–£80 new (Pi 4 2GB or Pi 5 2GB)
  • About the size of a credit card β€” fits behind a monitor, in a drawer, or in a cupboard
  • Completely silent β€” no fan, no noise
  • Uses only 3–5 watts β€” costs pennies per year to run 24/7
  • Runs Linux (Raspberry Pi OS) β€” stable, secure, free
  • Restarts automatically after power cuts

What you need

  • Raspberry Pi 4 or Pi 5 (2GB RAM minimum, 4GB recommended)
  • MicroSD card β€” 16GB minimum, 32GB recommended (Class 10 or better)
  • USB-C power supply (official Pi power supply recommended)
  • A network cable (Ethernet) or WiFi connection to your practice router
  • A keyboard and monitor for initial setup only β€” not needed afterwards
Kit recommendation: The official Raspberry Pi starter kit (Pi 4, case, power supply, MicroSD) costs around Β£80–£90 and includes everything you need. Available from raspberrypi.com, Pimoroni, or The Pi Hut.

Step 1 β€” Install Raspberry Pi OS

On any computer, download the Raspberry Pi Imager from raspberrypi.com/software. Insert your MicroSD card, open the Imager, choose Raspberry Pi OS Lite (64-bit) as the operating system, select your MicroSD card, and click Write.

Before writing, click the βš™ settings icon to:

  • Set a hostname (e.g. cspractice)
  • Enable SSH
  • Set a username and password (remember these)
  • Configure your WiFi if not using Ethernet

Step 2 β€” First boot and connect

Insert the MicroSD into the Pi, connect power and Ethernet, and wait 2 minutes for first boot. From any other computer on the same network, open Terminal (Mac) or Command Prompt (Windows) and type:

ssh pi@cspractice.local

Enter your password when prompted. You are now connected to the Pi.

Step 3 β€” Update and install the stack

Copy and paste these commands one at a time. Wait for each to finish before running the next:

sudo apt update && sudo apt upgrade -y
sudo apt install -y apache2 php php-mysql php-mbstring mysql-server
sudo systemctl enable apache2 mysql
sudo systemctl start apache2 mysql

Step 4 β€” Secure MySQL and create the database

sudo mysql_secure_installation

Answer Yes to all questions and set a root password. Then:

sudo mysql -u root -p
CREATE DATABASE crystalsolutions CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'csuser'@'localhost' IDENTIFIED BY 'choose-a-strong-password';
GRANT ALL PRIVILEGES ON crystalsolutions.* TO 'csuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Step 5 β€” Install CrystalSolutions

sudo mkdir -p /var/www/html/cspractice
sudo chown -R pi:pi /var/www/html/cspractice

Copy the CrystalSolutions files into /var/www/html/cspractice/ using a tool like FileZilla (SFTP, free) or the scp command. Edit config.php with your database credentials.

Step 6 β€” Enable mod_rewrite

sudo a2enmod rewrite
sudo nano /etc/apache2/sites-available/000-default.conf

Find the <Directory /var/www/html> section and change AllowOverride None to AllowOverride All. Save with Ctrl+O, exit with Ctrl+X, then:

sudo systemctl restart apache2

Step 7 β€” Run the SQL migrations

Install Adminer for database management:

sudo wget -O /var/www/html/adminer.php https://www.adminer.org/latest.php

Visit http://cspractice.local/adminer.php from any device on your network, log in and run the SQL files from the sql/ folder in order.

Step 8 β€” Find your Pi's IP address

hostname -I

This shows your Pi's IP address (e.g. 192.168.1.50). Set it as a static IP in your router settings. CrystalSolutions is then accessible from any device on your network at:

http://192.168.1.50/cspractice

Automated database backups

nano ~/backup-cs.sh

Paste this content:

#!/bin/bash
DATE=$(date +%Y-%m-%d)
BACKUP_DIR="/home/pi/backups"
mkdir -p "$BACKUP_DIR"
mysqldump -u csuser -p'your-password' crystalsolutions \
  > "$BACKUP_DIR/crystalsolutions-$DATE.sql"
find "$BACKUP_DIR" -name "*.sql" -mtime +30 -delete
chmod +x ~/backup-cs.sh
crontab -e
# Add this line:
0 2 * * * /home/pi/backup-cs.sh

Remote access with Tailscale (optional)

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up

Install Tailscale on the Pi and on each device that needs remote access. Sign in with the same account. The Pi gets a fixed Tailscale IP accessible from anywhere β€” perfect for home visits or a second site.

Not technical? The installation only needs to be done once. If these steps look daunting, ask a tech-savvy friend, local IT person or student β€” it's a 45-minute job for anyone comfortable with Linux. What to ask for: "I need Apache, PHP and MySQL installed on a Raspberry Pi, with a folder set up as a website."
Total cost estimate (Raspberry Pi intranet setup):
Raspberry Pi 4 starter kit: Β£80–£90 Β· USB drive for backups: Β£10–£15 Β· Software: free
Ongoing: Β£0/month β€” about Β£1–£2/year in electricity
🍎 Mac Installation Guide

Recommended hardware

Any Mac Mini (2018 or later) makes an excellent practice server. The 2023 M2 Mini is ideal β€” fast, silent, uses only 6–12W, and will last many years. For a dedicated server, 8GB RAM and 256GB SSD is sufficient for a small practice.

Used Mac Mini tip: Buy from Back Market, eBay or Apple Refurbished. A 2018 Mac Mini with 8GB RAM costs around Β£200–£280 and will run this system without any difficulty. Avoid the 2014–2017 models β€” spinning disk versions are very slow.

Step 1 β€” Install Homebrew

Homebrew is the macOS package manager. Open Terminal (Applications β†’ Utilities β†’ Terminal) and paste:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Follow the prompts. On Apple Silicon Macs (M1/M2/M3) it installs to /opt/homebrew. On Intel Macs it installs to /usr/local.

Step 2 β€” Install PHP, MySQL and Caddy

brew install php mysql caddy

This installs PHP 8.3, MySQL 8, and Caddy (a modern web server that handles SSL automatically).

Step 3 β€” Start MySQL and set a root password

brew services start mysql
mysql_secure_installation

Follow the prompts to set a root password. Choose Yes to all security questions.

Step 4 β€” Create the database

mysql -u root -p
CREATE DATABASE crystalsolutions CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'csuser'@'localhost' IDENTIFIED BY 'choose-a-strong-password';
GRANT ALL PRIVILEGES ON crystalsolutions.* TO 'csuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Step 5 β€” Install CrystalSolutions

Create the web root folder and copy the CrystalSolutions files into it:

mkdir -p /Users/Shared/www/cspractice
# Copy the CrystalSolutions files into /Users/Shared/www/cspractice/
# Edit config.php with your database credentials

Step 6 β€” Configure Caddy

Create a file called Caddyfile in your home folder:

:80 {
    root * /Users/Shared/www
    php_fastcgi unix//opt/homebrew/var/run/php-fpm.sock
    file_server
    encode gzip
}

Then start Caddy and PHP-FPM:

brew services start php
brew services start caddy

Step 7 β€” Find your local IP address

Go to System Settings β†’ Network β†’ your WiFi connection β†’ Details. Note the IP address (e.g. 192.168.1.50). Set it to be static in your router settings so it never changes.

CrystalSolutions is now accessible from any device on your network at:
http://192.168.1.50/cspractice

Step 8 β€” Run the SQL migrations

Install Adminer (a single-file database admin tool) for running the SQL files:

curl -o /Users/Shared/www/adminer.php https://www.adminer.org/latest.php

Visit http://192.168.1.50/adminer.php, log in with your database credentials, select the crystalsolutions database, and run each SQL file from the sql/ folder in order (01 through 09).

Step 9 β€” Auto-start on boot

The brew services command already configures PHP, MySQL and Caddy to start automatically when the Mac boots. Make sure the Mac Mini is set to restart automatically after a power failure: System Settings β†’ Energy β†’ Options β†’ Start up automatically after a power failure.

Remote access with Tailscale (optional)

To access the system from outside the practice (home visits, second site, working from home):

  • Download Tailscale from tailscale.com β€” free for personal use
  • Install on the Mac Mini server and on each device that needs remote access
  • Sign in with the same Tailscale account on all devices
  • The Mac Mini gets a fixed Tailscale IP (e.g. 100.64.x.x) β€” use this to access CrystalSolutions from anywhere

Automated database backups

Create a backup script. Open Terminal and create the file:

nano ~/backup-cs.sh

Paste this content:

#!/bin/bash
DATE=$(date +%Y-%m-%d)
BACKUP_DIR="/Users/Shared/backups"
mkdir -p "$BACKUP_DIR"
/opt/homebrew/bin/mysqldump -u csuser -p'your-password' crystalsolutions \
  > "$BACKUP_DIR/crystalsolutions-$DATE.sql"
# Keep only last 30 days
find "$BACKUP_DIR" -name "*.sql" -mtime +30 -delete

Make it executable and schedule it daily at 2am:

chmod +x ~/backup-cs.sh
crontab -e
# Add this line:
0 2 * * * /Users/your-username/backup-cs.sh

Time Machine will then back up these SQL dump files along with everything else. Test your backup by restoring a dump file to a test database.

Total cost estimate (Mac Mini intranet setup):
Used 2018 Mac Mini: Β£200–£280 Β· External backup drive: Β£40–£60 Β· Software: free
Ongoing: Β£0/month (no hosting fees, no subscription)
Not technical? The installation only needs to be done once. If the steps above look daunting, ask a tech-savvy friend, a local IT person, or a student β€” it's a straightforward 30–45 minute job for anyone comfortable with computers. Once it's running, day-to-day use requires no technical knowledge at all. What to ask for: "I need PHP, MySQL and a web server installed on this Mac, and a local folder set up as a website."
πŸͺŸ Windows Installation Guide

Recommended hardware

Any Windows PC or laptop with Windows 10 or 11 will work. For a dedicated practice server, a used mini-PC (Beelink, Intel NUC, or similar) is ideal β€” compact, quiet and power-efficient. Budget Β£100–£200 for a used unit with 8GB RAM and an SSD.

Windows tip: A used Dell OptiPlex or HP EliteDesk small form factor PC makes an excellent practice server. Available on eBay for Β£80–£150 with Windows 10 Pro, i5 processor and SSD. Runs silently and uses very little power.

Option A β€” XAMPP (easiest, recommended for beginners)

XAMPP bundles Apache, PHP and MySQL into a single installer with a graphical control panel. It's the quickest way to get running.

1. Download and install XAMPP

Download from apachefriends.org β€” choose the PHP 8.3 version. Run the installer, accepting defaults. Install to C:\xampp.

2. Start Apache and MySQL

Open the XAMPP Control Panel (Start Menu β†’ XAMPP Control Panel). Click Start next to Apache and MySQL. Set both to start automatically by clicking the checkbox on the left.

3. Create the database

Open a browser and go to http://localhost/phpmyadmin. Click New in the left panel, name the database crystalsolutions, set collation to utf8mb4_unicode_ci, and click Create.

Then go to User Accounts β†’ Add user account. Create a user csuser with host localhost, set a strong password, and tick Grant all privileges on crystalsolutions.

4. Install CrystalSolutions

Copy the CrystalSolutions files into C:\xampp\htdocs\cspractice\. Edit config.php with your database credentials.

5. Run the SQL migrations

In phpMyAdmin, select the crystalsolutions database, click the SQL tab, and run each file from the sql/ folder in order (01 through 09).

6. Access from other devices

Find your local IP: open Command Prompt (Win+R β†’ cmd) and type ipconfig. Note the IPv4 address (e.g. 192.168.1.60). Set it as a static IP in your router.

Windows Firewall may block access from other devices. Go to Windows Defender Firewall β†’ Allow an app β†’ allow Apache HTTP Server for private networks.

CrystalSolutions is then accessible at: http://192.168.1.60/cspractice

Option B β€” Laragon (more powerful, cleaner)

Laragon (laragon.dev) is a modern alternative to XAMPP β€” faster, cleaner, and easier to manage multiple PHP versions. Download the full version, install it, and follow the same steps as XAMPP above. The web root is C:\laragon\www\.

Enabling mod_rewrite (Apache)

CrystalSolutions uses .htaccess for URL handling. In XAMPP, open C:\xampp\apache\conf\httpd.conf in Notepad, find the line #LoadModule rewrite_module and remove the #. Also find AllowOverride None for the htdocs directory and change it to AllowOverride All. Restart Apache.

Remote access with Tailscale (optional)

Same as Mac β€” download Tailscale from tailscale.com, install on the server PC and on each device that needs remote access, sign in with the same account. The server gets a fixed Tailscale IP accessible from anywhere.

Automated database backups

Create a batch file for daily backups. Open Notepad and save as backup-cs.bat:

@echo off
SET DATE=%date:~10,4%-%date:~4,2%-%date:~7,2%
SET BACKUP=C:\backups\crystalsolutions-%DATE%.sql
IF NOT EXIST C:\backups mkdir C:\backups
"C:\xampp\mysql\bin\mysqldump.exe" -u csuser -pyour-password crystalsolutions > %BACKUP%

Schedule it: open Task Scheduler (Start β†’ Task Scheduler), create a Basic Task, set it to run daily at 2:00 AM, and point it to your batch file. Copy the backup folder to an external drive or cloud storage regularly.

Windows-specific security notes

  • Set a Windows login password on the server PC β€” do not use auto-login
  • Enable Windows Update and keep it current
  • Change the MySQL root password from the default (XAMPP ships with a blank root password β€” fix this immediately in phpMyAdmin β†’ User Accounts)
  • Consider enabling BitLocker drive encryption (available on Windows 10/11 Pro) to protect patient data if the machine is stolen

Useful free tools for Windows

  • HeidiSQL β€” excellent MySQL GUI for Windows, easier than phpMyAdmin for some tasks
  • Notepad++ β€” for editing config.php and other files
  • WinSCP β€” if you ever need to transfer files to a remote server
  • Tailscale β€” secure remote access without port forwarding
Total cost estimate (Windows mini-PC intranet setup):
Used Dell OptiPlex / HP EliteDesk: Β£80–£150 Β· External backup drive: Β£40–£60 Β· Software: free
Ongoing: Β£0/month (no hosting fees, no subscription)
Not technical? The installation only needs to be done once. If the steps above look daunting, ask a tech-savvy friend, a local IT person, or a student β€” it's a straightforward 30–45 minute job for anyone comfortable with Windows. Once it's running, day-to-day use requires no technical knowledge at all. What to ask for: "I need XAMPP installed on this PC and a local folder set up as a website running PHP and MySQL."
πŸ“¦ Synology NAS Installation Guide

Why a NAS?

Many small practices already have a Synology or QNAP NAS for file storage and backups. These devices run 24/7, consume very little power, and most modern models support PHP and MariaDB β€” making them ideal CrystalSolutions servers. No additional hardware needed.

Requirements

  • DSM 7.x (most Synology NAS devices from 2018 onwards)
  • At least 1GB RAM (2GB recommended)
  • Internet access during package installation

Step 1 β€” Install Web Station

Open Package Center β†’ search for Web Station β†’ Install. Web Station provides Apache/Nginx and PHP support on your NAS.

Step 2 β€” Install and configure PHP 8

In Web Station β†’ Script Language Settings β†’ click your PHP 8.2 user defined profile β†’ Extensions tab. Enable: pdo_mysql, mysqli, gd. These are the key ones needed for CrystalSolutions to run. (pdo, mbstring and fileinfo may not appear in the list β€” that's fine, they are built into Synology's PHP and don't need enabling separately. We couldn't add them and installation worked correctly without them.)

Step 3 β€” Install MariaDB 10

Package Center β†’ search MariaDB 10 β†’ Install. Set a strong root password when prompted β€” write it down. MariaDB is fully MySQL-compatible and works with CrystalSolutions without any changes.

Step 4 β€” Install phpMyAdmin (recommended)

Package Center β†’ search phpMyAdmin β†’ Install. Use this to create the database and user before running the setup wizard.

Step 5 β€” Create the database

Open phpMyAdmin β†’ log in as root β†’ click New in the left panel β†’ name the database crystalsolutions β†’ select utf8mb4_unicode_ci collation β†’ Create. Then create a database user with full privileges on that database.

Step 6 β€” Create a web folder

In File Station, navigate to the web shared folder β†’ create a new folder called cspractice. The full path will be /volume1/web/cspractice.

Step 7 β€” Configure Web Station

Web Station β†’ Web Service Portal β†’ Create β†’ choose your PHP 8 profile β†’ set Document Root to /volume1/web/cspractice. Note the port (usually 80 or 8080).

Step 8 β€” Upload CrystalSolutions files

Use File Station or an FTP client (Fetch, Cyberduck, FileZilla) to copy all CrystalSolutions files into /volume1/web/cspractice.

Step 9 β€” Run the Setup Wizard

From any browser on your network, open http://[nas-ip-address]/cspractice/setup_wizard.php. Follow the five steps. The base URL will typically be http://192.168.x.x/cspractice β€” check your NAS IP address in DSM β†’ Control Panel β†’ Network.

Tip: Assign a static IP to your NAS in your router settings (DHCP reservation by MAC address). This ensures CrystalSolutions is always at the same address on your network.

Step 10 β€” Delete the wizard and log in

Delete setup_wizard.php from File Station. Then open http://[nas-ip]/cspractice and log in with the admin account you created.

File permissions

If file attachments aren't working, the attachments/ folder may need write permissions. In File Station, right-click the attachments folder β†’ Properties β†’ Permissions β†’ ensure the web server user (usually http) has read/write access.

Automated backups

Use Hyper Backup (available in Package Center) to schedule nightly backups of the MariaDB database. Back up to a USB drive, another NAS, or a Synology C2 cloud destination. Include the cspractice web folder to back up attachments.

QNAP NAS: The process is very similar β€” use Web Server and phpMyAdmin from the QNAP App Center, and MySQL/MariaDB for the database. The setup wizard runs identically once files are in place.
πŸ§™ Setup Wizard

The Setup Wizard (setup_wizard.php) is included in every CrystalSolutions distribution. It installs the system in your browser in five steps β€” no command line, no manual file editing. The same wizard works identically on Synology NAS, Windows (XAMPP), Mac (MAMP), Raspberry Pi and Linux.

Before running the wizard

  • Copy all CrystalSolutions files to your web server folder (see the relevant installation guide for your platform)
  • Create an empty MySQL / MariaDB database and a database user with full privileges on it β€” do this in phpMyAdmin or via the command line before starting the wizard
  • Leave config.php as-is β€” the wizard will overwrite it with your settings

Running the wizard

Open a browser and go to http://[your-server]/cspractice/setup_wizard.php. The wizard walks through five steps:

  • Step 1 β€” Pre-flight checks β€” confirms PHP version, required extensions, folder permissions and that the sql/ folder is present. Any failed check is shown with a clear explanation.
  • Step 2 β€” Database β€” enter your database host, name, username and password. The wizard tests the connection live and won't proceed if it can't connect.
  • Step 3 β€” Practice details β€” practice name, default therapy type, currency and the base URL (auto-guessed from your server address β€” check it carefully).
  • Step 4 β€” Admin account β€” create your Administrator login: username, display name and password (minimum 8 characters).
  • Step 5 β€” Install β€” shows a summary for review, then runs all database migrations, saves practice settings, creates your admin user and writes config.php. A full installation log is shown.

After installation

When the wizard completes you'll see a Go to CrystalSolutions β†’ button. Click it and log in with the admin account you just created.

Important: Delete setup_wizard.php from your server immediately after installation. Leaving it in place is a security risk β€” anyone who can reach your server URL could run it again.

If config.php can't be written

On some servers (particularly NAS devices with strict folder permissions), the wizard may not be able to write config.php automatically. In that case, the wizard shows the values you need to paste in manually and completes all other installation steps normally. Edit config.php in a text editor and replace the placeholder values with those shown.

Re-running the wizard

The wizard is blocked if config.php already contains real database credentials β€” a security measure to prevent accidental reinstallation. To re-run it, replace config.php with the original placeholder version from the distribution zip.

πŸ”‘ Licence

CrystalSolutions requires a licence key to operate without restrictions. Keys are in the format CS-XXXX-XXXX-XXXX-XXXX and are provided when you purchase the software.

Activating your licence

Go to Setup β†’ Licence (Administrator only). Enter your licence key, name and email address, then click Activate. The licence is stored in the database and applies to the whole installation β€” all users benefit from a single activation.

Without a licence

An unactivated installation works fully but is limited to 50 patient records. All existing records remain fully accessible and editable β€” the limit only prevents adding new patients beyond 50. A yellow banner appears at the top of every page prompting activation. This is intentional β€” patient data is never locked or hidden, as that would be unacceptable in a clinical setting.

Locked tabs in Setup

Non-Administrator users see the Licence tab in Setup as a greyed-out πŸ”’ locked tab. This is expected β€” only Administrators can manage the licence. High Level and Medium Level users can see it exists but cannot access it.

The licence key format

Keys encode the product (CrystalSolutions or PraxisClinic), edition (Standard or Pro) and purchase date. They are cryptographically signed and verified offline β€” no internet connection is required for activation or verification.

Moving to new hardware

Your licence key can be activated on any number of installations you own β€” there is no machine binding. If you move CrystalSolutions to a new server, simply activate the same key in Setup β†’ Licence on the new installation.

🏠 Welcome Dashboard

The welcome page serves two purposes β€” a public-facing introduction to CrystalSolutions for visitors who aren't logged in, and a daily practice dashboard for logged-in users. The two views are different: the public view shows the feature overview; the logged-in view shows live practice data.

Dashboard panes

The logged-in dashboard shows up to six collapsible panes β€” each only appears if there is data to show:

  • πŸ“Œ Practice Noticeboard β€” the practice-wide note from Setup β†’ Practice. Visible to all users. Edit it in Setup to leave notes for all staff: "Buy couch rolls", "Ring Blair re Thursday".
  • πŸ“ Recent Activity β€” the 8 most recently added patients and sessions across the practice, with who added them and when. Useful for monitoring trial users or multi-practitioner activity.
  • πŸ• Due for Review β€” patients who haven't been seen within the practice review period. Only shows if a review period is set in Setup. Click any name to go to their record; "all" link filters the patient list.
  • πŸ’Š Recent Medicines β€” medicines and remedies recorded in recent sessions, grouped by patient with the improvement rating shown as a green badge.
  • πŸ“‹ Treatment Plans β€” active treatment plans with achieved/to-do counts and a progress bar. Links directly to each patient's plan.
  • πŸ‘£ Podiatry Notes β€” patients with podiatry notes recorded, showing a preview and linking to their podiatry page.

Collapsible panes

Each pane has a small hide / show link in the top right. Click hide to collapse a pane β€” it stays collapsed on that device until you show it again. This is stored in your browser's local storage, so each device remembers its own settings independently.

The Modules section (the feature cards β€” Patients, Sessions, Audit etc.) also has a single hide/show toggle. Once you know the system, hide the modules to keep the dashboard clean.

The Design Philosophy card at the top has its own hide/show. New users should read it; experienced practitioners can hide it permanently.

Turning off the welcome screen

If you'd prefer to go straight to the patient list after login rather than seeing the dashboard, go to Setup β†’ Practice and uncheck Welcome screen on/off. You'll land on the Patients list every time instead.

Public landing page

When someone visits the CrystalSolutions URL without being logged in, they see the public version of the welcome page β€” the feature overview, design philosophy and pricing. This is intentional: the URL can be shared as a product overview. The clinical dashboard is only visible after login.

🩺 Clinical Reference

Condition value list

The primary condition dropdown covers the most common presenting complaints seen in musculoskeletal and naturopathic practice:

Head Β· Neck Β· Shoulder Β· Thoracic Ribs Β· Low Back Β· Knee Β· Stress Β· Naturopathic Β· General Β· O-A Β· Hip Β· Bowels Β· IHD Β· DVT Β· >BP Β· CD Junction Β· Skin Β· Anxious Β· Diabetes Β· Tiredness Β· Migraine Β· Baby Can't Sleep - Colic Β· Lupus Β· Peripheral Vascular Disease Β· Dizziness Β· Ankle/Feet Β· ME Β· PID Β· Reduced Sight Β· Thyroid Β· Coccyx Β· TMJ Β· Sinus Β· Elbow Β· Wrist/Hand Β· Bell's Palsy Β· Gen Cranial

Custom conditions not in this list can be noted in the yellow notes field or session treatment notes.

Structural orthopaedic tests

TestWhat it indicates
FP (Foraminal Pressure)Cervical nerve root compression
SLR (Straight Leg Raise)Lumbar nerve root irritation β€” record degrees L and R
ADAMSScoliosis screen β€” forward bend test
KEMPSLumbar facet joint involvement
+VE PercussionBony tenderness suggesting fracture or infection
Compression / DistractionDisc vs facet differentiation in cervical spine
Tinnels TapCarpal tunnel / peripheral nerve entrapment
ValsalvaSpace-occupying lesion β€” pain on increased intrathecal pressure

Red flag conditions

The following should prompt consideration of urgent referral and use of the red flag field on the patient record:

  • +VE percussion suggesting fracture
  • Aortic pulse prominence (possible aneurysm)
  • Unexplained weight loss with back pain
  • Bilateral neurological symptoms
  • Saddle anaesthesia (cauda equina)
  • Copper wiring or signs of hypertensive retinopathy
  • Ca (cancer) smell
  • Jaundice / hepatomegaly
  • Pear drops breath (diabetic ketoacidosis)
Important: This system is an administrative and audit tool. Clinical decisions remain entirely the responsibility of the treating practitioner. The examination findings and red flag indicators are prompts, not diagnostic tools.

Treatment value list

Structural Β· Cranial Β· Nutritional Β· Herbal Β· Homeopathic Β· Visceral Β· Acupuncture Β· GOT Β· AK Β· Meridian Β· Mobilise

🩻 Imaging & X-ray (Page 4)

Page 4 is accessed via the 🩻 Imaging button on any patient record. It provides a dedicated store for imaging records β€” X-rays, MRI, CT scans, ultrasound and other investigations β€” separate from the general attachments system.

Adding an imaging record

Each imaging record captures:

  • Date, imaging type and region β€” e.g. X-ray Β· Lumbar
  • Requested by β€” GP, self-referred, specialist, hospital etc.
  • Findings checkboxes β€” grouped into Disc, Vertebrae, Alignment, Soft tissue and Other. Quick-tick common findings (disc degeneration, osteophytes, scoliosis etc.) without typing
  • Practitioner's interpretation β€” your own clinical notes on the findings
  • Radiologist's / specialist's report β€” paste the formal report text
  • Image upload β€” attach the actual scan image (JPG, PNG, WebP) or a PDF report, up to 20MB

Viewing imaging records

Saved records appear as cards showing a thumbnail of the image. Click a thumbnail to open it full-screen in a lightbox viewer. PDF reports open in a new tab. Finding tags (disc degeneration, osteophytes etc.) are shown as small pills on each card.

Image files

Images are stored in the attachments/[patient_id]/imaging/ folder on the server β€” separate from general attachments. Make sure this folder is writable by the web server. Supported formats: JPG, PNG, WebP, GIF and PDF.

Tip: For large X-ray files, reduce the image resolution before uploading β€” a 1500px wide JPEG is perfectly readable on screen and will be a fraction of the original DICOM file size.