Fields & Floors Collectors
eBay에서 번호가 매겨진 스포츠 카드들을 인쇄본·사인·신인 여부·가격으로 검색하고, 검색을 저장해 새 카드가 등록되면 이메일 알림을 받는다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A private web app for the family: groceries and pantry inventory today, with
room to grow into a shared calendar, chore charts, recipes, and more.
This README is written for future-you, not just other developers — it explains
why things are set up this way, not just how to run them.
Then open http://localhost:3000. Leave that terminal window running while you
work — it's the "kitchen" that serves the pages, and it reloads automatically
whenever you save a file.
The very first time, if there's no .env file yet:README 전문 보기 ↗A private web app for the family: groceries and pantry inventory today, with room to grow into a shared calendar, chore charts, recipes, and more.
This README is written for future-you, not just other developers — it explains why things are set up this way, not just how to run them.
npm install
npm run dev
Then open http://localhost:3000. Leave that terminal window running while you work — it's the "kitchen" that serves the pages, and it reloads automatically whenever you save a file.
The very first time, if there's no .env file yet:
cp .env.example .env
This just tells the app where its database file lives. It's excluded from git (see "Why some files aren't saved to git" below) so every clone of the project needs its own copy — copying the example is that copy.
| Folder | What it is |
|---|---|
src/app/ | Every page you can visit. layout.tsx at the root wraps the whole app (the app chrome: the side-drawer menu, plus the logo bar on the dashboard and login) |
src/app/actions/ | The functions that change the database (add an item, check something off, etc.) |
src/components/ | Reusable pieces of screen — a row, a stepper, the nav bar |
src/lib/ | Shared plumbing: the database connection, and the list of categories/locations |
prisma/schema.prisma | The one file that describes the shape of our data |
prisma/dev.db | The actual database — a single file, not committed to git (see below) |
A rule this project follows: the list of categories and storage locations
lives in exactly one place, src/lib/constants.ts. Every dropdown, filter, and
heading reads from that list. Want a fifth storage location, or a tenth
category? Add one line there and it shows up everywhere automatically.
src/app/ into an
actual website, and lets a button click run code on the server without us
writing a separate backend.className="text-lg font-bold" instead of a separate stylesheet). Easier to
see cause and effect while learning.prisma/schema.prisma
describes the data once; Prisma generates the code we use to read and write it.prisma/dev.db) with nothing to install or log into. See "Going online"
below for why this will eventually change.Reusable knowledge, not just trivia — this is the kind of thing that saves a rewrite later:
src/lib/constants.ts is what enforces the valid list, in
TypeScript, before anything is saved.Both rules exist for the same reason: today's database is temporary, and the schema is written so switching databases later is a small, boring change instead of a rewrite.
Right now the database is a file on this laptop, and there's no login — anyone who could reach the app could see and change everything. That's fine as long as it only runs here. Two things have to happen before this goes on the internet or the kitchen tablet joins over Wi-Fi:
DATABASE_URL in .env, swap the adapter in src/lib/db.ts,
and run npx prisma migrate deploy once against the new database.npm run dev # start the app for development
npm run build # check that it builds cleanly for real use
npm run build:vercel # what Vercel runs: on a production build, apply any new
# database migrations first, then build (see CLAUDE.md)
npm run lint # check code style / catch likely mistakes
npm run db:seed # wipe and refill the database with sample data
npm run db:studio # opens a visual browser for the database in your browser
npm run db:reset # wipe the database completely and reapply the schema
A private, bearer-token API under /api/assistant/v1/ that Bryce's Home Hub
bot calls to read and update inventory, log leftovers and list the family.
Every call the API accepts is recorded — GET /api/assistant/v1/audit shows
what it did. Calls turned away at the door (wrong token, API switched off,
rate-limited) are deliberately not logged.
npm run assistant:token prints a fresh token and its
hash once and writes nothing. Put the hash in Vercel as
ASSISTANT_API_TOKEN_HASH (Production); paste the token into Home
Hub's secure input. Never commit either.ASSISTANT_API_TOKEN_HASH. With it unset every
assistant route answers 404, as if the API didn't exist.GET /api/assistant/v1/openapi.json (needs the bearer too),
generated from the same schemas the routes validate with.Git (via .gitignore) is deliberately not tracking a few things:
prisma/dev.db — this is data, not code. It changes every time you use
the app, it's personal, and every machine should keep its own copy rather
than sharing one through version control..env — will eventually hold a real database password. Secrets don't
belong in git history, which is effectively permanent and, if this repo is
ever pushed anywhere public, world-readable.node_modules/ and src/generated/prisma/ — both are entirely
regenerated from package.json and schema.prisma by npm install, so
saving them would just be dead weight.Calendar, family profiles, chore charts, recipes, meal planning, photos, habit trackers, sign-in, and putting this on the actual internet. The navigation and folder structure leave room for all of it, but none of it is stubbed out with placeholder pages — better to add each piece when it's actually being built.