尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Repo for the suite of apps
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗A shared web app for a household of two — upcoming events, groceries, local places, links worth sharing, a recipe tracker, and a golf course list. Built with Next.js, TypeScript, and Supabase.
Everything is household-shared by design: no table carries a user_id, and RLS grants any authenticated user full access. See PRODUCT.md for who this is for and why.
Read these before adding or changing a feature:
| Doc | What it covers |
|---|---|
| PRODUCT.md | Users, purpose, brand personality, design principles, anti-references |
| DESIGN.md | Visual system — section hues, typography, component vocabulary, motion |
| CONTEXT.md | Domain language: canonical terms, relationships, resolved ambiguities |
| docs/adr/ | Architecture decisions — why the schema looks the way it does |
| RATE_LIMITING.md | Rate limiting setup and Redis configuration |
Each section owns a hue for wayfinding (see DESIGN.md).
yarn import-recipe <url> (idempotent; skips duplicates)git clone https://github.com/dandenney/side-by-side.git
cd side-by-side
yarn install
.env.local in the project root:# Supabase — the browser client reads the PUBLISHABLE key, not "anon"
NEXT_PUBLIC_SUPABASE_URL=your_supabase_project_url
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=your_supabase_publishable_key
# Google Maps — two distinct keys: one server-side for Places lookups,
# one public for rendering the map in the browser
GOOGLE_MAPS_API_SERVER_KEY=your_server_side_key
NEXT_PUBLIC_GOOGLE_MAPS_API_KEY=your_browser_key
# Optional — movie lookup in Shares
OMDB_API_KEY=your_omdb_key
# Optional — elevated access for scripts and server-side uploads.
# NOTE: SUPABASE_SERVICE_ROLE_KEY is a legacy name and does NOT hold a
# service-role key; SUPABASE_SECRET_KEY is the one with elevated access.
SUPABASE_SECRET_KEY=your_supabase_secret_key
# Optional — rate limiting. Without these, an in-memory limiter is used
# (fine for development, not for production). See RATE_LIMITING.md.
REDIS_URL=your_redis_url
Migrations live in supabase/migrations and are ordered by their timestamp prefix.
npm install -g supabase
supabase link --project-ref your-project-ref
supabase db push
Alternatively, paste the migration files into the Supabase SQL editor in filename order.
Two caveats worth knowing:
if not exists, but create policy and create trigger do not, so re-running a migration will error on the policies.Start the development server:
yarn dev
The application will be available at http://localhost:3000. The dev server binds to 0.0.0.0, so it is reachable from a phone on the same network — worth doing, since mobile is the primary context.
yarn dev - Start development serveryarn build - Build for productionyarn start - Start production serveryarn lint - Run ESLintyarn test - Run testsyarn test:watch - Run tests in watch modeyarn test:coverage - Run tests with coverage reportyarn import-recipe <recime-url> [--dry-run] - Import one recipe from a ReciMe share URL (needs SUPABASE_SECRET_KEY)side-by-side/
├── src/
│ ├── app/ # Next.js app router pages
│ │ ├── api/ # API routes
│ │ ├── golf/ # Golf courses & rounds
│ │ ├── groceries/ # Groceries page
│ │ ├── local/ # Local places page
│ │ ├── recipes/ # Recipe tracker
│ │ ├── shares/ # Shares page
│ │ ├── upcoming/ # Upcoming events page
│ │ ├── globals.css # Design tokens & section hues
│ │ └── layout.tsx # Root layout
│ ├── components/ # React components
│ │ └── ui/ # UI component primitives
│ ├── contexts/ # React contexts
│ ├── lib/ # Utility functions
│ │ ├── supabase/ # Supabase client & helpers
│ │ └── google/ # Google Maps / Places integration
│ ├── services/ # Business logic services
│ ├── types/ # TypeScript type definitions
│ └── __tests__/ # Test files
├── docs/
│ └── adr/ # Architecture decision records
├── scripts/ # One-off and import scripts
└── supabase/
└── migrations/ # Database migrations
New sections are expected to update the docs alongside the code:
src/app/globals.css (light and dark) and record it in DESIGN.md. Style components with the slot tokens (--hue, --tint, …) and never hardcode a section color.docs/adr/ when a decision is hard to reverse, surprising without context, and the result of a real trade-off. Skip it if any of the three is missing.src/components/TabBar.tsx.The application is deployed on Vercel at: https://side-by-side-two.vercel.app/
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
Dan Denney