Chenla Agathos Solutions' website source https://chenla-agathos.com
  • TypeScript 84.4%
  • MDX 13.9%
  • JavaScript 1.1%
  • Shell 0.4%
  • CSS 0.2%
Find a file
2026-05-17 01:30:11 +07:00
app Revert Tailwind v4 migration; defer to a planned session with browser tooling 2026-05-17 01:30:11 +07:00
components Revert Tailwind v4 migration; defer to a planned session with browser tooling 2026-05-17 01:30:11 +07:00
constants Consolidate /public/images into /public/img (bios + portfolio) 2026-05-16 02:20:26 +07:00
content Map 7 rogue tags to canonical taxonomy (construction → CM, tendering → QS, energy → market conditions; drop AI/writing/tools/Mexico) 2026-05-16 16:35:23 +07:00
data Case study final passes, blog pagination, title tightening, contact/portfolio/international polish, favicon, translation glossary 2026-03-29 14:55:48 +07:00
docs Code-quality polish from the site audit 2026-05-16 01:19:38 +07:00
lib Scrub testimonial fields and dead images per pre-open-repo cleanup 2026-05-16 18:03:14 +07:00
locales Add Accessibility page (EN+TH) and Thai privacy/terms; locale-aware footer hrefs 2026-05-16 23:55:55 +07:00
public Pre-open-repo cleanup: deploy.sh env-driven, next.config.js delocalize, drop internal plans, strip phone EXIF 2026-05-16 18:27:29 +07:00
scripts Pre-open-repo cleanup: deploy.sh env-driven, next.config.js delocalize, drop internal plans, strip phone EXIF 2026-05-16 18:27:29 +07:00
.env.example Move remaining Formspree endpoints to env vars; add .env.example 2026-05-16 01:02:53 +07:00
.gitignore Move remaining Formspree endpoints to env vars; add .env.example 2026-05-16 01:02:53 +07:00
CHANGELOG.md Scrub [discontinued service] references from CHANGELOG 2026-05-15 20:04:26 +07:00
CLAUDE.md pm2 config: env-var driven (CAS_DEV_*/CAS_PROD_*), trim CLAUDE.md deploy block accordingly 2026-05-16 19:14:52 +07:00
eslint.config.mjs Migrate from next lint to ESLint CLI; remove --no-lint from build 2026-05-16 02:12:01 +07:00
next.config.js CSP: tighten img-src to 'self' data: https:, add formspree.io to connect-src and form-action 2026-05-16 19:14:48 +07:00
package-lock.json Revert Tailwind v4 migration; defer to a planned session with browser tooling 2026-05-17 01:30:11 +07:00
package.json Revert Tailwind v4 migration; defer to a planned session with browser tooling 2026-05-17 01:30:11 +07:00
pm2.config.js pm2 config: env-var driven (CAS_DEV_*/CAS_PROD_*), trim CLAUDE.md deploy block accordingly 2026-05-16 19:14:52 +07:00
postcss.config.js Revert Tailwind v4 migration; defer to a planned session with browser tooling 2026-05-17 01:30:11 +07:00
README.md Upgrade TS 5 → 6; README fixes; renovate caps for @types/node v22 + eslint v9 2026-05-16 23:27:42 +07:00
renovate.json Upgrade TS 5 → 6; README fixes; renovate caps for @types/node v22 + eslint v9 2026-05-16 23:27:42 +07:00
tailwind.config.ts Phase C: delete 39 orphan template files from public/ root, prune unused tailwind bg classes 2026-05-16 03:37:51 +07:00
tsconfig.json Upgrade TS 5 → 6; README fixes; renovate caps for @types/node v22 + eslint v9 2026-05-16 23:27:42 +07:00

Chenla Agathos website

Public website for Chenla Agathos Solutions, a construction project management firm in Cambodia. Internationalised English and Thai.

Stack

  • Next.js 15 (App Router)
  • React 19
  • TypeScript 5
  • Tailwind CSS 3
  • MDX 3 for blog and content authoring

Layout

  • app/ — routes, layouts, page components
  • components/ — design system primitives (ui/), section composition (sections/, blocks/), and case-study templates (case-studies/)
  • content/ — MDX sources for blog posts (CEO, company, PD streams) and project pages
  • docs/ — internal documentation standards used by the team: blog content guide, case-study standard, service-page standard, system-proof page template, translation glossary. Wiki copies referenced in their headers are the canonical source.
  • public/ — static assets (images, downloads, OG cards)
  • locales/ — i18n message bundles
  • lib/ — shared utilities (JSON-LD generators, related-post matching, MDX helpers)

Develop locally

npm install
npm run dev

Opens at http://localhost:3000.

Build and serve a production build

npm run build
npm start

Serves on port 3001 by default (see package.json).

Deploy

Production and dev clones run on a VPS managed by pm2. Deploys are driven by scripts/deploy.sh, which pulls, builds into .next-staging via NEXT_DIST_DIR, swaps .next atomically, reloads pm2, and rolls back on health-probe failure.

./scripts/deploy.sh dev    # deploys to dev (no prompt)
./scripts/deploy.sh prod   # deploys to prod (asks to confirm)
./scripts/deploy.sh both   # dev first, then prompts for prod

The script reads SSH host alias, target directories, pm2 process names, and ports from environment variables (CAS_SSH_HOST, CAS_DEV_DIR, CAS_PROD_DIR, CAS_DEV_PM2, CAS_PROD_PM2, CAS_DEV_PORT, CAS_PROD_PORT) so operator configuration stays outside this repo. Defaults are documented in the script header.

Heavy static assets (videos) are served by apache from outside the repo at /media/... rather than from public/.

Commit conventions

Subject line ≤ 72 characters, imperative mood, no period. Body optional, used when the change has non-obvious root cause or cross-references worth preserving (issue IDs, related plans).

AI collaboration

A portion of commits are authored by a Claude Code agent (visible in the log as Claude Agent <claude-agent@chenla-agathos.com>). All work passes through the same human review and push; the split is roughly 90% human, 10% AI-assisted.