A React 19 + Vite + Tailwind app: an interactive engineering portal with a database explorer, API explorer, component studio, ADR viewer, roadmap board, and an AI workspace.
Status: recovered and building. npm run build produces a working bundle (2,086 modules, ~454 kB). Three components still need a backend — see below.
Built in Google AI Studio and pushed to the boota-landing repository, where it sat alongside the static marketing pages. The two collided — both define an index.html at the repo root, one as Vite's mount point and one as the marketing homepage.
That collision is visible in the repo's own history: "Fix: Remove infinite redirect loop — display landing page instead".
Extracted here on 2 August 2026 so the marketing site could own its root cleanly. Nothing was deleted — the full history remains in boota-landing.
The original AI Studio README is kept as AISTUDIO_README.md.
Three independent reasons, each sufficient on its own. All three are now fixed except the workflow, which needs writing.
1. The source didn't compile.
Commit 4832d85 ("Fix: Remove infinite redirect loop") rewrote src/App.tsx and saved it truncated — 355 lines became 318, with nine literal [...] markers where content had been elided, including an unterminated string on line 135:
className="bg-orange-500 … transition-al[...]
Some tool wrote an abbreviated version of the file and it was committed as-is. From that commit onward the app could not build at all — esbuild fails on the first unterminated string. Nothing downstream could ever have worked.
Recovered from commit 040dd9a, which has the intact 355-line file. If you diff the two, 040dd9a is the good one.
2. The workflow was at .github/workdlows/deploy.yml.
Note the typo. GitHub only reads .github/workflows/, so it was never a workflow — just a file in a directory nothing looks at. Moved to the correct path here.
3. That file was empty. Zero bytes. So even at the right path it would have done nothing. deploy.yml needs writing from scratch, not fixing.
4. index.html was missing from the extraction. Vite's entry point was initially mistaken for a marketing page during the split. Restored.
The lesson worth keeping: a commit message saying "Fix" described a change that silently broke the build, and nothing caught it — because the workflow that would have run the build was in a misspelled directory. Two failures that individually would have been noticed, together produced months of silence.
Three components call API endpoints that do not exist:
| Component | Calls | Backend |
|---|---|---|
AiWorkspace.tsx |
POST /api/chat |
❌ None |
DatabaseExplorer.tsx |
POST /api/database/query |
❌ None |
ApiExplorer.tsx |
arbitrary URLs |
server.ts exists (262 lines) but the repo's last commit was "remove server bundling" for static deployment — the intended backend was deliberately dropped. These three will fail at runtime until either server.ts is deployed somewhere or they're pointed at Supabase directly.
Components that do work standalone, reading from src/data/docsData.ts:
EngineeringHandbook · AdrViewer · RoadmapKanban · ComponentStudio
src/data/docsData.ts (369 lines) contains hand-written architecture documentation authored separately from Boota-Docs. Read it against Boota-Docs before publishing. Independently written docs about the same system tend to disagree, and two documents that disagree are worse than one.
Spot-check on recovery: it describes Boota as serving named stores — "Boota Grocers Harris Park", "Desi Bazaar Sunshine". Verify those exist before that text goes anywhere public. The marketing site already carries fabricated performance claims; don't add more.
A DatabaseExplorer that runs queries against production must never be publicly exposed. If this portal ships, it belongs behind the same Cloudflare Access policy as Boota-Docs.
npm install
npm run devRequires Node 20+.
npm run build # → dist/
npm run lint # tsc --noEmit@google/genai is a dependency. If AiWorkspace gets wired up it needs an API key — not committed, and not in an EXPO_PUBLIC_-style variable that ships to the client.
vite.config.ts has base: '/boota-portal/' for GitHub Pages under this repo name. Change it if the repo is renamed or served from a custom domain.
| Repo | Is | Status |
|---|---|---|
boota-landing |
Public marketing site, static HTML | ✅ Live |
Boota-Docs |
Internal docs, MkDocs → Cloudflare Access | ✅ Built |
boota-portal |
This — interactive engineering portal | ⏸️ Recovered, not running |
Boota-App |
The apps themselves | ✅ Active |
Boota-Docs already covers written documentation and deploys behind authentication.
This portal only earns its place if the interactive parts are worth the maintenance — the schema explorer, API explorer, and component studio do things MkDocs genuinely cannot. The prose sections overlap with Boota-Docs and would be better deleted than kept in sync.
Decide that before writing a deploy workflow.