The dailerc.com website

A bilingual company website on Next.js 15 with ISR, its own content admin, and self-hosted with Docker Compose and Caddy.

Problem

We needed a fast, SEO-ready company website in Vietnamese and English that non-developers could keep up to date: services, projects and blog posts. We also wanted to control our own infrastructure and data, with a safe release process: every update backed up, and any release easy to roll back.

Solution

The public site uses Next.js 15 with the App Router. Pages are prerendered and refreshed on a schedule (ISR); every API call carries a cache tag, and the admin calls revalidateTag after each change, so new content appears almost immediately. The admin lives in the same app, with a bilingual interface, role-based permissions, a media library, lead management, support chat and appearance settings. The API is NestJS with Prisma and PostgreSQL; it caches public responses in Redis and has rate limiting and a login lockout. Everything runs in Docker Compose behind Caddy on one domain. Each commit on main is deployed by a self-hosted GitHub Actions runner: it backs up the database and media, builds images tagged with the commit, waits for health checks, runs smoke tests and refreshes the cache.

Results

The site runs at dailerc.com in Vietnamese (the default) and English. Content is updated from the admin without a redeploy. Every release is automated with a backup before migrations, and a rollback is simply a redeploy of an older commit.

Technologies

Next.js 15React 19TypeScriptTailwind CSS 4NestJSPrismaPostgreSQLRedisMinIOCaddyDocker ComposeGitHub Actions

Ready to Start Your Project?

Contact us for a free consultation.