Technical Arsenal
The tools I build with, arranged as a mosaic. Hover any tile to see what it does and where I’ve used it.
About me
I’m Lionel, a full-stack developer whose journey into computer science started during my three years of high school, where I first learned to turn ideas into interactive projects using Scratch. That first taste of building with code made me hungry to explore what else was possible.
From there I kept pushing into new tech stacks and tools, and during my IMS training I joined the first Baden Hackathon, where a friend and I built my first end-to-end application in a single run. Since then I’ve shipped projects both with him and on my own, learning as much from the failures as from the things that worked — experience is power.
Today I’m channelling that same curiosity into a sophisticated AI project for contract analysis while also building my own SaaS products. My work spans the entire stack — from designing databases in Supabase to crafting pixel-perfect frontends in Next.js.
Selected Projects
Tap a card to see the details.

Conbix AG
A full rebuild of Conbix AG's WordPress site as a static front end plus a custom React + PHP/MySQL admin panel — the owner edits text, news and partners on the live page, all on his own Hostpoint, no WordPress.
What it is
Conbix AG is a management consulting boutique in Zug. Their site ran on an aging WordPress install. I rebuilt it from scratch: a static HTML/CSS/JS public site, a custom admin panel, and a PHP + MySQL backend — all on their existing Hostpoint shared hosting, no WordPress and no external services.
The admin panel
The point was that the owner can change the site himself without calling me. He logs in at conbix.ch/admin and edits page text, news posts, and the partner logos. There's a visual editor too: open a page, click a heading or paragraph, type, save — it writes straight to the server, not just his browser.
Why no WordPress
Fewer moving parts, less to patch, lower cost over the years. The public pages are plain HTML and work without PHP or a database; only the admin and the API need the backend. Content lives as JSON files plus a small MySQL schema on his own server, so he isn't dependent on any outside service.
The launch was the tricky part
conbix.ch was a live site indexed by Google, so I couldn't just overwrite it. I built the new site next to the old WordPress, tested everything on the real Hostpoint environment, then switched the document root in one step — zero downtime. The old WordPress stayed as a backup above the web root. 301-redirects map the old URLs onto the new pages, and there's a proper 404.
Stack
Static front end in HTML/CSS/JS. Admin in React + Vite + TypeScript with Tailwind and shadcn/ui. PHP 8 REST API with session auth and CSRF. MySQL via PDO. Apache + .htaccess on Hostpoint. Built with Claude Code.
What I learned
The hard part wasn't the code, it was the cutover: replacing a client's live, indexed site without breaking links or losing a minute of uptime — and building an admin simple enough that a non-technical owner actually uses it.

X/Twitter MCP Server
A TypeScript MCP server that gives Claude tools to post on X. My agents schedule, draft, and publish tweets straight from the Obsidian vault — I never open the X app to post anymore.
What it is
A custom MCP server that exposes the Twitter/X API v2 as native tools for Claude Desktop and Claude Code. Once it's connected, Claude can post a tweet, attach an image, or look up account info as if X were a built-in capability.
Tools it exposes
post_tweet— text-only post.post_tweet_with_image— uploads an image and posts with a caption.get_account_info— pulls follower count, handle, latest tweet, etc., useful for giving an agent context before it writes.
Why I built it instead of using a script
I was wiring a Python Twitter client into every agent that needed to post. That's a lot of duplicated code, duplicated auth, and a lot of places to forget about a rate limit. The MCP server centralises all of that: one server, OAuth 1.0a handled once, every Claude agent gets the same clean tool surface.
Stack
TypeScript, Anthropic's official MCP SDK, Twitter API v2, OAuth 1.0a, Node.js. Runs in Docker. Plugged into the daily content loop on my second-brain system — scheduled agents publish from the vault every day without me opening the X app.

