Portfolio
What I've done.
Not a deck about the work — the work. Live sites you can audit, demos you can log into, an automation you can run, and the wiring behind the builds that aren't public. Everything here is checkable.
Websites
Sites you can go look at.
In production right now, on three different stacks. Open one in a new tab and run whatever audit you like — that's the point.
- mycustommanufacturer.com
mycustommanufacturer.comVisit ↗B2B supplement manufacturer, rebuilt for AI-era searchHeadless WordPressNext.js - zemvelo.com
zemvelo.comVisit ↗D2C storefront running inside the marketing siteWooCommerceWordPress - domynova.com
domynova.comVisit ↗Residential developer outside KrakówWordPress
Apps
Don't take my word for it — log in.
Two working demos, both dressed as Harbor & Pine — a made-up furniture store, so the data can be shown in full. One is the shop's side, one is the customer's, and they share a database. Real screens, fake data, no pitch between you and the product.

Open credentials — every door and password is inside each case study. No signup.

Store analytics suite
Internal toolHarbor & Pine — The shop's side of the store
The problem
Harbor & Pine sells through WooCommerce, buys ads, and emails a list — and each of those lives behind its own login. Answering "which campaign actually paid for itself?" meant exporting three reports and joining them by hand in a spreadsheet, so mostly nobody asked.
The build
One warehouse that pulls orders, ad spend, and site analytics on a schedule, and a dashboard built around the decisions rather than the sources: which campaign produced revenue, which coupon just discounted people who were buying anyway, which customers came back.
What's in it4
- Campaigns view — UTMs, coupons, landing pages, and email traffic together
- Ad spend and site analytics next to store revenue, not in a separate login
- Saved report builder with CSV export
- Nightly sync with a replay log — a failed pull retries instead of vanishing
How it's wired5
- StoreREST
- Ads + analyticsAPI pull
- Sync workercron / ETL
- WarehousePostgres
- DashboardNext.js
Data model4
orders
- id
- customer_id
- total
- coupon_code
- utm_source
- placed_at
customers
- id
- first_order_at
- lifetime_value
campaigns
- id
- utm_source
- utm_campaign
- spend
- clicks
sync_runs
- id
- source
- started_at
- status
- row_count
Built with4
- Next.js
- TypeScript
- PostgreSQL
- WooCommerce REST

Order portal
Customer-facingHarbor & Pine — The customer's side of the same store
The problem
A made-to-order piece takes weeks to build. Customers email to ask where theirs is, and the shop answers the same four questions by hand — with progress photos buried in threads and invoices re-sent on request.
The build
A portal where the order carries its own history: every stage dated, shop-floor photos attached, invoices and documents in the customer's hands. The shop updates the order once and the customer sees it immediately, so the question stops being asked.
What's in it4
- Order timeline — deposit, build, finish, delivery, each with real dates
- Two logins, two roles: the customer's view and the admin's view of one order
- Invoices and documents in the customer's hands, not in an inbox
- Auth, permissions, and an audit trail on every status change
How it's wired5
- Customer loginsession auth
- Order recordPostgres
- Stage updateadmin action
- NotificationResend
- Portal timelineNext.js
Data model4
users
- id
- role
- last_login_at
orders
- id
- customer_id
- piece
- stage
- deposit_paid
- due_at
order_events
- id
- order_id
- stage
- note
- actor_id
- created_at
documents
- id
- order_id
- kind
- storage_key
- uploaded_at
Built with4
- Next.js
- TypeScript
- PostgreSQL
- Resend
Systems
An automation you can set in motion.
A reorder journey for that same store, built end to end — purchase webhook, welcome email, click tracking, the return visit, the coupon. Run it yourself: the orders it creates land as rows in the analytics demo one exhibit up.
Problem: one-time customers. Solution: data-driven automation.
Six stages, every one wired by me
- First orderwebhook
- Welcome emailResend
- Link clickedclick event
- Return visitUTM tag
- Add to cartcart event
- Second ordercoupon code

The journey, fully wired
ArchitectureHarbor & Pine — every event, every lane, and the loop it exists for
One purchase sets all of this off. Four lanes run at once — email, SMS, the CRM, and the customer's own portal — every event lands in analytics, and the coupon at the end starts the whole thing again. This is the map; the live, running version is the next increment.
- a packet on a wire — one event in flight
- feedback — the system listening to itself
- the repeat-order loop — where the money is
AI
The wiring is the receipt.
AI work lands inside systems that aren't public, so there's nothing to link. Instead, each build is shown as its wiring: what connects to what, what runs where, and where a person stays in the loop.
Document intelligence
Intake that reads its own paperwork.
- Inbox
- Extraction
- Validation
- Your CRM
In the loop: Low-confidence extractions queue for a person instead of committing a guess.
Retrieval
Search that answers, with the receipts.
- Your records
- Embeddings
- Retrieval
- Cited answer
In the loop: Every answer ships with what it was drawn from, so a wrong one is visible in seconds.
Local models
An assistant that never leaves the building.
- Your hardware
- Open-weight model
- Internal tools
In the loop: No third-party API in the loop, no per-token bill, no terms to renegotiate later.
This site
The exhibit you're standing in.
This site is the demo.
The websites I ship are held to the bar this page holds — a near-perfect Lighthouse report, mobile, throttled, in production.
- Performance — passed
- Accessibility — passed
- Best Practices — passed
- SEO — passed
- 2/2Agentic Browsing
From the record
“Highly technical, incredibly quick to learn new workflows, and remarkably dynamic when it comes to evolving project requirements.”
See something that fits?
30 minutes. Bring the URL, the spreadsheet, or the workflow that's outgrown it — you'll leave with a straight read on how it gets built.
Let's get started