I turn problems worth solving into products people use.
Bring me an idea or a problem, and I take it from requirements through implementation.
I also bring ideas of my own, build the first version, and work with teams to test and
refine what is worth pursuing. Several projects below started that way and became
adopted tools or a business with paying customers. Each write-up shows the decisions,
improvements, and verification behind the work.
A build optimizer for NBA 2K. Name the ratings you care about and it searches the legal build space for the cheapest configuration that hits all of them. The cost of a correct answer was rebuilding the game’s own rating engine from its binary tuning file: cap-breaker price depends on the entire attribute vector through a 15-row archetype classifier, so there is no price list to look up and no shortcut around searching. What it still gets wrong — an early readiness heuristic hard-blocked configurations that were genuinely buildable, and that class of over-blocking is documented in the codebase rather than closed. Runs as a business with paying customers.
A chat-first relocation assistant for corporate transferees, built for and adopted by Sterling Lexicon. The original brief centered on OpenAI with web search. I proposed extending that approach with structured data sources for local amenities, rents and other facts that shape a relocation decision, then implemented those additions. Intake happens as a conversation, program questions get answered only where a cited passage supports them, and neighborhoods are ranked by deterministic code over sourced measurements rather than by the model, which is what makes the ranking auditable under fair-housing scrutiny. The hard part was not the chat. It was deciding what the system is allowed to claim: absent data stays null with a coverage figure instead of becoming a neutral score, and a factor that cannot be measured well enough simply does not publish. Screenshots show the earlier development build with placeholder program content and seeded measurement data.
An assistant for the recurring questions between property managers and their contractors. Retrieves procedures within each contact’s role and property scope, keeps the manager’s instructions above reviewed additions, and requires approval before an answer becomes reusable knowledge. The difficult part is the lifecycle: an obsolete instruction must stop reaching future replies, and a one-time approval must not become standing permission. The six-change review preserved 66/66 passing scenarios against the earlier decision code, with higher token use. Production WhatsApp delivery and a supervised customer pilot remain unfinished.
A direct-booking marketplace for holiday rentals in the Azores and Madeira. My partner brought the regional business premise; I defined most of the product and implemented it end to end. Guests can search, price a stay and inquire without the platform taking payment; hosts manage listings, calendars, conversations and reported outcomes. The hard part was making those workflows agree: one server quote follows the stay into the inquiry, imported calendar blocks keep their source, reply drafts use only current approved knowledge, and Insights state their denominators and missing data. The product shipped and is now on hold while my partner pursues Portuguese government funding. The September enhancements were verified locally; their deployment has not been verified in this review.
Extended Microsoft’s Azure OpenAI sample into StellarGPT, a BIM documentation assistant built for and adopted by Stellar. Added reasoning-model support through the Responses API, selectable deployments, assistant presets with typed tool configuration, and model and assistant metadata in conversation history. The integration keeps two different API response formats readable in the existing chat interface. Microsoft supplied the application foundation; my work connects the new model and assistant flows across Python, React and Cosmos DB. The reviewed source still needs request isolation and focused regression tests. Screenshots use fictional records and scripted answers; retrieval accuracy and time savings have not been established.
Rebuilt Beeline’s corporate site from WordPress into a Vue application — my first large Vue project — converting the existing templates and writing new ones against Salesforce and Pardot. Delivered in about a year against a projected year and a half to two. The cost sat in integration and coordination rather than in the frontend: two marketing systems, a design lead, and a stakeholder list that all had to agree. Worth being straight about it — nothing here is algorithmically hard. The result is the schedule and the integrations, not the engineering.
I originated the idea and built the tool end to end at Beeline, where it was adopted internally. An assistant whose conversation paths are authored as an explicit decision tree rather than left to the model, with Application Insights wired in so the paths people actually take are measurable. The cost is the authoring: every branch started as a row in a spreadsheet of if-then conditions and had to be drawn, first in Figma and then in a journey editor, before it could answer anything. That is also the limit — it is reliable exactly as far as somebody authored it, and a question the tree does not cover gets routed to the closest branch that exists.
VueJS
Vite
OpenAI Assistant
Microsoft Application Insights
Pinia
OpenAI Feedback Classifier
Adopted by Beeline
Original concept and end-to-end implementation
I originated the idea and built it end to end. It became Beeline’s first adopted AI project. Triages incoming product feedback so nobody has to read all of it — built to find out why users of one product kept reverting to its legacy version, across more than 50,000 entries. Scores an F1 of 0.98. The cost was in the labelled data and the prompt, iterated with a data analyst, not in the model. The number needs its caveat: it is one labelled set for one product’s feedback, and the per-class counts behind it are thin — some classes are scored on around a dozen test labels, which is not enough to trust a per-class figure.
Azure OpenAI
Text Classification
Triage
Brood
Adopted by Beeline
Original concept and end-to-end implementation
I originated the idea and built the tool end to end at Beeline, where it was adopted internally. An internal platform for sourcing and voting on hackathon ideas ahead of the event, built in free time, with single sign-on through Azure AD so participation cost nobody an account and posting could stay anonymous. The cost was scope discipline: it is a submit-and-upvote list on purpose, and it does nothing to help run the event once it starts. The lift in ideas is what organisers observed rather than something the platform measured — no instrumentation was ever added to prove it.
VueJS
Nuxt
Auth0
Pinia
Cypress
SASS
Cosmos DB
Azure Identity
Azure Storage
Beeline - Business Case Tool
Adopted by Beeline
Lead Nuxt.js developer
Adopted internally by Beeline. A client acquisition tool migrated off a legacy PHP site onto Nuxt and Cosmos DB, my first Nuxt project. Prospects configure who owns each step of their process, and the tool models the time and cost that moves. What it produces is a model, not a measurement: the output is only ever as good as the ownership and the rates a prospect types in, and it was never instrumented against what those clients went on to actually spend.
VueJS
Nuxt
Cosmos DB
Vue Devtools Auditor
Internal
Original concept and end-to-end implementation
I originated the idea and built the tool end to end at Beeline. An accessibility auditor that reports violations at the component level instead of the page, so a finding names the component that owns it rather than a line of rendered output. It also audits colour against the design system, suggesting the nearest token by smallest delta, and keeps results in Cosmos DB so compliance can be tracked over time. Component-level attribution cost a walk of Vue’s component tree rather than the rendered DOM. Its ceiling is every automated auditor’s ceiling: it catches what is mechanically decidable and cannot make the judgement calls — whether alt text is actually useful, whether an order is actually logical.