Netnyahoo
Mac용 실질적인 Chromium으로, Arc 사이드바와 Dia 폴리시를 갖추고 계정 없이 무료·오픈소스이며 광고·추적·소송에 면역이다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Submission for Congressional App
README 전체를 불러오는 중입니다.
README 전문 보기 ↗School districts decide heat-related early dismissals from the outdoor forecast. Individual classrooms are never measured, and a second-floor southwest room with no AC can be far hotter than the outdoor reading the decision rests on.
Thermion predicts per-room conditions from building physics, sharpens those predictions with sparse human reports through a per-room Kalman filter, and recommends which classes to move.
A heat-wave scenario toggle (dashboard and plan) runs the same physics on a clearly labeled synthetic June heat wave, so the model can be explored outside heat season. It is never mixed with live data.
Requires Node 20 or newer.
npm install
npm run dev # http://localhost:3000
npm test # vitest: physics, filter, optimizer, NWS client, DB
npm run build # production build (type-checks)
The SQLite database is created at ./data/thermion.db on first request. Migrations run automatically, and the seed adds one school (Morris Hills High School), 16 rooms and 14 classes. No reports are seeded.
Environment variables (all optional):
| Variable | Purpose |
|---|---|
NWS_USER_AGENT | User-Agent sent to api.weather.gov. NWS asks for an app name plus contact info; set this in production. |
THERMION_DB | Path to the SQLite file (default ./data/thermion.db, or /tmp/thermion.db on Vercel). |
The only external network dependency is api.weather.gov. There is no auth.
npx vercel deploy --prod
Vercel's filesystem is read-only apart from /tmp, so the database lives in /tmp/thermion.db there. It is ephemeral per serverless instance: reports survive while an instance stays warm, but a cold start re-seeds an empty database. That is fine for a demo. A production deployment should mount a persistent volume (any Node host) or point THERMION_DB at durable storage.
api.weather.gov
│ /points → forecastHourly (30-min cache, Result<…>, never throws)
▼
┌──────────────────────── lib/nws.ts ─────────────────────────┐
│ hourly periods (temp, RH, sky cover from NWS sky wording) │
└───────────────┬──────────────────────────────────────────────┘
│ logged hourly into weather_hours (past hours stay available)
▼
lib/weather.ts ── live │ stale (logged) │ climatology fallback → banner
│
▼ PURE MODULES (no I/O, unit-tested)
┌────────────────────────────────────────────────────────────────────┐
│ solar.ts NOAA solar position → elevation, azimuth │
│ irradiance.ts Kasten-Young AM, Meinel beam, diffuse, cos θ on a │
│ vertical window, cloud factor → watts into room │
│ thermal.ts dT/dt = invRC·(T_drive − T) + alpha·Q (Euler, 5 min)│
│ kalman.ts EKF on [T, invRC, alpha], χ² gating, ±σ tracks │
│ heatindex.ts NWS Rothfusz + adjustments │
│ thresholds.ts 82 advisory / 88 unusable │
│ hungarian.ts Kuhn-Munkres O(n³) │
│ reassign.ts cost matrix, feasibility, padding, plan │
└────────────────────────────────────────────────────────────────────┘
│ ▲
▼ │
lib/roomModel.ts recordReport(): insert report → propagate → update
│ → room_state + filter_log (one transaction)
│ buildForecast(): per-room tracks with ±σ, re-anchored at
│ each accepted report
▼
app/dashboard app/report (server action) app/plan (+ /plan/export CSV)
│
▼
SQLite (better-sqlite3): schools, rooms, reports, room_state, classes,
weather_hours, filter_log (PRAGMA user_version migrations)
/report posts to a server action, which validates the input (temp 40–130 °F).room_state, and append a filter_log row (accepted or rejected, with NIS and the posterior).State x = [T, invRC, alpha]. The process model is one Euler step of the thermal model. invRC and alpha follow random walks, so the filter learns each room's parameters. The Jacobian is derived analytically in lib/kalman.ts:
⎡ 1 − Δt·k Δt·(T_d − T) Δt·Q ⎤
F = ⎢ 0 1 0 ⎥
⎣ 0 0 1 ⎦
A report observes T directly (H = [1, 0, 0]). Measurement noise is 1.0 °F (1σ) for teachers and staff and 2.0 °F for students. Reports with normalized innovation squared above χ²₁(0.99) = 6.635 are rejected and logged. A rejected reading is accepted later only if a second report within 12 hours agrees with it; that is treated as evidence the model, not the reporters, is wrong.
In a synthetic study (5 rooms × 6 noise seeds, 20 teacher reports each, 2.5 h apart), the learned invRC landed within 20% of truth in 21 of 30 runs, with a normalized-error RMS of 1.4: the filter is mildly overconfident, as EKFs on bilinear models tend to be. The unit test checks the spec case: a synthetic room converges within 20% of its true invRC after 20 observations, and a single 130 °F garbage report is rejected and leaves the estimate unchanged.
For a period: rows are the classes meeting then, columns are rooms. cost = enrollment · max(0, peakHI − 82) + movePenalty·[room ≠ assigned]. Pairs that break capacity or lab requirements are infeasible. The matrix is padded to square (dummy classes cost 0, dummy rooms are infeasible for real classes) and infeasible pairs are encoded as a large finite cost. If the optimal solution uses one, the page says explicitly that no feasible assignment exists, and why. Exposure is reported as student-degree-hours above 82 °F heat index. An option plans against mean + 1σ instead of the mean.
Every modeling assumption, stated plainly:
Thermal model
Solar and sky
Weather
Humidity and heat index
Kalman filter
Schedule and optimizer
Rooms created from /report default to building "Main", 6 m² of windows, capacity 25 and not a lab. Edit them in the database for better predictions.
Deployment: on Vercel the SQLite file lives in /tmp and is lost on cold starts (see above).
app/
dashboard/page.tsx hero, solar sweep, predictions, rooms, filter log
report/ page, client form, server action
plan/ page + export/route.ts (CSV)
components/ SolarSweep, PredictionChart, OutdoorChart, UI bits
lib/
nws.ts heatindex.ts thresholds.ts humidity.ts
solar.ts irradiance.ts thermal.ts kalman.ts
hungarian.ts reassign.ts schedule.ts scenario.ts
db.ts repo.ts weather.ts weatherSeries.ts roomModel.ts
dashboard.ts planService.ts prediction.ts validate.ts time.ts types.ts
tests/ vitest suites for every module above