eRepublic Registration Management System (ERMS)
ERMS is a Windows and OSX desktop application that allows the management of every aspect of the eRepublic event registration process.
About This Project
The eRepublic Registration Management System is a powerful desktop application that works as a control center for managing event registrations at live events. It was built to provide a streamlined user experience for event attendees to quickly register onsite and receive a badge syncing in realtime with Salesforce.
Key Achievements
- 'Write once deploy anywhere' cross-platform Windows and OSX desktop application using Electron and Typescript
- Used SQLite for local data storage and syncing with Salesforce, allowing for full offline capabilities
- Used SOQL and Salesforce's realtime event streaming to sync data with Salesforce for event attendee data in realtime
- Implemented a powerful hub-spoke architecture allowing for onsite offline data syncing between hardware + software nodes
- Used Ollama to build a local AI agent that could be used to answer questions about the event and the registration process
- Designed and implemented robust training proceedures and documentation for staff all with offsite AI RAG functionality for in-depth support at events.
Related Projects
Related Publications
Articles that cover technologies and skills used in this project

Prop Drilling is a Code Smell When Used Incorrectly
Prop drilling is considered an anti-pattern in React because it involves passing props down multiple levels of a component tree, even when only a few components need them. This can lead to several...

3 JavaScript Array Sorting Algorithms and When to Use Them
Let’s compare three common JavaScript array sorting algorithms: Bubble Sort, Merge Sort, and Quick Sort. I’ll explain each, provide examples, and highlight when each would be most appropriate.1....

PHP8’s Nullsafe Operator or “Optional Chaining”
In JavaScript this feature is called “optional chaining” where you can reduce the amount of checks that you need to do by chaining accessors with a ?. For example const street = User.address?.street...