Made in ~19 hours at the HackUSU hackathon, 02/27-28/2026
@Spencer1O1 · @bell-kevin · @StevenChristensen444 · @dillanhart
Venturai is a cross-platform asset assessment and maintenance coordination system that helps teams capture equipment condition in the field, route findings into actionable work items, and monitor operational risk in a shared dashboard. The platform combines guided inspections, role-based workflows, and AI-assisted analysis so inspectors, operators, and maintainers can move from reported issues to tracked remediation with a consistent audit trail.
Technical details: the monorepo uses pnpm + Turborepo with TypeScript across an Expo mobile app, a Next.js web dashboard, and a Convex backend; inspection submissions can include photo evidence and structured questionnaire inputs, while backend functions validate AI outputs and update persistent asset/work-item records.
- pnpm + Turborepo
- Expo (Expo Router) mobile app
- Next.js web dashboard
- Convex backend (auth, DB, serverless functions, storage)
- Biome formatter/linter
- TypeScript everywhere
Dashboard (risk overview, asset list, work items):
| Dashboard | Asset / CNC Router | Work items |
|---|---|---|
![]() |
![]() |
![]() |
Mobile app (home, public asset view, private inspection):
| App home | Public asset view | Private view |
|---|---|---|
![]() |
![]() |
![]() |
Videos (may render inline on GitHub; otherwise open the links to play):
| App walkthrough Download app.mp4 |
NFC scan Download scan.mp4 |
- Node.js 18+ (LTS recommended)
- pnpm (via
corepack enablebelow) - Convex account (free at convex.dev)
- For mobile: Android Studio and/or Xcode (for device/simulator)
git clone <repo-url>
cd venturai
corepack enable
pnpm installCreate a Convex project and get your deployment URL:
pnpm dev:backendOn first run, Convex CLI will prompt you to log in and create or link a project. When it’s running, it will print a URL like https://xxxxx.convex.cloud. Leave this running in a terminal (or stop it after you’ve copied the URL).
Copy the example env file and set the Convex URL in one place (repo root):
cp .env.example .env.localEdit .env.local in the repo root and set the same Convex URL for all three variables (no spaces around =):
CONVEX_URL=https://your-deployment.convex.cloud
NEXT_PUBLIC_CONVEX_URL=https://your-deployment.convex.cloud
EXPO_PUBLIC_CONVEX_URL=https://your-deployment.convex.cloud- CONVEX_URL – used by the Convex CLI and seed script.
- NEXT_PUBLIC_CONVEX_URL – used by the Next.js dashboard.
- EXPO_PUBLIC_CONVEX_URL – used by the Expo mobile app.
A postinstall script symlinks (or copies) root .env.local into apps/web, apps/expo, and backend. If you add or change vars later, run pnpm install from the repo root so packages pick up the file again.
The Idea Factory seed uses AI to evaluate inspection photos. Add your OpenAI API key in Convex:
- Open the Convex dashboard, select your project.
- Go to Settings → Environment Variables.
- Add OPENAI_API_KEY with your key (required for
pnpm run seed:idea-factory).
Seed creates the USU Idea Factory org, assets, a seed user [email protected] / password, and runs real AI assessments on bundled photos.
From the repo root:
pnpm run seed:idea-factoryRequirements:
- CONVEX_URL in root (or
backend).env.local(step 3). - OPENAI_API_KEY set in Convex (step 4).
- Backend deployed (e.g. run
pnpm dev:backendonce so Convex has the latest functions).
Seed images are under data/usu/idea_factory/ in the repo; the script uploads them and runs assessments. After seeding you can sign in on the dashboard or mobile as [email protected] / password and see the Idea Factory org and assets.
To re-seed from a clean slate: in the Convex dashboard run the mutation seed:clearIdeaFactorySeed (with optional orgName: "USU Idea Factory"), then run pnpm run seed:idea-factory again.
From repo root:
pnpm dev- Backend: Convex dev server (functions, schema, sync).
- Web: Next.js dashboard (e.g. http://localhost:3000).
- Expo: Metro bundler; press
wfor web,afor Android,ifor iOS.
pnpm dev:backend # Convex (keep running while using app)
pnpm dev:web # Next.js dashboard
pnpm dev:expo # Expo (then choose platform)pnpm dev:expo
# then: a (Android) or i (iOS)
# or:
pnpm dev:android
pnpm dev:iosEnsure EXPO_PUBLIC_CONVEX_URL is set in .env.local (same as CONVEX_URL) so the app talks to your Convex deployment.
| Command | Description |
|---|---|
pnpm dev |
Run backend + web + Expo together (no nfc) |
| pnpm dev:backend | Convex dev server |
| pnpm dev:web | Next.js dashboard |
| pnpm dev:expo | Expo (Metro) |
| pnpm expo:prebuild Prebuilds native folders |
| pnpm dev:android | Run expo dev client for android (with nfc, requires prebuild) |
| pnpm run seed:idea-factory | Seed Idea Factory org, user, and AI assessments |
| pnpm lint | Lint all packages |
| pnpm format | Format with Biome |
| pnpm typecheck | Type-check all packages |
| pnpm build | Build all packages |
| pnpm test | Run tests |
| pnpm clean | Remove node_modules, .turbo, build caches |
venturai/
├── apps/
│ ├── expo/ # Mobile app (Expo Router)
│ └── web/ # Next.js dashboard
├── backend/ # Convex (schema, functions, auth, seed)
│ ├── convex/
│ └── scripts/
├── data/ # Seed images (e.g. data/usu/idea_factory/...)
├── scripts/ # Shared scripts (e.g. symlink-env.js)
├── tooling/
├── .env.example
├── .env.local # Your env (create from .env.example)
└── package.json
Environment: one .env.local at the repo root (see step 3); it is symlinked into apps and backend so Convex URL and other vars are shared.





