Ryszard Sandak
Work

Shipped, not slides.

A few things I've built. Every write-up follows the same shape — the problem, what I built, the tools, and the hard part or outcome. Some were solo, some with a small team; the specifics of any private client stay private.

Web Application / Self-Hosted

BudgetMyUni — Student Budgeting & Commute Planner

The problem
Students deciding where to live near university juggle rent, commute time, and transport cost across scattered tools and guesswork — with no single view of what a place actually costs them in money and minutes.
What I built
Full-stack web app with auth, a preferences editor, and a dashboard that geocodes addresses, plots them on an interactive map, and computes commute time and monthly public-transport cost from real transit routing. Plus a community tips section with posting, comments, and voting.
Tools
React, MySQL, Docker, OpenTripPlanner, custom GTFS, Leaflet, Photon geocoding, NGINX, self-hosted on Proxmox.
The hard part / outcome
Deployed end-to-end on self-hosted infrastructure. The genuinely hard part was transit routing — Slovenia publishes no open GTFS feed, so I built a custom GTFS for the Koper–Piran Arriva line to drive OpenTripPlanner and return real commute times and costs.
Programming / Automation / AI

Student Housing Telegram Bot

The problem
Students hunting for a room refresh listing sites and Facebook groups all day — slow, noisy, and easy to miss the good ones the moment they appear.
What I built
A Telegram bot that scrapes a student-housing site on a schedule and pushes new listings matching each user's filters (price, region, room type, subsidy). Listings are messy free-text, so an AI extraction step turns each one into structured fields — price, room type, gender/subsidy requirement, size — before matching and de-duplicating against what a user has already seen.
Tools
Python, Telegram Bot API, web scraping, AI extraction (LLM structured output), Supabase (Postgres), scheduled jobs, Render.
The hard part / outcome
End-to-end pipeline from scraped listing to filtered Telegram alert. Onboarding sets filters across 6+ attributes; only genuinely new matches reach the user. Built with a small team — I owned the scraper and the AI extraction subsystem.
AI / NLP / Research

YouTube Comment Sentiment Analysis

The problem
YouTube removed the public dislike count, so gauging how a video actually landed got harder. The signal is still there — in the comments — but it's thousands of messy, multilingual, free-text opinions that nobody wants to read by hand.
What I built
An NLP pipeline over 12k+ comments pulled from the YouTube API across music, gaming, and news. Spam filtering, VADER pre-labelling, a fine-tuned DistilBERT sentiment classifier, and CRF / MaxEnt part-of-speech tagging to surface the adjectives and topics people actually use — rendered as word clouds and sentiment breakdowns.
Tools
Python, DistilBERT (fine-tuned), NLTK / VADER, CRF & MaxEnt, YouTube Data API, CUDA.
The hard part / outcome
75% sentiment accuracy on a balanced 3k-comment set; POS tagging at 96.3% (CRF) and 95.4% (MaxEnt). A university ML project built with a small team — I worked on the data pipeline and modelling.
Infrastructure

Self-Hosted Development & Automation Environment

The problem
SaaS lock-in and per-seat pricing get expensive fast; some projects can't legally send data to third parties.
What I built
Personal server environment hosting dashboards, services, bots, and AI tools. Secure remote access without exposing ports.
Tools
Proxmox, Docker, Linux, Cloudflare Tunnels, Ollama, OpenWebUI.
The hard part / outcome
Production-grade self-hosted stack — template for client deployments where data sovereignty matters.
Got something like this in mind?

Tell me what you're trying to build — I'll reply with a scope and a timeline.

Tell me what you're building