{"id":49861704,"url":"https://github.com/ekv88/nbs-root","last_synced_at":"2026-05-14T21:43:35.444Z","repository":{"id":333483220,"uuid":"1137495646","full_name":"ekv88/nbs-root","owner":"ekv88","description":"Minimal, project-agnostic tooling package built around React, Tailwind and Webpack.","archived":false,"fork":false,"pushed_at":"2026-03-20T00:41:13.000Z","size":2071,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-03-20T13:38:58.543Z","etag":null,"topics":["javascript","ractjs","tailwind","tooling","webpack"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ekv88.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2026-01-19T12:51:44.000Z","updated_at":"2026-03-20T00:38:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ekv88/nbs-root","commit_stats":null,"previous_names":["ekv88/nbs-root"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ekv88/nbs-root","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekv88%2Fnbs-root","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekv88%2Fnbs-root/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekv88%2Fnbs-root/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekv88%2Fnbs-root/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ekv88","download_url":"https://codeload.github.com/ekv88/nbs-root/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekv88%2Fnbs-root/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33044954,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T13:14:54.681Z","status":"online","status_checked_at":"2026-05-14T02:00:06.663Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["javascript","ractjs","tailwind","tooling","webpack"],"created_at":"2026-05-14T21:43:34.979Z","updated_at":"2026-05-14T21:43:35.437Z","avatar_url":"https://github.com/ekv88.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# nbs-root\n\n[![npm version](https://img.shields.io/npm/v/%40ekv88%2Fnbs-root?style=for-the-badge)](https://www.npmjs.com/package/@ekv88/nbs-root)\n[![npm downloads](https://img.shields.io/npm/dm/%40ekv88%2Fnbs-root?style=for-the-badge)](https://www.npmjs.com/package/@ekv88/nbs-root)\n[![CI](https://img.shields.io/github/actions/workflow/status/ekv88/nbs-root/ci.yml?branch=master\u0026style=for-the-badge\u0026label=CI)](https://github.com/ekv88/nbs-root/actions/workflows/ci.yml)\n[![React 19](https://img.shields.io/badge/React-19-61DAFB?style=for-the-badge\u0026logo=react\u0026logoColor=black)](https://react.dev/)\n[![Webpack 5](https://img.shields.io/badge/Webpack-5-8DD6F9?style=for-the-badge\u0026logo=webpack\u0026logoColor=black)](https://webpack.js.org/)\n[![Tailwind 4](https://img.shields.io/badge/Tailwind-4-38BDF8?style=for-the-badge\u0026logo=tailwindcss\u0026logoColor=white)](https://tailwindcss.com/)\n\nMinimal, project-agnostic tooling package built around Tailwind and Webpack. Drop it into a React project and get profile-based dev/build scripts, hydrated SSG, and AI-ready page context without rebuilding your tooling stack from scratch.\n\n![preview](.github/intro.gif)\n\n## ✨ Why Developers Pick It\n- 🚀 One package gives you dev server, production builds, SSG, and AI output\n- 🧩 Package-owned defaults keep projects clean and override-friendly\n- ⚡ React hydration, code splitting, and standard SPA patterns work out of the box\n- 🧠 AI-readable Markdown output helps with SEO, AEO, content workflows, and agent ingestion\n- 🛠️ Route-aware static export works without turning the whole project into a framework migration\n\n## 📊 Feature Snapshot\n| Experience | What You Get | Command |\n| --- | --- | --- |\n| `SPA` | Dev server and production client bundle | `nbs-root dev:development` / `nbs-root build:production` |\n| `SSG` | Static HTML output with client hydration | `nbs-root build-ssg:production` |\n| `AI Optimized SEO / AEO` | AI-readable Markdown with page text, headings, metadata, and rendered markup | `nbs-root build-ai:production` |\n\n## 🔥 Built For Real Projects\n| Capability | Included |\n| --- | --- |\n| Hydration with `hydrateRoot` fallback | ✅ |\n| Standard SPA flow | ✅ |\n| Route-aware SSG | ✅ |\n| AI-ready site context generation | ✅ |\n| Webpack code splitting | ✅ |\n| Tailwind-ready CSS pipeline | ✅ |\n| Babel + ESLint + PostCSS defaults | ✅ |\n| Project-level overrides when needed | ✅ |\n\n## 📦 Install\nFor an existing React project:\n\n```bash\nnpm i @ekv88/nbs-root\n```\n\n## 🚀 Quick Start\nMinimal project shape:\n\n```text\nmy-site/\n  .env-cmdrc\n  src/\n    App.js\n    index.css\n  assets/\n```\n\nExample scripts:\n\n```json\n{\n  \"scripts\": {\n    \"start\": \"nbs-root dev:development\",\n    \"build:prod\": \"nbs-root build:production\",\n    \"build:staging\": \"nbs-root build:staging\",\n    \"build-ssg:prod\": \"nbs-root build-ssg:production\",\n    \"build-ai:prod\": \"nbs-root build-ai:production\",\n    \"lint\": \"nbs-root lint\"\n  }\n}\n```\n\nBy default, the only required project-level config is `.env-cmdrc`. The package provides defaults for Babel, ESLint, PostCSS, a Tailwind-ready CSS pipeline, the HTML template, and the runtime entry. If a project adds its own config or bootstrap files, those override the defaults.\n\n## 🧭 Output Modes\n### SPA build\n- Produces the client app in `dist/`\n- Emits JS to `dist/js/` and CSS to `dist/css/`\n- Keeps `index.html`, `asset-manifest.json`, and copied assets at the `dist/` root\n\n### SSG build\n- Pre-renders static HTML\n- Reuses the client bundle for hydration\n- Supports multi-route output through `src/App.ssg.js`\n\n### AI build\n- Writes AI-readable Markdown into `dist/ai/`\n- Includes visible text, headings, metadata, and markup snapshots\n- Useful for AI SEO / AEO workflows and downstream tooling\n\n## 🛠️ Override Only What You Need\n- `src/index.js` or `src/index.jsx`\n- `src/index.ejs`\n- `src/App.ssg.js` or `src/App.static.js` or `src/App.server.js`\n- `babel.config.*`\n- `eslint.config.*`\n- `postcss.config.*`\n- `tailwind.config.*`\n\nEnv-based path overrides are also available, including `NBS_PROJECT_ROOT`, `NBS_APP_MODULE`, `NBS_STATIC_APP_MODULE`, `NBS_HTML_TEMPLATE`, and `NBS_OUTPUT_DIR`.\n\n## 🌐 Route-Aware SSG\nIf a project wants multi-route static export, it can provide `src/App.ssg.js` and export:\n\n```js\nexport function createStaticApp(route) {\n  return \u003cAppForRoute route={route} /\u003e;\n}\n\nexport function getStaticRoutes() {\n  return [\"/\", \"/about\", \"/guides/ssg\"];\n}\n```\n\nIf no static module is present, `nbs-root` falls back to the normal app module and renders a single root page.\n\n## 🧪 Repo Development\nThis repo contains the package plus a local test project used to verify it before publishing.\n\n- `npm run dev:test`\n- `npm run build:test:prod`\n- `npm run build:test:staging`\n- `npm run build-ssg:test:prod`\n- `npm run build-ai:test:prod`\n- `npm run lint:test`\n- `npm run pack:root`\n\n## 🔗 Links\n- npm: https://www.npmjs.com/package/@ekv88/nbs-root\n- GitHub: https://github.com/ekv88/nbs-root\n- Package-focused docs: [`packages/nbs-root/README.md`](packages/nbs-root/README.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fekv88%2Fnbs-root","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fekv88%2Fnbs-root","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fekv88%2Fnbs-root/lists"}