ERPNext as a Platform
Build a real field-service product on Frappe and ERPNext - a backend, a technician app and a customer portal - and learn the patterns behind every app you will ever build on ERPNext.
Part of ERPNext Developer learning path
What You'll Learn
- ✓Designing Frappe apps as backends for web and mobile clients, not just Desk.
- ✓Building versioned, well-shaped APIs that a frontend team can rely on.
- ✓The right sign-in method for each client: tokens, OTP, OAuth2 and sessions.
- ✓Permissions as API security, so one user can never reach another's data.
- ✓Workflows, background jobs, realtime updates, push notifications and webhooks.
- ✓Files, PDFs, reports and offline sync for mobile clients.
- ✓Connecting a real Next.js frontend to all of it, and how the same patterns apply to Flutter, React Native or any other client.
- ✓Testing, versioning and hardening the API.
Course Content
26 lessons when complete · 4 live now
- 1Module 0 - What We Are Building: The Problem and the Full fieldpro DemoLive
Why field-service businesses lose jobs, time and money, and a complete demo of fieldpro: technician app, customer portal and ERPNext Desk working together.
- 2Module 0 - Running fieldpro Yourself: Bench, the Two Repos and Demo DataLive
A Frappe v16 bench, the complete fieldpro backend with a one-command demo data seed, and the complete Next.js app connected to it.
- 3Module 0 - Architecture: One Backend, Three ClientsLive
Where business logic lives, thin endpoints, Desk as just another client, and how a request travels from the phone to Frappe and back.
- 4Module 1 - Designing the Data Model for API ConsumersLive
Technician, Service Job, Job Visit and Parts Used: naming, child tables, links to ERPNext stock and the indexes your API will need.
- 5Coming
Module 1 - Extending ERPNext From Your App
Custom fields, fixtures and patches, so jobs, technicians and parts flow onto the Sales Invoice and survive every upgrade.
- 6Coming
Module 1 - Building a Versioned API
Whitelisted methods, versioning, response shapes, errors, cursor pagination, and dates, time zones and currency in JSON: an API contract a frontend team can rely on.
- 7Coming
Module 2 - How the Two Apps Talk to Each Other
The three channels between fieldpro and the Next.js app: request and response over HTTP and JSON (/api/method and /api/resource), live updates from server to browser over Socket.io, and push notifications to the phone. Plus the API contract, how every request proves who it is, the one error format both sides agree on, and where the proxy sits.
- 8Coming
Module 2 - The Next.js App: Structure, API Client and the Proxy to Frappe
How the app is organised, the one file that talks to the backend, what is fetched on the server versus in the browser, and routing /api to Frappe so the browser stays on one origin.
- 9Coming
Module 2 - Authentication for Every Client
Tokens, phone OTP, OAuth2 and sessions on the backend: the right sign-in method for each kind of client.
- 10Coming
Module 2 - Technician Sign-In: OTP and Token Storage (the Mobile Pattern)
Phone code login, storing the technician's own key and sending it on every call. The same pattern any Flutter or React Native app uses.
- 11Coming
Module 2 - Customer Portal Sign-In: Sessions and CSRF
Cookie login for the browser and passing Frappe's CSRF check.
- 12Coming
Module 2 - Permissions as API Security
Roles, permission hooks and the endpoint review checklist, so a technician sees only their jobs and a customer only their company's.
- 13Coming
Module 3 - Today's Jobs and Job Detail
The list and detail endpoints and their screens: paging, loading states and errors on slow networks.
- 14Coming
Module 3 - Visits and Parts Used
Starting and ending visits, recording parts from stock, and keeping the rules in a services layer.
- 15Coming
Module 3 - Workflows as API State Machines
Booked to Done, manager approval for big jobs and customer sign-off, with the server owning the state.
- 16Coming
Module 3 - Workflow Buttons From the Server
The client shows only the actions this user may take, and captures the customer's sign-off on the phone.
- 17Coming
Module 3 - Booking a Job From the Portal
The customer books, sees their jobs and approves or rejects finished work.
- 18Coming
Module 4 - Realtime and Push Notifications
Socket.io, FCM and the Notification DocType on the backend; live job status in the portal and new-job alerts on the technician's phone.
- 19Coming
Module 4 - Background Jobs and Scheduled Work
Invoices, summaries and reminders off the request path, written to be safe to run twice.
- 20Coming
Module 4 - Webhooks In and Out
Sending jobs to a partner's accounting system and receiving SMS or payment callbacks: signatures, retries and idempotency.
- 21Coming
Module 5 - Photos and PDFs
Uploading visit photos from the app, private files, and the job card PDF downloaded safely from the portal.
- 22Coming
Module 5 - Reports and Dashboards as API Data
Jobs and hours by technician in Desk, and the same numbers, fast, in the technician's "my week" screen.
- 23Coming
Module 6 - Offline Sync on the Backend
Pull by server cursor, push in small batches with client IDs, per-record results and server-wins conflicts.
- 24Coming
Module 6 - Offline Mode in the Client
A local queue, background sync and a clear sync status: nothing lost, nothing duplicated.
- 25Coming
Module 7 - Proving It Works: Testing, Debugging and Versioning
Tests that prove one user can never reach another's data, CI, and changing the API without breaking the app.
- 26Coming
Module 7 - Hardening the API
CORS, rate limits, caching and API governance, and how every pattern in this course maps to a Flutter or React Native app.
About This Course
The problem
Thousands of businesses send people to their customers: AC and refrigeration repair, solar installers, CCTV and security installers, generator servicing, plumbers and electricians, internet installers, pest control, borehole and pump servicing, printer and copier servicing, lift and medical equipment maintenance.
Most of them run that work on phone calls, WhatsApp and memory. The result is the same everywhere:
- Jobs get lost. Bookings sit in a chat or a notebook.
- There is no proof of work. The office cannot see whether the technician went, when, or what was done.
- Customers keep calling. "Where is your technician?" fills the day.
- Invoices are late and disputed. Accounts hears about a finished job days later, and the customer argues about the hours and parts.
- Big jobs close without approval. Expensive work is done and billed before a manager has seen it.
- There is no data. Nobody knows which technician performs best or how long jobs really take.
Many of these businesses already use ERPNext for customers, stock and accounts. What ERPNext does not give them is the field: a technician app, a customer portal and proof of every visit.
What we are building: fieldpro
fieldpro runs field work from booking to invoice, on top of the ERPNext a business already uses.
- Customers book jobs on a web portal, watch the status change live, approve the finished work and download the job card.
- Technicians sign in with a password or a one-time code sent by email or SMS, see today's jobs, start and end visits, record parts used and photos, get the customer's sign-off, and keep working with no signal.
- Managers assign jobs, approve big ones and see performance by technician, in their own app or in ERPNext Desk.
- Accounts gets an invoice for every completed job, with the job, the technician and the parts on it. No re-typing.
One Frappe app is the backend for all of them. One Next.js app is the technician app and the customer portal.
A day with fieldpro
- Wanjiku Clinic books "fridge not cooling" on the portal at 8am.
- The manager assigns it to Achieng in Desk; her phone gets a notification.
- She starts the visit in a basement with no signal. The app records it anyway, along with the parts she uses.
- Back in signal, everything syncs. The clinic sees the job move to Done without calling anyone, and signs off.
- The invoice is ready in ERPNext with the job, the hours and the parts on it.
How the course works
- You get the complete product. fieldpro is fully built: the Frappe backend and the Next.js technician app and customer portal. You receive the full source code for both and run it on your own machine from the first lesson.
- We start with the demo. The first lesson shows the whole application working end to end, so you always know where each piece fits.
- Every lesson explains the code that matters. We take one feature at a time, see it working, then walk through the key functions behind it and why they are designed that way - and the common mistakes that break apps in production.
- The patterns apply to any client. We use Next.js, but every backend pattern works the same for Flutter, React Native or any other frontend.
Deployment is not part of this course; it is covered in a separate course.
The source code
Everything is in one public repository on GitHub, fieldpro-course: the Frappe backend, the Next.js technician app and customer portal, and the scripts that set them up on your machine. Anyone can clone it, before or after buying the course. Its README walks you through setup.
A fieldpro installation does not let anyone sign in until it is activated with an access code. When you pay for this course, your personal access code is emailed to you, and your course page has a button to send it again. You enter it once.
Each app also has its own repository: fieldpro-frappe (the backend) and fieldpro-nextjs (the technician app and customer portal).
Questions
Call 0116888777 or email hello@upeo.academy.
Prerequisites
- •A machine (or server) running Ubuntu 22.04 or 24.04 with at least 8 GB RAM.
- •Frappe and ERPNext v16, Node.js and Git.
- •Bruno or Postman and a code editor.
Who This Course Is For
- →Developers who already know Frappe and ERPNext well and want to build real products on top of them: web apps, mobile apps and integrations.
- →This is not an introduction to Frappe: we assume you can create DocTypes, write controllers and use bench.
One-time enrollment · lifetime access
22 more lessons are being recorded and the full course is expected by Nov 17, 2026. You get every new lesson as it is added.
Early-bird price: 47% off today. The price goes up a little with every new lesson and reaches the full price when the course is complete, so the sooner you join, the less you pay.
This course includes
- ⏱About 13h of video when complete
- 🎬26 lessons, 4 live now
- ♾️Full lifetime access
- 📱Access on all devices
- 🏆Certificate of completion
Your Instructor

Karani Geoffrey
ERPNext Architect & Implementation Consultant · 17+ Years in ERP
Karani Geoffrey is the founder of UPEO Academy and a leading authority on ERPNext implementation in East Africa. With over 17 years of hands-on experience deploying ERP systems across manufacturing, healthcare, retail, and financial services, Karani has guided hundreds of organisations through complex digital transformation journeys.
He is a certified Frappe/ERPNext developer and has built custom Frappe applications for multinational clients. His practical, no-nonsense teaching style bridges the gap between business strategy and technical execution - helping learners not just understand ERPNext, but master it.