Files
krow-demo/README.md
2026-08-07 23:53:15 +05:30

4.7 KiB

KROW Demo

AI-powered hiring for event and hospitality staffing — a standalone demo build of KROW Forge.

Runs with no backend, no API keys, and no login. npm install && npm run dev and the app is fully populated.

npm install
npm run dev

Architecture

Vite + React 18, React Router 6, React Query 5, Tailwind + shadcn/ui, Framer Motion, Recharts.

src/
  api/          data client — entity store, demo dataset, local AI engine
  assets/       brand asset references
  components/
    ui/         50 shadcn primitives (design system)
    krow/       domain components
      talent/   talent-portal components
      proving/  Proving Ground challenge components
  hooks/        shared hooks
  layouts/      Layout — header, nav pill, control bar, mobile sheet
  lib/          data hooks, score engine, AI workflows, auth context, utils
  pages/        18 route components
  utils/        helpers

The backend seam

The production app talks to a Base44 backend through src/api/base44Client.js. This demo keeps that module path, export name, and full method contract, and swaps only the transport:

Contract Demo implementation
base44.entities.<Name>.list/filter/get/create/update/delete api/store.js — in-memory records, mirrored to localStorage
base44.integrations.Core.InvokeLLM api/aiEngine.js — local, deterministic
base44.integrations.Core.UploadFile blob URLs, session-scoped
base44.auth.* seeded employer/admin user, always signed in

Because the seam did not move, everything above it — lib/krowHooks.js, lib/krowAi.js, lib/provingGround.js, lib/krowScore.js, every page and component — is unchanged from the reference implementation.

The AI engine

Every AI workflow in the app funnels through one call, InvokeLLM({ prompt, response_json_schema }). api/aiEngine.js reimplements that function locally. It recognizes each workflow by the phrase its prompt opens with, reads the structured fields the prompt already carries (Years Experience: 6, Required Certifications: …, the talent-pool JSON block), and scores them deterministically.

Nine workflows are implemented: candidate screening, job-description generation, résumé building, interview questions, interview evaluation, talent matching, Owliver's conversation, Career DNA building, and Proving Ground evaluation.

Results respond to the data rather than being canned — screening a 7-year native-English candidate and a 1-year candidate against the same posting returns genuinely different scores, breakdowns, strengths and gaps. The same input always returns the same output.

Owliver

Two assistants share one visual language:

  • OwliverAssistant — the hiring assistant, mounted on Overview, Candidates and Analytics only. Answers from the same React Query caches the pages render from, so what it says and what the dashboard shows can never disagree.
  • OwliverChatBubble — the talent-facing profile builder, mounted in the Talent role.

Demo data

Seeded in src/api/seed.js: 7 positions (5 open), 22 applicants, 9 AI-scored candidates averaging 76, 4 AI interviews, 3 hires, 6 talent-pool profiles, 4 Proving Ground courses, and an activity log.

Edits persist to localStorage — screen candidates, hire someone, create a position, and the numbers move everywhere. To restore the shipped dataset:

// in the browser console
localStorage.removeItem('krow_demo_db'); location.reload();

Bumping STORAGE_VERSION in src/api/store.js invalidates saved snapshots automatically, so changing the seed does not require a manual clear.

Roles

The header role switcher moves between three surfaces, persisted in localStorage:

  • Employer — Overview, Positions, Candidates, Hired History, Talent Pool, Analytics
  • Admin — adds Control Center, KROW Forge, Activity
  • Talent — My Portal, KROW Forge, Opportunities

Design system

Tokens live in src/index.css as HSL CSS variables consumed by tailwind.config.js.

Token Value
Primary — KROW Blue #0A39DF
Accent — KROW Yellow #F9E547
Pale Yellow #F8E08E
Dark Navy #333F48
Mint #D1E0D7
Radius 0.75rem
Headings Sora
Body Inter

The page background is bg-[#F8FAFC] under the gradient-mesh utility — four radial gradients in blue, yellow and mint. Surfaces use glass and glass-card (backdrop blur with saturation).

Scripts

Command Purpose
npm run dev Dev server (honors PORT)
npm run build Production build
npm run preview Serve the build
npm run lint ESLint
npm run lint:fix ESLint with --fix