- Photo CEO déplacée vers public/image/Studio/Teams/ - Chemin corrigé dans la page studio - MàJ allowlist permissions .claude/settings.json Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Highland Games Studio — Website
Marketing and devblog site for Highland Games Studio. Where summits become worlds.
Built with Next.js 16 (App Router), React 19, Tailwind CSS 4 and Framer Motion.
Devblog posts are authored in MDX and rendered with next-mdx-remote.
Getting started
npm install
npm run dev
Open http://localhost:3000.
Scripts
| Command | Description |
|---|---|
npm run dev |
Start the dev server |
npm run build |
Production build |
npm run start |
Serve the production build |
npm run lint |
Run ESLint |
To regenerate the favicon from the studio logo (requires sharp):
node scripts/build-favicon.mjs
Project structure
app/ Routes, layouts, server actions, metadata (sitemap/robots/feed/OG)
app/components/ Shared UI (Navbar, Footer, forms, social links)
content/devblog/ Devblog posts as .mdx (frontmatter: title, date, excerpt, tags, game)
lib/ Data + helpers (games registry, devblog loader, site URL)
public/ Static assets (studio logos, hero video)
scripts/ One-off build scripts (favicon generation)
Configuration
Copy .env.example to .env.local and fill in the values.
- Site URL — set
NEXT_PUBLIC_SITE_URLper environment (used by metadata, sitemap, robots, RSS and JSON-LD). Defaults tohttps://highlandgamesstudio.com— seelib/site.ts. - Contact form (Resend) — the contact form sends email via Resend.
Set
RESEND_API_KEY,CONTACT_TO_EMAIL(who receives messages) andCONTACT_FROM_EMAIL(sender, must be on a domain verified in Resend). Without these, the form returns a friendly error instead of sending. Seeapp/actions/contact.ts.
Adding a devblog post
Create a file in content/devblog/, e.g. 2026-06-01-my-post.mdx:
---
title: "My post title"
date: "2026-06-01"
excerpt: "One-line summary for listings and SEO."
author: "Highland Games Studio"
tags: ["devlog"]
game: "emberwild"
---
Your MDX content here.
Deployment
Pushes to master deploy to the Hetzner server via the Gitea Actions workflow
(.gitea/workflows/deploy.yml), which SSHes in, pulls, builds, and restarts the
PM2 process (highland, in /var/www/highland).
Requires these repo secrets (Gitea → repo → Settings → Actions → Secrets):
SSH_HOST, SSH_USER, SSH_PORT, SSH_PRIVATE_KEY.
Server-side prerequisites (one-time):
- A registered Gitea
act_runnerwith theubuntu-latestlabel. /var/www/highlandis a clone of this repo whoseorigincan pull the private Gitea repo non-interactively (deploy key or token in the remote URL).- Node +
pm2installed, with the app running as thehighlandprocess.
Known TODOs
- Wire the newsletter form to a real email provider (contact form now uses Resend).
- Replace placeholder content (game, team members, social links).