# Dimori Park Group — Off the CMS server: one app for every location

> A real-estate developer's site, a page per cottage town. I moved it from Strapi and GraphQL on EC2 to Keystatic, a Git-based CMS: no CMS server and no database to run. Two towns are live and a third is ready to publish.

- Source: https://ivankarpinskyi.dev/work/dimori-park-group

- Role: Full-stack engineer: architecture, CMS, frontend, deployment
- Year: 2025
- Built by: Alone
- Live: https://dimoripark.com.ua

## § 01 Before and after

_Fig. 1: The migration removed a server and a database._

## § 02 One app, a route per town

Every cottage town is a route with its own content in the same application. Two are live; a third is ready to publish.

## § 03 From an edit to production

_Fig. 2: An edit in Keystatic is a commit; the commit triggers a build._

## § 04 The details

1. **Server wrappers feed client components**: Content is read on the server and passed down, so client components stay small.
2. **Image fields per town**: Each town carries its own images in its content.
3. **Cache headers per asset class**: Pages, images and scripts get their own cache rules.
4. **The Amplify build script**: One script builds the static site from the repository.

> Ivan delivered our multi-site platform on time and it just works.
>
> — Marketing Lead, Dimori Park Group

## Stack

Next.js · Keystatic · Tailwind CSS · AWS Amplify

Before the migration: Strapi, GraphQL, SQLite, Amazon EC2

## Related notes

- [REST, tRPC and GraphQL in 2026: who owns the contract decides](https://ivankarpinskyi.dev/blog/rest-trpc-graphql-2026.md) (2026-09-11, Decision): tRPC's maintainer recommends GraphQL or OpenAPI once ownership crosses a team boundary. What that boundary costs in each of the three.
