{"id":48748365,"url":"https://github.com/armbian/website","last_synced_at":"2026-05-03T13:10:09.857Z","repository":{"id":350855226,"uuid":"1205731190","full_name":"armbian/website","owner":"armbian","description":"Official Armbian website — Next.js 16, Fastify 5 API, Payload CMS 3","archived":false,"fork":false,"pushed_at":"2026-04-24T07:19:41.000Z","size":3804,"stargazers_count":1,"open_issues_count":2,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-24T09:06:05.889Z","etag":null,"topics":["arm","armbian","docker","fastify","linux","nextjs","open-source","payload-cms","sbc","typescript"],"latest_commit_sha":null,"homepage":"https://www.armbian.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/armbian.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"liberapay":"armbian","open_collective":"armbian","github":"armbian","custom":["armbian.com/donate"]}},"created_at":"2026-04-09T08:25:06.000Z","updated_at":"2026-04-24T07:18:04.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/armbian/website","commit_stats":null,"previous_names":["armbian/website"],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/armbian/website","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/armbian%2Fwebsite","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/armbian%2Fwebsite/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/armbian%2Fwebsite/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/armbian%2Fwebsite/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/armbian","download_url":"https://codeload.github.com/armbian/website/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/armbian%2Fwebsite/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32569855,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arm","armbian","docker","fastify","linux","nextjs","open-source","payload-cms","sbc","typescript"],"created_at":"2026-04-12T14:03:51.528Z","updated_at":"2026-05-03T13:10:09.851Z","avatar_url":"https://github.com/armbian.png","language":"TypeScript","funding_links":["https://liberapay.com/armbian","https://opencollective.com/armbian","https://github.com/sponsors/armbian","armbian.com/donate"],"categories":[],"sub_categories":[],"readme":"\u003ch3 align=\"center\"\u003e\n  \u003ca href=\"https://www.armbian.com\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/armbian/.github/master/profile/logosmall.png\" alt=\"Armbian logo\"\u003e\u003c/a\u003e\n  \u003cbr\u003e\u003cbr\u003e\n\u003c/h3\u003e\n\n## Purpose of This Repository\n\nThe **Armbian Website** is the official web platform for the Armbian project — serving board information, download links, community resources, and editorial content for hundreds of ARM single-board computers.\n\nIt's built as a monorepo with a **Next.js 16** frontend, **Fastify 5** REST API, and **Payload CMS 3** for content management. Board and image data is synced automatically from upstream Armbian infrastructure.\n\n\u003e **Looking for the build framework?** See [armbian/build](https://github.com/armbian/build) — the tool that compiles Armbian images from source.\n\n## Quick Start\n\n**Prerequisites:** Docker Engine with Compose v2.\n\n```bash\ngit clone https://github.com/armbian/armbian-site.git\ncd armbian-site\ncp .env.example .env\n# Edit .env — set POSTGRES_PASSWORD and PAYLOAD_SECRET\n\n./manage.sh up\n```\n\nThe site is available at `http://localhost`. The CMS admin panel is at `http://localhost/admin`. The API is exposed at `http://localhost:8080/api/v1/` for Imager and third-party clients.\n\n## Architecture\n\n| Component             | Tech                                            | Purpose                                              |\n| --------------------- | ----------------------------------------------- | ---------------------------------------------------- |\n| `apps/www`            | Next.js 16, React 19, Payload CMS 3, Tailwind 4 | Public website — SSR, 17 locales, CMS admin          |\n| `apps/api`            | Fastify 5, Node 22                              | REST API — boards, images, vendors, partners, search |\n| `packages/schemas`    | Zod                                             | Shared type definitions and validation               |\n| `packages/config`     | TypeScript                                      | URLs, constants, support tiers, locale config        |\n| `packages/api-client` | TypeScript                                      | Typed HTTP client for the API                        |\n| `packages/theme`      | CSS / Tailwind                                  | Design tokens and Tailwind preset                    |\n\n### How Data Flows\n\n```\ngithub.armbian.com (upstream JSON)\n        ↓ syncs every 4h\n    Fastify API (in-memory store + MiniSearch index)\n        ↓ server-side fetch\n    Next.js (SSR pages)\n        ↓\n    Browser\n\n    Payload CMS (PostgreSQL) → editorial content (announcements, pages, flash guides)\n```\n\n## Management\n\nAll operations go through `manage.sh`:\n\n| Command                         | Description                                      |\n| ------------------------------- | ------------------------------------------------ |\n| `./manage.sh up`                | Build, start, and wait for health checks         |\n| `./manage.sh deploy`            | Pull pre-built GHCR images and restart           |\n| `./manage.sh down`              | Stop all services (data preserved)               |\n| `./manage.sh rebuild [service]` | Rebuild one or all services                      |\n| `./manage.sh reset`             | Stop, wipe volumes, rebuild from scratch         |\n| `./manage.sh status`            | Container health and endpoint checks             |\n| `./manage.sh logs [service]`    | Follow logs                                      |\n| `./manage.sh quality [check]`   | Run typecheck + test in Docker (lint, format...) |\n| `./manage.sh db:backup`         | Dump database to `backups/`                      |\n| `./manage.sh db:restore \u003cfile\u003e` | Restore a backup                                 |\n| `./manage.sh cache:clean`       | Wipe pnpm store and node_modules volumes         |\n| `./manage.sh shell [service]`   | Open a shell in a container                      |\n\nRun `./manage.sh help` for the full list.\n\n`./manage.sh up` builds images locally from source. `./manage.sh deploy` pulls pre-built images from GHCR -- use this on production servers where you don't want to compile.\n\n## CI/CD Pipeline\n\nThree GitHub Actions workflows form a gated pipeline:\n\n| Workflow                    | Trigger                       | Purpose                                                                      |\n| --------------------------- | ----------------------------- | ---------------------------------------------------------------------------- |\n| **CI** (`ci.yml`)           | Push/PR to `main`             | Typecheck + test                                                             |\n| **Release** (`release.yml`) | Tag `v*.*.*`                  | CI gate, build multi-arch Docker images, push to GHCR, create GitHub Release |\n| **Deploy** (`deploy.yml`)   | Release completes (or manual) | SSH into production, `git checkout \u003ctag\u003e`, `./manage.sh deploy`              |\n\nTo release: tag a commit (`git tag v0.5.0 \u0026\u0026 git push --tags`). CI runs first; if it passes, Docker images are built for `linux/amd64` and `linux/arm64`, pushed to `ghcr.io/armbian/website/{api,www}`, and a GitHub Release with auto-generated notes is created. The deploy workflow then pulls the new images on the server.\n\nRequired GitHub secrets for deploy: `DEPLOY_HOST`, `DEPLOY_USER`, `DEPLOY_KEY` (SSH private key), `GHCR_TOKEN`.\n\n## Deployment\n\nFour Docker Compose services:\n\n| Service    | Port                | Notes                                                              |\n| ---------- | ------------------- | ------------------------------------------------------------------ |\n| `caddy`    | `80`, `443`, `8080` | Reverse proxy — automatic HTTPS when real domains are set          |\n| `www`      | Internal only       | Next.js app reached through Caddy                                  |\n| `api`      | Internal only       | Fastify API reached through Caddy (port 8080 for external clients) |\n| `postgres` | Internal only       | Data persisted in Docker volume                                    |\n\nRequired environment variables: `POSTGRES_PASSWORD`, `PAYLOAD_SECRET`. For production, set `WWW_HOSTNAME`, `API_HOSTNAME`, and `CADDY_EMAIL` to enable automatic TLS, and `WWW_REDIRECT_HOSTS` to 301 `www.*` hostnames to their apex (required so `www.armbian.cn` / `www.armbian.de` resolve to the correct locale). See `.env.example` for all options.\n\nThe `docker-compose.yml` includes `image:` references to GHCR. When you run `./manage.sh deploy`, Compose pulls the pre-built images instead of building locally. When you run `./manage.sh up`, Compose uses the `build:` directive and compiles from source.\n\nPayload migrations run automatically on startup — no manual steps needed.\n\n## Internationalization\n\n17 locales via `next-intl`: English (default), German, Chinese, French, Spanish, Italian, Russian, Portuguese, Japanese, Korean, Dutch, Polish, Turkish, Ukrainian, Croatian, Slovenian, Swedish.\n\nDomain forcing: `armbian.cn` → Chinese, `armbian.de` → German. The `www.` variants are 301'd to their apex at the edge via `WWW_REDIRECT_HOSTS`, so next-intl only ever sees the canonical host. The language switcher redirects cross-domain on the official deployment. Self-hosted instances keep all locales on a single host unless `NEXT_PUBLIC_DOMAIN_LOCALE_ROUTING=true` is set (build-time env var, baked into the client bundle).\n\n## Resources\n\n- **[Documentation](https://docs.armbian.com)** — Armbian guides and references\n- **[Website](https://www.armbian.com)** — Live site\n- **[Blog](https://blog.armbian.com)** — Development updates\n- **[Forums](https://forum.armbian.com)** — Community support\n\n## Contributing\n\nSee [DEVELOPMENT.md](DEVELOPMENT.md) for the full developer guide — architecture details, code conventions, adding collections, i18n workflow, and more.\n\n## Support\n\n### Community\n\nGet help on the [Armbian Forums](https://forum.armbian.com) or join [Discord](https://discord.armbian.com).\n\n### Commercial\n\nFor partnerships, integrations, or paid support — [contact us](https://www.armbian.com/contact).\n\n## Armbian Partners\n\nOur [partnership program](https://forum.armbian.com/subscriptions) supports Armbian's development and community. Learn more about [our partners](https://www.armbian.com/partners).\n\n## License\n\nGPL-2.0. See the [Armbian build repository](https://github.com/armbian/build) for license terms.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farmbian%2Fwebsite","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farmbian%2Fwebsite","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farmbian%2Fwebsite/lists"}