bama
BAMA: Build Any Mac App. Agent skills to research, clone, design, build, optimize, and test native macOS apps with Swift and SwiftUI.
Claude Code skill: country field with flags, dial codes, Cloudflare IP prefill, and state/city fields for every country. MIT.
SkillsTypeScript · JavaScriptGitHub @jayshapiroOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Country Flag Picker: a Claude Code skill
A ready-made pattern for a smarter country field in web forms. Ask Claude Code for a country selector
or a phone-number-with-country-code field, and it builds this one: every country, a real flag,
the right dial code, and the visitor's country sniffed from their current IP address and already selected in the form.
country-flag.jayshapiro.com is a working sign-up form built with this skill. Try this:Read the full README ↗A ready-made pattern for a smarter country field in web forms. Ask Claude Code for a country selector or a phone-number-with-country-code field, and it builds this one: every country, a real flag, the right dial code, and the visitor's country sniffed from their current IP address and already selected in the form.
country-flag.jayshapiro.com is a working sign-up form built with this skill. Try this:
libphonenumber-js. Caribbean countries correctly
use +1, not the +1268-style codes many hand-made lists get wrong.KE, US) is submitted/stored. Names, flags and dial codes
are looked up from it, so the database never holds free-text country names keeping your data clean./plugin marketplace add jayshapiro/country-flag-picker
/plugin install country-flag-picker@jayshapiro
Copy the skills/country-flag-picker folder into ~/.claude/skills/ (all projects) or
.claude/skills/ inside one project.
Just describe what you need. For example:
Claude reads the skill and copies the reference files into your project, adjusting import paths to fit.
skills/country-flag-picker/
├── SKILL.md instructions Claude follows
├── reference/
│ ├── countries.ts the generated 250-country list + helpers
│ ├── CountryPhoneField.tsx React country + phone field
│ ├── LocationFields.tsx state/province + city fields that follow the country
│ ├── places.ts loads and filters a country's states and cities
│ ├── places/ one file per country (copy into your public/ folder)
│ ├── Flag.tsx lightweight <Flag code="KE" /> component
│ ├── flags/ 250 SVG flags (copy into your public/ folder)
│ └── geo-worker.ts Cloudflare Worker for the visitor's country, region and city
└── scripts/
├── generate-countries.mjs rebuilds countries.ts from the source packages
└── generate-places.mjs rebuilds places/ from GeoNames
demo/ the live demo: a Cloudflare Worker + Vite React app using the skill
Tech stack of the reference component: React, react-hook-form + zod, shadcn/ui on Base UI (shadcn's current default), TanStack Query, lucide-react. On another stack, Claude keeps the data, flags and IP logic and swaps the UI parts.
Server side: one small /api/geo/country endpoint. The skill covers four setups:
| Your hosting | How the location is found | Setup |
|---|---|---|
| Cloudflare Workers / Pages | request.cf (country, region, city) | none |
| Your own server behind Cloudflare's proxy | CF-IPCountry header (+ cf-region, cf-ipcity) | turn on IP Geolocation, or "Add visitor location headers" for region and city (all plans) |
| Anywhere else | a tiny free Worker on workers.dev (included) | a free Cloudflare account |
| No Cloudflare at all | a third-party IP lookup (fallback) | check its terms |
Cloudflare is the default. It's free on every plan, needs no API key, and makes no call to another company. If your site is on Cloudflare, or you're happy to create a free Cloudflare account for the small included Worker, you don't need to do anything. Claude will ask how your site is hosted and set it up.
To use a free IP lookup service instead, tell Claude when you ask for the field, for example:
The skill includes a ready-made ip-api.com endpoint that returns the country, region and city, so the form behaves the same as with Cloudflare. Before you use it, check the provider's terms:
The skill asks rather than assumes on these:
XK) is included but is not an official ISO code. Remove its row if
you need strict ISO.Countries and dial codes:
npm i i18n-iso-countries libphonenumber-js
node skills/country-flag-picker/scripts/generate-countries.mjs > skills/country-flag-picker/reference/countries.ts
States, provinces and cities (GeoNames, cities over 15,000 people):
curl -O https://download.geonames.org/export/dump/cities15000.zip && unzip cities15000.zip
curl -O https://download.geonames.org/export/dump/admin1CodesASCII.txt
node skills/country-flag-picker/scripts/generate-places.mjs cities15000.txt admin1CodesASCII.txt skills/country-flag-picker/reference/places
Created by Jay Shapiro
The pattern was created and shared for free by Jay Shapiro for his social impact #AIforGood projects, then generalised into this skill with Claude Code.
Country codes and names: i18n-iso-countries (MIT)
Dial codes: libphonenumber-js (MIT), based on Google's libphonenumber
Flag images: SVG files from react-world-flags (MIT; licence in reference/flags/)
States, provinces and cities: GeoNames (CC BY 4.0). If you use the state/city fields, credit GeoNames visibly in your app.
MIT © 2026 Jay Shapiro