Skip to content

Commit f688ec7

Browse files
committed
Add state & UT startup schemes index
Index 323 state-level startup schemes and incentives across all 36 states and union territories — seed grants, sustenance allowances, patent/marketing reimbursements, SGST refunds, lease-rental and power subsidies, and preferential procurement — pulled from each official state startup policy. Kept entirely separate from the central schemes: its own data file (data/state-schemes.json), page, and search-index key. New page (state-schemes.html) with three views over one dataset: - By state: each state's policy, period, nodal agency and sector focus, then its schemes as benefit-highlighted cards. - All schemes: flat, filterable card grid tagged by state. - Map: reuses the India choropleth (shaded by scheme count) — click a state to see its policy and schemes in the side panel; the full distribution stays coloured while the selection is highlighted. Search + state/type filters, all deep-linkable. Every scheme (and each state) is added to the ⌘K search index. Wired into nav (renaming the portal list to "State portals" to sit beside the new "State & UT schemes") and the home page / overview. Research gathered by a fan-out of per-state agents reading official policy portals; amounts are as officially stated and unverifiable fields are left blank rather than guessed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Tg3RZsmaxHmycVh6yKYcxj
1 parent 870d4b5 commit f688ec7

91 files changed

Lines changed: 4230 additions & 166 deletions

