I run two businesses and build the tools that operate them. Founder of Pinkberry Austria (Vitalinc GmbH, Linz) and Executive Manager of Beirut Football Academy (9 branches, 2,655 active players, 69 staff users). I am not an engineer by training. I describe the process, build it with Claude Code, test it against real data, ship it and then watch the numbers. Everything on this page is in production and used every day.
Based in Austria. LinkedIn · pinkberry.at · bfa-lebanon.com · thepointsociety.com
The first Pinkberry in the country, opened in November 2025 in the PlusCity mall in Linz. A team of student employees, Odoo for POS, accounting and loyalty, and the systems below.
Reconciles the bank and the registers every morning, detects cash and card variances, posts corrective journal entries, settles the Foodora payouts, runs the payroll postings, handles the loyalty card and sends a daily report to Telegram. Node.js, Odoo JSON-RPC, Claude, on a Hetzner server. The repo is private because it holds the company's books.
An MCP server so Claude works directly on the books in Odoo: search, read, count and report on any model, read only unless writes are switched on. Published on npm as odoo-mcp-connector, MIT, tests fully mocked. Next to it, an invoice intake where supplier invoices from email, portals and photos land in Odoo as draft bills.
E-learning for new hires with quizzes, daily opening and closing checklists with photo proof, scheduling with shift swaps, time clock and hours accounts, vacation requests, self-service onboarding by QR code, and a roster synced from Odoo every night. Next.js on Vercel, Postgres, German and English.
Turns the team's class timetables, vacations, the 20 hour student permit cap and Austrian working time law (breaks, ten hour days, eleven hours of rest) into the monthly roster, then publishes it to the staff app. The solver with example data is public: roster-builder.
A payroll page that calculates Austrian payroll and drafts the payout journal. The Pinkcard loyalty programme: digital card, web signup, Odoo backend. Foodora and Too Good To Go integrated end to end with a POS channel split and daily settlement. In the VAT audit of April 2026 I found input VAT our tax advisors had missed and built the whole case from bank statements, FinanzOnline and nine filing periods; the tax office ended up refunding the company.
Nine branches in Lebanon, 2,655 active players, 69 staff users. Odoo 19 for the whole academy, and the systems below on top of it.
Answers parents' WhatsApp messages that arrive in Odoo, escalates everything it must not answer to the staff Telegram group with a ready draft, collects payment proofs, creates leads and transcribes voice notes. It may only state facts from the FAQ file and the live Odoo events; a plausible wrong price is worse than an escalation, so anything else goes to a human. Live since July 2026, 398 automated tests. Node.js, Claude, Odoo, Telegram.
Attendance, sessions and session plans, fees, match results, assessments and per user accountability for every coach and manager, on top of the academy's Odoo. One Cloudflare Worker, 238 API routes in a single route table, 2,300 automated tests. The family portal launched on 19 October 2026 to a pilot with 1,962 families on the invite list, in English and Arabic. The BFA app is on Google Play.
A graphics system that replaced the academy's designer. The brand lives in code: colours, fonts, logos, templates for posts, stories, flyers, print and banners. Coaches ask for a flyer in Arabic or English in a Telegram group, I approve the draft, the final goes out, lands in the archive, and the matching registration event is created in Odoo. The bot also reminds the team before every event. Node.js, Claude, Puppeteer, Telegram.
A daily receipt monitor inside Odoo that checks that every parent payment produced a receipt; it caught a five week outage. An events dashboard with registrations, Excel exports and signed report links coaches share on WhatsApp. WhatsApp receipts on payment, crons and automations in Odoo 19, and the website bfa-lebanon.com.
Lebanon's first ranked amateur padel league. A rating engine where ratings move after every session, four divisions, 90 minute King of the Court sessions, a monthly cup, an organiser tool, standings and player pages. Next.js and Postgres on Vercel, the engine covered by tests. Live at thepointsociety.com.
Also: Smash Arena, a court reservation app for a padel arena in daily use by its staff, and a members portal for a sports centre with sign-up, documents, approvals, bookings and payments.
Most of my repos are private because they hold family, staff or financial data. These three are public:
- odoo-mcp-connector: the Odoo MCP server, on npm.
- roster-builder: the shift roster solver with example data and tests.
- job-watch: the weekly job board scanner I use for my own search, standard library Python.
Describe the process with the person who owns it, build the first version with Claude Code, test it against real data, ship it, stay accountable for adoption, watch the numbers. Odoo (POS, accounting, loyalty, automations, JSON-RPC), Node.js, Python, Next.js on Vercel, Postgres, Cloudflare Workers, Telegram and WhatsApp APIs, Stripe and Global Payments. Every system I run has a daily report.
Arabic, English and German. Remote from Austria, CET.









