Services
Web apps & SaaS
Business web apps and multi-tenant SaaS platforms — fast, secure and built to grow.
I build web applications on Next.js and Postgres that survive real traffic and real data: sign-in, roles, per-customer data isolation, payments, reporting, email. Šape is a multi-tenant SaaS for dog grooming salons where each salon sees strictly its own data — a rule enforced in the database itself, not in application code that can be bypassed.
Technology
- Next.js
- React
- TypeScript
- Tailwind CSS
- Supabase
- PostgreSQL
- Row Level Security
- Vercel
- Resend
- Zod
What you get
- Next.js web application — fast on mobile and on slow networks
- Postgres database with row-level security
- Sign-in, sign-up, roles and team invitations
- Multi-tenant architecture — each customer in their own space
- Public booking and enquiry pages for your customers
- Automated email: confirmations, reminders, reports
- Admin, statistics and data export
- Deployment on Vercel, domain, HTTPS and security headers
- Localisation and adaptation to the target market
Proof in the work
Šape
Multi-tenant SaaS · own product
SaaS for dog grooming salons: clients, dogs, appointments, public booking and automated email reminders. Each salon sees strictly its own data — a rule the database enforces, not the app.
- Next.js 16
- React 19
- TypeScript
- Tailwind CSS 4
WATdesign
Catalogue and configurator · web
A made-to-measure wall mural catalogue with 4,620 designs, a dimension configurator and per-m² pricing — with no database and not one image file in the repository.
- Next.js 16
- React 19
- TypeScript
- Tailwind CSS 4
eRačun Semafor
Regulatory tool · own product
A free readiness check for Croatian Fiscalisation 2.0. Thirteen questions through a deterministic rule set produce a report with deadlines, owners and the article of law behind every claim.
- Next.js
- TypeScript
- Supabase
- Vercel
Is a web app safe for my customers' data?
Data isolation goes into the database, not into the app. Every table carries an owner column and Postgres row-level security refuses a query for someone else's row — even if a key leaks. Sensitive keys never reach the browser.
Can I charge subscriptions through the app later?
Yes. Plan tiers and limits are designed into the schema from the start even if billing starts later — so adding payments becomes wiring up a payment provider instead of rewriting the app.
Will the site be fast?
Speed is a requirement, not luck. The WATdesign catalogue holds 4,620 designs and its home page loads about 26 kB of imagery, because the images are generated from code instead of served as photographs. Measured on simulated 4G with a 4× CPU slowdown: home page LCP around 2.0 s, catalogue around 0.9 s.
Contact
Tell me what you are building — I reply today.
I normally reply the same working day. The first call takes thirty minutes, costs nothing and commits you to nothing.