Lalabase
티켓·문서·근무시간·고객대화를 한 곳에 모아 KI로 검색, 소프트웨어 기업 고객 프로젝트용, 오픈소스로 자체 서버·독일 클라우드에 배포
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A website to track school carpool to efficiently and effectively coordinate student dismissal.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A small internal web app for a school's carpool pickup line. Someone outside
speaks a student's last name into a phone; after a one-tap confirmation the
student flips from waiting (red) to arrived (green) on a big screen
inside, with a flash and a chime.
• /announce — outside, on a phone or tablet. Push-to-talk, confirm the
matched name, or search the roster by hand. PIN-protected.
• /display — inside, on the big screen. Live red/green grid. No login.
• /admin — roster management and the daily reset. PIN-protected.README 전문 보기 ↗A small internal web app for a school's carpool pickup line. Someone outside speaks a student's last name into a phone; after a one-tap confirmation the student flips from waiting (red) to arrived (green) on a big screen inside, with a flash and a chime.
Three screens:
/announce — outside, on a phone or tablet. The search box and the
push-to-talk button share one row at the bottom of the screen, so the
matches get the space in between. Hold to talk and confirm the
matched name, or search the roster by hand: suggestions appear as you
type a first name, last name, nickname or carpool name (matched in the
browser, no request per keystroke), and Search adds fuzzy, sound-alike
matching for misspellings. The class filter in the header takes any
number of classes, and a button per class down the right edge opens a
drawer of that class's students to tap and announce without speaking or
typing. Between calls, the screen lists the last few names announced from
that device, each with "Send back" to undo a wrong tap. PIN-protected./display — inside, on the big screen. Live blue (waiting) / white (arrived) grid, grouped by class. A student in several classes appears under each one. Optionally reads each arrival's name aloud after the chime ("Read names" in the header; free, uses the browser's built-in voice). No login./admin — roster management, the class list, and a manual "Reset all to waiting". PIN-protected.A student can be in any number of classes (or none). Classes are their own
admin-editable list (/admin > Classes: add, reorder, delete, see member
counts), and membership is its own table, student_classes, rather than a
column on the student. To put a whole group in a class, open the class's
Students sheet; to move a handful, select them in the roster table and use
Add to class / Remove from class. Deleting a class that would leave some
students with no class asks first: move everyone to another class, delete
anyway, or cancel.
CSV import columns: first_name, last_name, optional aliases, and the
classes in a class_groups column (classes also works). Put several classes
in one cell separated by a semicolon, for example 1st;2nd. A class that does
not exist yet is an error on that row, not a new class: add it under Classes
first, then import.
The board also clears itself: a pg_cron job in Supabase sends every arrived
student back to waiting at 8:00 PM Pacific, Sunday through Thursday (Friday and Saturday
nights are skipped). It runs inside the database, so it works even if Vercel or
the Edge Functions are down. See supabase/migrations/20261011120000_nightly_board_reset.sql and 20261011130000_nightly_reset_skip_friday.sql.
Note: this README is the developer setup guide. A separate day-to-day guide written for school staff lands in phase 7.
Next.js 14 (App Router) + TypeScript + Tailwind on Vercel · Supabase Postgres, Realtime, and Edge Functions · Deepgram Nova-3 streaming with Keyterm Prompting.
See CLAUDE.md for the full architecture, conventions, and phase checklist.
The site is an installable PWA, so staff can keep it on a phone's home screen
instead of using an app store. The landing page (/) shows an "add to home
screen" card at the bottom, on phones and tablets only:
The card stays away once the app is installed, and for two weeks after Not
now (remembered per device in localStorage).
What makes it installable: src/app/manifest.ts (name, colours, icons, a
long-press shortcut per screen), the icons in public/icons/ (regenerate with
node scripts/generate-icons.mjs), and public/sw.js, registered in production
only. The service worker caches nothing — it exists because Chrome requires
one to offer the install prompt, and to show a "No connection" page instead of
the browser's error. Live data and Edge Function calls always go straight to the
network, so an installed copy can never show a stale board.
npm install
cp .env.example .env.local # then fill in the values
npm run dev
Set NEXT_PUBLIC_MOCK_SPEECH=true in .env.local to develop against faked
speech recognition so you don't burn Deepgram credits.
For the local Supabase stack (needs Docker):
npx supabase start
npx supabase db reset
npm run seed
| Command | What it does |
|---|---|
npm run dev | Dev server on http://localhost:3000 |
npm run build | Production build |
npm run lint | ESLint |
npm run typecheck | tsc --noEmit |
npm test | Vitest |
npm run seed | Load the sample dev roster |
npm run format | Prettier |
.env.local is gitignored and never committed. .env.example lists variable
names only. The Deepgram key, the Supabase service-role key, and the staff PIN
are server-side only — they live in Supabase and Vercel project settings and
never appear in the client bundle.
Phase 1 (scaffold) complete. Phases 2–7 — data layer, Edge Function and matching, the three pages, polish — are tracked in CLAUDE.md.