Selected work

My Projects

A collection of my work, growing as new projects come together.

01

Modulane

Full-Stack 路 SaaS 路 2026

Every part of your app, clearly owned. Modulane shows who is working on what, how stable a component is, and what's still missing before release.

It's built with React, TypeScript and Vite on top of Supabase, which handles authentication, the Postgres database, row level security and realtime updates. Workspaces, projects, components, requirements and progress updates all live in one place instead of scattered across chats and boards.

The core idea is separating task progress from technical maturity, a component can be feature-complete and still marked unstable. Roles, invitations and private projects are part of the data model, not something bolted on later.

Built with

React 路 TypeScript 路 Vite 路 Supabase

01

Ownership

Assigned people and currently active people stay separate, so it's always clear who takes over.

02

Maturity

Work status and technical stability have their own states, from free to production ready.

03

Code

Commits and pull requests attach to a component when they add context, never as an obligation.

02

Snusdex

Full-Stack 路 Passion Project 路 2026

The Pok茅dex for Snus. Snusdex turns an everyday habit into a game, scan a can, unlock a collector card, climb a global leaderboard. The project I'm proudest of, built together with friends.

The web app is built with vanilla JavaScript and Tailwind CSS on top of Supabase, which handles authentication, the Postgres database, storage and realtime updates. Barcode scanning runs entirely in the browser through Html5-QrCode, so any phone camera becomes the way in, nothing to install.

Around that core sits a full game layer: rarity-based collector cards, achievement badges, friend connections, activity heatmaps and a leaderboard that keeps people coming back. A real product with real users, not a demo.

Scan

Browser-based barcode scanning turns any can into a collectible.

Collect

Rarity-based cards and achievement badges to chase.

Compete

A global leaderboard and friend connections.

Track

Realtime data and activity heatmaps, powered by Supabase.

Part of the project

Snusdex Foundation

The native iOS shell for Snusdex, a SwiftUI wrapper around the web app that adds a startup jingle, an offline screen, haptic feedback and home-screen widgets that jump straight into the scanner. Web app as content, this project as the native layer it runs on.

Part of the project

Snusdex Debug

Not a release candidate, a developer console built into the shell. A draggable in-app button opens a domain switcher, a live-reload mode for testing against a local tunnel, a Safari Web Inspector toggle, a JavaScript runner and a native console-log viewer, so the web app can be debugged on-device without touching Xcode.

Built with

JavaScript 路 Tailwind CSS 路 Supabase 路 Html5-QrCode

03

OweU

iOS Development 路 2026

Who owes whom, finally clear. OweU is an iOS app for tracking shared expenses between friends and groups, the antidote to the messy group chat and the half-finished spreadsheet.

Built with Expo and React Native in TypeScript, it keeps a clear real-time overview across multiple currencies. The interface is deliberately minimal, finance-app readable, fast, and focused on the one question that matters: who pays next.

Built with

Expo 路 React Native 路 TypeScript

01

Split

Split any expense across a group and see each person's share instantly.

02

Track

A running, real-time balance that works across multiple currencies.

03

Settle

Clear, minimal summaries of who pays whom next, no spreadsheet required.

04

Kylix LM

Machine Learning 路 Language Model 路 2026

An 80 million parameter GPT style language model, built from scratch in PyTorch and trained locally on Apple Silicon.

The architecture follows a modern Llama style stack: RoPE positional encoding, RMSNorm, SwiGLU feed forward layers, causal multi head attention and an untied output head. Tokenization, training and generation all run locally, with support for MPS, CUDA and CPU.

A custom uncertainty gate tracks the model's confidence during generation and returns "I don't know" instead of a confident sounding guess once that confidence drops too low.

Built with

PyTorch 路 Python

01

Architecture

8 layers, 8 attention heads and a byte level BPE tokenizer with a 32,000 word vocabulary.

02

Local training

Runs end to end on Apple Silicon through MPS, with CUDA and CPU as fallbacks.

03

Uncertainty

A confidence score decides when the model should admit it doesn't know instead of guessing.

Every project I build is open source.

Explore the full collection, including everything still in progress, on my GitHub.

Moritz Wendt 漏2026