Back to archive
IV. Client Builds & Logistics Platformssupportingsoloclient anonymised

Self-service Vendor — Multilingual CMS

Corporate site for "Self-service terminal vendor (UZ)" (info kiosks / payment terminals, UZ) with a custom multilingual CMS. Built on the ShipKit monorepo, migrated off Tilda, layout per Figma. Solo.

Status
active
Period
2025-11-10 → 2026-05-21
AI sessions
1
Stack
Languages
TypeScript
Frameworks · Infra
Next.js 16Elysia.jsDrizzleBetter AuthTurborepo
§01

Overview

  • What it is: marketing site for Self-service terminal vendor (UZ) (products: info kiosks, payment terminals) + a custom headless CMS for content management. Public storefront (SSR from API) + admin (CRUD for sections/categories/certificates/settings) + API. Content is multilingual.
  • Type / status / role: web-app (monorepo: site + CMS) / active / solo (47/47 commits — user).
  • Activity period: 2025-11-10 → 2026-05-21, active.
§02

Stack

  • Monorepo (ShipKit): Turborepo + Bun; apps/web (Next.js 16 public site), apps/admin (Next.js admin CMS), apps/api (Elysia.js); packages auth (Better Auth)/db (Drizzle/Postgres)/cache (Redis)/ui (shadcn+Tailwind v4)/email/entities/cli.
  • Frontend: Next.js 16 (App Router, SSR), section components per Figma, sonner (toasts), i18n (LanguageTabs).
  • CMS: custom — sections, categories, certificates, site settings; ImageUpload, LanguageTabs (multilingual content), seed script.
  • Infra: .mcp.json (shadcn MCP), .claude/, ShipKit deploy config.
  • Data: PostgreSQL (Drizzle) + seed; content migration from Tilda (backup/ — snapshot of the Tilda site with assets).
§03

What was shipped

Tidy conventional commits, clean bottom-up build visible:

  • CMS backend (feat(api)): settings controllers + CMS controller registration; entities exports (sections/categories/certificates/settings/upload).
  • Admin (feat(admin)): CRUD pages for sections (list+edit), categories, certificates, site settings; CMS sidebar navigation; reusable LanguageTabs + ImageUpload; Toaster (sonner).
  • Content seed (9de7b0a feat(db): Self-service terminal vendor (UZ) seed script with all initial content).
  • Public site (feat(web)): server-side fetch helpers + data types, header with contacts and language switcher, 10 sections per Figma, footer, landing assembly on SSR data (boilerplate removed), additional landings /infokiosk, /platejniy-terminal, brand-logos, dc-pins, "pixel-pass" polish.
  • Tilda migration (0e34433 chore(backup): snapshot Tilda site with assets).
  • Scope: 47 solo commits over ~6 months.
§04

Technical challenges

  • Custom multilingual CMS from scratch (apps/admin + apps/api + packages/db): CRUD for sections/categories/certificates/settings, multilingual content via LanguageTabs, image upload (ImageUpload), seed. → proves the ability to build a headless CMS (not just consume an off-the-shelf one).
  • SSR landing from API (apps/web, server-side fetch helpers + types): the public site renders sections from the CMS on the server. → typed API (Elysia) wired to Next SSR.
  • Figma → components (10 sections "matching Figma design", "pixel-pass"): clean transfer of design to code.
  • Migration off Tilda to an own stack: moving away from a no-code builder to a managed Next/Elysia site + CMS (preserving assets). → typical, valuable B2B task.
§05

AI-assisted development

  • Sessions found: 1 .jsonl in the Claude Code sessions directory for this project. Local .claude/, .mcp.json (shadcn MCP).
  • What was done with AI: development on AI-ready ShipKit (CLAUDE.md + skills); likely CMS/sections assembly with Claude Code + shadcn MCP. Not deeply sampled (1 session).
  • Pattern: ShipKit + shadcn MCP + Figma-driven layout.
§06

Achievements & metrics

  • Solo: site + custom CMS + API on a modern monorepo in ~6 months.
  • Multilingual content, 10+ sections per Figma, 2+ product landings, Tilda migration.
  • 47 solo commits.
§07

Contributors

git shortlog · all branches

  1. Dave9347
1 contributor47 commits total
Currently

Open to Senior / Staff engineering roles and selective freelance — production AI, platform, and full-stack work.

Get in touch