| name | add-venue |
| description | Research and add a new restaurant/bar/cafe venue to rvkfoodie.is. Collects data from Google Maps, Grapevine, OpenStreetMap. Populates Payload CMS with all venue fields. |
Add Venue to rvkfoodie.is
Research a venue and add it to a guide in Payload CMS with full enrichment data.
Arguments
$ARGUMENTS — venue name and optionally address (e.g. "Grillið Hótel Saga" or "Dill Hverfisgata 12")
Step 1: Research the venue
Collect data from multiple sources. Run these in parallel where possible.
Google Maps (browser)
Navigate to https://www.google.com/maps/search/VENUE+NAME+Reykjavik in Chrome.
Extract from the place panel:
- Coordinates (lat/lon from URL
@lat,lon)
- Opening hours (from the hours section)
- Phone number
- Website
- Google Maps URL (the full place URL)
- Address (as shown on Google)
Grapevine (web search)
Search for site:grapevine.is VENUE NAME to find:
- Best Of Reykjavík awards (e.g. "Best Bakery 2025")
- Review articles — get the URL for
grapevineUrl field
- Notable quotes or facts that could inspire the venue description
OpenStreetMap (fallback for coords)
If Google Maps doesn't load, use Nominatim:
https://nominatim.openstreetmap.org/search?q=VENUE+ADDRESS+Reykjavik&format=json&limit=1&countrycodes=is
Step 2: Confirm with user
Present the collected data in a table:
| Field | Value |
|---|
| Name | ... |
| Address | ... |
| Coordinates | lat, lon |
| Opening Hours | ... |
| Phone | ... |
| Website | ... |
| Google Maps | ... |
| Best Of Award | ... |
| Grapevine URL | ... |
Ask the user:
- Which guide should this venue be added to? (food-guide, bar-crawl, golden-circle)
- Which section within that guide? (e.g. Breakfast & Coffee, Lunch, Dinner, Drinks)
- Should it be free preview (
isFree: true) or gated?
- Write a description (2-3 sentences, opinionated, mention what to order)
- Any note (tips, caveats, opening hours context)?
Step 3: Add to Payload CMS
Authentication
Login to get a JWT token:
curl -s -X POST "https://rvkfoodie-cms.solberg.workers.dev/api/users/login" \
-H "Content-Type: application/json" \
-d '{"email":"jokull@solberg.is","password":"dansar-8nimQe-tamfam"}' | node -e "process.stdin.on('data',d=>{console.log(JSON.parse(d).token)})"
Fetch the guide
curl -s "https://rvkfoodie-cms.solberg.workers.dev/api/guides?where[slug][equals]=GUIDE_SLUG&depth=2" \
-H "Authorization: JWT TOKEN"
Add the venue to the correct section
The guide's content is an array of blocks. Find the section block by title, then append the new venue to its venues array. PATCH the guide with the updated content.
Venue block structure:
{
"blockType": "venue",
"name": "Venue Name",
"address": "Street Address",
"description": "2-3 sentence opinionated description",
"note": "Optional tip or caveat",
"time": "Only for bar crawl (e.g. '9:00 PM')",
"isFree": false,
"latitude": 64.1234,
"longitude": -21.9234,
"openingHours": "Mo-Fr 11:30-22:00; Sa-Su 12:00-22:00",
"googleMapsUrl": "https://www.google.com/maps/place/...",
"website": "venue.is",
"phone": "555 1234",
"bestOfAward": "Best X 2025 — Reykjavík Grapevine",
"grapevineUrl": "https://grapevine.is/best-of-reykjavik/..."
}
PATCH the guide
curl -s -X PATCH "https://rvkfoodie-cms.solberg.workers.dev/api/guides/GUIDE_ID" \
-H "Content-Type: application/json" \
-H "Authorization: JWT TOKEN" \
-d '{"content": UPDATED_CONTENT_ARRAY}'
Step 4: Verify and deploy
- Fetch the guide again to confirm the venue was added
- Ask the user if they want to deploy:
npm run build && npx wrangler deploy
- Update
scripts/venue-data.json with the new venue's data
Notes
- Opening hours format:
Mo-Fr 11:30-22:00; Sa-Su 12:00-22:00 (OSM-style)
- Google Maps URLs: prefer
maps.app.goo.gl short links if the user provides them
- Coordinates: 4 decimal places is sufficient (e.g. 64.1456, -21.9284)
- Always check if the venue already exists in the guide before adding
- Venue IDs are auto-generated by Payload — don't set them manually