Work

ATM Website

A corporate platform where the client edits everything and calls the developer never. One monorepo, three apps, zero hardcoded headlines.

Live2024 - 2025Full-stack, solo
ATM Website

The problem

The company's web presence was static — every text change, every new service, every photo meant a call to a developer. Content went stale because updating it was a project, not a click.

The solution

A three-app platform: a fast public site, an admin panel where staff manage 100% of the content, and an API in between with caching so the public side stays quick even on busy days. /apps/landing — Landing (Nuxt 3): server-rendered public site with SEO tags per page, a sitemap with dynamic slugs, and graceful skeletons when the API blinks. /apps/admin-panel — Admin (Vue 3 + Ant Design): full CMS with CRUD for every content type, drag-to-reorder, image uploads, publish/unpublish, and confirmations before anything destructive. /apps/backend — API (NestJS): modular REST API with JWT auth in HTTP-only cookies, Redis-cached public endpoints, Swagger docs, and DTO validation on every door.

The result

The client updates the site themselves, deploys happen on git push, and the developer's phone is quiet. Which was, secretly, the whole point.

Architecture

Monorepo with three deployable apps sharing a typed contract package. The Nuxt landing and Vue admin panel both consume the same NestJS REST API. Redis sits in front of every public GET endpoint; every admin mutation invalidates exactly the keys it touched, so edits appear on the live site within seconds, not after a redeploy.

Responsibilities & Challenges

Responsibilities

  • Everything, in order — solo delivery in phases: infrastructure first, then the API, then the admin panel, then the public site, so every layer landed on something that already worked.

Challenges

  • Cache that tells the truth — Redis caches every public endpoint; every admin mutation invalidates exactly the keys it touched. Editing a headline updates the live site in seconds, not after a redeploy.
  • Push-to-deploy — GitLab CI builds images, runs migrations, and rolls the stack with zero downtime. The scariest part of deployment is now choosing the commit message.

Vue.js · Nuxt.js · NestJS · PostgreSQL · Docker · TypeScript

Want one of these?

I build platforms the client can run without me. It's good for them and great for my sleep.

Let's talk →