Fields & Floors Collectors
eBay에서 번호가 매겨진 스포츠 카드들을 인쇄본·사인·신인 여부·가격으로 검색하고, 검색을 저장해 새 카드가 등록되면 이메일 알림을 받는다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Lompoc Deals
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A local promotions feed for Lompoc, California. Businesses post coupons, specials, and announcements; locals browse a feed, search by category, view a map, and optionally subscribe to a weekly email digest.
• Next.js 14 (App Router, TypeScript)
• Tailwind CSS + shadcn/ui components
• Postgres via Neon (@neondatabase/serverless)
• Drizzle ORM for schema and migrations
• Auth.js v5 (NextAuth) with email/password + bcrypt
• Leaflet + react-leaflet for the map (OpenStreetMap tiles, no API key)
• Resend for transactional and digest emails
• Vercel Blob for image uploads
• Hosted on VercelREADME 전문 보기 ↗A local promotions feed for Lompoc, California. Businesses post coupons, specials, and announcements; locals browse a feed, search by category, view a map, and optionally subscribe to a weekly email digest.
@neondatabase/serverless)git clone <your-repo-url> lompoc-deals
cd lompoc-deals
npm install
Copy .env.example to .env.local and fill in:
DATABASE_URL=postgresql://... # from Neon
AUTH_SECRET=... # openssl rand -base64 32
AUTH_URL=http://localhost:3000 # in prod: https://yourdomain.com
RESEND_API_KEY=re_... # from Resend
BLOB_READ_WRITE_TOKEN=vercel_blob_rw_... # from Vercel Blob
CRON_SECRET=... # openssl rand -base64 32
Generate the two secrets locally:
openssl rand -base64 32 # AUTH_SECRET
openssl rand -base64 32 # CRON_SECRET
npm run db:generate # generates SQL migrations from db/schema.ts
npm run db:migrate # applies migrations to DATABASE_URL
npm run db:seed # 7 categories, 5 sample businesses, 10 sample deals
npm run db:studio # browse data in a local Drizzle Studio UI
npm run dev
Visit http://localhost:3000.
After running npm run db:seed, you can sign in with:
| Role | Password | |
|---|---|---|
| Business owner | [email protected] | password123 |
app/
(public)/ ← homepage feed, biz profiles, categories, search, map, subscribe, favorites
(auth)/ ← login, signup
dashboard/ ← gated business dashboard (profile, deals CRUD, stats)
admin/ ← gated admin (approve businesses, soft-delete deals)
api/
auth/ ← NextAuth route handler
cron/digest/ ← weekly digest cron, bearer-protected
track/click/ ← click-tracking redirect
components/ ← reusable UI (DealCard, SiteHeader, etc.) + shadcn/ui primitives
db/
schema.ts ← Drizzle schema
client.ts ← Drizzle + Neon HTTP client
seed.ts ← seed script
migrations/ ← generated SQL
lib/
auth-actions.ts ← signup, login, logout
biz-actions.ts ← business dashboard server actions
admin-actions.ts ← admin server actions
favorite-actions.ts ← local user favorite toggle
subscribe-actions.ts ← email digest subscribe / confirm / unsubscribe
queries.ts ← read-side query helpers
viewer.ts ← unified session/role/favorites lookup
email.ts ← Resend wrappers
blob.ts ← Vercel Blob upload helper
geocode.ts ← Nominatim address → lat/lng
tracking.ts ← view + click counters
auth.ts ← Auth.js v5 config
middleware.ts ← gates /dashboard/* and /admin/*
docs/
build-plan.md ← original spec
Push to GitHub:
gh repo create lompoc-deals --private --source=. --push
Import to Vercel: https://vercel.com/new → pick the repo → Deploy
Add environment variables in Vercel → Project → Settings → Environment Variables. Same six vars as .env.local. Set AUTH_URL to your production URL (e.g. https://www.lompoclocals.com).
Run migrations against the production DB before first deploy:
DATABASE_URL=<prod-url> npm run db:migrate
DATABASE_URL=<prod-url> npm run db:seed # only if you want sample data in prod
Cron job: vercel.json declares a weekly cron at Saturday 9am UTC hitting /api/cron/digest. Vercel registers it on first deploy. Verify at Vercel → Project → Settings → Cron Jobs.
Custom domain: Vercel → Domains → add your domain. In your DNS provider, add the A record (@ → 76.76.21.21) and CNAME (www → cname.vercel-dns.com) Vercel shows you. Wait a few minutes for SSL.
After domain is live: update AUTH_URL env var in Vercel to https://yourdomain.com and redeploy.
The /api/cron/digest route is protected by an Authorization: Bearer <CRON_SECRET> header. Vercel automatically sends this header with the value of your CRON_SECRET env var when its scheduler hits the route. Without the bearer header, the route returns 401.
To trigger the cron manually for testing:
CRON=$(grep '^CRON_SECRET=' .env.local | cut -d= -f2-)
curl -H "Authorization: Bearer $CRON" http://localhost:3000/api/cron/digest
| Script | Purpose |
|---|---|
npm run dev | Start dev server on port 3000 |
npm run build | Production build |
npm run start | Start production build |
npm run lint | ESLint |
npm run db:generate | Generate SQL migrations from db/schema.ts |
npm run db:migrate | Apply migrations to DATABASE_URL |
npm run db:push | Push schema directly (interactive) |
npm run db:studio | Open Drizzle Studio |
npm run db:seed | Run the seed script |
Private project. All rights reserved.