Tokens
Claude, Cursor 등 AI 코딩 도우미 토큰 사용량을 추적·시각화·경쟁
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A public status page for the ongoing Anak Krakatau (Krakatoa) eruption: current
alert level, ash advisories, recent activity, and preparedness guidance for
people near the volcano.
This app is unofficial. It is not produced by, endorsed by, or affiliated
with PVMBG, MAGMA Indonesia, BMKG, or BNPB. It republishes public data those
agencies already publish, reformatted for readability, and links back to the
originals on every card. For evacuation orders and authoritative guidance,
always follow MAGMA Indonesia, BMKG, and BNPB directly — this dashboard says
so on every page.README 전문 보기 ↗A public status page for the ongoing Anak Krakatau (Krakatoa) eruption: current alert level, ash advisories, recent activity, and preparedness guidance for people near the volcano.
This app is unofficial. It is not produced by, endorsed by, or affiliated with PVMBG, MAGMA Indonesia, BMKG, or BNPB. It republishes public data those agencies already publish, reformatted for readability, and links back to the originals on every card. For evacuation orders and authoritative guidance, always follow MAGMA Indonesia, BMKG, and BNPB directly — this dashboard says so on every page.
All data is scraped server-side from MAGMA Indonesia (PVMBG), the Indonesian government's official volcano-monitoring platform. Nothing is fetched client-side, and nothing is stored beyond the request lifetime.
| Source | URL | Used for |
|---|---|---|
| MAGMA activity level list | https://magma.esdm.go.id/v1/gunung-api/tingkat-aktivitas | Finds the current signed report for Anak Krakatau |
| MAGMA signed activity report | linked from the row above, under /v1/gunung-api/laporan/... | Alert level (I–IV), hazard radius, summit coordinates, observation time |
| MAGMA VONA notices | https://magma.esdm.go.id/v1/vona?code=KRA | Aviation colour code, ash cloud height, ash movement direction |
| MAGMA eruption timeline | https://magma.esdm.go.id/v1/gunung-api/informasi-letusan/KRA | Recent eruption events shown in the activity timeline |
Two adapters were built and deliberately removed during development:
tests/fixtures/gvp-weekly.xml stays committed on purpose, as
a record of that decision, even though nothing reads it anymore.tests/fixtures/*.html are real, saved copies of MAGMA's pages. Tests parse
these fixtures instead of the network, so the suite is fast and doesn't hit
government servers on every run — servers that, during this eruption, have
been intermittently returning 502.
Run bun run fixtures:refresh occasionally to re-download them. A git diff
afterwards is the early-warning signal that a source changed its HTML
structure: if the parsers still pass against updated fixtures, nothing is
wrong; if a fixture's shape moved and a test now fails, that's the adapter
that needs attention before it silently breaks in production.
bun install
bun run dev
Then open http://localhost:3000 (English) or http://localhost:3000/id
(Indonesian).
| Command | Purpose |
|---|---|
bun install | Install dependencies |
bun run dev | Start the dev server (Turbopack) |
bun run build | Production build |
bun run start | Run the production build |
bun test | Run the test suite (parses committed fixtures, no network) |
bun run check | Format + lint, writing fixes |
bun run ci:lint | Lint in CI mode (no writes) |
bun run typecheck | Generate route types, then tsc --noEmit |
bun run fixtures:refresh | Re-download the HTML fixtures tests parse against |
If typecheck fails citing files that no longer exist, delete the stale
build cache first: rm -rf .next.
Next.js (App Router) on Bun, TypeScript in strict mode with
noUncheckedIndexedAccess, next-intl for English/Indonesian localisation,
Tailwind CSS, and MapLibre GL for the ash-direction map. The display timezone
is locked to Asia/Jakarta regardless of visitor location, since a hazard
report timed to the wrong zone is worse than no time at all.
The app needs no environment variables and no API keys: every source is a public MAGMA page, and the tile provider requires no token.
Vercel Functions are pinned to sin1 (Singapore) in vercel.json. This is
not a preference. The server fetches MAGMA in Indonesia, and MAGMA is slow
under eruption load — measured at 4.5–8.8s per request from inside Indonesia
during the September 2026 eruption, against a 20s timeout. Vercel's default
region is iad1 (Washington DC), which would add a trans-Pacific round trip
to every one of those requests and push the slow tail past the timeout, so
the alert level and ash direction cards would go dark while MAGMA was merely
slow. Singapore is the closest region to the Sunda Strait.
Hobby plans may select any single region, so this works without a paid plan.
Direct dependencies are pinned exactly, on purpose. Vercel's build image
runs Bun 1.3.14, which cannot read the lockfileVersion: 2 that Bun 1.4
writes. It logs Unknown lockfile version, warns Ignoring lockfile, and
resolves every dependency fresh. packageManager: "[email protected]" does not
change this. With the lockfile ignored, a caret range would let an untested
minor release reach production on its own — so every direct dependency is
pinned to an exact version. Transitive packages can still drift; this only
removes the largest and most likely source. Once Vercel's image ships Bun
1.4 the lockfile will be honoured again and the pins simply stop mattering.
Builds run in iad1, not sin1. The regions setting places Vercel
Functions, not the build. So the build-time prerender fetches MAGMA from
Washington DC, where the trans-Pacific round trip on top of MAGMA's own
latency often exceeds the 20s timeout — a freshly deployed page can ship
showing "Source unavailable". This is not a failure state to fix: the first
ISR revalidation runs in sin1 and the page heals itself within a minute.
Observed on the first production deploy and confirmed to recover.
The map draws the ash-affected area from volcanic-ash SIGMETs
(aviationweather.gov/api/data/isigmet, a public NOAA/NWS feed, no key).
Each carries the area as coordinates issued by the responsible meteorological
watch office — for the Sunda Strait that is BMKG's Jakarta office, so this is
an Indonesian authority rather than a foreign estimate.
This replaced a wedge the map used to infer from VONA's prose movement phrase. Two things made the change worth making. A SIGMET states the area rather than implying it, so the shape earns a hard edge. And VONA notices go quiet for days while SIGMETs keep being issued: relying on VONA alone let the page state that no ash cloud was observed while an active BMKG SIGMET said the opposite, which is the worst thing this dashboard can do.
Two properties the UI must keep. A SIGMET describes airspace, not ashfall on the ground, and says so on the card. And SIGMETs expire after a few hours; expired ones are dropped rather than dimmed, because a polygon with no issuing authority behind it is the same lie as a stale timestamp.