Anonymous Santa Clauses
Draw names for Secret Santa with friends, family or the office. Free, no ads, no passwords: sign in with a magic link, share a code, roll the dice.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Tracking AJ's road coffee orders
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗A beautiful web app for tracking coffee shop visits during basketball road trips. Rate the vibe, rate the coffee, and keep track of all your caffeinated adventures!
🚀 Live at: coffee.erikrole.com
Deploying to Cloudflare? See DEPLOYMENT.md for complete instructions on deploying to Cloudflare Pages with D1 database.
git clone <your-repo-url>
cd vibes-and-grinds
cd backend
npm install
cp .env.example .env
# Edit .env if needed (default port is 3001)
npm start
The backend will:
http://localhost:3001vibes-and-grinds.db)cd frontend
npm install
cp .env.example .env
Important: Edit frontend/.env and add your Google Maps API key:
VITE_API_URL=http://localhost:3001
Then in the project root .env (for the backend), add:
GOOGLE_MAPS_API_KEY=your_actual_api_key_here
NET_RANKINGS_URL=https://big-ten-standings.erikrole.workers.dev # optional override
If you want the frontend to call your worker directly instead of the API proxy, you can also set:
VITE_NET_RANKINGS_URL=https://big-ten-standings.erikrole.workers.dev # optional direct browser override
The vest tracker accepts either a dedicated NET rankings payload, your Big Ten standings worker shape ({ standings: [{ team, netRank, ... }] }), or a full D1 map shape ({ netRankings: { "DUKE": 1, ... } }). If no env var is set on the API, it defaults to https://www.warrennolan.com/basketball/2026/net and parses all teams from HTML.
Vest games now sync via /api/vest/games backed by DB storage (instead of device-only localStorage), so updates on one device can appear on another once both are online.
If using Cloudflare D1, re-run migrations/schema apply so vest_games exists.
Visits also carry a visit_type column (road or home) so Madison stops can be tracked separately from road trips. Existing D1 databases need a one-time column add — see Madison Coffee Shops.
Then start the development server:
npm run dev
The frontend will open at http://localhost:3000
Everyday stops around Madison live in the same journal as road trips, tagged visit_type = 'home':
Madison, WI.{season} review link all cover road trips only — a season is a road season. Everywhere else (visit list, hero totals, search, map, insights, badges) counts every visit, Madison included.Existing databases need the column added once. Locally this happens automatically on server start; for D1:
wrangler d1 execute vibes-and-grinds-db --remote \
--command "ALTER TABLE coffee_visits ADD COLUMN visit_type TEXT DEFAULT 'road'"
SQLite backfills existing rows with 'road', so past visits stay road trips.
GET /api/visits - Get all visitsGET /api/visits/:id - Get a single visitPOST /api/visits - Create a new visitPUT /api/visits/:id - Update a visitDELETE /api/visits/:id - Delete a visitGET /api/stats - Get dashboard statisticsvibes-and-grinds/
├── backend/
│ ├── server.js # Express server
│ ├── database.js # Database initialization
│ ├── package.json
│ └── .env.example
├── frontend/
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── utils/ # Helper functions
│ │ ├── App.jsx # Main app component
│ │ ├── main.jsx # Entry point
│ │ └── index.css # Tailwind styles
│ ├── index.html
│ ├── package.json
│ └── .env.example
└── README.md
See also PRODUCT_PLAN.md for v1/v2 scope and roadmap.
npm run dev # Start with nodemon (auto-reload)
npm start # Start production server
npm run dev # Start development server
npm run build # Build for production
npm run preview # Preview production build
GOOGLE_MAPS_API_KEY (and optionally VITE_GOOGLE_MAPS_API_KEY for legacy frontend usage)cd frontend && npm install && npm run buildfrontend/distbackend folderPORT (provided by platform)Autocomplete not working?
GOOGLE_MAPS_API_KEY is set in the backend/root .env (or in Cloudflare Pages env vars).Backend not connecting?
VITE_API_URL in frontend .env matches backend URLDatabase issues?
backend/vibes-and-grinds.db and restart the server to resetFeel free to open issues or submit pull requests!
MIT