- 12Branches across 2 nurseries
- 1,640Students
- 217Classes
- 1Zoho licence for every user
The problem
Two nurseries with twelve branches run on Zoho CRM. Branch staff needed class lists, pickup details and quick edits, without every one of them needing their own Zoho licence.
A full daily sync of the CRM would not scale, and the portal had to stay usable even when the connection to Zoho was not.
What I built
Scoped access
Super admin and branch manager roles. Managers see only their own branches and classes.
Edit, then save to Zoho
Changes are made in the portal and written to Zoho only on an explicit save.
Live / Offline toggle
Per-class local copies, synced per branch or class when needed.
Printable class lists
The daily paperwork comes straight out of the portal.
Admin without code
Accounts, coverage, templates, Zoho connection, field permissions, field order and branding.
Health panel
A "needs a look" view and a saved-changes log, so sync problems are seen early.
Key decisions
- Decision 1Zoho stays the master
The portal never becomes a second database of record; it is a faster window onto Zoho.
- Decision 2Offline-first
Sync on demand per class instead of pulling the whole CRM every night, which would not scale and would tie the portal to a third party's uptime.
- Decision 3Explicit save
Edits reach Zoho only when someone saves them, so nothing half-finished is written to the CRM.
- Decision 4Show unsynced data loudly
Records with unsynced changes stay visible and flagged instead of being folded away.
Where it stands
The portal is live and holds 12 branches, 1,640 students and 217 classes across two nurseries (October 2026). One Zoho licence serves every user.
It is early in its rollout: the system is built to serve all twelve branches, and onboarding branch managers is under way. The ceiling is Zoho's API credits, which is exactly why sync is on demand.
Stack
Pickup portal on Zoho CRM● Rev. 2026
- App
- Standalone PHP and MySQL
- CRM
- Zoho CRM API (source of truth)
- Access
- Roles and branch / class scoping
- Modes
- Live and offline, per-class local copies
- My role
- Design and development
More case studies
- WordPress · WooCommerce · HubSpot
Event hotel booking platform
HubSpot custom objects, a WordPress publisher plugin and WooCommerce bookings with deposits and Stripe.
Read the case study - OpenAI · MCP · HubSpot
B2B lead intelligence pipeline
OpenAI drives a licensed data provider through MCP; approved contacts land in HubSpot. 296,000 records processed.
Read the case study - Security · Linux · WordPress
Compromised hosting account
An hourly cron job running encoded shell commands, hidden WordPress persistence, and a clean recovery.
Read the case study