Patient Intake (SurveyJS)
Tell us about you and your insurance coverage.
Patient
First name 
Last name 
Date of birth 
Sex assigned at birth
Mobile phone
Preferred contact method

Patient Intake (Native shadcn)

Tell us about you and your insurance coverage.

  1. Patient
  2. Insurance
  3. History
  4. Consent

Patient

We'll send appointment reminders to this number.

85 lines vs 729 — the same form, built two ways

Both columns render the Patient Intake form above. Counts are component code only — the SurveyJS column's 4.6 KB JSON schema is listed separately below. View both files → SurveyForm.tsx · NativeControls.tsx

SurveyJSNative shadcn/ui
Code you write & maintain85 lines — a reusable renderer, not tied to this form. Form Library is MIT-licensed729 lines — specific to this one form
Form definitionA 4.6 KB JSON schemaNone — the form only exists as code
Cost of the next formAnother JSON schema; the renderer is reused as-isHand-write a comparable block again
Changing the form laterEdit the JSON — usually stored in a database, so no rebuild or redeployChange the code, then rebuild and redeploy
Who can build and edit itNon-developers, visually, in SurveyJS Creator — white-labeled into your appNot possible — there is no shadcn/ui form builder to embed
What it costs youA schema format to learn; Creator is commercially licensedNothing extra — full control over every line

You write the renderer once. After that, every new form and every change to an existing one is data, not code — reviewed, deployed and owned differently, however it was written.