Changelog — FormBase
All notable changes to this app are recorded here. Newest entries on top.
[2026-05-25]
- Cleaner record detail page. Redesigned the submission/record page into clear sections — a header with the key contact, a stage progress bar, details, payment, delivery, notes, and message history — so everything has a sensible place.
- Edit a record's details. Fix a typo or fill in a blank on any record with the new Edit button — no need to delete and re-enter.
- One-tap contact. When a record has a phone or address, the page now shows quick Call, Text, WhatsApp, and Map shortcuts.
- Better filtering. The submissions list now shows a Clear button when a search or stage filter is on, and a friendly "No matches" message instead of looking empty.
- Plainer language. Reworded confirmations, warnings, and the activity log into everyday English (no technical jargon).
[2026-05-22]
- New app: FormBase. Paste any HTML form and turn it into a smart, industry-skinned CRM. The form's design is kept exactly as-is while the data fields are read automatically and filed as trackable submissions.
- Design-agnostic form parser. Works with any HTML — Tailwind, Bootstrap, custom CSS, nested wrappers, with or without a
<form> tag. Only the data fields are extracted; styling is ignored.
- Form builder. Create a form by pasting HTML, see a live preview alongside the fields that will be captured, and get a public share URL plus an embed snippet. "Refine with AI" builds a copy-paste prompt to restyle or extend a form.
- Forms can be installed as an app. A live form can be added to a phone's home screen and opened full-screen like a native app, branded with your colour — handy for forms people fill in regularly. The installed app opens straight to that specific form.
- Submissions inbox. Every submission lands in a searchable grid you can filter by stage; open one to see all its fields, add private staff notes, move it through the pipeline, and read its full notification log.
- Add entries by hand. Create a Lead / Job / Ticket / Customer (whatever your template calls it) manually from the dashboard or the inbox — no need to wait for a public form. Pick a form's fields, fill them in, set the stage, and it lands in your pipeline, tagged "added manually."
- Industry templates. Five built-in skins (Generic, Hotel, Dispatch, Real Estate, Retail) reskin every label to your trade. Pick one at onboarding, duplicate any template, or build a custom one in the editor.
- AI-assisted setup. A questionnaire generates a copy-paste prompt; paste the AI's JSON back to preview a tailored template + starter form, then Accept, Refine template, or Refine form.
- Customize columns. Choose, reorder, and pin which fields show in the grid — saved per template. New fields are remembered but stay hidden until you opt them in.
- Notifications & integrations. Per-form admin push (ntfy), admin SMS, customer SMS confirmation, Web2Form forwarding, and generic webhooks — each logged with delivery status.
- Stage-change rules. Auto-send SMS/push to customers as a submission moves through the pipeline, with
{field} placeholders.
- SMS. Connect Twilio or Termii once in Settings; send confirmations, pipeline updates, and manual texts from any submission.
- Payments. Optionally collect money on a form via Stripe or Paystack (fixed amount or bound to a form field).
- Sharing. Public link, auto-resizing iframe embed, and per-form custom domains.
- Staff accounts. Add staff with their own phone + PIN and a dedicated sign-in page.
Internal
- API auth uses
require_permission($area, $action) (not require_auth()) so the same endpoints work for both the install owner (/app/formbase) and signed-in staff (/p/.../admin); destructive deletes are gated to admins. Owner/admin-only endpoints (staff, settings, audit, template writes) use areas with no staff permission entry.
- Parser hardening: radio/checkbox groups label from the field name (or
<legend>), wrapping-label resolution strips the control's own text, and the preceding-sibling heuristic skips other fields' labels. fb_sync_field_library guarantees at least a few visible grid columns so the grid is never empty when a pasted form's field names don't match the template defaults.
- Public form always gets a working submit control (added if the pasted form lacks one); honeypot check is null-safe.
- Cloned the post-2026-05-11 DryCleanPro structure for platform auth, staff CRUD, public login/logout, settings layout, and the marketplace folders.
- Schema:
industry_templates, forms, field_library, submissions (data column is data, not the reserved word values), notification_log (plus staff, settings, audit_log, entities).
lib/parser.php (fb_parse_form_html) is the authoritative server-side parser (DOMDocument); a JS mirror powers the editor's live preview. lib/payments.php carries the Stripe/Paystack flow (adapted from FormsPro). Active template is injected into views as window.FB_TEMPLATE so no entity label is ever hardcoded.
- Schema: dropped the redundant
ALTER TABLE submissions ADD COLUMN archived_at/source lines — those columns are already declared in the CREATE TABLE, so the literal ALTERs only re-added them and tripped fresh-install schema load. The lazy migrator still backfills existing installs from the CREATE TABLE definition.