Bops
A team of AI bots that runs your business ops: inbox, pipeline, invoices, reports. Each one has its own computer, email and phone number, and remembers everything.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
Nola labfest app
翻訳待ち
Loading the full README. The saved excerpt is shown below.
Progressive Web App for the Nowak Dental Supplies annual trade show (October 2026). Attendees install to their phone home screen — no app store. Features a vendor directory, full schedule, a QR passport game, vendor lead capture, and push notifications.
• Next.js 14 (App Router) + TypeScript
• Tailwind CSS
• PostgreSQL (Neon) + Prisma
• NextAuth (credentials)
• Web Push (VAPID) for notifications — no Firebase
• html5-qrcode (scanning) + qrcode (generating)
Change these passwords before going live.Read the full README ↗Progressive Web App for the Nowak Dental Supplies annual trade show (October 2026). Attendees install to their phone home screen — no app store. Features a vendor directory, full schedule, a QR passport game, vendor lead capture, and push notifications.
html5-qrcode (scanning) + qrcode (generating)# 1. Create a Neon database (neon.tech) and copy connection string
# 2. Copy env template
cp .env.example .env
# 3. Generate auth secret (paste into .env as NEXTAUTH_SECRET)
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
# 4. Generate VAPID keys for push (paste into .env)
npm run gen:vapid
# 5. Install deps and push schema
npm install
npm run db:push
# 6. Seed database (creates admin, sample vendors, sessions)
npm run db:seed
# 7. Run
npm run dev
changeme-adminchangeme-vendorchangeme-attendeeChange these passwords before going live.
| Route | Who | What |
|---|---|---|
/ | everyone | Home tiles + announcements + passport progress |
/login, /register | public | Sign in / self-register as attendee |
/vendors | everyone | Vendor directory with search & category filter |
/vendors/[id] | everyone | Vendor detail + booth QR (admin/owner only) |
/schedule | everyone | Schedule grouped by day |
/schedule/[id] | everyone | Session detail + add-to-agenda |
/agenda | everyone | Personal favorited sessions |
/scan | attendee | Scan a booth QR to earn a stamp |
/badge | attendee | Personal QR badge for vendors to scan |
/game | attendee | Passport progress, stamps grid, leaderboard |
/vendor/scan | vendor | Scan an attendee badge to capture a lead |
/vendor/leads | vendor | Lead list + CSV export |
/admin | admin | Dashboard: stats + top booths |
/admin/vendors | admin | CRUD vendors + print booth QR |
/admin/schedule | admin | CRUD sessions |
/admin/announcements | admin | Send push notifications |
/admin/drawing | admin | Prize drawing (random pick from eligible attendees) |
/admin/users | admin | List users |
/admin/leads | admin | Lead counts per vendor |
Vendor has a private boothToken (UUID). Admin prints the QR code (from the vendor edit page) and posts it at the booth./scan → one BoothScan row per attendee/vendor pair (duplicate scans show "already stamped").src/app/game/page.tsx constant WIN_THRESHOLD).User has a badgeToken (UUID) shown as QR on /badge./vendor/scan → creates a Lead row with the attendee's contact info./vendor/leads.PushPrompt on home page)./admin/announcements — to everyone, attendees only, or vendors only.git init
git add .
git commit -m "Initial commit"
# Create repo on GitHub, then:
git remote add origin https://github.com/<you>/nowak-tradeshow-app.git
git push -u origin main
npm install -g vercel
vercel --prod
Add these environment variables in Vercel (Settings → Environment Variables):
| Key | Value |
|---|---|
DATABASE_URL | Neon connection string (include ?sslmode=require) |
NEXTAUTH_SECRET | from openssl rand -base64 32 |
NEXTAUTH_URL | production URL (e.g. https://nowakshow.vercel.app) |
NEXT_PUBLIC_VAPID_PUBLIC_KEY | from npm run gen:vapid |
VAPID_PRIVATE_KEY | from npm run gen:vapid |
VAPID_SUBJECT | mailto:[email protected] |
After deploy, run once from your local machine against the prod DB:
DATABASE_URL="<prod-url>" npm run db:push
DATABASE_URL="<prod-url>" npm run db:seed
#0057A3 (in globals.css, manifest.json, layout.tsx). Swap this to Nowak's exact blue whenever confirmed.public/icon.svg. Replace it with the Nowak logo and regenerate PNGs:
npm run gen:icons