find-craft-beer-restaurants

nonny.beer/find-craft-beer-restaurants-rxs3yr · updated May 21, 2026

MDX-style export adds YAML metadata + attribution linking explainx.ai and this canonical listing URL.

$browse install nonny.beer/find-craft-beer-restaurants-rxs3yr
0 commentsdiscussion
summary

Find bars and restaurants serving Nonny craft non-alcoholic beer near a given latitude/longitude, returning name, address, distance, phone, and website per result. Sorted by distance, category-filtered to Bars/Restaurants only.

skill.md
name
find-craft-beer-restaurants
title
Find Craft Non-Alcoholic Beer Restaurants
description
>- Find bars and restaurants serving Nonny craft non-alcoholic beer near a given latitude/longitude, returning name, address, distance, phone, and website per result. Sorted by distance, category-filtered to Bars/Restaurants only.
website
nonny.beer
category
food-and-drink
tags
- restaurants - non-alcoholic - beer - store-locator - stockist - nonny
source
'browserbase: agent-runtime 2026-05-19'
updated
'2026-05-19'
recommended_method
api
alternative_methods
- method: browser rationale: >- The find-us page at us.nonny.beer/pages/find-us reproduces the same data via the embedded Stockist widget, which geocodes user-typed addresses client-side via Google Maps and then calls the same Stockist API. Use only when direct API access fails — it costs ~5-10× more turns than the single HTTP GET. - method: url-param rationale: >- Not applicable. The find-us page does not accept lat/lng or query params in its URL — search state is owned entirely by the Stockist widget's JS runtime.
verified
true
proxies
true

Find Craft Non-Alcoholic Beer Restaurants

Purpose

Given a latitude/longitude (and optional radius), return the list of bars and restaurants near that point that serve Nonny — a Canadian craft non-alcoholic beer brand — sorted by distance. Each result includes name, full address, distance, phone (when listed), and website (when listed). The skill exposes the same data that powers the public store-locator at https://us.nonny.beer/pages/find-us. Read-only; never submits any form on the site.

When to Use

  • A user asks "where can I drink Nonny (or craft NA beer) near me / in {city}".
  • An agent comparing NA-beer-on-tap availability across a metro.
  • Any flow that needs Nonny's bar/restaurant footprint by city — the JSON API is faster, cheaper, and more reliably structured than scraping the Shopify+Stockist storefront.
  • Cross-checking whether a specific restaurant carries Nonny (its name will appear in the response near that lat/lng).

Workflow

