Free .is-a.dev subdomains are genuinely one of the better things the dev community has built. Clean URL, no cost, no registrar drama. The whole process is submitting a JSON file via GitHub Pull Request.
Here's the part nobody front-loads: the repo runs automated CI tests on every PR before a human even looks at it. Fail those, and you're already closed before a reviewer blinks. Pass those, and then a real human volunteer visits your site and reviews your files.
Two gates. Different failure modes. This guide covers both.
Step 0: Check Availability Before Anything Else
ð https://is-a.dev
Search your name. Takes 10 seconds. Do it before you get attached.
What You Need
- GitHub account
- A project live, deployed, and has actual content on Vercel â not a placeholder page
- Vercel dashboard open at your project â Settings â Domains
- A screenshot of your live site (the PR template requires this)
Step 1: Fork, Clone, Branch
git clone https://github.com/your-github-username/register.git
cd register
git checkout -b add-yourname-domain
Fresh branch every time. Don't work on main.
Step 2: Your Domain File
Create domains/yourname.json:
{
"owner": {
"username": "your-github-username",
"email": "your-email@example.com"
},
"records": {
"CNAME": "cname.vercel-dns.com"
}
}
What the CI tests will catch here
record vs records â The CI schema validation flags record (singular) immediately. Your PR won't survive automated checks. It's records, plural, always.
Invalid JSON â A missing comma or unclosed brace and the CI fails. Validate at jsonlint.com before you push.
File in the wrong place â Must be inside domains/. Not the root, not a subfolder.
A records must be arrays â If you use an A record instead of CNAME, it has to be: "A": ["76.76.21.21"] â array syntax, even with one value.
CNAME + A in the same file â They conflict. CI will catch it. Pick one; for Vercel, CNAME is the right call since their IPs can change.
Self-referencing â A CNAME that points back to yourname.is-a.dev will also get caught.
Use CNAME over A record for Vercel.
cname.vercel-dns.comis stable long-term.
Step 3: The Vercel Verification Pitfall ðĻ
This is what gets people past CI but stopped by the human reviewer.
First â get your TXT token from Vercel
Your project needs to already be live and deployed. Then:
- Vercel project â Settings â Domains â Add Domain
- Enter
yourname.is-a.dev - Vercel asks if you want to redirect to
www.yourname.is-a.devâ do not enable this (more on why in a second) - Select the root domain only â click "Continue manually"
- Copy the TXT string Vercel shows you:
vc-domain-verify=yourname.is-a.dev,sometoken123abc
Vercel shows "Invalid Configuration" immediately. That's expected â your PR isn't merged yet. Leave it.
Where NOT to put the TXT record
The obvious move: add the TXT record into yourname.json next to the CNAME. Tidy, logical, wrong.
is-a.dev requires verification records in their own dedicated file. For Vercel, that file is _vercel.yourname.json:
{
"owner": {
"username": "your-github-username",
"email": "your-email@example.com"
},
"records": {
"TXT": "vc-domain-verify=yourname.is-a.dev,your-token-from-vercel"
}
}
You end up with two files:
| File | Does what |
|---|---|
yourname.json |
Routes traffic to Vercel via CNAME |
_vercel.yourname.json |
Proves ownership to Vercel via TXT |
One routes. One verifies. That's the unlock.
Step 3b: The WWW Redirect Trap ðŠĪ
Back in Step 3 when Vercel asks about redirecting to www.yourname.is-a.dev â here's why you skip it:
www.yourname.is-a.dev is a completely separate subdomain. It needs its own JSON file and its own PR in the is-a.dev repo. If you enable the redirect without registering www, Vercel goes looking for a domain it can't find â and your site serves a 404 instead of your portfolio.
Worse: if you then try to remove the redirect and go back to the root domain, Vercel can get stuck demanding a new TXT verification token for the www subdomain before it lets you proceed. It's an annoying loop.
If you accidentally clicked it already:
- Vercel â Project Settings â Domains
- Find
www.yourname.is-a.dev - Delete it ðïļ
- Root domain only stays
Propagates in about 60 seconds. Back to normal.
Step 4: Submit the PR
git add domains/yourname.json domains/_vercel.yourname.json
git commit -m "feat(domain): add yourname.is-a.dev with Vercel CNAME and verification"
git push origin add-yourname-domain
Open a PR against is-a-dev/register. An automated welcome message appears when you do â read it. It tells you exactly what reviewers check. Short version:
- Fill in the PR template â don't delete it or swap it out
- Include a screenshot of your live site â not optional, reviewers look for it
- Mention the domain is already added in Vercel
Reviewers are volunteers. A complete, clean submission is the only reliable fast path.
Full Pitfall Reference
| What kills your PR | When it's caught | Fix |
|---|---|---|
record not records
|
CI â automated | Fix the key, validate JSON |
| Invalid JSON syntax | CI â automated | Run through jsonlint.com |
File outside domains/
|
CI â automated | Move it to the right folder |
| A record as a string not array | CI â automated | "A": ["ip"] |
| CNAME + A in same file | CI â automated | Pick one |
| CNAME pointing to itself | CI â automated | Don't self-reference |
| TXT token inside main domain file | Human reviewer | Move to _vercel.yourname.json
|
| Domain added to Vercel but shows 404 | Human reviewer | Add domain first, let Vercel sit in "pending" |
| No screenshot in PR description | Human reviewer | Add one |
| Site is under construction | Human reviewer | Finish it, then submit |
www redirect enabled without registering www
|
Human reviewer / post-merge | Delete www entry in Vercel |
| PR goes stale after maintainer asks for changes | Administrative | Respond within a few days |
| Name already taken by a pending PR | Administrative | Check open PRs before submitting |
| Nested subdomain, parent doesn't exist | CI or reviewer | Register parent domain first |
GitHub Pages? Same Pattern
{
"owner": {
"username": "your-github-username"
},
"records": {
"CNAME": "your-github-username.github.io"
}
}
Verification file: _github-pages-challenge-yourname.json â same structure, different prefix. The _platform.yourname.json naming convention applies across the board.
Pre-Submit Checklist
- [ ] Name available at is-a.dev
- [ ] Fresh branch off main
- [ ]
domains/yourname.jsonâ CNAME,recordsplural, valid JSON - [ ]
domains/_vercel.yourname.jsonâ TXT token from Vercel - [ ] Domain added to Vercel Settings â Domains, root only, no www redirect
- [ ] Site is live with real content
- [ ] Screenshot of live site ready for PR description
- [ ] PR template filled out, not replaced
After the Merge
Usually live within minutes. Still seeing the is-a.dev homepage after 15â20 min? Flush DNS:
# macOS
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
# Linux
sudo systemd-resolve --flush-caches
# Windows
ipconfig /flushdns
Then enable Enforce HTTPS in Vercel. You have a clean URL now â secure it.
TL;DR
- Check is-a.dev first
-
recordsâ plural, or CI rejects you immediately - CNAME to
cname.vercel-dns.com - Get TXT token: Vercel â project â Settings â Domains â Add Domain â Continue manually
- TXT token goes in
_vercel.yourname.jsonâ separate file, not the main one - Root domain only in Vercel â skip the www redirect
- Screenshot in the PR description
Two gates. Two files. Right keys. That's the whole thing.
Written by a developer who now has a working .is-a.dev domain and a portfolio full of backend projects to show for it â cycy.is-a.dev ð
Top comments (0)