WallpaperMachine
당신이 사랑하는 배경화면, 맥에서 새롭게 만나보세요
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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