Bee Logical Software
Sep 2023 – Present
Software Developer · Remote, clients in the US and EU
Consultancy role. Since May 2026 I have delivered for two clients in parallel: Saralux, which builds MEM360 on NetSuite, and Dog go, a dog-care marketplace in the EU. Awarded Innovation Excellence 2025 and Collaborative Spirit 2024.
Saralux · Builds MEM360, an association management system on NetSuite
Sep 2023 – Present
Designed and led the build of the order processing engine that now handles every transaction in MEM360, a product six associations and nonprofits each run in their own NetSuite environment. In the old flow, one failure stopped the whole order. The new engine runs each order as a sequence of tracked steps, from registration to billing, so a failed step can be retried on its own and failed orders can be reprocessed in bulk.
- Re-architected one association's order lifecycle, moving its payment-status and billing logic out of NetSuite workflows into a state machine in code that sets each order's status and billing stage, including renewals. Workflows and scripts had been updating the same records concurrently. The single deterministic flow eliminated those race conditions and made order processing idempotent, and I shipped it as an installable SuiteApp.
- Found an IDOR flaw that let a logged-in user see other customers' saved cards and addresses by changing one ID in a request. The real problem was the server trusting identity sent by the browser, so I fixed it at that level. Across 69 files in six modules the server now takes the customer from the login session and checks its own execution context, and I rewrote guest checkout so guest identity is also established on the server instead of trusted from the client.
- Moved application submission, the slowest action in MEM360, to background processing, so users no longer wait for it to finish.
- Built the license check that controls which features each association can use, across the core and credentialing modules.
- Rewrote how MEM360's storefront renders the forms associations set up in the back office, which every application in MEM360 relies on. One check now decides which fields and sections appear or become required as the user answers, even on prefilled forms, and the main view lost 745 of its 2,729 lines.
- Moved the Credentialing and Membership portals, nearly 20 views, off deprecated Backbone code onto SuiteCommerce's extension framework without changing anything users see.
- Built six page designs for individual and team fundraising campaigns, with donor and update pages, and eight task types applicants complete in their portal, such as uploading a transcript or signing a document.
- Ranked among the top 4 of 20+ contributors on MEM360's two main repositories, with 446 merged pull requests.
- NetSuite SuiteScript
- SuiteCommerce
- Backbone.js
- JavaScript
- SQL
- Azure DevOps
Dog go · Dog-care marketplace connecting owners with providers in the EU
May 2026 – Present
Built the React Native app alone, 60 screens for dog owners and service providers, and took it from an empty project to App Store and Google Play submission in three and a half months, running in parallel with my Saralux work.
- Reworked provider payouts through Stripe Connect on the Node.js and PostgreSQL API. Bookings only checked that a provider had a Stripe account, so an owner could be charged for a provider who couldn't receive payouts yet, leaving the money stuck. Booking now requires an account that can both take charges and pay out, and every provider is on automatic daily payouts. I also dropped a Stripe capability the platform's payment model didn't need, which removed identity checks that were delaying providers' first payouts.
- Moved booking validation ahead of payment. Owners used to hit a full slot or an unavailable provider only at the last step. I put the booking rules into one shared check that the app calls before payment and booking creation runs again, so both always agree and a booking that became invalid in between is still rejected.
- App stores can't force an update, so I added a version check the app runs at launch against an API endpoint. When the client retires a version, users on it see an update prompt instead of a broken app.
- Replaced the browser-based Google login with native Google Sign-In, moved maps and address search to Google's Places API (New) and Routes API, and moved the app onto the client's own Google Cloud project for handover.
- Built the React admin portal the client uses to verify providers, set trust scores, and handle GDPR deletion requests.
- Ran every release myself, from EAS build setup and store listings to a release runbook for the client, and closed 66 QA-reported defects along the way.
- React Native
- Expo
- TypeScript
- React
- Node.js
- PostgreSQL
- Stripe Connect