Baden Hackt 2026
Built in 24 hours with two partners at the Baden Hackt hackathon. A QR scan introduces an in-person and a remote attendee, and OpenAI's GPT-4o-mini writes a personalised icebreaker from both profiles.
The problem we picked
Hybrid events have a recurring failure mode: in-person attendees and remote attendees stay in separate worlds. The two groups don't talk, and the value of "hybrid" disappears. We wanted to fix that in 24 hours.
What we built
LinkUp is a mobile-first web app. Two people meet (one in the room, one on a laptop somewhere), one of them scans the other's QR code, and within two taps both profiles are exchanged. Then GPT-4o-mini generates a personalised conversation starter from both bios — something specific, not "you both like coffee".
Extras we managed to ship
- Smart matching algorithm that suggests likely-good connections in the attendee list.
- Admin dashboard with live stats and an activity feed for the event organiser.
- CRM export as vCard and CSV so organisers can hand attendees a clean contact list afterwards.
Stack
Next.js + TypeScript, Tailwind, shadcn/ui, OpenAI (GPT-4o-mini), Supabase as the single source of truth for auth, database, and realtime updates. Deployed to Vercel mid-event. Built with two teammates and Claude Code.
What I learned
A hackathon is mostly about scope. We cut three planned features in the last six hours and shipped the ones that worked end-to-end. The match-via-QR flow is the one that demoed well — everything else was supporting cast.

VillaRimacini
A custom PHP and SQLite booking app I built for a luxury B&B in Tuscany. Bespoke instead of WordPress, with a router that lets a one-file-upload host run a real multi-file project.
What it is
Villa Rimacini is a luxury bed-and-breakfast in Tuscany. They needed a real website with a booking flow, a gallery, a menu page, and an admin dashboard — not another WordPress theme that breaks every six months.
Why I didn't pick WseamWordPress
A WordPress template would have been faster on day one and slower for the next ten years. The owner wanted to manage availability and offers without learning a CMS, and the host they were locked into had aggressive limits. So I built a custom PHP application on flat-file SQLite. No plugins, no subscriptions, no surprise upgrades.
The "local emulator" trick
The hosting environment only accepted single-file uploads via FTP. That makes local development with dozens of files almost impossible. I wrote router.php + env-loader.php that let me develop locally with a normal multi-file layout and ship as one entry point — no code changes between development and production. That one detail unblocked everything else.
What's in it now
- Public marketing pages
- Custom availability calendar
- Booking flow with confirmation emails through Brevo
- Image gallery with automatic compression
- Editable menu cards
- Discount-code system
- Admin dashboard for reservations and content
Stack
PHP 8.1+, SQLite, vanilla JavaScript, jQuery, CSS3, PHPMailer, Brevo/AuthSMTP for email. Image optimisation runs as a small build script on upload.

Hybrid RAG System
Hybrid RAG over my Obsidian vault for multi-agent recall: 768-d embeddings + SQLite FTS5 fused with RRF, ~35k chunks, 15 MCP tools, path-strict R@5=1.0 on n=190, t0-private hard-denied.
What it is
A local hybrid retrieval stack for agents over a tiered Obsidian Second Brain. Markdown and PDFs are chunked, embedded, and indexed so Claude / Grok / Hermes can pull the right page with citation spans — not grep the vault blind.
Retrieval (vault-rag)
- Hybrid channels: 768-d dense vectors (hash embed; nomic-dim compatible) + SQLite FTS5 / BM25
- Fusion: Reciprocal Rank Fusion (k=60)
- Ranking: path match, hermes-lesson boost, title/heading, exact port/IP markers, soft recency, authority tiers, archive/raw demote, abstract boost, optional feedback table
- Diversity: path-MMR (λ=0.7) + path_cap=2
- Corpus: public vault only · ~35k chunks · 1000+ extractive page abstracts · t0-private never indexes
- Eval gate: golden n=190 · R@5=1.0 · path-strict R@5=1.0 · MRR@5≈0.94 · leak=0
- Ablation: hybrid path-strict 1.0 vs FTS ~0.96 · vector ~0.70 · rg ~0.20
- Latency: p50 ~20ms hash @ ~35k rows
Agent surface
15 MCP tools with progressive disclosure: search_second_brain / keyword_search / semantic_search → get_chunk → get_neighbors / follow_wikilinks / list_path_chunks → open path. Plus get_core_context, list_path_prefixes, citation verify, pack omitted_count, Studio preflight.
Protocol: /rag-use. Scores are ranks — open the file before irreversible action.
Multi-agent layer
Cowork / Claude Code agents still plan days, empty inbox, research X through a custom MCP, and escalate via Apple Reminders. Shared state is vault files (wiki, log, _hot). vault-rag is the read index, not a second write graph.

