1d2c48cb93
Deploy / deploy (push) Successful in 1m3s
- Jeu « Project One » → « Emberwild » (slug `emberwild`) dans lib/games.ts et toutes les références (accueil, devblog, README) - Photo d'équipe (CEO/dev) câblée sur /image/teams/CEO_Dev.jpg - CI/CD porté de GitHub Actions vers Gitea Actions (.gitea/workflows/deploy.yml) : build + déploiement auto au push sur master - deploy.sh : déploiement manuel de secours Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
91 lines
3.1 KiB
Markdown
91 lines
3.1 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
npm install
|
|
npm run dev
|
|
```
|
|
|
|
Open [http://localhost:3000](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`):
|
|
|
|
```bash
|
|
node scripts/build-favicon.mjs
|
|
```
|
|
|
|
## Project structure
|
|
|
|
```text
|
|
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_URL` per environment (used by metadata, sitemap,
|
|
robots, RSS and JSON-LD). Defaults to `https://highlandgamesstudio.com` — see `lib/site.ts`.
|
|
- **Contact form (Resend)** — the contact form sends email via [Resend](https://resend.com).
|
|
Set `RESEND_API_KEY`, `CONTACT_TO_EMAIL` (who receives messages) and `CONTACT_FROM_EMAIL`
|
|
(sender, must be on a domain verified in Resend). Without these, the form returns a
|
|
friendly error instead of sending. See `app/actions/contact.ts`.
|
|
|
|
## Adding a devblog post
|
|
|
|
Create a file in `content/devblog/`, e.g. `2026-06-01-my-post.mdx`:
|
|
|
|
```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_runner` with the `ubuntu-latest` label.
|
|
- `/var/www/highland` is a clone of this repo whose `origin` can pull the **private**
|
|
Gitea repo non-interactively (deploy key or token in the remote URL).
|
|
- Node + `pm2` installed, with the app running as the `highland` process.
|
|
|
|
## Known TODOs
|
|
|
|
- Wire the newsletter form to a real email provider (contact form now uses Resend).
|
|
- Replace placeholder content (game, team members, social links).
|