The find-us page is a thin Shopify wrapper over the Stockist.co store-locator widget (Nonny's widget tag is u10642, hard-coded in the page HTML at <stockist-store-locator data-stockist-widget-tag="u10642">). The widget's runtime hits a public, unauthenticated JSON API at https://stockist.co/api/v1/u10642/locations/search. Hit the API directly — no cookies, session, stealth, or proxies required (validated unauthenticated, no-proxy, from a non-residential IP).

1. Geocode the user's location to lat/lng

The Stockist API does not accept address strings (an address= param returns 0 results — confirmed). The caller must supply numeric latitude and longitude. Use any geocoder (Google Geocoding, Nominatim, Mapbox, the LLM's own knowledge of metro centroids, etc.) to convert "San Francisco", "Vancouver, BC", a postal code, or a user-supplied address into a (lat, lng) pair.

Reference centroids known to return good results during validation:

  • Vancouver, BC: 49.2827, -123.1207 → 170 bars/restaurants within 100 km
  • Seattle, WA: 47.6062, -122.3321 → 205 bars/restaurants within 500 km
  • San Francisco, CA: 37.7749, -122.4194 → sparse (1 within 50 km — "The New Bar")
  • Portland, OR: 45.5239, -122.6760 (the widget's default map center)
  • Toronto, ON: 43.6532, -79.3832 → 6 bars/restaurants within 500 km
  • New York, NY: 40.7128, -74.0060 → 1 bar/restaurant within 500 km

Nonny's footprint is dense in BC and the US Pacific Northwest, sparse east of the Rockies. Set caller expectations accordingly.

2. Call the Stockist locations/search API

GET https://stockist.co/api/v1/u10642/locations/search
    ?latitude={lat}
    &longitude={lon}
    &distance={radius_km}     # optional; default behaviour caps at 500 locations total

Response is application/json shaped:

{
  "locations": [
    {
      "id": 125224191,
      "name": "The New Bar",
      "latitude": "37.79696193",
      "longitude": "-122.43502006",
      "address_line_1": "2181 Union Street",
      "address_line_2": "UNIT A",
      "city": "San Francisco",
      "state": "CA",
      "postal_code": "94123",
      "country": "United States",
      "phone": "",
      "website": "https://thenewbar.com/",
      "email": "",
      "description": "",
      "filters": [{ "id": 11202, "name": "Bars / Restaurants", "position": 1 }],
      "custom_fields": [],
      "distance": 2.8,
      "distance_units": "km"
    }
  ]
}

Pre-sorted by ascending distance. No auth, no headers, no Referer needed. No rate limits observed during testing.

3. Filter client-side to Bars / Restaurants

The response includes four kinds of stockists, identified by the filters[].id (or filters[].name):

filter.idfilter.nameMeaning
11202Bars / RestaurantsThe bucket this skill cares about.
11203GroceryGrocers carrying Nonny on-shelf.
11675Liquor StoreLiquor / bottle shops.
14651OnlineE-commerce-only stockists.

Server-side filtering by tag=, tag_filter=, or filter[]= is silently ignored — the server returns the unfiltered set regardless. Always filter in your own code:

const bars = data.locations.filter(loc =>
  loc.filters.some(f => f.id === 11202)
  // or: f.name === "Bars / Restaurants"
);

A single location can carry multiple filters (e.g. "The American" in Vancouver is both Bars / Restaurants and Grocery) — use .some(), not strict equality on the array.

4. Project the fields you need

For the task ("best restaurants in my area with craft NA beer"), the useful subset per result:

  • name
  • address_line_1, address_line_2, city, state, postal_code, country (concatenate for a display address)
  • latitude, longitude (for mapping / re-distancing)
  • distance + distance_units (always reported as km, even when you pass units=mi)
  • phone, website, email — frequently empty strings; treat as optional
  • filters[] — useful if you want to flag dual-category venues ("also sells bottles to-go")

"Best" is not represented in the Stockist payload — there is no rating, review, or priority score that varies between bars (priority: 0 for every Bars/Restaurants entry observed). If the caller wants ranking beyond distance, layer in a secondary signal (Google Places rating, Yelp stars, etc.) keyed by name + address or (latitude, longitude). Without that, sort by distance ascending and return the top N as a reasonable proxy for "closest = best".

Browser fallback

When the Stockist API is unreachable (network egress restrictions, an outage), the user-facing UI at https://us.nonny.beer/pages/find-us reproduces the same data via the embedded widget:

  1. browse open https://us.nonny.beer/pages/find-us --remote — no stealth or proxies required; the Shopify host is Cloudflare-fronted and tolerant.
  2. browse wait timeout 4000 — the Stockist widget mounts asynchronously after page load.
  3. browse click the "Bars / Restaurants" checkbox (accessibility label Bars / Restaurants, near top of the locator region).
  4. browse fill the search combobox (placeholder Type a postcode or address...) with the user's city or postal code and browse press Enter.
  5. The widget geocodes the input client-side via Google Maps, then hits the same Stockist API. Read browse get text "[role='region'][aria-label='Store locator results']" — it returns a 131 results found... summary plus a flat list of Name / distance / address / website / filters / Directions / View on map per result.
  6. For the Canadian storefront (nonny.beer/en-ca/pages/find-us) the same widget tag (u10642) backs the locator — no difference in data, just locale chrome.

The browser path costs ~5-10 turns vs. the API's single HTTP GET. Use it only when the API path actually fails.

Site-Specific Gotchas

  • Widget tag u10642 is the only Nonny-specific identifier. It is embedded in the page HTML and is part of every API URL. There is no auth key, project id, or token to manage.
  • address= parameter does NOT geocode. Sending address=San+Francisco returns {"locations":[]}. The widget geocodes client-side via Google Maps before hitting the API. You must geocode out-of-band.
  • Server-side category filters are silently dropped. tag=11202, tag_filter=11202, filter[]=11202 all return the unfiltered set. Always filter client-side on filters[].id or filters[].name.
  • Unfiltered /locations/search?latitude=…&longitude=… (no distance) caps at 500 results. Pass distance={km} when you want a known radius; pass a large value (e.g. distance=500) when sweeping a sparse metro.
  • distance_units always reports km regardless of input. Passing units=mi does narrow the radius input proportionally, but the response numbers and the label remain kilometres. Do unit conversion client-side if your UI shows miles.
  • Coverage is regional. Nonny is BC-based; the database is densest in BC + the US Pacific Northwest. Major US East-Coast and Central metros (NYC, Boston, Chicago, Atlanta, Toronto) return single-digit counts within 500 km radii. If a caller asks for a sparse metro, return what's there and surface a note — don't infer the API is broken.
  • priority is always 0 for Bars / Restaurants entries observed. There is no merchant-supplied ranking signal — distance-ordering is the only built-in sort.
  • One location can carry multiple filter buckets. E.g. "The American" (Vancouver, 926 Main St) carries both Bars / Restaurants AND Grocery. Use .some() membership tests, not strict scalar equality, when filtering.
  • Storefront is Shopify behind Cloudflare. nonny.beer (bare) 302-redirects to a localised subdomain — us.nonny.beer for US visitors, nonny.beer/en-ca/... for Canadian. The Stockist widget is identical on both; you do not need to pick the "right" storefront to get the right data.
  • No Referer header gating. The Stockist API accepts requests with no Referer and no Origin — works from curl, the sandbox proxy fetch, or any HTTP client. Don't bother spoofing browser headers.
  • Duplicate entries exist. Several restaurants appear twice in the same metro under slightly different name spellings (e.g. "Tacofino Yaletown" and "Tacofino - Yaletown"). De-dupe on (name.toLowerCase().replace(/[\W_]+/g,''), address_line_1.toLowerCase()) if you need a clean set.
  • custom_fields is always [] on this widget tag — no extra structured metadata to project.
  • No pagination. The API returns every match within the radius in a single response (subject to the 500 cap when no distance is passed).

Expected Output

Successful call — restaurants within radius:

{
  "success": true,
  "query": {
    "latitude": 49.2827,
    "longitude": -123.1207,
    "distance_km": 25,
    "filter": "Bars / Restaurants"
  },
  "result_count": 131,
  "restaurants": [
    {
      "name": "Rogue Kitchen & Wetbar",
      "address": "602 W Broadway, Vancouver, BC V5Z 1G2, Canada",
      "address_components": {
        "line1": "602 W Broadway",
        "line2": "",
        "city": "Vancouver",
        "state": "BC",
        "postal_code": "V5Z 1G2",
        "country": "Canada"
      },
      "latitude": 49.262,
      "longitude": -123.117,
      "distance_km": 0.7,
      "phone": "",
      "website": "",
      "filters": ["Bars / Restaurants"],
      "stockist_id": 125224191
    },
    {
      "name": "Cactus Club Cafe",
      "address": "575 West Broadway, Vancouver, BC V5Z 1E6, Canada",
      "address_components": {
        "line1": "575 West Broadway",
        "line2": "Broadway + Ash",
        "city": "Vancouver",
        "state": "BC",
        "postal_code": "V5Z 1E6",
        "country": "Canada"
      },
      "latitude": 49.263,
      "longitude": -123.114,
      "distance_km": 0.8,
      "phone": "",
      "website": "cactusclubcafe.com",
      "filters": ["Bars / Restaurants"],
      "stockist_id": 125223781
    }
  ]
}

Successful call — sparse metro with zero matches in radius:

{
  "success": true,
  "query": {
    "latitude": 40.7128,
    "longitude": -74.0060,
    "distance_km": 50,
    "filter": "Bars / Restaurants"
  },
  "result_count": 0,
  "restaurants": [],
  "note": "No Nonny stockists tagged 'Bars / Restaurants' within 50 km of New York City. Nonny coverage is concentrated in British Columbia and the US Pacific Northwest. Widen the radius (try 500 km) or expect single-digit results east of the Rockies."
}

Failure — caller did not provide / could not geocode a location:

{
  "success": false,
  "reason": "no_location",
  "error_reasoning": "Stockist API requires numeric latitude and longitude; the 'address' query parameter is silently ignored. Geocode the user's area to (lat, lng) before calling the skill."
}

Failure — Stockist API unreachable (network or proxy issue):

{
  "success": false,
  "reason": "api_unreachable",
  "error_reasoning": "GET https://stockist.co/api/v1/u10642/locations/search returned <status/error>. Retry with backoff, or fall back to the browser flow on https://us.nonny.beer/pages/find-us."
}
how to use find-craft-beer-restaurants

How to use find-craft-beer-restaurants on Cursor

AI-first code editor with Composer

1

Prerequisites

Before installing skills in Cursor, ensure your development environment meets these requirements:

  • Cursor installed and configured on your development machine
  • Node.js version 16.0+ with npm package manager (verify with node --version)
  • Active project directory or workspace where you want to add find-craft-beer-restaurants
2

Execute installation command

Execute the skills CLI command in your project's root directory to begin installation:

$browse install nonny.beer/find-craft-beer-restaurants-rxs3yr

The skills CLI fetches find-craft-beer-restaurants from GitHub repository nonny.beer/find-craft-beer-restaurants-rxs3yr and configures it for Cursor.

3

Select Cursor when prompted

The CLI will show a list of available agents. Use arrow keys to navigate and space to select Cursor:

◆ Which agents do you want to install to?
│ ── Universal (.agents/skills) ── always included ────
│ • Amp
│ • Antigravity
│ • Cline
│ • Codex
│ ●Cursor(selected)
│ • Cursor
│ • Windsurf
4

Verify installation

Confirm successful installation by checking the skill directory location:

.cursor/skills/find-craft-beer-restaurants

Reload or restart Cursor to activate find-craft-beer-restaurants. Access the skill through slash commands (e.g., /find-craft-beer-restaurants) or your agent's skill management interface.

Security & Verification Notice

We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.

Skills execute code in your development environment. Always verify the publisher's identity, review recent commits, and test in isolated environments before production deployment.

List & Monetize Your Skill

Submit your Claude Code skill and start earning

GET_STARTED →

Use Cases

Task Automation & Efficiency

Automate repetitive workflows and reduce manual effort

Example

Generate reports, summarize documents, draft communications

Save 3-5 hours per week on routine tasks

Knowledge Enhancement

Learn new skills, understand complex topics, get expert guidance

Example

Explain concepts, provide examples, suggest learning resources

Accelerate learning and skill development by 2x

Quality Improvement

Enhance output quality through reviews, suggestions, and refinements

Example

Review drafts, suggest improvements, catch errors

Improve work quality by 30-40% with less effort

Implementation Guide

Prerequisites

  • Claude Desktop or compatible AI client with skill support
  • Clear understanding of task or problem to solve
  • Willingness to iterate and refine outputs

Time Estimate

15-45 minutes depending on use case complexity

Installation Steps

  1. 1.Install skill using provided installation command
  2. 2.Test with simple use case relevant to your work
  3. 3.Evaluate output quality and relevance
  4. 4.Iterate on prompts to improve results
  5. 5.Integrate into regular workflow if valuable

Common Pitfalls

  • Expecting perfect results without iteration
  • Not providing enough context in prompts
  • Using skill for tasks outside its intended scope
  • Accepting outputs without review and validation

Best Practices

✓ Do

  • +Start with clear, specific prompts
  • +Provide relevant context and constraints
  • +Review and refine all outputs before using
  • +Iterate to improve output quality
  • +Document successful prompt patterns

✗ Don't

  • Don't use without understanding skill limitations
  • Don't skip validation of outputs
  • Don't share sensitive information in prompts
  • Don't expect skill to replace human judgment

💡 Pro Tips

  • Be specific about desired format and style
  • Ask for multiple options to choose from
  • Request explanations to understand reasoning
  • Combine AI efficiency with human expertise

When to Use This

✓ Use When

Use when skill capabilities match your task, clear ROI on time saved, and you can validate outputs. Best for repetitive tasks, learning, and quality improvement.

✗ Avoid When

Avoid when task requires deep expertise you can't validate, involves sensitive decisions, or when learning process is more valuable than speed of completion.

Learning Path

  1. 1Familiarize yourself with skill capabilities and limitations
  2. 2Start with low-risk, non-critical tasks
  3. 3Progress to more complex and valuable use cases
  4. 4Build expertise through regular use and experimentation

Discussion

Product Hunt–style comments (not star reviews)
  • No comments yet — start the thread.
general reviews

Ratings

4.650 reviews
  • Hassan Okafor· Dec 28, 2024

    Useful defaults in find-craft-beer-restaurants — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.

  • Anika Harris· Dec 24, 2024

    Solid pick for teams standardizing on skills: find-craft-beer-restaurants is focused, and the summary matches what you get after install.

  • Anika Gonzalez· Dec 20, 2024

    I recommend find-craft-beer-restaurants for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.

  • Dhruvi Jain· Dec 4, 2024

    find-craft-beer-restaurants is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.

  • Sofia Yang· Dec 4, 2024

    We added find-craft-beer-restaurants from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.

  • Oshnikdeep· Nov 23, 2024

    find-craft-beer-restaurants fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.

  • Anaya Rahman· Nov 23, 2024

    Useful defaults in find-craft-beer-restaurants — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.

  • Anika Garcia· Nov 19, 2024

    We added find-craft-beer-restaurants from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.

  • Anika Ghosh· Nov 15, 2024

    find-craft-beer-restaurants has been reliable in day-to-day use. Documentation quality is above average for community skills.

  • Ganesh Mohane· Oct 14, 2024

    find-craft-beer-restaurants has been reliable in day-to-day use. Documentation quality is above average for community skills.

showing 1-10 of 50

1 / 5