{"_id":"@aratika/project-bootstrap","_rev":"7-ac0a229b144f146b66148b4b03928982","name":"@aratika/project-bootstrap","dist-tags":{"latest":"0.6.0"},"versions":{"0.1.0":{"name":"@aratika/project-bootstrap","version":"0.1.0","keywords":["aratika","bootstrap","scaffold","astro","react","fastapi"],"license":"UNLICENSED","_id":"@aratika/project-bootstrap@0.1.0","maintainers":[{"name":"maorit","email":"kiaora@aratika.systems"}],"homepage":"https://github.com/Maaoriora/aratika-project-bootstrap#readme","bugs":{"url":"https://github.com/Maaoriora/aratika-project-bootstrap/issues"},"bin":{"aratika":"bin/create.mjs","aratika-create":"bin/create.mjs"},"dist":{"shasum":"c9cc3b3fbe537cc4aa61979a8613cd5faacfede1","tarball":"https://registry.npmjs.org/@aratika/project-bootstrap/-/project-bootstrap-0.1.0.tgz","fileCount":81,"integrity":"sha512-7CpbdpNU3+CUCmNQqhJzHJwwJgrecvCdof4XzE9zoD0KyYfQV8CtLtyZ50Y7WHFmsCVby4RMQYqLuRXXi87lgQ==","signatures":[{"sig":"MEUCIQDnDTqM08uflTyKLbsrWhsDfaUZWR8Xqk/ZRjF6wtmxzQIgFnO6hBUmssrnoRxLkz3oliCGjsqwYj2gZ2qFTfWSqEw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":481946},"type":"module","engines":{"node":">=18"},"gitHead":"e3a383ebba8eabac5297e7d94d01b0577bbf534b","private":false,"_npmUser":{"name":"maorit","email":"kiaora@aratika.systems"},"repository":{"url":"git+https://github.com/Maaoriora/aratika-project-bootstrap.git","type":"git"},"_npmVersion":"11.14.1","description":"Aratika Systems project bootstrap — operating-system layer + Astro/React-SPA/FastAPI templates. One command to a working, aligned project.","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/project-bootstrap_0.1.0_1782113582581_0.7070733506922129","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@aratika/project-bootstrap","version":"0.1.1","keywords":["aratika","bootstrap","scaffold","astro","react","fastapi"],"license":"UNLICENSED","_id":"@aratika/project-bootstrap@0.1.1","maintainers":[{"name":"maorit","email":"kiaora@aratika.systems"}],"homepage":"https://github.com/Maaoriora/aratika-project-bootstrap#readme","bugs":{"url":"https://github.com/Maaoriora/aratika-project-bootstrap/issues"},"bin":{"aratika":"bin/create.mjs","aratika-create":"bin/create.mjs"},"dist":{"shasum":"39dcfd525da66a5c6f44d659f5aa040fb24fa28e","tarball":"https://registry.npmjs.org/@aratika/project-bootstrap/-/project-bootstrap-0.1.1.tgz","fileCount":81,"integrity":"sha512-msgOLyw383ezlWGlXt6QiuPpfA0s2oEEwnmXOfGF6k6NXTkeKpWo8ukkRDBarYLSGgCw0cl22ZNFBIsgIGSxSA==","signatures":[{"sig":"MEUCIQDWzkOJE4hSn0FdqW3PhJvpguvKdGPTu5GRb90ad3CY/QIgf93loSkXGZTGaOHWL5C/ycE/yGGoM2cIVdjDxJOxrHA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":481946},"type":"module","engines":{"node":">=18"},"gitHead":"d5165a4d3850ec3a9a3a6d0a839110f8da089324","private":false,"_npmUser":{"name":"maorit","email":"kiaora@aratika.systems"},"repository":{"url":"git+https://github.com/Maaoriora/aratika-project-bootstrap.git","type":"git"},"_npmVersion":"11.14.1","description":"Aratika Systems project bootstrap — operating-system layer + Astro/React-SPA/FastAPI templates. One command to a working, aligned project.","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/project-bootstrap_0.1.1_1782114137189_0.01676503465011847","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@aratika/project-bootstrap","version":"0.2.0","keywords":["aratika","bootstrap","scaffold","astro","react","fastapi"],"license":"UNLICENSED","_id":"@aratika/project-bootstrap@0.2.0","maintainers":[{"name":"maorit","email":"kiaora@aratika.systems"}],"homepage":"https://github.com/Maaoriora/aratika-project-bootstrap#readme","bugs":{"url":"https://github.com/Maaoriora/aratika-project-bootstrap/issues"},"bin":{"aratika":"bin/create.mjs","aratika-create":"bin/create.mjs"},"dist":{"shasum":"6183c96534b747b3f421123203289ff749a84268","tarball":"https://registry.npmjs.org/@aratika/project-bootstrap/-/project-bootstrap-0.2.0.tgz","fileCount":82,"integrity":"sha512-2b/TqePkYxVRDiqRkeh/I5NS86TM9D7QL6p8FeNGnqYm0Kp2emn8JkPouFl1tK5K09ltGhJQ/PhOHmfYBpp89g==","signatures":[{"sig":"MEYCIQC058oAuGc4UgSrgcdJLpqy/gUoagpNbeWPyX5/iBvK4AIhALkQzXMwIpydq9f92CAwpLuCL6MkRbUZ8WXqVKR4k8Bq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":474158},"type":"module","engines":{"node":">=18"},"gitHead":"af62223d926cb2d2a44e305702441562fe609f13","private":false,"_npmUser":{"name":"maorit","email":"kiaora@aratika.systems"},"repository":{"url":"git+https://github.com/Maaoriora/aratika-project-bootstrap.git","type":"git"},"_npmVersion":"11.18.0","description":"Aratika Systems project bootstrap — operating-system layer + Astro/React-SPA/FastAPI templates. One command to a working, aligned project.","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/project-bootstrap_0.2.0_1783230555623_0.16551663114079385","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@aratika/project-bootstrap","version":"0.3.0","keywords":["aratika","bootstrap","scaffold","astro","react","fastapi"],"license":"UNLICENSED","_id":"@aratika/project-bootstrap@0.3.0","maintainers":[{"name":"maorit","email":"kiaora@aratika.systems"}],"homepage":"https://github.com/Maaoriora/aratika-project-bootstrap#readme","bugs":{"url":"https://github.com/Maaoriora/aratika-project-bootstrap/issues"},"bin":{"aratika":"bin/create.mjs","aratika-create":"bin/create.mjs"},"dist":{"shasum":"8f6789f92ae4f5449b7426c723976d68704d7cc9","tarball":"https://registry.npmjs.org/@aratika/project-bootstrap/-/project-bootstrap-0.3.0.tgz","fileCount":83,"integrity":"sha512-muFihexZ/Q4Mog++Vwan0o27FeVf6kZ1Xlz+7GoiAF9JpPYUYblR8yQMhoQSmGef/LYgplpRbllcLHKF42XUjA==","signatures":[{"sig":"MEYCIQC2VPS7bc9+BG93b7knLrwqvsFJzo6oVqUOb+eW/Zn84QIhANL+8yGPdiFiJ6G8pPlMyKZHAmCXcRcXTQIO82vNl2/X","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":482942},"type":"module","engines":{"node":">=18"},"gitHead":"2c4b9be49b7e97ed236e1b56773cc2d07faa8e4f","private":false,"_npmUser":{"name":"maorit","email":"kiaora@aratika.systems"},"repository":{"url":"git+https://github.com/Maaoriora/aratika-project-bootstrap.git","type":"git"},"_npmVersion":"11.18.0","description":"Aratika Systems project bootstrap — operating-system layer + Astro/React-SPA/FastAPI templates. One command to a working, aligned project.","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/project-bootstrap_0.3.0_1783238020571_0.6312822217867835","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@aratika/project-bootstrap","version":"0.4.0","keywords":["aratika","bootstrap","scaffold","astro","react","fastapi"],"license":"UNLICENSED","_id":"@aratika/project-bootstrap@0.4.0","maintainers":[{"name":"maorit","email":"kiaora@aratika.systems"}],"homepage":"https://github.com/Maaoriora/aratika-project-bootstrap#readme","bugs":{"url":"https://github.com/Maaoriora/aratika-project-bootstrap/issues"},"bin":{"aratika":"bin/create.mjs","aratika-create":"bin/create.mjs"},"dist":{"shasum":"38d47b0bf5c9d5eb99727807ffd3644856e0a516","tarball":"https://registry.npmjs.org/@aratika/project-bootstrap/-/project-bootstrap-0.4.0.tgz","fileCount":85,"integrity":"sha512-II8fGpCQc2hLDp+VAcNbBjLdHoI8peZ6ShGtj1Y/TGoBCQmDy1W9vKX7y05zXKlzgCMyg5Wq740oplQOdtswGg==","signatures":[{"sig":"MEUCIQCYY8NYpsjkguCWobOWijNr7/QsT+OPJNJDPWmgMXNw/QIgJ3K16xM7IaDfLP8yJLTAC9+UkemqSkfTSpyM+xw8xng=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":495718},"type":"module","engines":{"node":">=18"},"gitHead":"94a4da15b6bdad3b64a26094a045fd5e210a7279","private":false,"_npmUser":{"name":"maorit","email":"kiaora@aratika.systems"},"repository":{"url":"git+https://github.com/Maaoriora/aratika-project-bootstrap.git","type":"git"},"_npmVersion":"11.18.0","description":"Aratika Systems project bootstrap — operating-system layer + Astro/React-SPA/FastAPI templates. One command to a working, aligned project.","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/project-bootstrap_0.4.0_1783242006280_0.46767748786541286","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@aratika/project-bootstrap","version":"0.5.0","keywords":["aratika","bootstrap","scaffold","astro","react","fastapi"],"license":"UNLICENSED","_id":"@aratika/project-bootstrap@0.5.0","maintainers":[{"name":"maorit","email":"kiaora@aratika.systems"}],"homepage":"https://github.com/Maaoriora/aratika-project-bootstrap#readme","bugs":{"url":"https://github.com/Maaoriora/aratika-project-bootstrap/issues"},"bin":{"aratika":"bin/create.mjs","aratika-create":"bin/create.mjs"},"dist":{"shasum":"6ec2694135f8930ce8ab5742fdb05a139bda0fe6","tarball":"https://registry.npmjs.org/@aratika/project-bootstrap/-/project-bootstrap-0.5.0.tgz","fileCount":85,"integrity":"sha512-7xj9wCLVJ/ikd7OFTT7jjukGlMdbp0OUZojJwHcYr0GdEsDre8NBor7nGVj2hliwBrbBCgFVcvBZ1mE6AlF3sA==","signatures":[{"sig":"MEQCIAvQNq/KqaOs2AZNcX7ldGIyWa1WpbNQ493CfxSKYEaYAiB2LKqBdP1RYOtzWDJXIbNqqmaC50Uyn7v9LLnM3n9Esw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDNvCuvdwPs7jFf5Pl5WKy889A3KMKMuWSjO6DOL1L20AiEA2KvAL79GrVjFqW+RoBCwl7n7O5v6h7LMuPh1/WgYIL8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":530016},"type":"module","engines":{"node":">=18"},"gitHead":"3ddd6d10a9c6ca15232e1ffc1f7a3412471091cf","private":false,"scripts":{"test":"node --test test/*.test.mjs"},"_npmUser":{"name":"maorit","email":"kiaora@aratika.systems"},"repository":{"url":"git+https://github.com/Maaoriora/aratika-project-bootstrap.git","type":"git"},"_npmVersion":"10.9.8","description":"Aratika Systems project bootstrap — operating-system layer + Astro/React-SPA/FastAPI templates. One command to a working, aligned project.","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/project-bootstrap_0.5.0_1789252792039_0.4217150332158577","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"_id":"@aratika/project-bootstrap@0.6.0","bin":{"aratika":"bin/create.mjs","aratika-create":"bin/create.mjs"},"bugs":{"url":"https://github.com/Maaoriora/aratika-project-bootstrap/issues"},"dist":{"shasum":"8d6dfd72eb08e97a4807704b093f622390e3ffc9","tarball":"https://registry.npmjs.org/@aratika/project-bootstrap/-/project-bootstrap-0.6.0.tgz","fileCount":103,"integrity":"sha512-FjSZLVtaNqck8p7CA05BfUaYmAzbeqeyQbUkMNs1u2JEVSExbgUFMO5X5Il79nmmcoLIPnki7+xPiYj1DeMU8Q==","signatures":[{"sig":"MEUCIQDw0HVwGn59R16yZvWOlBGm+RL0uAZnGGw667XE6b0vfAIgVksy533Wmuql2rYn+xmx3xD01Qb3T+cMJ5hdnxHt9wk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIB1i1NxsWfZHRkqBiGe19bckmsaKCih7tRm2/0OtKzruAiEAsFiAklpYtSqg4Nptws7MpcHCVvnEUMCBq21RGIr1Mug="}],"unpackedSize":672477},"name":"@aratika/project-bootstrap","type":"module","engines":{"node":">=18"},"gitHead":"7f4fab925663e1abc1f8c0f1ef13f4337442e071","license":"UNLICENSED","private":false,"scripts":{"test":"node --test test/*.test.mjs"},"version":"0.6.0","_npmUser":{"name":"maorit","email":"kiaora@aratika.systems"},"homepage":"https://github.com/Maaoriora/aratika-project-bootstrap#readme","keywords":["aratika","bootstrap","scaffold","astro","react","fastapi"],"repository":{"url":"git+https://github.com/Maaoriora/aratika-project-bootstrap.git","type":"git"},"_npmVersion":"10.9.9","description":"Aratika Systems project bootstrap — operating-system layer + Astro/React-SPA/FastAPI templates. One command to a working, aligned project.","directories":{},"maintainers":[{"name":"maorit","email":"kiaora@aratika.systems"}],"_nodeVersion":"22.23.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/project-bootstrap_0.6.0_1790290584173_0.09782995740755074"}}},"time":{"created":"2026-06-22T07:33:02.432Z","modified":"2026-09-24T22:56:24.446Z","0.1.0":"2026-06-22T07:33:02.725Z","0.1.1":"2026-06-22T07:42:17.347Z","0.2.0":"2026-07-05T05:49:15.767Z","0.3.0":"2026-07-05T07:53:40.698Z","0.4.0":"2026-07-05T09:00:06.429Z","0.5.0":"2026-09-12T22:39:52.125Z","0.6.0":"2026-09-24T22:56:24.278Z"},"bugs":{"url":"https://github.com/Maaoriora/aratika-project-bootstrap/issues"},"license":"UNLICENSED","homepage":"https://github.com/Maaoriora/aratika-project-bootstrap#readme","keywords":["aratika","bootstrap","scaffold","astro","react","fastapi"],"repository":{"url":"git+https://github.com/Maaoriora/aratika-project-bootstrap.git","type":"git"},"description":"Aratika Systems project bootstrap — operating-system layer + Astro/React-SPA/FastAPI templates. One command to a working, aligned project.","maintainers":[{"name":"maorit","email":"kiaora@aratika.systems"}],"readme":"# @aratika/project-bootstrap\n\nOne command to a working, **aligned** Aratika Systems project — so you (and AI agents, and new\nhires) never rebuild infrastructure again.\n\n```bash\nnpx @aratika/project-bootstrap create my-project --template site      # Astro SEO site\nnpx @aratika/project-bootstrap create my-app     --template app       # React SPA app\nnpx @aratika/project-bootstrap create my-funnel  --template site --with-api   # hybrid\n```\n\n## The alignment model (from 3 real products: FloorQuote, aratika-systems, pp-flooring-website)\n\nEverything shares **one operating-system layer**; the **render framework matches the product\nshape**. Alignment ≠ monoculture.\n\n| Layer | What | Tool |\n|---|---|---|\n| **OS layer** (`_shared`, every project) | `.claude` agent harness, deploy/merge/cache scripts, backlog workflow, CLAUDE.md conventions, docker-compose, CI | Node |\n| **`site` template** | public / marketing / funnel (SEO-critical, static-first) | **Astro** + React islands + Tailwind |\n| **`app` template** | login-gated tools / dashboards (no SEO) | **React SPA** (Vite) + Tailwind |\n| **`api` template** (`--with-api`) | shared data / logic layer | **FastAPI** + SQLite/Postgres |\n\nA **hybrid** (public SEO funnel + internal app, e.g. aratika) = `site` + `app` + `--with-api`.\n\n### Why not Next.js\nConsidered and dropped: its pitch was \"one framework for SEO pages + app pages\", but the real\nproducts show **Astro is better for the SEO part and a React SPA is simpler for the app part**,\nunified by the OS layer + shared TS/React/Tailwind. Next.js would be a third framework solving a\nproblem already solved better.\n\n### How the 3 existing products map\n- **pp-flooring-website** → `site` (Astro). ✅ reference for the `site` template.\n- **FloorQuote** → `app` + `api`. Public enquiry side is the `site`.\n- **aratika-systems** → `site` (the SEO funnel) + `app` (CRM admin) + `api` (leads). Already\n  structured `web/` + `admin/` + `api/`; the SEO upgrade is swapping its public `web/` to Astro.\n\n## Deploy (CI → GHCR → pull)\n\nEvery project ships the **CI-build → GHCR → pull-based auto-deploy** pattern (the full\nrationale is in each project's `docs/deploy-pattern.md`, sourced from real Aratika\nproducts). Push to `main` → GitHub Actions builds the service image(s) and pushes to\n**GHCR** → the box's cron self-updater pulls within ~5 min — **no on-box build, no\ndev-machine SSH**. The box builds nothing, so a framework build can't spike load and\nstarve `sshd` mid-deploy. `npm run deploy` is the resilient \"deploy now\" override\n(keepalive, retry, LAN↔Tailscale failover; the runner **pulls** the prebuilt image).\n\nScaffolded into each project: `.github/workflows/deploy.yml` (build→GHCR),\n`docker-compose.yml` with `image:`+`build:`, `deploy/box-autodeploy.sh` (cron), and\n`PUBLIC_*`/`VITE_*` build-arg plumbing in the Dockerfiles. Pass `--owner <gh-org>` to\n`create` so the GHCR image refs are concrete, and `--domain <host>` so `prodDomain`\n(and every `SITE_URL`/`astro.config.mjs`/`site.ts` it drives) is the project's real\nproduction hostname instead of the `<name>.example.com` placeholder. Omit either and\nthe corresponding placeholder ships as-is, same as today — fix it by hand later in\n`.env` / `aratika.config.json`.\n\n**CI runs on the shared self-hosted runner.** Both scaffolded workflows\n(`ci.yml` + `deploy.yml`) default to `runs-on: [self-hosted, linux, build]`, so a new\nrepo consumes **≈0 GitHub-hosted Actions minutes** (the account-wide pool is finite\nand shared). Register the repo's Actions runner on the mini PC — see\n[host/README.md §6](host/README.md) — or, until then, use each workflow's\n`force_github_hosted` **workflow_dispatch** escape hatch to build that run on\nGitHub-hosted `ubuntu-latest`.\n\n### Deploy host (shared infra — `host/`)\n\nThe runner + host-provisioning tooling are **single-instance infra** (provision once,\nmany projects deploy to it), so they live in [`host/`](host/) here in the OS-layer\npackage — not copied into every project, and not buried in one product repo. The runner\n**pulls** from GHCR when a registry entry sets `image` (else legacy build-on-box).\n\n```bash\nhost/setup-host.sh --install-deps    # provision a fresh mini PC (deps, dirs, runner, registry)\nssh -t deploy-prod 'register-project <name> <git-url> --services web,api'   # onboard a project\nssh deploy-prod 'deploy-project <name>'                                     # deploy now (pulls)\n```\n\nSee [host/README.md](host/README.md) for the full model (SSH alias, registry schema, pull vs build).\n\n## Status (Phase 0 — proving the path)\n\n- [x] Package skeleton + working `create` CLI (layers `_shared` + template, token-substitutes, **merges package.json**)\n- [x] `_shared` OS layer in place (prod-deploy / merge-to-main / check-cf-cache-rule /\n      prod-smoke + `.claude` harness, one prompt) + config-driven model (`aratika.config.json`, `_config.mjs`)\n- [x] **`site` template (Astro)** — `create → npm ci → npm run build` proven (prerendered HTML + sitemap + server route)\n- [x] **`app` template (React SPA)** — `create → npm ci → npm run build` proven (tsc + Vite, AuthGuard, api client)\n- [x] **`api` template (FastAPI)** — `pytest` green (health, CRUD, auth-mode passthrough, guards, lifespan)\n- [ ] Genericise the OS scripts to read `aratika.config.json` (loader done; deploy-script wiring remains — needs prod dry-run) — task 003\n- [ ] `_shared` infra: docker-compose + CI workflow + root README — task 004\n- [ ] Publish + versioned OS-layer update path — task 005\n- [ ] Validate the 15-minute path end-to-end + dogfood a real surface — task 006\n\nRemaining work is tracked in this repo's own `backlog/` (it dogfoods the operating system it ships).\n\n## Status: all three templates scaffold and build/test clean\n\n`npx @aratika/project-bootstrap create x --template site|app [--with-api]` produces a working,\naligned project with the operating system wired in. Verified end-to-end for each template.\n","readmeFilename":"README.md"}