Skip to content
Live since 2026 · running at utisak.app
Full StackLiveWeb · 2026

Utisak

QR review funnel: praise goes to Google, complaints go to the owner.

Role
Full Stack
Year
2026
Category
Web
Stack
Next.js 15 (App Router)React 19Node.js 22SQLite (better-sqlite3)Vanilla CSSnext/fontNodemailerPDFKitqrcodescrypt + HMAC sessionsbuilt-in cronself-hosted deploy

01 · Outcomes

What the build actually shipped.

Numbers, not adjectives. The stats below are pulled from production. Anything still live, still measured.

Live

in production

since 2026

End-to-end

front + back

one set of hands

Public

live URL

utisak.app/

2026

shipped

year of build

02 · Overview

What it does.

Utisak is a small SaaS for local venues in Serbia. A guest scans a QR code at the table and rates their visit. Satisfied guests are guided to leave a Google review, while complaints go privately to the owner before they show up anywhere public. Every guest gets the Google link at the end, so the whole flow stays within Google's review policies.

I built the entire product on my own: the guest funnel in Serbian and English, an owner portal with conversion stats, monthly comparisons and print-ready QR materials, and an admin dashboard for billing, trial periods and CSV export. The stack is intentionally simple: Next.js 15 with SQLite, no ORM, no external services. Backups, weekly email reports, owner reminders and GDPR anonymization all run on a built-in cron. Self-hosted on a single Node server.

04 · Decisions

The choices that shaped the build.

Tech is downstream of decisions. These are the calls made early enough to compound the right way. The ones a code review six months later still agrees with.

End-to-end ownership

One engineer from schema to deploy. Removes the most expensive failure mode in product builds the seam between specs and code where intent dies.

Schema before UI

Data shapes first, screens second. The frontend is a view of the data, not a parallel reality. Saves weeks of rework when scope shifts.

Boring tech where it matters

Relational stores for payments and ledgers (ACID is non-negotiable), document stores for content, Redis for cache. Pick the dull tool for the dull job.

Let’s build

Have something to ship?

I take 4–5 freelance projects a year. Cold pitches welcome. I reply within 24 hours on weekdays.

hello@suzunovic.dev