Skip to content

Repository files navigation

AnyRobot website

Static Astro migration of the public AnyRobot website. The canonical production origin is https://anyrobot.com (without www). The repository contains the 309 URLs from the source sitemap plus linked landing pages, blog pagination, tag and author archives.

Stack

  • Astro 7 static output, TypeScript strict and Tailwind CSS 4
  • Vitest and Playwright
  • Cloudflare Pages/Functions with Wrangler
  • Localized images, fonts, documents, styles, presentation scripts and webinar media
  • Cloudflare Function form delivery over SMTP

Commands

bin/setup
bin/dev
npm run check
npm run test:e2e

Both helper scripts work from any current directory. bin/setup prefers mise exec node@24 when mise is available, verifies Node.js 22.12 or newer, installs the lockfile dependencies and creates .dev.vars only when it is missing. bin/dev runs the idempotent setup and starts Astro in the background on fixed port 4322, listening on every network interface. Use http://localhost:4322 on this computer or http://<LAN-IP>:4322 from another device. Extra Astro arguments are passed through, except for --host, --port, --background, --allowed-hosts, and --ignore-lock, which are owned by the script and rejected when supplied by the caller.

npm run snapshot refreshes the checked-in content and assets from the legacy public site. It is deliberately separate from normal builds: deploys are deterministic and do not contact WordPress or HubSpot. The refresh writes the page manifest, sanitized content fragments, local assets, search index, form schemas and docs/snapshot-report.json.

npm run snapshot:supplemental retries internally linked pages that are outside the sitemap. When the legacy origin has permanently removed an archive URL, the static build serves a no-index local archive fallback at that exact path instead of leaving a broken link.

All presentation assets are checked in locally. The webinar on /pl-pl/wprowadzenie-do-automatyzacji-proces%C3%B3w is served as a local HLS stream; its small segments stay below the Cloudflare Pages per-file limit and play through a locally bundled player. The only permitted browser connections to third parties are the retained GTM/Google Ads/Analytics and LinkedIn Insight integrations.

npm run audit:integrity checks the complete built site for placeholder links, missing routes and fragments, missing assets, legacy hosts, unexpected runtime origins and oversized files. npm run test:links:external is the separate network-dependent audit for outbound editorial links.

Forms

Copy .dev.vars.example to .dev.vars for local Wrangler testing. Production secrets are configured in Cloudflare Pages, never committed. SMTP credentials are optional as a pair; without them, deployment still succeeds and the form endpoint returns a controlled 503. Turnstile is also optional, but TURNSTILE_SECRET and the build-time PUBLIC_TURNSTILE_SITE_KEY must always be configured or removed together. See .env.example and docs/deploy.md.

Forms submit multipart/form-data to /api/forms/:formId, validate the original public form schema, show success inline and do not persist data. Career file fields accept PDF, DOC and DOCX up to 5 MiB with signature validation.

Deployment

The GitHub Actions workflow is manual (workflow_dispatch) and deploys dist to the anyrobot-website Cloudflare Pages project after unit and browser tests pass. It must not be run until DNS, Pages secrets and the repository environment have been reviewed. See docs/deploy.md for the handoff checklist.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages