Skip to content

Marek Žiška · Front-end developer · Prague

Front-end for the back office.

Admin interfaces, data-heavy tables, complex forms, role-based permissions — the software customers never see and companies run on. Five years of front-end work; the last three and a half almost entirely React and TypeScript on production back-office systems.

  • React · TypeScript
  • 4 production admin platforms
  • Prague / remote
Admin platforms

The systems companies run on

All client work, all under NDA — so no names, no screenshots, no links. What I can show is shape and scale, and none of it is inflated. Three of the four platforms, described honestly:

Facilities · maintenance

Maintenance platform for industrial parks

A CMMS for a landlord operating 87 industrial and logistics parks with 800 tenant organizations. Eight user roles across both sides of the landlord–tenant relationship — admins, property managers, technicians, external suppliers, tenants — with modules and even individual fields gated by role. Eleven modules: ticketing, dispatch, warranties, planned events, bulk Excel import, and a map-based roof-access workflow where hand-drawn roof zones feed both warranties and time-bound contractor access.

The hard parts: A 14-column, user-reorderable ticket table over genuinely server-driven pagination and filtering; a six-state ticket lifecycle with SLA deadlines auto-computed from priority; cascading location selects that must invalidate downstream choices correctly; a field-level audit trail rendered as a readable diff feed; and a two-way sync with a third-party facility platform — a state-machine crosswalk where “don't send” is a valid mapping.

  • React
  • TypeScript
  • Vite
  • Emotion
  • MapLibre GL
  • 87industrial parks
  • 800tenant organizations
  • 8user roles
  • 14columns in the ticket table
  • 6ticket lifecycle states

B2B · loyalty & ordering

Partner portal for a B2B distributor

CRM, loyalty engine and ordering portal in one, for a distributor of agricultural inputs. Seventeen API resource types across twenty-plus screens: customer records and multi-step onboarding, invoice approval feeding a points program, voucher redemption, and orders placed on customers' behalf — all sitting on tiered, negotiated pricing.

The hard parts: Three parallel price lists on every product, where the points-versus-discount split is itself versioned over dated validity windows — the same invoice computes differently depending on when it was issued; a discount-rules engine (quantity and revenue-threshold rules) that has to compose with that pricing without double-stacking; and fully server-driven tables — the 12-column invoice view paginates, sorts and filters through the API, not in the browser.

  • React
  • TypeScript
  • TanStack Query
  • React Hook Form
  • Zod
  • Tailwind
  • Radix UI
  • 17API resource types
  • 20+distinct screens
  • 3pricing tiers
  • 12columns, largest table
  • 5order lifecycle states

E-commerce · operations

Storefront with an ERP-style back office

One Next.js codebase serving two audiences off one auth session: a public storefront, and the internal console behind it — orders, products and pricing, customers with a loyalty program, staff management, newsletter tracking. Master–detail tables throughout the admin; a three-step checkout wired to a card gateway and a parcel-locker courier.

The hard parts: Keeping the storefront safe for anonymous visitors while genuinely protecting admin routes on the same session — role-based UI down to a disabled buy button for admin accounts, with no flash of the wrong state; an order model reconciling dual ex/incl-VAT pricing, loyalty discounts and manual status edits against updates arriving from payment and shipping providers; and a repeatable variant editor with live-computed VAT-inclusive prices.

  • Next.js
  • TypeScript
  • Tailwind
  • Sentry
  • Headless CMS
  • 2audiences, one session
  • 4master–detail views
  • 8distinct form types
  • 3checkout steps
Working proof

No screenshots. A working slice instead.

A small fictional team console, built with the same stack I use in production — TanStack Table, React Hook Form, Zod. Sort it, filter it, switch roles, edit a row: the everyday mechanics of a back office, at 1:100 scale.

Fictional data, real code — it lives in this site's repository on GitHub.

Public work

Also shipped

Not everything is locked behind an NDA. Sites I can actually link:

Pest-control company site — Next.js with a CMS-driven blog, taken from designs to production solo.

  • Next.js
  • TypeScript
  • Tailwind
  • CMS

Multilingual marketing site for a fertilizer manufacturer — built solo, i18n included.

  • Next.js
  • TypeScript
  • i18n
  • Tailwind

React front end for an industrial-controls firm — a deep technical portfolio made legible to non-engineers.

  • React
  • TypeScript
  • Vite
Approach

How I work

The short version

Clean code. No clutter.

I plan before I build. Probably more than is normal — I'll spend hours deciding exactly what a thing should be before I write a line of it. It sounds tedious. It means I rarely have to throw work away.

I'm not the developer who reinvents what already exists. If there's a good library, I use it. If there isn't, I build it carefully and don't leave a mess. Clean code, no clutter, nothing that's there just to look clever.

What you can actually count on: I finish what I start. I hit deadlines. I don't make drama when something breaks — I just fix it. I'm still getting better, and I know it. But the parts that matter on a team — showing up, shipping, being easy to work with — those you don't have to worry about.

Everyday stack

  • React
  • TypeScript
  • Next.js
  • Tailwind
  • TanStack Query
  • TanStack Table
  • React Hook Form + Zod
  • Playwright
  • Vite

Currently adding the other side: Node, Express, PostgreSQL — enough back end to meet the API halfway.

About

Off the clock

I'm based in Prague, originally from Bratislava.

I like one warm lamp in the corner and no overhead lights — which, as it turns out, is also how I design.

That's it. No mission statement. If you've read this far, you probably already know whether we'd get along.

The whole idea

One warm lamp. No overhead lights.

Contact

Get in touch

Open to front-end roles — Prague or remote. If there's an admin panel nobody on the team wants to own, we should talk.