Easy-to-manage touch screens
Free, open-source touch screens. Guided USB setup, a drag-and-drop editor and local control. Made for Home Assistant.
Every Boone forecast, graded daily against what actually happened. Boone's most mostly reliable weather resource.
Translation pending
LifestyleTypeScript · PythonGitHub @davidhlutherOnlineOwner 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
Satirical Boone, NC weather site with a real instrument underneath: ten forecasters graded daily on a public 100-point rubric, a self-grading traffic model, and a CC BY forecast API.
Taken from the repository README
Loading the full README.
Read the full README ↗Boone, NC's #2 weather resource. Live at davessweater.com.
A satirical local-weather site that answers the important question — is it sweater weather? — and runs a "Right Ray / Wrong Ray" tracker scoring forecast accuracy (Ray's Weather vs. Open-Meteo vs. Apple Weather, plus a growing bench of free forecasters) against verified actuals on a 100-point scale. The bit: show with data that free services keep pace with — or beat — the paid one. Not affiliated with Ray's Weather; Ray's great, use his site for actual weather.
Note for contributors: There is additional background context (origin story, tone guidance, and copy direction) that is intentionally kept out of this public repo. If you're working locally and need it, ask the owner — it lives in a private/local context file, not in version control. Do not commit personal, political, third-party, or network/infrastructure details to this public repository.
Two layers:
data/*.json. Scoring lives in scripts/scoring.py (100-point scale, tolerance bands per
field, sweater-weather logic), orchestrated by scripts/compare.py.data/*.json at build time and renders
the site. Vercel runs next build on every push to main; there's no committed HTML.scripts/ # Python data pipeline (stdlib only; Playwright just for capture_rays)
scoring.py # the 100-point scoring engine
compare.py # orchestrates scoring + sweater-weather logic for a given date
capture_openmeteo.py # Open-Meteo forecast + historical actuals
capture_rays.py # Ray's Weather screenshot + scrape
capture_iphone_weather.py # Open-Meteo fallback for the Apple Weather slot
export_scores_csv.py # scores.json → CSV
fetch_substack.py # Substack RSS → cached JSON (blog)
prepare_public.mjs # prebuild: latest data/predictions screenshots → public/screenshots
# a growing bench of capture/compare scripts for road conditions, tourism demand,
# local events, and other Boone-area signals lives alongside the core set above
data/ # committed JSON the site reads (predictions, actuals, comparisons, scores, ...)
src/ # Next.js app — lib/ (data, feeds, sweater, scoreboard, dates, html), components/, app/ (routes)
public/ # served assets (logo, icons); screenshots/ generated at build
.github/workflows/ # daily_capture, daily_compare, upload_screenshot (+ a few narrower feature crons)
Site routes worth knowing: / (today's forecast + sweater verdict), /right-wrong-ray (the
comparison + scoreboard), /resources (articles, news, report cards, and videos — the blog), /reports
(franchise landing pages like the fireworks forecast), /methodology (how the scoring works), /shop.
npm install
npm run dev # http://localhost:3000
npm run build # prebuild (screenshots) + next build
npm test # vitest
npm run lint
# Data pipeline (Python stdlib; Playwright only for capture_rays)
python scripts/capture_openmeteo.py --forecast
python scripts/capture_openmeteo.py --actuals --date 2026-03-01
python scripts/compare.py --date 2026-03-01
python scripts/compare.py --sweater-only
# Python test suite
python3 -m pytest tests/
GitHub Actions run the data pipeline and commit data/ to main every morning; each push triggers a
Vercel next build:
daily_capture.yml) — Ray's screenshot + scrape, Open-Meteo forecast, iPhone
fallback, plus the other capture scripts (roads, tourism demand, events, etc.) → commits data/.daily_compare.yml) — runs after Daily Capture, fetches yesterday's actuals,
scores predictions, checks capture health, exports the scores CSV → commits data/.upload_screenshot.yml) — accepts an Apple Weather screenshot via
the GitHub API (iOS Shortcut) → commits data/predictions/.A few narrower feature workflows (e.g. traffic sampling) run on their own schedules alongside these
two. Exact cron times live in .github/workflows/*.yml, not here — they've moved before and will
again.
Hosted on Vercel (vercel.json: framework: nextjs, outputDirectory: .next). Every push to
main deploys. Domain DNS via Squarespace.
~$12/year for the domain. Hosting + Actions are free-tier.
Dave's Sweater is not affiliated with Ray's Weather. Ray's great — use his site for actual weather.