The public platform of ecoma.io
Public web, built right
The public home of ecoma.io, available in English and Vietnamese.
- Locale-first URLs — every page declares its language
- Content pages prerendered at build time
- Served from the edge as a Cloudflare Worker
Explore
Start with a surface
The public web is a small set of surfaces, each with one clear job.
Documentation
How the platform is organized: URL model, content and locales, local development.
Getting started
Install the toolchain and take the first steps through the repository.
Guides
Task-oriented walkthroughs: build a public page, run the dev loop.
Concepts
The foundational ideas behind the public web platform.
Blog
Engineering notes on the URL model, content pipelines and locale switching.
Legal & policies
Privacy, terms, service delivery, payment and refund policies.
This is the public landing surface of ecoma.io.
Every page is served under a locale prefix, so a URL always names the language it renders in.
About the platform
- Public pages are served from the edge and rendered on the server.
- English and Vietnamese are first-class locales, each with its own stable URL.
Use cases
What the public web does today
Concrete capabilities of the surfaces you can open right now.
Read documentation in two languages
Every docs page has an English and a Vietnamese version, and the locale switcher only links to translations that exist.
Follow engineering writing
The blog is a flat article list with featured posts, tags and related-article links — all resolved from real content.
Trust every URL
Canonical URLs, two-way hreflang and strict path validation keep every page self-describing.
Read the policies
Five policy pages — privacy, terms, service delivery, payment, refund — are served under the legal mount.
Developers
Run it locally in three commands
The public app is one Nuxt workspace package. Clone the repository and the whole surface runs on your machine.
- Node.js 24+ and pnpm 12+, pinned in the repository
- Nx drives the loop: serve, test, build one project or the affected graph
- Content lives in Markdown under content/ — no database required to write
- The build emits a Cloudflare Worker plus prerendered content pages
$ pnpm install
$ cd apps/home
$ pnpm exec nuxt dev
➜ Local: http://localhost:4200/en