AI-Finance-Cockpit
An AI trading council that argues with itself before placing a trade. Five layers, 19 investor personas, two LLM researchers with opposite biases, and a math hub that decides when nobody else can.
What it does
The Cockpit takes a stock ticker and a fresh quarterly earnings report and produces a BUY / HOLD / SELL signal — but only after a small army of LLM agents has argued about it.
Five layers
| Layer | Role | Model |
|---|---|---|
| L1 | 19 named investor personas (value, growth, contrarian, macro …) | Qwen-30B, local |
| L2 | 4 functional analysts (fundamentals, sentiment, news, technical) | Qwen-30B, local |
| L3 | Bull researcher + bear researcher | Grok-4.3 via OpenRouter |
| L4 | Trader synthesizer | Grok-4.3 via OpenRouter |
| L5 | Deterministic math hub | Python, no LLM |
The math hub is the part I'm most proud of. It does the position sizing, risk caps, and HOLD-vs-act gating in plain Python. No model gets to overrule the math.
Where it runs
On a Mac Studio M4 Max, exposed over an SSH tunnel. The API gives my other systems a /api/v2/council/{ticker} endpoint for fresh signals and /snapshot/{ticker} for cached ones.
Honest backtest
375 stratified test cases across 67 tickers and 11 sectors. 12-month mean excess return: +0.75%, confidence interval [-4.92%, +7.99%]. The interval crosses zero — so statistically, no proven edge yet. My verdict for real money: NO-GO.
Three sectors look interesting though: Financials +12%, IT +11%, Utilities +6%. The honest next step is sector-restricted paper trading, not switching on the live account.
Known issue
L2 analyst outputs fail JSON parse roughly 40–50% of the time. The pipeline tolerates it because the math hub skips None values, but I haven't fixed the root cause yet.
What I learned
It's easy to build something impressive-looking that doesn't actually print money. The backtest is the most important part of the project — anything that doesn't survive a stratified out-of-sample test is a demo, not a strategy.

WaitlistPilot
The waitlist tool I wished existed. Founders get viral referrals, every customer hosts on their own subdomain or custom domain with SSL, with Supabase as the backend and self-hosted email.
The problem
I was researching what founders actually need at launch and kept seeing the same gap: existing waitlist tools were either huge enterprise platforms or basic form builders. None of them had real viral mechanics, and the priced ones got expensive fast on transactional email.
What it does
WaitlistPilot lets a founder spin up a branded waitlist in minutes. Subscribers move up the queue by referring others — a simple incentive that consistently drives organic growth at launch. Customers can plug in a custom domain with automatic SSL, or use a subdomain on the platform.
Multi-tenancy was the hard part
Every customer needs their waitlist on their domain, not on waitlistpilot.com/yourname. I wrote middleware that inspects the incoming Host header on every request and rewrites the route to the right tenant. Branded, no shared-URL awkwardness, and SSL is handled per tenant via Vercel.
Cutting email costs to almost zero
Transactional email providers get expensive fast — a few dollars per thousand emails. I set up Mail-in-a-Box on a small VPS and routed all outbound through there. With 18 mailboxes across four domains, the marginal cost is the VPS bill, not per-email. Exactly the kind of cost advantage a bootstrapped project needs.
Stack
Next.js (App Router), Supabase for auth and database, Stripe for billing, Mail-in-a-Box on a VPS for transactional email, Vercel for hosting.

