{"id":48890927,"url":"https://github.com/ivan-gerasimov-1/create-lv48-app","last_synced_at":"2026-04-16T08:00:38.541Z","repository":{"id":345950101,"uuid":"1175297003","full_name":"ivan-gerasimov-1/create-lv48-app","owner":"ivan-gerasimov-1","description":"Opinionated monorepo scaffold for TS-first SaaS: React/Vite, Astro, Hono","archived":false,"fork":false,"pushed_at":"2026-04-14T16:12:39.000Z","size":268,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-14T16:14:27.120Z","etag":null,"topics":["astro","hono","initializer","monorepo","npm-init","react","sass","scaffold","tailwind","typescript","vite"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/create-lv48-app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ivan-gerasimov-1.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-07T14:15:10.000Z","updated_at":"2026-04-14T16:12:43.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ivan-gerasimov-1/create-lv48-app","commit_stats":null,"previous_names":["ivan-gerasimov-1/create-lv48-app"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ivan-gerasimov-1/create-lv48-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivan-gerasimov-1%2Fcreate-lv48-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivan-gerasimov-1%2Fcreate-lv48-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivan-gerasimov-1%2Fcreate-lv48-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivan-gerasimov-1%2Fcreate-lv48-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ivan-gerasimov-1","download_url":"https://codeload.github.com/ivan-gerasimov-1/create-lv48-app/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivan-gerasimov-1%2Fcreate-lv48-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31876852,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T07:36:03.521Z","status":"ssl_error","status_checked_at":"2026-04-16T07:35:53.576Z","response_time":69,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["astro","hono","initializer","monorepo","npm-init","react","sass","scaffold","tailwind","typescript","vite"],"created_at":"2026-04-16T08:00:37.714Z","updated_at":"2026-04-16T08:00:38.530Z","avatar_url":"https://github.com/ivan-gerasimov-1.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Create LV48 App\n\n\u003e Generated with AI. Human verification is not the default assumption.\n\nOpinionated initializer for TS-first SaaS projects.\n\n## Requirements\n\n- Node.js 24 or newer\n- npm\n\n## Usage\n\n```bash\nnpm init lv48-app\n```\n\n```bash\nnpx create-lv48-app\n```\n\nThe initializer prompts for:\n\n- project name\n- target directory\n- workspace layout (single or multi)\n- first app project name (only for multi layout)\n- install dependencies\n- initialize git\n\n`base` preset is applied by default. Package manager is `npm`.\n\n## Scaffold\n\nThe `base` preset generates an npm workspaces monorepo.\n\n### Single-project layout (default)\n\n```txt\n\u003cproject\u003e/\n├── apps/\n│   ├── web/     # React + Vite + Tailwind CSS v4, shadcn-ready\n│   ├── site/    # Astro\n│   └── api/     # Node + Hono\n├── packages/    # reserved for future shared workspaces\n└── package.json # root workspace manifest\n```\n\nRoot workspaces: `[\"apps/*\", \"packages/*\"]`\n\nApp packages: `@\u003crootPackage\u003e/web`, `@\u003crootPackage\u003e/site`, `@\u003crootPackage\u003e/api`\n\n### Multi-project layout\n\n```txt\n\u003cproject\u003e/\n├── apps/\n│   └── \u003cappProjectName\u003e/\n│       ├── web/     # React + Vite + Tailwind CSS v4, shadcn-ready\n│       ├── site/    # Astro\n│       └── api/     # Node + Hono\n├── packages/        # reserved for future shared workspaces\n└── package.json     # root workspace manifest\n```\n\nRoot workspaces: `[\"apps/*/*\", \"packages/*\"]`\n\nApp packages: `@\u003cappProjectName\u003e/web`, `@\u003cappProjectName\u003e/site`, `@\u003cappProjectName\u003e/api`\n\nShared packages always use `@\u003crootPackage\u003e/\u003cpackageFolder\u003e` regardless of layout.\n\nGenerated package manifests set `engines.node` to `\u003e=24.0.0`.\n\nIf git init is selected, the repository starts on `main`.\n\n## Development\n\nRun tests:\n\n```bash\nnpm test\n```\n\nWatch mode:\n\n```bash\nnpm run test:watch\n```\n\nTests use Vitest.\n\n## Release\n\n### Local Check\n\nRun the full release gate locally:\n\n```bash\nnpm run release:prepare\n```\n\n### Release Intent\n\nRelease intent MUST stay compatible with `release-please`.\n\nRules:\n\n- use Conventional Commit metadata on merges to `main`\n- prefer squash merge so PR title becomes canonical commit message\n- if not using squash merge, every commit on branch MUST follow same contract\n- use `!` or `BREAKING CHANGE:` for major release intent\n\nSupported release types:\n\n- `feat` -\u003e minor\n- `fix` -\u003e patch\n\n### Publish Flow\n\nPublishing uses `.github/workflows/publish.yml`.\n\nFlow:\n\n1. Merge changes to `main` with Conventional Commit metadata.\n2. `release-please` creates or updates release PR.\n3. Merge generated release PR.\n4. Merged release commit on `main` triggers publish.\n5. GitHub Actions runs `npm ci`.\n6. GitHub Actions runs `npm run release:publish`, which runs `prepublishOnly` to execute `npm run release:prepare`.\n7. After all gates pass, GitHub Actions publishes with `npm publish --access public`.\n\nGitHub Actions setup:\n\n- configure npm trusted publishing for this repository\n- allow GitHub Actions OIDC for npm publish\n- keep workflow permissions `id-token: write`, `contents: write`, and `pull-requests: write`\n\nNotes:\n\n- Public npm packages can be published from a private GitHub repository.\n- npm provenance is not supported for GitHub Actions publishes from private repositories, so this workflow does not pass `--provenance`.\n- If trusted publishing is unavailable, use `NPM_TOKEN` publish path instead of re-enabling provenance.\n- Generated release PR is the only automation-owned release artifact in repository.\n- Re-running publish for same merged release commit remains valid if previous attempt failed after release PR was created.\n\nIf any verification step fails, publish does not run.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivan-gerasimov-1%2Fcreate-lv48-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fivan-gerasimov-1%2Fcreate-lv48-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivan-gerasimov-1%2Fcreate-lv48-app/lists"}