https://github.com/ivan-gerasimov-1/create-lv48-app
Opinionated monorepo scaffold for TS-first SaaS: React/Vite, Astro, Hono
https://github.com/ivan-gerasimov-1/create-lv48-app
astro hono initializer monorepo npm-init react sass scaffold tailwind typescript vite
Last synced: about 2 months ago
JSON representation
Opinionated monorepo scaffold for TS-first SaaS: React/Vite, Astro, Hono
- Host: GitHub
- URL: https://github.com/ivan-gerasimov-1/create-lv48-app
- Owner: ivan-gerasimov-1
- License: mit
- Created: 2026-03-07T14:15:10.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2026-04-14T16:12:39.000Z (about 2 months ago)
- Last Synced: 2026-04-14T16:14:27.120Z (about 2 months ago)
- Topics: astro, hono, initializer, monorepo, npm-init, react, sass, scaffold, tailwind, typescript, vite
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/create-lv48-app
- Size: 262 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Security: SECURITY.md
- Agents: AGENTS.md
Awesome Lists containing this project
README
# Create LV48 App
> Generated with AI. Human verification is not the default assumption.
Opinionated initializer for TS-first SaaS projects.
## Requirements
- Node.js 24 or newer
- npm
## Usage
```bash
npm init lv48-app
```
```bash
npx create-lv48-app
```
The initializer prompts for:
- project name
- target directory
- workspace layout (single or multi)
- first app project name (only for multi layout)
- install dependencies
- initialize git
`base` preset is applied by default. Package manager is `npm`.
## Scaffold
The `base` preset generates an npm workspaces monorepo.
### Single-project layout (default)
```txt
/
├── apps/
│ ├── web/ # React + Vite + Tailwind CSS v4, shadcn-ready
│ ├── site/ # Astro
│ └── api/ # Node + Hono
├── packages/ # reserved for future shared workspaces
└── package.json # root workspace manifest
```
Root workspaces: `["apps/*", "packages/*"]`
App packages: `@/web`, `@/site`, `@/api`
### Multi-project layout
```txt
/
├── apps/
│ └── /
│ ├── web/ # React + Vite + Tailwind CSS v4, shadcn-ready
│ ├── site/ # Astro
│ └── api/ # Node + Hono
├── packages/ # reserved for future shared workspaces
└── package.json # root workspace manifest
```
Root workspaces: `["apps/*/*", "packages/*"]`
App packages: `@/web`, `@/site`, `@/api`
Shared packages always use `@/` regardless of layout.
Generated package manifests set `engines.node` to `>=24.0.0`.
If git init is selected, the repository starts on `main`.
## Development
Run tests:
```bash
npm test
```
Watch mode:
```bash
npm run test:watch
```
Tests use Vitest.
## Release
### Local Check
Run the full release gate locally:
```bash
npm run release:prepare
```
### Release Intent
Release intent MUST stay compatible with `release-please`.
Rules:
- use Conventional Commit metadata on merges to `main`
- prefer squash merge so PR title becomes canonical commit message
- if not using squash merge, every commit on branch MUST follow same contract
- use `!` or `BREAKING CHANGE:` for major release intent
Supported release types:
- `feat` -> minor
- `fix` -> patch
### Publish Flow
Publishing uses `.github/workflows/publish.yml`.
Flow:
1. Merge changes to `main` with Conventional Commit metadata.
2. `release-please` creates or updates release PR.
3. Merge generated release PR.
4. Merged release commit on `main` triggers publish.
5. GitHub Actions runs `npm ci`.
6. GitHub Actions runs `npm run release:publish`, which runs `prepublishOnly` to execute `npm run release:prepare`.
7. After all gates pass, GitHub Actions publishes with `npm publish --access public`.
GitHub Actions setup:
- configure npm trusted publishing for this repository
- allow GitHub Actions OIDC for npm publish
- keep workflow permissions `id-token: write`, `contents: write`, and `pull-requests: write`
Notes:
- Public npm packages can be published from a private GitHub repository.
- npm provenance is not supported for GitHub Actions publishes from private repositories, so this workflow does not pass `--provenance`.
- If trusted publishing is unavailable, use `NPM_TOKEN` publish path instead of re-enabling provenance.
- Generated release PR is the only automation-owned release artifact in repository.
- Re-running publish for same merged release commit remains valid if previous attempt failed after release PR was created.
If any verification step fails, publish does not run.