Javis OS
Javis OS is an Agentic AI that assists entrepreneurs in business tasks, helping them grow their work.
AI translation
Helm is the all-in-one platform for event teams — capture enquiries, design the floor, price and confirm bookings, manage staff, inventory and vendors, run the event day, and close the books. Your wor
BusinessPLpgSQL · JavaScriptGitHub @koushik1133OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Helm is the all-in-one platform for event teams — capture enquiries, design the floor, price and confirm bookings, manage staff, inventory and vendors, run the event day, and close the books. Your workspace, fully private to your business.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Blueprint Stage — 2D Event Layout & Blueprint Builder
An interactive, to-scale 2D drag-and-drop floor-plan builder for events —
political rallies, conferences & expos, weddings & galas, and outdoor festivals.
Drop stages, podiums, seating blocks, barricades, press risers, expo booths and
more onto a scaled floor; drag, rotate, resize, and snap them to a grid; then
save, reopen, and export your layout.
Full-stack: a single-file vanilla-JS front end backed by a zero-dependency
Node REST API that persists layouts to disk.
The event management platform (what each phase added)Read the full README ↗An interactive, to-scale 2D drag-and-drop floor-plan builder for events — political rallies, conferences & expos, weddings & galas, and outdoor festivals. Drop stages, podiums, seating blocks, barricades, press risers, expo booths and more onto a scaled floor; drag, rotate, resize, and snap them to a grid; then save, reopen, and export your layout.
Full-stack: a single-file vanilla-JS front end backed by a zero-dependency Node REST API that persists layouts to disk.
Blueprint Stage began as a floor-plan builder. It now runs a full event workflow on top of the same app, backed by Supabase. Everything for one event lives on one calm page so the user is never overwhelmed. Here is what each phase added, in plain words.
Phase 1 — Event Workspace. One page per event (event.html?id=). It
shows the event details, a step-by-step lifecycle bar, and a card for each
tool (floor plan, quote, approval, tasks). All the numbers are read live
from the database. The Advance button saves the current step.
Phase 2 — Leads & pipeline. A CRM board. Add a lead, drag it between columns, undo / redo, click a card to view / edit / delete, and Convert a lead into a real event. Changes save to Supabase and update live for everyone viewing.
Phase 2b — CRM archive. Every lead is automatically copied to a safe archive on create, edit, convert and delete. The copy stays even if the lead is deleted. See it on the CRM archive page. It is read-only.
Phase 3 — Discovery & requirements. For each event, record the discovery meeting (date, mode, notes), a budget range, and a list of requested services tagged Must-have / Optional / Nice-to-have. The Workspace shows this next to the Quote card, so you price from real needs.
Phase 4 — Proposal & mood-board. Build a concept page for the client: theme, colour palette, reference images, and what's included. Click Publish to get a private link the client opens with no login. Unpublished proposals cannot be opened. There is also an internal risk checklist (never shown to the client).
Phase 5 — MVP checkpoint. Polished and tested the whole path from lead to workspace. A converted lead now opens on the Discovery step so the flow reads naturally. This completes the working MVP.
Phase 6 — In-house staff directory (start of Resource Management). A Staff page where you keep your own team: name, role, department, skills, employment type, phone/email and an optional day rate. Search and filter by department or skill, and mark people active/inactive. The idea: plan your in-house people first, and only reach for outside vendors or freelancers for the gaps.
Phase 7 — In-house inventory. An Inventory page listing what you own (name, category, quantity, unit). For each item it shows Total, Committed (held for events) and Available (what's left). On an event's Workspace, open Inventory & resources to reserve stock for that event, then move each hold Reserved → Allocated → Returned as it goes out and comes back. Availability updates automatically so you never double-book.
Phase 8 — Resource plan (needs + capability check). On an event, open Resource plan and list what it needs — Staff (a skill + how many), Inventory (an item + quantity), or Other. The app auto-checks each need against your in-house staff (by skill) and stock (by availability) and labels it ✓ In-house or ⚠ Gap (with how many short). A summary shows needs · covered · gaps, so you instantly see what to outsource. "Pull from discovery requirements" seeds the list from what you captured earlier, and you can mark a gap Outsourced once a vendor/freelancer will cover it.
Phase 9 — Vendors, freelancers, rentals & procurement. A Vendors page for your outside partners, each tagged Vendor / Freelancer / Rental / Supplier, with services, contact and notes (filter by type, search by service). On an event's Resource plan, every gap now has a Book partner button: pick a partner, enter cost, advance and whether the contract is signed, and set the status (Enquiry → Booked → Confirmed → Delivered). Booking a partner against a gap automatically marks that need Outsourced, so the plan always shows what's still open.
Phase 10 — Resource calendar (Block B checkpoint). One Calendar page that lays out every event by date and shows what's committed to each — staff, stock and partners — in one place. It automatically flags conflicts: the same stock item over-committed on a date, or the same vendor or staff member double-booked across two events on the same day. Events get an Event date (set on the workspace or carried from the lead); any without one are listed separately so you can add it. This closes Block B — a planner can resource an event fully and see clashes before they happen.
Phase 11 — Run-sheet (event-day schedule) (start of Planning). On an event, open Run-sheet to build the minute-by-minute plan for the day: each row is a start time, how long it takes, the activity, who owns it and where. Rows auto-sort by time and show their end time, the header shows the day's window (first start → last end), and a Print button gives you a clean sheet to hand to the crew. (Task deadlines and dependencies use the scheduling fields already on tasks.)
Phase 12 — Budget vs. actuals + change orders. On an event, open Budget & margin. Add cost lines (internal / vendor / other) with an estimated and later an actual amount — or import vendor bookings as cost lines in one click. Four tiles show revenue (the quote), estimated cost, actual cost and your margin (with %). Raise change requests — a priced scope change with what you'll charge the client and the extra cost; approve one and it rolls into the budget automatically.
Phase 13 — Venue, menu lock & approvals. On an event, open Venue & menu. Capture the venue (name, address, contact, access/load-in notes), with a link straight to the floor layout. Record the agreed menu & package and Lock it — locked fields turn read-only, so later changes go through a change order (Phase 12). The page also shows a live client-approval summary (status + consent/payment history) pulled from the existing OTP/consent flow.
Phase 14 — Logistics, permits, guests, comms & payments. One Logistics & payments page with tabs: Guests (headcount by group, with a running total), Logistics (transport/movements checklist), Permits (compliance checklist), Comms (who tells whom, when), and Payments (the milestone schedule — label, due date, amount, status, with a Remind button that goes through the notification outbox, and a Scheduled / Paid / Outstanding total).
Phase 15 — Event Ready checkpoint. One readiness gate that checks the whole event at a glance: event date set, client approved, menu locked, resources covered (no gaps), vendors confirmed, staff assigned, run-sheet built, advance received, plus dry-run and team-brief sign-offs. Each failing check has a Fix → link to the right page. When every critical check is green the banner turns Event Ready and you can Mark Event Ready (advances the lifecycle). This closes Block C — an event is provably ready before the day.
Phase 16 — Event-day command center (start of event-day & post-event). A live day view: a dark banner with the venue/access and quick links to the run-sheet and floor plan; an Arrivals & attendance panel (mark each person Arrived / No-show, with a running "here" count) that you pull straight from the crew assigned and the vendors booked; and a Setup & technical checks panel (mark each Done / Issue). Everything saves live so the whole team sees the same picture on the day.
Phase 17 — Live coordination & issues. A Live issues log with two tabs: Issues (operational problems) and Incidents (safety). Log one with a title, severity (low/medium/high) and owner, then move it Open → In progress → Resolved — each keeps its timestamps for the record afterwards. An open-count shows at a glance, a Raise a billable change → link jumps to the budget's change-order flow for in-event scope changes, and it's linked from the command center banner.
Phase 18 — Teardown & returns. After the event, one page to close it out: In-house inventory returns — mark each reserved item Returned (which frees it for other events) and enter any damaged/lost quantity, which comes off what you own; Vendor & rental exit — mark each partner returned/off-site; and a Teardown & venue handover checklist (dismantle, clear, hand back, verify). Progress counters show what's left to close.
Phase 19 — Settlement & billing. The final money page. Four tiles: invoice total (quote + approved change orders), received, balance due, and final margin. A client invoice breakdown with a "record a payment received" box; vendor settlement (cost / advance / outstanding, with a Settle button and total owed); and staff expense claims (add → approve → mark paid, with totals). Reuses the budget, payment milestones and vendor bookings — it's the one place to close out the client, the vendors and the crew.
Phase 20 — Closure, feedback, P&L & archive (final checkpoint). One page to finish an event: a Profit & loss (revenue − delivery cost − expenses = profit, with margin %); client feedback with a star rating, a quotable testimonial and a media-consent tick; lessons learned; quick ratings for vendors & staff; a CRM follow-up link; and Mark event closed & archived, which moves the event to Closed. This completes the 20-phase build: lead → discovery → proposal → quote → confirm → plan → resource → ready → event day → settle → close.
After building all 20 phases, the whole app was tested end-to-end with two full
(testing) events. Two issues were fixed:
REMINDERS.md for later.)All of this is stored in Supabase. See the Database deployment section below for the one canonical way to stand up or upgrade the schema.
A fresh install (or a verifiable upgrade) comes from exactly three things:
supabase/canonical-base/base-v1-2026-09-25.sql — the frozen baseline
schema (RLS, RPC, Storage policies) as of 2026-09-25. This file is
immutable; never edit it in place (CI enforces this — see below).supabase/migrations/MANIFEST — the ordered list of forward migrations
applied on top of the baseline. New schema changes are added only as new
numbered forward migrations appended here, never by editing the baseline.scripts/db-migrate.sh — the runner that applies the baseline and then
each migration in MANIFEST, in order.Verify the result locally on PG17 with:
npm run test:db
Full procedure, preconditions, and rollback notes: docs/CANONICAL-DEPLOYMENT.md.
To change the schema: add a new numbered forward migration (and append it to
MANIFEST). If a hard break is unavoidable, cut a new baseline (base-v2)
rather than modifying base-v1.
The following are retained for forensic/history purposes only. They are not a supported deploy path and must not be used to provision or upgrade any environment:
supabase/full-schema/ (including supabase/full-schema/complete-setup.sql
— explicitly deprecated: re-running it reverts tenant isolation and
other security-critical hardening)supabase/phaseNN-name.sql scriptssupabase/wave*/ (wave5, wave6, wave9, wave10, wave15b, wave16, …)supabase/security-fix/supabase/prod-fix/supabase/harden-2026-10/Each surface deploys independently and never carries another's artifacts:
supabase/test-harness/ shim and
tests/db/. These exist for verification on a developer/CI machine and are
never deployed to any hosted environment.cd "2d view"
npm start
# → Blueprint Stage running → http://localhost:4173
Open http://localhost:4173. No npm install needed — the server uses only
Node's standard library (Node 18+).
Set a different port with PORT=8080 npm start.
Canvas & scale
FIT, and ⌘/Ctrl-scroll), pan, and a live status bar.Objects — every item carries { id, type, category, x, y, width, height, rotation, label, color, properties }
Shift+arrows nudge ×5, R rotates, D duplicates, Del removes, Esc deselects.Templates — 12 one-click layouts, grouped by event type (3 subtypes each):
✨ Custom Event builder — a header button opens a form (event type, expected guests, seats per table, aisle width, bars, food trucks, expo booths, restrooms, exits, plus toggles for stage / canopy / dance floor / head table / buffet / lounge / press / fence — everything optional). It procedurally generates 3 tailored layout variants as cards, each showing all counts (chairs, tables, booths, bars, exits, objects); click one to drop it on the floor. Deterministic — no external AI, works offline. The guest count drives the number of tables/seat rows, and every count is preserved and shown.
Live counts — the status bar always shows total seats and tables; the generator cards show a full count breakdown.
Capacity & congestion — set the venue's max capacity in the header and the meter shows seats-placed vs the limit (green → amber near 90% → red over 100%), with a warning banner. Seating blocks whose chair spacing drops below a comfortable gap are flagged congested — chairs tint amber (tight) then red (packed) in both 2D and 3D — so you can show a client how crowded an over-filled room will actually look.
Equidistant seating — a seating block's Rows / Cols / Spacing keep chairs at a constant gap: changing a count adds/removes chairs and resizes the block instead of squeezing the spacing.
Autosave — after a layout has been saved once (or opened), edits autosave ~2.5 s later (the Save button shows "✓ Saved"). Dense seating blocks are dot-capped in 2D for smooth rendering.
Asset toolbox (36 types) across 6 categories, including LED screens, truss towers, speaker stacks, greenery, carpet/aisle runners, coat check, first aid, and parking zones — with richer 3D models (stages now carry an LED backdrop, truss rig and stairs) under ACES-tone-mapped lighting.
Asset toolbox (28 types across 6 categories): stage, dance floor, canopy, arch, tent · chair row, seating block, round table, banquet table, head table, cocktail highboy, lounge · podium, press riser, DJ booth, photo booth · barricade, fence, checkpoint · expo booth, reg desk, food truck, bar, buffet, gift table, cake table, restrooms · exit zone. Seat-bearing items (blocks, rows, banquet/head/cocktail tables) render real individual chairs in 3D.
3D rendered view
G / T / Y) lets you drag, rotate (yaw), and resize the selected object on the floor plane; changes snap to the grid and write straight back to the 2D plan, inspector, and counts.Persistence & export
localStorage if the server is offline — the badge in the header shows Server vs Local)./ — landing page. A hero with ✨ Generate a layout (creates a new event, auto-named MMDDYYYY-NN — e.g. 09142026-01 for the first event on 2026-09-14) and a Your events grid to reopen or delete saved layouts. The storage badge shows where events live (Supabase / Server / This browser)./builder.html — the builder. Opened from the landing page:
builder.html?event=<name>&new=1 → a fresh canvas pre-named with the generated date-name.builder.html?id=<id> → opens a saved event.Persistence is centralised in public/store-api.js (BPStore), chosen once at startup with graceful fallback:
public/config.js has a url + anonKey./api/layouts (this server, data/layouts.json).To turn on Supabase (later, with your own credentials):
supabase/schema.sql in the Supabase SQL editor (creates the layouts table + RLS policy + updated_at trigger).public/config.js.That's it — both the landing page and the builder switch to Supabase automatically (the client library is loaded from CDN only when configured). No code changes needed. Until then everything runs on the Node backend / localStorage.
config.jsships with empty credentials. If you put real keys in it, decide whether to keep it out of version control.
Base URL: /api
| Method | Path | Body | Result |
|---|---|---|---|
GET | /api/health | — | { ok:true } |
GET | /api/layouts | — | array of { id, name, updatedAt, objectCount } |
GET | /api/layouts/:id | — | full layout { id, name, createdAt, updatedAt, data } |
POST | /api/layouts | { name, data } | created layout (data.items required) |
PUT | /api/layouts/:id | { name?, data } | updated layout |
DELETE | /api/layouts/:id | — | { ok:true } |
data is the builder's serialized envelope: { items:[…], grid:{…}, scale:{…}, savedAt }.
Layouts are stored in data/layouts.json (created on first save; git-ignored).
Example:
curl -X POST http://localhost:4173/api/layouts \
-H 'Content-Type: application/json' \
-d '{"name":"My Rally","data":{"items":[]}}'
2d view/
├── server.js # zero-dependency Node dev server + REST API (not used on Vercel)
├── package.json # "helm"; only runtime dep is @supabase/supabase-js for server/jobs/
├── public/
│ └── index.html # the entire single-file builder (HTML + CSS + JS)
├── data/ # layouts.json persistence (git-ignored, auto-created)
└── .claude/launch.json
public/ on Vercel (vercel.json); server.js is local dev only.same-origin, CSP) are defined in vercel.json and
mirrored in server.js and public/_headers (Netlify/Cloudflare only).
test/headers-parity.test.mjs (part of npm test) fails if they drift. Base CSP: images/media only
from self + Supabase Storage; https: images are allowed only on pages that render user-pasted URLs
(portal, proposal, proposal-view, media, invite-studio, invite / /i/*), external music only on
invite + invite-studio, and cdn.jsdelivr.net only on /builder (three.js example modules).
script-src 'unsafe-inline' is a known gap until the hash-based CSP phase.no-cache; .js/.css/.png/.webp/.svg/.woff2 and /vendor/* immutable (pages must
reference assets with ?v=); config.js 5 min; unversioned icons/og/docs screenshots 1 h./, /about, /services, /privacy, /terms are indexable (and in
sitemap.xml). Every other page, /i/*, /docs/* and /.well-known/* get
X-Robots-Tag: noindex, nofollow, noarchive; robots.txt disallows app/token/docs paths and gives
AI crawlers marketing pages only. llms.txt summarises the product. New pages are noindex by
default in server.js, but must be added to the lists in vercel.json / _headers — the parity
test fails until they are..gitleaks.toml allowlists only the two exact committed anon keys and now also
blocks human passwords (password: <word>, plaintext .sql seed passwords,
shared/default-password tables, email+password pairings) — not just key-shaped secrets.
gitleaks runs on every push/PR (.github/workflows/secret-scan.yml, a required gate) and weekly
over all history. Enable the local pre-commit block with git config core.hooksPath .githooks.
Never commit a real or shared password, even in docs — see docs/security/SECRETS-AND-CREDENTIALS.md.
scripts/check-jwt-roles.mjs (in ) fails on any non-anon / JWT.npm run ciservice_rolelighthouserc.json, .github/workflows/lighthouse.yml) is blocking on
performance, accessibility, FCP, LCP, TBT and CLS for /, /login and /builder.docs/BLUEPRINT-STAGE-GUIDE*.html, docs/MVP-PHASE1-GUIDE.html) are kept out of
the deploy. The user manual source is docs/manual/ (not deployed); it is served only to
signed-in users from the private helm-manual storage bucket via /manual (migration 0031).