Generating PDF Reports

One-click PDF summary of a client's training, body comp, goals, and adherence.

trainer guide/analytics
What this is for: Send a polished progress report to a client (monthly review, end of program, billing).

What's in the PDF

Up to 7 sections, all toggleable in the modal:

  1. Cover — client name, trainer name, date range, EvoFit branding.
  2. Workout Summary — total sessions, completion rate, volume, top 3 exercises.
  3. Measurements — weight, body fat %, muscle mass — start, end, delta.
  4. Body Composition Chart — line chart over time.
  5. Training Load Chart — ACWR with risk band.
  6. Goals — each goal with progress % and status.
  7. Performance — PR list, adherence %, missed-workout count.

You pick which to include in the modal.

Step-by-step

  1. Open /analytics.
  2. Select the client (top selector).
  3. Click Generate Report in the header.
  4. The ReportModal opens.
  5. Pick:
  • Date range (last 30/60/90 days, custom range, or all time).
  • Sections — tick boxes for the 7 sections above.
  1. Click Generate PDF.
  2. The PDF downloads to your browser.

Sharing

The PDF is generated client-side (jsPDF) and downloaded to your machine. There's no email-from-app feature — share via:

  • WhatsApp (drag-drop into the chat)
  • Email (attach the file)
  • Cloud share (Drive, Dropbox)

Why jsPDF and not server-side rendering?

We rewrote this from Puppeteer to jsPDF in 2026-04-20 because Puppeteer/Chromium kept failing on Vercel deploys. jsPDF is pure JavaScript, builds work cleanly, and the output is identical-quality.

Common pitfalls

Where to find this

  • Trigger: /analytics → Generate Report button.
  • Component: ReportModal.
  • Library: jspdf + jspdf-autotable.
  • Endpoint: client-side rendering — no backend call needed.
Was this article helpful?