Selected work

Things I've built.

Products I designed, built and run myself, plus professional work I can describe in general terms.

Own products

3 products, all self-hosted

SaaS product

Early access

DajFakturu

Invoicing for freelancers and small businesses in Bosnia and Herzegovina. It checks every invoice for the ten elements the VAT rulebook requires, converts foreign currency at the central bank's middle rate, writes the amount in words, and produces bilingual export invoices and the AMS-1035 tax form. I designed it, built it, and host it myself.

  • Each company's data is isolated twice: EF Core query filters in the app and row-level security in PostgreSQL.
  • Invoice numbers are gap-free, as the law requires, allocated under advisory locks inside the issuing transaction.
  • One set of validation rules is shared by the API, the Blazor WebAssembly app and the server-rendered pages.
  • Docker images built in GitHub Actions, Cloudflare Tunnel in front, encrypted offsite backups, Sentry and uptime checks.
  • .NET 10
  • FastEndpoints
  • Blazor
  • PostgreSQL
  • EF Core
  • QuestPDF
  • Docker

Open dajfakturu.nisicadi.dev

AI travel planner

Live

TripAI

Turns a destination, a few days and a budget into a day-by-day itinerary backed by live web search. You can refine the plan in plain words ("make it cheaper") and export it as Markdown or JSON, or print it.

  • A fixed pipeline rather than an open-ended agent: search and the trip outline run in parallel, then the days are written in up to four parallel chunks.
  • Built to finish inside a serverless timeout, with retries, a model fallback chain, and per-chunk fallbacks so one bad response doesn't sink the plan.
  • Progress streams to the page as NDJSON, so you watch each step land instead of a spinner.
  • Model output is validated with Zod, and the pipeline is tested with Vitest against a mocked model.
  • Nuxt 4
  • TypeScript
  • OpenRouter
  • Tavily
  • Zod
  • Vitest

Open tripai.nisicadi.dev

AI chat app

Live

AI Fitness Coach

A chat coach for training, recovery and everyday nutrition. It answers first and asks questions second, stays on topic, and keeps your history in the browser, so there's no account to create.

  • Replies stream in as they're written, and pressing Stop cancels the upstream request so no quota is wasted.
  • Suggested follow-up questions are parsed out of the stream and shown as tappable chips.
  • Text is painted once per animation frame, and the view only follows the reply while you're at the bottom.
  • Guardrails keep it on fitness and handle risky topics carefully, without tripping on gym slang like "leg day will kill me".
  • Nuxt 4
  • Vue 3
  • TypeScript
  • Tailwind CSS
  • OpenRouter

Open fitness.nisicadi.dev

Professional work

Work I've done at companies and for clients. The code isn't mine to share, so the details stay high level.

AI products

AI coaching apps

Two mobile apps built from scratch in a team of two or three: a parenting coach with check-ins, courses and profiles, and a meditation app with AI-guided sessions.

  • The NestJS backend and data model behind both apps, and the Ionic client.
  • LLM coaching built with the AI team, with responses streamed to the phone as they're written.
  • Mentored a junior developer through the meditation app.
  • NestJS
  • Ionic
  • PostgreSQL
  • LLM
  • AWS

Subscription SaaS

Subscription SaaS for family archives

Taken from an empty repository to launch: Stripe billing with idempotent webhooks, tiered paywalls, JWT auth with email verification, and the Vue dashboard. Docker on AWS.

  • NestJS
  • Vue
  • PostgreSQL
  • Stripe

Creator platform

Brand and creator content platform

An existing product where brands and creators work together. I added real-time chat over WebSockets, file delivery with multipart uploads to S3, and payments.

  • NestJS
  • WebSockets
  • AWS S3

Healthcare

Radiology and pathology software

Software used by hospitals and clinics across the region. I maintain and extend the long-running ASP.NET MVC applications on .NET Framework, and build new projects on Blazor and .NET 8 that work alongside them to expand what the platform can do.

  • .NET 8
  • Blazor
  • ASP.NET MVC
  • .NET Framework

Fintech

Wealth-management back office

A back office for a Swiss wealth-management platform, built up to pre-production. Every module had its own solutions: an API with its tests and database, and a client package published to NuGet that the module's Blazor front end used to call it.

  • Commands and queries through MediatR, with FluentValidation running as a pipeline behaviour.
  • Front-end modules talked to the APIs only through the versioned, typed clients.
  • .NET
  • MediatR
  • Blazor
  • NuGet

Enterprise ERP

ERP web edition

The web edition of a commercial ERP: employee management, leave, travel orders, and service orders routed with Google Maps, plus SQL-heavy batch work.

  • Cut response times on update-heavy endpoints by loading related data only when a request needed it.
  • Mentored two junior developers.
  • ASP.NET MVC
  • MSSQL
  • EF Core
  • Jenkins