尚未偵測到更新。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