Some content is hidden

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

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ Four views from the [live site](https://fritzhand.github.io/startup-india-guide/
4444
| [Compare](https://fritzhand.github.io/startup-india-guide/compare.html) | Up to three schemes side by side |
4545
| [Lifecycle Map](https://fritzhand.github.io/startup-india-guide/lifecycle.html) | Ideation → prototype → seed → growth → market access |
4646
| [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+
| [State & UT schemes](https://fritzhand.github.io/startup-india-guide/state-schemes.html) | 320+ state-level startup schemes & incentives (seed grants, subsidies, reimbursements, procurement) across every state and UT — straight from each official state startup policy, by-state / all-schemes / map views. Kept separate from the central schemes |
4748
| [Incubators directory](https://fritzhand.github.io/startup-india-guide/incubators.html) | 220+ technology business incubators, Atal Incubation Centres & startup hubs on an interactive India map (choropleth + city markers) — searchable, filterable, cards / table / state-wise views, with locations, websites and contacts |
4849
| [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 |
4950
| [Glossary](https://fritzhand.github.io/startup-india-guide/glossary.html) · [About](https://fritzhand.github.io/startup-india-guide/about.html) | Definitions, abbreviations, disclaimer, method |
@@ -62,7 +63,7 @@ site/tokens.css + site.css + site.js the skin (PDF-sampled palette) +
6263
6364
│ node build.mjs zero dependencies, fails loudly
6465
65-
docs/ → GitHub Pages 81 static pages, ⌘K search, no runtime deps
66+
docs/ → GitHub Pages 82 static pages, ⌘K search, no runtime deps
6667
```
6768

6869
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.
@@ -92,8 +93,9 @@ startup-india-guide/
9293
│ ├── decision-tree.json # the 5-question finder
9394
│ ├── lifecycle.json # stage → schemes map
9495
│ ├── needs-index.json # need → schemes map
96+
│ ├── state-schemes.json # 320+ state/UT startup schemes & incentives, by state
9597
│ ├── incubators.json # 220+ incubators: location, type, sectors, website, contacts, lat/lng
96-
│ ├── india-map.json # projected + simplified India state polygons (see scripts/) for the map
98+
│ ├── india-map.json # projected + simplified India state polygons (see scripts/) for the maps
9799
│ ├── psu.json · states.json · glossary.json · about.json
98100
│ └── aliases.json # printed-name → slug overrides for cross-references
99101
├── site/ # the engine — consumed by build.mjs

build.mjs

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ const states = readJSON("states.json");
5353
const glossary = readJSON("glossary.json");
5454
const incubators = readJSON("incubators.json");
5555
const indiaMap = readJSON("india-map.json");
56+
const stateSchemes = readJSON("state-schemes.json");
5657

5758
/* ---------------- taxonomy labels ---------------- */
5859
const CAT_LABEL = { grant: "Grant", equity: "Equity", "loan-credit": "Loan / Credit", incubation: "Incubation", "market-access": "Market Access", mixed: "Mixed", other: "Other" };
@@ -232,9 +233,10 @@ const NAV_PAGES = [
232233
{ href: "compare.html", title: "Compare schemes", icon: "scale" },
233234
]},
234235
{ group: "Beyond central schemes", items: [
236+
{ href: "state-schemes.html", title: "State & UT schemes", icon: "layers" },
235237
{ href: "incubators.html", title: "Incubators directory", icon: "pin" },
236238
{ href: "psu.html", title: "PSU & regulator programs", icon: "building" },
237-
{ href: "states.html", title: "State & UT initiatives", icon: "map" },
239+
{ href: "states.html", title: "State portals", icon: "map" },
238240
]},
239241
{ group: "Reference", items: [
240242
{ href: "glossary.html", title: "Glossary", icon: "book" },
@@ -456,6 +458,7 @@ const write = (rel, html) => { mkdirSync(dirname(join(OUT, rel)), { recursive: t
456458
457459
<h2 class="home-h2">Beyond central schemes</h2>
458460
<div class="grid grid-3">
461+
<a class="card" href="state-schemes.html"><h3><span class="card-icon tone-green">${ICONS.layers}</span>State &amp; UT schemes</h3><p>${stateSchemes.states.flatMap((s) => s.schemes).length} state-level startup schemes &amp; incentives — seed grants, subsidies, reimbursements — that stack on top of central schemes. By state, searchable, on a map.</p><span class="go">${ICONS.arrow}</span></a>
459462
<a class="card" href="incubators.html"><h3><span class="card-icon tone-teal">${ICONS.pin}</span>Incubators directory</h3><p>${incubators.incubators.length} technology business incubators, Atal Incubation Centres and startup hubs across India — on an interactive map, searchable and state-wise.</p><span class="go">${ICONS.arrow}</span></a>
460463
<a class="card" href="psu.html"><h3><span class="card-icon tone-blue">${ICONS.building}</span>PSU &amp; regulator programs</h3><p>${psu.programs.length} startup initiatives run by public sector undertakings and regulators — ONGC, BHEL, GAIL, IFSCA and more.</p><span class="go">${ICONS.arrow}</span></a>
461464
<a class="card" href="states.html"><h3><span class="card-icon tone-green">${ICONS.map}</span>State &amp; UT startup portals</h3><p>Every state and union territory runs its own startup policy — find your state's portal and incentives.</p><span class="go">${ICONS.arrow}</span></a>
@@ -786,6 +789,62 @@ ${crumbs("", [["Home", "index.html"], ["Incubators directory", null]])}
786789
}));
787790
}
788791

792+
/* ================= STATE SCHEMES ================= */
793+
{
794+
const SS_TYPE = ["Grant", "Seed funding", "Subsidy", "Reimbursement", "Incentive", "Incubation", "Loan/Credit", "Procurement", "Other"];
795+
const sts = stateSchemes.states;
796+
const allSchemes = sts.flatMap((s) => s.schemes);
797+
const withPolicy = sts.filter((s) => s.schemes.length).length;
798+
const usedTypes = new Set(allSchemes.map((s) => s.type));
799+
const usedStates = sts.filter((s) => s.schemes.length).map((s) => s.state);
800+
801+
const typeOpts = SS_TYPE.filter((t) => usedTypes.has(t)).map((t) => `<option value="${attr(t)}">${esc(t)}</option>`).join("");
802+
const stateOpts = usedStates.map((s) => `<option value="${attr(s)}">${esc(s)}</option>`).join("");
803+
804+
const body = `
805+
${crumbs("", [["Home", "index.html"], ["State & UT schemes", null]])}
806+
<div class="page-head">
807+
<div class="kicker">Beyond central schemes</div>
808+
<h1>State &amp; UT startup schemes</h1>
809+
<p class="lede">${esc(stateSchemes.intro)}</p>
810+
</div>
811+
812+
<div class="stats">
813+
<div class="stat"><div class="n">${withPolicy}</div><div class="l">States &amp; UTs with schemes</div></div>
814+
<div class="stat"><div class="n">${allSchemes.length}</div><div class="l">Schemes &amp; incentives indexed</div></div>
815+
<div class="stat"><div class="n">${usedTypes.size}</div><div class="l">Types of support</div></div>
816+
<a class="stat" href="incubators.html"><div class="n">${incubators.incubators.length}</div><div class="l">State &amp; central incubators →</div></a>
817+
</div>
818+
819+
<div id="state-schemes">
820+
<div class="toolbar">
821+
<div class="field">${ICONS.search}<input id="s-q" type="search" placeholder="Search scheme, benefit, keyword…" aria-label="Search state schemes"></div>
822+
<select id="s-state" aria-label="Filter by state"><option value="">State: all</option>${stateOpts}</select>
823+
<select id="s-type" aria-label="Filter by support type"><option value="">Type: all</option>${typeOpts}</select>
824+
<div class="view-toggle" id="s-view-toggle" role="group" aria-label="View">
825+
<button data-view="state" aria-pressed="true">${ICONS.map} By state</button>
826+
<button data-view="list" aria-pressed="false">${ICONS.grid} All schemes</button>
827+
<button data-view="map" aria-pressed="false">${ICONS.pin} Map</button>
828+
</div>
829+
<button class="btn btn-ghost" id="s-reset" type="button">Reset</button>
830+
</div>
831+
<div class="result-count" id="s-count" role="status" aria-live="polite"></div>
832+
<h2 class="sr-only">State schemes</h2>
833+
<div id="ss-out"></div>
834+
</div>
835+
836+
<div class="callout tone-info" style="margin-top:30px"><span class="ic">${ICONS.info}</span><div>State incentives <strong>stack with central schemes</strong> — a startup can draw on both. Amounts, windows and eligibility come from each state's official startup policy and change often; blank fields are left blank rather than guessed. Always confirm on the state portal before applying. Spotted an error or a missing scheme? <a href="${attr(REPO_URL)}" target="_blank" rel="noopener">Open an issue on GitHub</a>.</div></div>
837+
838+
<script type="application/json" id="state-schemes-data">${JSON.stringify(sts)}</script>
839+
<script type="application/json" id="india-map-data">${JSON.stringify(indiaMap)}</script>`;
840+
841+
write("state-schemes.html", shell({
842+
root: "", active: "state-schemes.html", title: "State & UT Startup Schemes",
843+
description: `A searchable index of ${allSchemes.length} state and union-territory startup schemes and incentives across ${withPolicy} states — seed grants, subsidies, reimbursements and more, straight from each official state startup policy. Kept separate from central schemes.`,
844+
body,
845+
}));
846+
}
847+
789848
/* ================= GLOSSARY ================= */
790849
{
791850
const items = glossary.terms.map((t) => ({ ...t, id: slugify(t.term) }));
@@ -998,6 +1057,10 @@ write("404.html", shell({
9981057
for (const p of psu.programs) idx.push({ t: p.program, m: p.organization, u: "psu.html", k: "psu", d: `${p.organization} startup initiative`, g: p.organization });
9991058
for (const st of states.states) idx.push({ t: `${st.name} startup portal`, u: `states.html#${slugify(st.name)}`, k: "state", d: st.program || "", g: st.name });
10001059
for (const r of incubators.incubators) idx.push({ t: r.name, m: r.host, u: `incubators.html?q=${encodeURIComponent(r.name)}`, k: "incubator", d: `${r.type === "AIC" ? "Atal Incubation Centre" : r.type} · ${r.city}, ${r.state}`, g: `${r.host} ${r.city} ${r.state} ${(r.sectors || []).join(" ")}` });
1060+
for (const st of stateSchemes.states) {
1061+
if (st.schemes.length) idx.push({ t: `${st.state} startup schemes`, u: `state-schemes.html?state=${encodeURIComponent(st.state)}`, k: "state-scheme", d: st.policy || `${st.schemes.length} state schemes & incentives`, g: st.state });
1062+
for (const sc of st.schemes) idx.push({ t: sc.name, m: st.state, u: `state-schemes.html?state=${encodeURIComponent(st.state)}&q=${encodeURIComponent(sc.name)}`, k: "state-scheme", d: `${st.state} · ${sc.type}${sc.benefit ? ` · ${sc.benefit}` : ""}`, g: `${st.state} ${sc.type}` });
1063+
}
10011064
writeFileSync(join(OUT, "assets", "search-index.js"), `window.SEARCH_INDEX=${JSON.stringify(idx)};`);
10021065
}
10031066

0 commit comments

Comments
 (0)