Neft Hub is the single home base for Joel's classroom apps, GitHub navigation, notebook and lesson-plan engines, Hebrew/family learning tools, and Cloudflare Pages deployment.
The goal is simple: one hub, one Cloudflare Pages project, many organized tools.
Instead of creating a separate Cloudflare Pages project for every activity, Neft Hub publishes apps under clean routes like:
/apps/<app-slug>/
| Need | Open |
|---|---|
| Main app library | / |
| All app folders | /apps/ |
| Control center | /apps/neft-hub-control-center/ |
| App registry | app-registry.json |
| Build script | scripts/build-cloudflare-hub.mjs |
Use these settings when connecting this repo to Cloudflare Pages:
| Setting | Value |
|---|---|
| Repository | Baltimoreteacher1/student-notebooks-site |
| Production branch | main |
| Framework preset | None or Static HTML |
| Build command | npm run build |
| Build output directory | dist |
| Root directory | blank / repository root |
| Node version | 20+ |
After Cloudflare deployment, the site should look like this:
https://<your-cloudflare-project>.pages.dev/
https://<your-cloudflare-project>.pages.dev/apps/
https://<your-cloudflare-project>.pages.dev/apps/neft-hub-control-center/
https://<your-cloudflare-project>.pages.dev/apps/noam-hebrew/
https://<your-cloudflare-project>.pages.dev/apps/grade-6-math-units/
The build script reads app-registry.json, clones each listed public GitHub repo or copies each listed local folder, and publishes each app to:
/apps/<slug>/
The homepage and /apps/ folder index are grouped by each app's group and sorted by groupOrder.
| Type | Where It Goes |
|---|---|
| Student-facing classroom apps | Add to app-registry.json |
| Family learning apps | Add to app-registry.json |
| GitHub navigation links | Keep in /apps/neft-hub-control-center/ |
| Notebook and lesson-plan engines | Link from the control center |
| Experimental apps | Keep in GitHub until stable, then add to the registry |
| Cloudflare deployment notes | Keep in this README |
- Make sure the source app repo is public and has either:
- a root
index.html, or - a working
package.jsonwith abuildscript that producesdist/index.htmlorbuild/index.html.
- a root
- For a local bundled folder, place it under
assignments/<folder>/with its ownindex.htmland use arepovalue like./assignments/<folder>. - Open
app-registry.json. - Add a new object to the
appsarray. - Give it a clean lowercase hyphenated slug.
- Set
groupto the unit/folder where the app belongs. - Set
groupOrderso folders sort correctly. - Commit to
main. - Cloudflare rebuilds Neft Hub and adds the app under
/apps/<slug>/.
Template:
{
"title": "New App Title",
"slug": "new-app-title",
"repo": "Baltimoreteacher1/source-repo-name",
"category": "Math · Grade 6",
"group": "Unit 5 · Geometry and Measurement",
"groupOrder": 50,
"audience": "Students",
"description": "One sentence description of what the app does.",
"tags": ["tag one", "tag two"]
}Run:
npm run check
npm run buildThe build creates:
dist/
index.html
apps/
<slug>/
index.html
assets/
_headers
_redirects
build-report.json
Open dist/build-report.json after building to see which apps copied successfully and which source repos need cleanup.
- Keep one Cloudflare Pages project for the hub.
- Do not create a new Pages project unless the app truly needs to be separate.
- Do not delete old Cloudflare Pages projects until the hub version is tested.
- Existing old
*.pages.devURLs will stop working if those old projects are deleted. - For apps with absolute asset paths or complex build assumptions, the source repo may need a small fix before it works perfectly under
/apps/<slug>/.
The current GitHub repo is still named:
student-notebooks-site
For clarity, rename it later in GitHub to:
neft-hub
Do this only after confirming Cloudflare still builds correctly from the renamed repo.