← knowledge.oriz.in

Scaffold a new chirag127 site

runbook runbookscaffoldastrositeworkspace

Scaffold a new chirag127 site

When to use

You're adding a new entry to the chirag127 family — a new site, not a tool, extension, or package. Examples: a new content site, a new catalog, a new sub-product.

Prerequisites

Steps

1. Create the GitHub repo

gh repo create chirag127/<brand>-site \
  --public \
  --description "<one-line description naming the tech: Astro 6 + React 19 islands + Tailwind v4. Lives at <subdomain>.oriz.in. Free, no card-on-file.>" \
  --homepage "https://<subdomain>.oriz.in"

2. Add as submodule to the workspace umbrella

cd C:/D/oriz
git submodule add --name "projects_websites_<brand>-site" \
  --force \
  "https://github.com/chirag127/<brand>-site.git" \
  "repos/websites/<brand>-site"

3. Clone the starter template

cd repos/websites/<brand>-site
git clone --depth=1 https://github.com/chirag127/me-site.git starter
cp -r starter/{astro.config.ts,tsconfig.json,biome.json,package.json,.gitignore,src,.github} .
rm -rf starter

4. Edit the 4 config files

# src/config/site.ts
export const site = {
  siteName: "<brand>-site",
  siteRole: "<one-line role>",
  subdomain: "<subdomain>.oriz.in",
  brand: { wordmark: "<brand>-site" },        // shows in Stamp signature
  jurisdiction: ["GDPR", "CCPA", "DPDP"],     // applicable jurisdictions
};

# src/config/nav.ts
export const nav = {
  headerActions: ["search", "auth"],
};

# src/config/sidebar.ts
export const sidebarTree = [
  { type: "section", label: "SECTION-A", children: [
    { type: "group", label: "Group 1", href: "/group-1/", children: [
      { type: "leaf", label: "Page", href: "/group-1/page" },
    ]},
  ]},
];

# src/config/footer.ts
export const footer = {
  columns: [
    { label: "Pages", links: [/* this site's pages */] },
    { label: "Family", links: [/* dynamically pulled from chirag127/family.ts */] },
  ],
};

5. Update package.json

{
  "name": "<brand>-site",
  "private": true,
  "type": "module",
  "dependencies": {
    "astro": "^6.0.0",
    "react": "^19.0.0",
    "react-dom": "^19.0.0",
    "@chirag127/astro-shell": "workspace:*",
    "@chirag127/astro-chrome": "workspace:*",
    "@chirag127/astro-pwa": "workspace:*",
    "@chirag127/astro-distribute": "workspace:*"
  }
}

Typical astro.config.ts after the starter is copied:

import { defineConfig } from 'astro/config'
import { shell } from '@chirag127/astro-shell'
import { pwa } from '@chirag127/astro-pwa'

export default defineConfig(shell({
  site: 'https://<subdomain>.oriz.in',
  integrations: [pwa({ name: '<brand>' })],
}))
// ponytail: site config in ~4 lines. Per-app overrides only when shell can't cover it.

6. Install + dev

cd C:/D/oriz
pnpm install               # hoists shared deps across workspace
cd repos/websites/<brand>-site
pnpm dev                   # http://localhost:4321

7. Wire CI

The .github/workflows/deploy.yml from the starter uses uses: chirag127/astro-shell/.github/workflows/deploy.yml@main. Edit project-name: in the workflow to match <brand>-site.

8. Wire DNS

# CNAME <subdomain>.oriz.in → <brand>-site.pages.dev
curl -X POST "https://api.cloudflare.com/client/v4/zones/$CF_ZONE_ID/dns_records" \
  -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"type":"CNAME","name":"<subdomain>","content":"<brand>-site.pages.dev","proxied":true}'

9. Create CF Pages project

wrangler pages project create <brand>-site \
  --production-branch main \
  --compatibility-date 2026-06-21

10. Push

cd repos/websites/<brand>-site
git -c user.name="Chirag Singhal" -c user.email=chirag@oriz.in add .
git -c user.name="Chirag Singhal" -c user.email=chirag@oriz.in \
  commit -m "feat: initial scaffold via @chirag127/astro-shell + astro-chrome"
git push -u origin main

Then in the workspace umbrella:

cd C:/D/oriz
git add .gitmodules repos/websites/<brand>-site
git commit -m "feat: add <brand>-site as submodule"
git push origin main

Verify

Time budget

Total: ~10 minutes per new site.

Building distributables

To emit APK + EXE/dmg/AppImage alongside the PWA build, see build-distributable.md. The starter ships the workflow stub; signing keys come from org-level secrets.