尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Pick a state and county on the map (or search by name), enter your gender, marital status, pre-tax income, net worth, and 401k balance, and see where you rank against real US Census Bureau / Federal Reserve data — county, nationwide, and by age band. Every calculation runs 100% locally in the browser — no API calls, no backend.
data/us/stateIncome.json / data/us/countyIncome.json / data/us/nationalIncome.json —
median household income + percentile anchor tables per state/county/nation. Source: US
Census Bureau ACS 5-Year (and, for states, latest 1-Year) estimates. Regenerate with
npm run fetch:census (requires a Census API key, see scripts/fetchCensusData.ts).data/us/netWorthPercentilesUS.json — nationwide net worth percentile anchors. Source:
Federal Reserve Survey of Consumer Finances.data/us/401kByAge.json — average/median 401k balance by age band. Source: Vanguard, How
America Saves.data/us/incomeByAge.json / data/us/netWorthByAge.json — median income / average net
worth by age band, used only to rescale a user's value against the nationwide percentile
curve above ("top X% nationwide for your age") — see each file's meta.note for how the
six age bands map onto the coarser brackets ACS/SCF actually publish.lib/percentileTable.ts — shared log-log interpolation percentile calculator.lib/usIncomeCalc.ts — looks up income/net worth/401k percentiles for a given
state/county/age band from the data above.lib/usInput.ts — query-string codec for the input panel's answers, so they survive
navigation from /us → /us/[state] → /us/[state]/[county].middleware.ts # "/" -> /us or /kr by Accept-Language; /kr/* rewrites to /us/*
app/
page.tsx # fallback redirect (middleware handles this first)
us/
page.tsx / UsHomeClient.tsx # US map — pick a state
[state]/page.tsx / UsStateClient.tsx # county map + SEO content (median income, thresholds, county directory); picking a county starts the result flow
[state]/[county]/page.tsx # SEO landing page per county (ISR, revalidate=86400) — CTAs into /us/result.
# Old single-page result links (?d=...) redirect there via middleware.ts instead.
about/ · privacy/ · contact/ # static info pages
result/
page.tsx / DashboardResultClient.tsx # unified result dashboard (?st=&co=&d= carry state), see below
overall/ state/ demographic/ # redirect stubs -> /result, kept so old shared links don't 404
data/us/
stateIncome.json / countyIncome.json / nationalIncome.json
netWorthPercentilesUS.json / 401kByAge.json / stateMeta.ts
incomeByAge.json / netWorthByAge.json
lib/
usIncomeCalc.ts / usInput.ts / usFormat.ts / usGeo.ts / percentileTable.ts
i18n.ts # ko/en copy
serverLocale.ts / seo.ts / useLocaleBase.ts # /us vs /kr locale plumbing
legacyResultRedirect.ts # shared redirect for the retired /result/overall|state|demographic routes
components/us/
UsMap.tsx / UsGeoList.tsx / UsInputPanel.tsx / UsResultCard.tsx / UsShell.tsx / Footer.tsx
result/ # shared pieces for the result dashboard
Picking a county navigates to /us/result?st=<state>&co=<county>&d=<answers> — one scrolling
dashboard with every percentile (national/state/county/age/net worth/401k) computed up front,
plus the share card and "compare with a friend" link near the top. It's a real page (own URL,
works with browser back) that re-derives everything from the query string on each render, same
as before. /kr/result serves the same page in Korean via the middleware rewrite. The old
three-step routes (/result/overall, /result/state, /result/demographic) still exist as
redirect stubs so old shared links keep working, but they're disallowed in robots.txt and
non-canonical — new links should point at /result directly.
npm install
npm run dev
vercel
d/lang query
parameters are removed, it loads Google's Auto ads script using the public publisher ID
constant in components/ads/AdSenseScript.tsx. It does not load on compare-invite pages,
whose path contains encoded calculator answers. The loader does not depend on Netlify
environment variables or a production-host check.NEXT_PUBLIC_ADSENSE_CLIENT_ID and NEXT_PUBLIC_SITE_URL still gate manually placed
<AdSlot /> units in lib/ads.ts; they are not required for the Auto ads loader.public/ads.txt — 완료됨: the real publisher ID (pub-7379794980536826) is in place, no
longer a placeholder. Keep it in sync with the publisher ID constant and any configured
NEXT_PUBLIC_ADSENSE_CLIENT_ID — AdSense won't serve ads on the domain without a matching
ads.txt entry.