Skip to content

Commit 2f76c66

Browse files
authored
Public template + discovery-grade README (#5)
Public template + discovery-grade README
2 parents 8db52b9 + 011e817 commit 2f76c66

90 files changed

Lines changed: 220 additions & 42 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/screenshots/directory.png

390 KB
Loading
328 KB
Loading

.github/screenshots/hero-home.png

444 KB
Loading

.github/screenshots/home-dark.png

513 KB
Loading
124 KB
Loading
348 KB
Loading

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2026 Jeremy Fritzhand
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 93 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,128 @@
1-
# Startup India Guide
1+
<div align="center">
22

3-
**A searchable, filterable documentation site for the Government of India's _Playbook of Government Schemes and Initiatives for Startups_ (June 2026).**
3+
# startup-india-guide
44

5-
69 central government schemes — grants, equity, loans, credit guarantees, incubation and market access — extracted from the official playbook PDF, machine-verified against the source, and organised the way a founder actually looks for money: by need, by stage, by sector.
5+
**Every central government scheme for Indian startups — one searchable, comparable, verified documentation site.**
6+
7+
The Government of India's 107-page *Playbook of Government Schemes and Initiatives for Startups* (June 2026), rebuilt as a docs site: 69 schemes with verbatim eligibility, benefits and official links, organised the way a founder actually looks for money — by need, by stage, by sector.
8+
9+
[**Live site**](https://fritzhand.github.io/startup-india-guide/) · [**Scheme Finder**](https://fritzhand.github.io/startup-india-guide/finder.html) · [**All 69 schemes**](https://fritzhand.github.io/startup-india-guide/directory.html) · [**Compare**](https://fritzhand.github.io/startup-india-guide/compare.html)
10+
11+
[![Use this template](https://img.shields.io/badge/Use%20this%20template-238636?style=for-the-badge&logo=github&logoColor=white)](https://github.com/fritzhand/startup-india-guide/generate)
12+
13+
![Live on GitHub Pages](https://img.shields.io/badge/live-fritzhand.github.io-1f3864?style=flat-square&logo=githubpages&logoColor=white)
14+
![Node ≥ 18](https://img.shields.io/badge/node-%E2%89%A5%2018-5FA04E?style=flat-square&logo=nodedotjs&logoColor=white)
15+
![Zero dependencies](https://img.shields.io/badge/dependencies-zero-0E6B63?style=flat-square)
16+
![WCAG 2.1 AA](https://img.shields.io/badge/contrast-WCAG%202.1%20AA-359a4c?style=flat-square)
17+
![License: MIT](https://img.shields.io/badge/license-MIT-bf4c0e?style=flat-square)
18+
19+
<br>
20+
21+
<a href="https://fritzhand.github.io/startup-india-guide/"><img src=".github/screenshots/hero-home.png" alt="The playbook site's home page — hero, stats, and browse-by-support cards" width="840"></a>
22+
23+
*The home page. Palette sampled from the source PDF's own navy, saffron and green.*
24+
25+
</div>
26+
27+
## What it looks like
28+
29+
Four views from the [live site](https://fritzhand.github.io/startup-india-guide/) — dark home, the filterable directory, a scheme one-pager, the finder's results. Light/dark theme, ⌘K search, and mobile-first layout throughout.
30+
31+
| | |
32+
| --- | --- |
33+
| ![Home page in dark mode](.github/screenshots/home-dark.png) | ![Directory with filters by support type, stage, sector](.github/screenshots/directory.png) |
34+
| ![A scheme page: facts panel, eligibility checklist, verified links](.github/screenshots/scheme-page.png) | ![Scheme Finder results grouped by question](.github/screenshots/finder-results.png) |
635

736
## What's on the site
837

938
| Page | What it does |
1039
| --- | --- |
11-
| **Overview** (`index.html`) | Stats, browse-by-support / stage / sector, flagship schemes |
12-
| **Scheme Finder** (`finder.html`) | The playbook's official 5-question decision tree as an interactive wizard, plus the full static tree |
13-
| **All schemes** (`directory.html`) | Filter all 69 schemes by part, support type, lifecycle stage, sector and audience — card or table view, deep-linkable filters (`?support=grant&stage=ideation`) |
14-
| **Scheme pages** (`schemes/<slug>.html`) | One page per scheme: plain-English summary, objectives, eligibility checklist, benefits, how to apply, verified official links, related schemes, source page citation |
15-
| **Compare** (`compare.html`) | Up to three schemes side by side |
16-
| **Lifecycle Map** (`lifecycle.html`) | Which schemes fit ideation → prototype → seed → growth → market access |
17-
| **What do you need?** (`needs.html`) | Jump from a need (grant / loan / lab / buyers / IP) to the schemes that provide it |
18-
| **PSU & regulators** (`psu.html`) | 17 startup programs run by PSUs and regulators |
19-
| **States & UTs** (`states.html`) | Every state/UT startup portal |
20-
| **Glossary** (`glossary.html`) | The playbook's definitions and abbreviations |
40+
| [Overview](https://fritzhand.github.io/startup-india-guide/) | Stats, browse by support / stage / sector, flagship schemes |
41+
| [Scheme Finder](https://fritzhand.github.io/startup-india-guide/finder.html) | The playbook's official 5-question decision tree as an interactive wizard |
42+
| [All schemes](https://fritzhand.github.io/startup-india-guide/directory.html) | Filter 69 schemes by part, support type, stage, sector, audience — cards or table, deep-linkable (`?support=grant&stage=ideation`) |
43+
| Scheme pages | One per scheme: plain-English summary, eligibility checklist, benefits, how to apply, verified official links, related schemes, source-page citation |
44+
| [Compare](https://fritzhand.github.io/startup-india-guide/compare.html) | Up to three schemes side by side |
45+
| [Lifecycle Map](https://fritzhand.github.io/startup-india-guide/lifecycle.html) | Ideation → prototype → seed → growth → market access |
46+
| [What do you need?](https://fritzhand.github.io/startup-india-guide/needs.html) | From a need (grant / loan / lab / buyers / IP) to the schemes that provide it |
47+
| [PSU & regulators](https://fritzhand.github.io/startup-india-guide/psu.html) · [States & UTs](https://fritzhand.github.io/startup-india-guide/states.html) | 17 PSU/regulator programs; every state startup portal |
48+
| [Glossary](https://fritzhand.github.io/startup-india-guide/glossary.html) · [About](https://fritzhand.github.io/startup-india-guide/about.html) | Definitions, abbreviations, disclaimer, method |
49+
50+
## How it works
51+
52+
```
53+
Startup-Schemes-Playbook-June-2026.pdf the source document
54+
55+
│ extract (text + page images) → parse → adversarially verify
56+
57+
data/*.json the content: 69 schemes, decision tree,
58+
│ lifecycle, needs index, PSU/states, glossary
59+
+
60+
site/tokens.css + site.css + site.js the skin (PDF-sampled palette) + engine
61+
62+
│ node build.mjs zero dependencies, fails loudly
63+
64+
docs/ → GitHub Pages 80 static pages, ⌘K search, no runtime deps
65+
```
2166

22-
Site-wide: **⌘K / `/` search** across schemes, glossary, states and PSU programs · **light/dark theme** with system default · mobile-first responsive layout · print-friendly scheme pages · zero runtime dependencies.
67+
1. **Extract** — every PDF page rendered to text *and* image; scheme one-pagers parsed to structured JSON; hyperlinks taken from the PDF's link annotations, never retyped.
68+
2. **Verify** — an independent pass re-reads each source page and corrects amounts, bullets and URLs before anything ships.
69+
3. **Build**`build.mjs` turns `data/` + `site/` into `docs/`: directory, wizard, compare, search index, sitemap, per-scheme pages.
70+
4. **Deploy** — pushing to `main` publishes `docs/` to the `gh-pages` branch via the included workflow.
2371

24-
## Enable GitHub Pages
72+
## Use this as a template
2573

26-
The generated site lives in `docs/`. To publish it:
74+
The engine is content-agnostic: it turns any structured reference corpus — a scheme catalogue, a benefits handbook, an internal policy binder — into this site. Click **[Use this template](https://github.com/fritzhand/startup-india-guide/generate)**, then:
2775

28-
1. Repo **Settings → Pages**
29-
2. Source: **Deploy from a branch**
30-
3. Branch: **`gh-pages`**, folder **`/` (root)** — already set up; the `Publish site to gh-pages` workflow refreshes it on every push to `main`
31-
4. Save — the site appears at `https://<user>.github.io/startup-india-guide/`
76+
1. **Point it at your home.** Edit `site.config.json``siteName`, `siteBase`, `pathPrefix`, `repo`.
77+
2. **Bring your content.** Replace `data/*.json` (schemes, decision tree, lifecycle, needs index, glossary). The shapes are plain and documented by example; `data/aliases.json` resolves any cross-reference spellings.
78+
3. **Wear your brand.** `site/tokens.css` is the only file that knows the palette — light and dark themes, ~60 custom properties.
79+
4. **Build & publish.** `node build.mjs`, push, and enable Pages (the included workflow publishes `docs/``gh-pages`).
80+
81+
The build fails loudly on duplicate slugs, missing fields, malformed URLs, or any scheme name that doesn't resolve to a page — broken cross-references can't ship silently.
3282

3383
## Repo tour
3484

3585
```
3686
startup-india-guide/
3787
├── Startup-Schemes-Playbook-June-2026.pdf # the source document (also served by the site)
38-
├── data/ # the extracted, verified content — the single source of truth
88+
├── site.config.json # template knobs: site name, base URL, path prefix, repo
89+
├── data/ # the extracted, verified content — single source of truth
3990
│ ├── schemes.json # 69 schemes: verbatim eligibility/benefits/links + tags
4091
│ ├── decision-tree.json # the 5-question finder
4192
│ ├── lifecycle.json # stage → schemes map
4293
│ ├── needs-index.json # need → schemes map
43-
│ ├── master? — master-table columns (howMuch, category) are merged into schemes.json
44-
│ ├── psu.json, states.json, glossary.json, about.json
45-
│ └── aliases.json # printed-name → slug overrides for cross-reference resolution
94+
│ ├── psu.json · states.json · glossary.json · about.json
95+
│ └── aliases.json # printed-name → slug overrides for cross-references
4696
├── site/ # the engine — consumed by build.mjs
47-
│ ├── tokens.css # the brand skin (palette sampled from the PDF) — light + dark
97+
│ ├── tokens.css # the skin: PDF-sampled palette, light + dark
4898
│ ├── site.css # layout & component vocabulary; reads only tokens
4999
│ └── site.js # search, filters, wizard, compare, theme toggle
50-
├── build.mjs # data + site → docs/ (zero dependencies, Node ≥ 18)
51-
└── docs/ # GENERATED — never hand-edit; this is what GitHub Pages serves
100+
├── build.mjs # data + site → docs/ (zero dependencies, Node ≥ 18)
101+
├── docs/ # GENERATED — never hand-edit; what GitHub Pages serves
102+
└── .github/workflows/deploy-pages.yml # publishes docs/ → gh-pages on push to main
52103
```
53104

54105
## Working on the site
55106

56107
```bash
57-
node build.mjs # regenerate docs/ from data/ + site/
58-
npx serve docs # or: python3 -m http.server -d docs 8000
108+
node build.mjs # regenerate docs/ from data/ + site/
109+
python3 -m http.server -d docs 8000 # preview locally (or: npx serve docs)
59110
```
60111

61-
- **Content change** (a scheme's amount, a new link)? Edit `data/*.json`, rebuild.
62-
- **Design change**? Edit `site/tokens.css` (colours/fonts) or `site/site.css` (components), rebuild.
63-
- **Never edit `docs/`** — it is overwritten on every build.
64-
65-
The build **fails loudly** on duplicate slugs, missing required fields, malformed URLs, or any scheme name referenced in the decision tree / lifecycle / needs index that doesn't resolve to a scheme page (fix those by adding an entry to `data/aliases.json`).
112+
- **Content change** (an amount, a new link, a new scheme)? Edit `data/*.json`, rebuild.
113+
- **Design change**? Edit `site/tokens.css` (palette/fonts) or `site/site.css` (components), rebuild.
114+
- **Never edit `docs/`** — every build overwrites it.
66115

67116
## How the data was made
68117

69-
Each of the playbook's 107 pages was extracted to text and rendered to an image; every scheme one-pager was parsed into structured JSON and then **independently re-verified against the source page** (amounts, eligibility bullets, benefits, URLs). Hyperlinks come from the PDF's link annotations — never reconstructed by hand. Each scheme page cites the playbook page it came from.
118+
Each of the playbook's 107 pages was extracted to text and rendered to an image; every scheme one-pager was parsed into structured JSON and then **independently re-verified against the source page** — ₹ amounts, eligibility bullets, benefits and URLs are reproduced as printed, and each scheme page cites the playbook page it came from. Hyperlinks come from the PDF's link annotations, never reconstructed by hand.
119+
120+
## Honest limitations
121+
122+
- **Scheme details drift.** Deadlines, corpus sizes and application windows change after any snapshot; every page carries a "verify on the official portal" notice for exactly that reason.
123+
- **This is an independent reference,** not a government website, and not legal or financial advice.
124+
- **Extraction is machine-verified, not lawyer-reviewed.** The verification pass catches transcription errors; it cannot catch changes the government made after June 2026.
125+
126+
## License
70127

71-
This is an independent reference, not a government website. Scheme details change — always verify on the linked official portals before applying.
128+
MIT — see [LICENSE](LICENSE). The underlying playbook is a Government of India publication; this repo reproduces its content as a reference with attribution and a link to [the source PDF](Startup-Schemes-Playbook-June-2026.pdf).

build.mjs

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,16 @@ const DATA = join(ROOT, "data");
1919
const SITE = join(ROOT, "site");
2020
const OUT = join(ROOT, "docs");
2121
const PDF_NAME = "Startup-Schemes-Playbook-June-2026.pdf";
22-
const SITE_BASE = "https://fritzhand.github.io/startup-india-guide/"; // used for sitemap + og:url only
22+
23+
/* site.config.json — the template knobs: where the site is hosted and what
24+
it is called. Everything else is content (data/) or skin (site/). */
25+
const CONFIG = existsSync(join(ROOT, "site.config.json"))
26+
? JSON.parse(readFileSync(join(ROOT, "site.config.json"), "utf8"))
27+
: {};
28+
const SITE_NAME = CONFIG.siteName || "Startup Schemes Playbook";
29+
const SITE_BASE = CONFIG.siteBase || "https://fritzhand.github.io/startup-india-guide/"; // sitemap + og
30+
const PATH_PREFIX = CONFIG.pathPrefix ?? "/startup-india-guide/"; // 404 page absolute links
31+
const REPO_URL = CONFIG.repo || "https://github.com/fritzhand/startup-india-guide";
2332

2433
/* ---------------- utilities ---------------- */
2534
const readJSON = (f) => JSON.parse(readFileSync(join(DATA, f), "utf8"));
@@ -255,8 +264,12 @@ const themeBoot = `<script>(function(){var t;try{t=localStorage.getItem("playboo
255264
if(t!=="light"&&t!=="dark"){t=window.matchMedia&&matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}
256265
document.documentElement.setAttribute("data-theme",t)})();</script>`;
257266

267+
const brandParts = SITE_NAME.split(" ");
268+
const brandMain = brandParts.length > 1 ? brandParts.slice(0, -1).join(" ") : SITE_NAME;
269+
const brandThin = brandParts.length > 1 ? brandParts[brandParts.length - 1] : "";
270+
258271
function shell({ root, active, title, description, body, extraHead = "", pageClass = "", toc = "" }) {
259-
const fullTitle = title ? `${title} · Startup Schemes Playbook` : "Startup Schemes Playbook — Government Schemes for Indian Startups";
272+
const fullTitle = title ? `${title} · ${SITE_NAME}` : `${SITE_NAME} — Government Schemes for Indian Startups`;
260273
return `<!doctype html>
261274
<html lang="en" data-root="${root}">
262275
<head>
@@ -269,7 +282,7 @@ function shell({ root, active, title, description, body, extraHead = "", pageCla
269282
<meta property="og:title" content="${attr(fullTitle)}">
270283
<meta property="og:description" content="${attr(description)}">
271284
<meta property="og:type" content="website">
272-
<meta property="og:site_name" content="Startup Schemes Playbook">
285+
<meta property="og:site_name" content="${attr(SITE_NAME)}">
273286
<meta property="og:image" content="${SITE_BASE}assets/og.png">
274287
<meta name="twitter:card" content="summary_large_image">
275288
<link rel="icon" type="image/svg+xml" href="${root}assets/favicon.svg">
@@ -287,7 +300,7 @@ ${extraHead}
287300
<button class="nav-toggle" id="nav-toggle" aria-label="Toggle navigation" aria-expanded="false">${ICONS.menu}</button>
288301
<a class="brand" href="${root}index.html">
289302
<span class="brand-mark" aria-hidden="true"><svg viewBox="0 0 64 64" width="18" height="18"><rect x="6" y="14" width="52" height="9" rx="4.5" fill="#e2621b"/><rect x="6" y="27.5" width="52" height="9" rx="4.5" fill="#ffffff"/><rect x="6" y="41" width="52" height="9" rx="4.5" fill="#359a4c"/></svg></span>
290-
<span class="brand-name">Startup Schemes <span class="thin">Playbook</span></span>
303+
<span class="brand-name">${esc(brandMain)}${brandThin ? ` <span class="thin">${esc(brandThin)}</span>` : ""}</span>
291304
</a>
292305
<span class="topbar-spacer"></span>
293306
<button class="searchbtn" data-search-open type="button" aria-label="Search schemes">
@@ -321,6 +334,7 @@ ${toc ? `<div class="content-with-toc"><div class="content-main">${body}</div>${
321334
<a href="${root}about.html">About &amp; disclaimer</a>
322335
<a href="${root}assets/${PDF_NAME}" download>Source PDF</a>
323336
<a href="https://www.startupindia.gov.in/" target="_blank" rel="noopener">startupindia.gov.in ↗</a>
337+
<a href="${attr(REPO_URL)}" target="_blank" rel="noopener">GitHub ↗</a>
324338
</div>
325339
</div></footer>
326340
<div class="search-modal" id="search-modal" role="dialog" aria-modal="true" aria-label="Search">
@@ -883,9 +897,9 @@ ${rel.length ? `
883897

884898
/* ================= 404 ================= */
885899
write("404.html", shell({
886-
root: "/startup-india-guide/", active: "", title: "Page not found",
900+
root: PATH_PREFIX, active: "", title: "Page not found",
887901
description: "Page not found.",
888-
body: `<div class="empty-state" style="margin-top:60px"><div class="big">🧭</div><h1 style="font-size:1.5rem">That page doesn't exist</h1><p class="muted" style="margin-top:8px">The scheme may have been renamed. Try the search (<kbd>⌘K</kbd>) or start from the directory.</p><p style="margin-top:18px"><a class="btn btn-primary" href="/startup-india-guide/directory.html">Browse all schemes</a></p></div>`,
902+
body: `<div class="empty-state" style="margin-top:60px"><div class="big">🧭</div><h1 style="font-size:1.5rem">That page doesn't exist</h1><p class="muted" style="margin-top:8px">The scheme may have been renamed. Try the search (<kbd>⌘K</kbd>) or start from the directory.</p><p style="margin-top:18px"><a class="btn btn-primary" href="${PATH_PREFIX}directory.html">Browse all schemes</a></p></div>`,
889903
}));
890904

891905
/* ================= SEARCH INDEX ================= */

docs/404.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@
171171
<a href="/startup-india-guide/about.html">About &amp; disclaimer</a>
172172
<a href="/startup-india-guide/assets/Startup-Schemes-Playbook-June-2026.pdf" download>Source PDF</a>
173173
<a href="https://www.startupindia.gov.in/" target="_blank" rel="noopener">startupindia.gov.in ↗</a>
174+
<a href="https://github.com/fritzhand/startup-india-guide" target="_blank" rel="noopener">GitHub ↗</a>
174175
</div>
175176
</div></footer>
176177
<div class="search-modal" id="search-modal" role="dialog" aria-modal="true" aria-label="Search">

0 commit comments

Comments
 (0)