sealivo
A trust layer for newsletter creators built on Next.js and Supabase. Sealivo pulls your real subscriber count from ConvertKit, MailerLite, or Brevo and turns it into a badge sponsors verify in one click.
Don't send screenshots — send proof
Sponsors usually ask newsletter creators for screenshots of their subscriber count and open rates. That's slow, noisy, and easy to fake. Sealivo connects to your email provider, pulls those numbers on a schedule, and turns them into something a sponsor can verify in one click.
What it gives a creator
- Live badge. A small image you embed in your newsletter footer. It shows your latest subscriber count and open rate. The image regenerates on each load, so the number is always fresh.
- Trust page. A public profile at
/p/[username]with your verified stats and a simple growth chart. - Sponsorship inbox. Brands can browse creators, filter by metrics, save favourites, and send sponsorship requests. You see them in your dashboard and accept or decline.
- One-click pitch deck. A PDF media kit auto-generated from your real numbers.
How it's built
Next.js App Router on Vercel, Supabase for auth and Postgres, Stripe for billing. Metrics refresh weekly via a cron job, and everything goes through the official ConvertKit / MailerLite / Brevo APIs — no scraping. Transactional email runs through a small relay on a Mail-in-a-Box server instead of Vercel's SMTP, which keeps the cost flat as the platform grows.

CleverContracts
A six-month Next.js + Firebase build with my partner. CleverContracts helps freelancers draft contracts, flags risky clauses with AI, and predicts how a client might react to the tone of an offer.
Why we built it
After talking to dozens of freelancers, my partner and I kept hearing the same complaint: contracts are confusing, clients push back on terms, invoices go unpaid. Roughly 68% of the freelancers we spoke to had been burned by an unpaid invoice. Most can't afford a lawyer for every client engagement.
What it does
CleverContracts is an AI-assisted contract platform aimed at solo freelancers and small agencies. It helps you draft a contract from a template, spots risky clauses (auto-renewal, unilateral termination, vague payment terms), and analyses tone so you can guess how a client will respond before you hit send.
Features that took the longest
- AI contract drafting tuned to the type of freelance work (design, dev, writing, consulting).
- Risk-clause detector with explanations a non-lawyer can read.
- Tone analyser that flags too-stiff or too-aggressive language.
- Version history per contract.
- Template library for common scenarios.
The legal part was the hard part
The code wasn't the hard problem. The hard problem was building AI-assisted legal tech responsibly. We spent weeks researching what is and isn't allowed when an AI helps draft a contract, and we talked to legal advisors so we wouldn't accidentally promise advice we couldn't give.
Stack
Next.js front end, Firebase + Cloud Functions backend, Jest for unit tests, Playwright and Puppeteer for end-to-end, Firebase Emulators for local CI, Sentry for production errors. Full CI/CD pipeline from day one.
Status
Functional full-stack app in beta with real users. We're still refining based on feedback, but the core value proposition holds up.
What I learned
Building a product is at least as much about regulation, user research, and scope decisions as it is about clean code. Half of my best decisions on this project were no, we are not building that feature this quarter.

NicheDetector
A weekend project with a friend. Niche Detective uses Apify to scrape Amazon KDP and scores book niches by competition strength and revenue potential, so publishers stop wasting 20 hours per launch.
What it does
Niche Detective helps Kindle Direct Publishing authors find profitable book niches without spending 20 hours of manual category browsing on Amazon. It pulls KDP data, scores each niche for competition strength and revenue potential, and ranks the opportunities.
Core features
- Automated niche discovery. Surfaces emerging categories before they get crowded.
- Competition quality scoring. Not just how many books — but how strong the top sellers are.
- Revenue potential calculator. Combines BSR data with category averages to estimate monthly revenue.
- Trend analysis. Publishing velocity, seasonal patterns, pricing curves.
We built it in three days
Including the landing page, the auth flow, and a usable dashboard. We launched it as a small private beta inside Reddit's self-publishing communities (around 2.5 million members combined). Feedback was strong; one user thanked us for saving him "a week of work".
Reality check: AWS
The Amazon-scraping pipeline ran on AWS, and the bill grew faster than the user count. We were two students paying out of pocket and the unit economics didn't work yet. We paused the public beta before it became expensive in a way we couldn't laugh about.
Business model we tested
Tiered subscriptions from $19.99 to $99 per month, plus one-off niche reports at $29. The interest was there; the cost structure wasn't.
Stack
Python for scraping, AWS for orchestration (briefly), a data analytics pipeline, Apify for scheduled crawls, and a React front end on Next.js.
What I learned
You can ship a working SaaS in 72 hours. You cannot ship a sustainable SaaS in 72 hours. The lesson was less about code and more about understanding cost per active user before scaling anything.
Lionel.
Full-stack developer based between 5000 · Aarau. Open to internships, projects and conversations.