https://github.com/omercnet/shevet
https://github.com/omercnet/shevet
Last synced: 2 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/omercnet/shevet
- Owner: omercnet
- Created: 2026-06-27T11:25:35.000Z (3 days ago)
- Default Branch: main
- Last Pushed: 2026-06-27T17:03:53.000Z (2 days ago)
- Last Synced: 2026-06-27T17:23:03.745Z (2 days ago)
- Language: HTML
- Size: 361 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# שבט אמהות — rebuild
Rebuild of shevet-imahot.co.il off WordPress onto a lean, low-cost stack.
- **`WEBSITE_SPEC.md`** — current-site spec (verified against WP admin) + rebuild scope.
- **`ARCHITECTURE.md`** — target architecture + decisions.
- **`pitch/`** — Hebrew client pitch deck (`shevet-pitch.html`).
- **`studio/`** — Sanity CMS (content model / schemas).
- **`web/`** — Astro static front-end.
## Stack
Astro (static) · Sanity (Free) · Netlify · Responder (forms/email) · Meshulam (payments). $0 fixed/mo.
## Hosting (Netlify)
Config in `netlify.toml` (base `web/`, publish `dist`). One-time setup:
1. Netlify → **Add new site → Import from Git** → pick this repo (private is fine).
2. **Site settings → Environment variables** → add `SANITY_TOKEN` = a Sanity **read** token (dataset is private). `SANITY_PROJECT_ID`/`DATASET` come from `netlify.toml`.
3. **Domain** → add `shevet-imahot.co.il`; point DNS at Netlify (their apex/ALIAS records) — auto-HTTPS.
4. **Auto-rebuild on content publish:** Netlify → **Build hooks** → create one → copy the URL. In Sanity (manage.sanity.io → API → Webhooks) add a webhook to that URL, **POST, no headers, no body** (uncheck drafts). Publishing in Studio then redeploys the site (~1-2 min).
No PAT, no GitHub Pages, repo stays private.
## Setup
### 1. Sanity (CMS)
```bash
cd studio
npm install
npx sanity init # create/link a project; copy the projectId
npm run dev # studio at http://localhost:3333
```
Set `SANITY_STUDIO_PROJECT_ID` (or edit `sanity.config.ts` / `sanity.cli.ts`).
### 2. Web (Astro)
```bash
cd web
npm install
cp .env.example .env # fill SANITY_PROJECT_ID, dataset, GTM id
npm run dev # http://localhost:4321
```
### 3. Deploy the Studio (gives Keren a login URL)
```bash
cd studio
npx sanity login # interactive, one-time (only the owner can do this)
npx sanity deploy # pick a hostname → https://.sanity.studio
```
Then invite editors at manage.sanity.io (Free plan = up to 20 seats). Keren edits there — no terminal.
### 4. Import content from the old WordPress site
The WXR export (not committed — contains practitioner PII) loads into Sanity via `tools/import`:
```bash
cd tools/import
npm install
echo "SANITY_TOKEN=" >> .env # plus SANITY_PROJECT_ID/DATASET; .env is gitignored
npm run dry-run -- --dir /path/to/wxr # parse + preview, writes nothing
npm run import -- --dir /path/to/wxr # writes; idempotent (createOrReplace)
```
Imports practitioners, articles, benefits + hospital/field/region taxonomy terms. `--no-images` skips asset upload. Re-running is safe (deterministic ids).
> **Private dataset:** it holds practitioner contact info, so it is **not** public. Both the build and the import need a Sanity token. For CI, add a **read** token as the `SANITY_TOKEN` GitHub Actions secret (Settings → Secrets → Actions). Without it, CI still passes — the site builds empty.
## What's built
- **Two search engines** — `/doulas/` (hospital · due date · support style · budget) and `/professionals/` (field · region · language). Client-side, instant.
- **Converting doula profile** — `/doulas/[slug]` with video embed + sticky WhatsApp CTA + reviews.
- Brand locked: **Oron Yad** font (`web/public/fonts/`) + raspberry/peach/cream tokens (`src/styles/brand.css`).
## TODO (tracked in ARCHITECTURE.md §9)
- Confirm with Keren: `supportStyle` values, `budget` bands, due-date matching rule, GTM id.
- Pages: `/articles/`, `/benefits/`, `/community/`, `/doulas/join/` (self-serve), sale pages.
- Embed Rav-Messer forms (matchmaking + profile contact) from `siteSettings`.
- Import script: WXR export → Sanity docs.
- `_redirects` from old URLs + the 301-plugin map.