Easy-to-manage touch screens
무료 오픈소스 터치스크린으로 USB 설정 가이드, 드래그‑드롭 편집기, 로컬 제어를 제공하며 Home Assistant용으로 제작되었습니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A thin React client over the Inverter Power Project
API (django-bolt, hosted on Render). You pick appliances, and it sends them to the API and shows
the inverter, battery bank, solar array and charge controller sizing that comes back. None of the
sizing maths lives here.
• API: https://watt-wise-2cfq.onrender.com (docs at /api/docs)
• App: https://wattwise-rho.vercel.app
Appliances are sent by ID. The picker is filled from
GET /api/v2/power_calculator/appliances/, and v1 and v2 serve the same list. That request
fires when a page loads, so it also wakes the Render instance before you submit.README 전문 보기 ↗A thin React client over the Inverter Power Project API (django-bolt, hosted on Render). You pick appliances, and it sends them to the API and shows the inverter, battery bank, solar array and charge controller sizing that comes back. None of the sizing maths lives here.
/api/docs)| Route | Endpoint | Inputs |
|---|---|---|
/ | — | Landing page: what the tool does, the sizing pipeline with its formulas, v1 vs v2, model constants. |
/v1 | POST /api/v1/power_calculator/calculate/ | One backup time (1–24 h) for every appliance. Standard sizes only: 12/24/48 V, 150/200/220/250 Ah batteries, 300/350/400/450 W panels. Whole watts. |
/v2 | POST /api/v2/power_calculator/calculate/ | A backup time for each appliance. Any system voltage that is a multiple of 12 (up to 240 V), batteries 1–5,000 Ah, panels 1–1,000 W. |
Appliances are sent by ID. The picker is filled from
GET /api/v2/power_calculator/appliances/, and v1 and v2 serve the same list. That request
fires when a page loads, so it also wakes the Render instance before you submit.
Both versions use the same sizing model. The only difference is how daily energy is worked out:
v1 uses total load × backup time, and v2 uses Σ watts × qty × hours. With the same hours for
every appliance, v1 and v2 give the same results.
Light, dark and system themes are available from the header toggle. The choice is stored in
localStorage under wattwise-theme, and an inline script in index.html applies it before
first paint.
npm install
npm run dev
VITE_API_BASE_URL sets the API base URL, with no trailing slash. It defaults to the Render URL
when unset, so no .env is needed. For a local API, set it in .env.local.
The API has to allow the site's origin through CORS. On Render, CORS_ALLOWED_ORIGINS must
include https://wattwise-rho.vercel.app, and http://localhost:5173 for local development.
npm run dev: dev servernpm run build: typecheck (tsc -b), then production buildnpm run lint: oxlintnpm run preview: serve the production buildvercel.json rewrites every path to index.html, so /v1 and /v2 work when loaded directly.
src/
main.tsx QueryClient + router (/, /v1, /v2; unknown paths → /)
api/
client.ts fetch wrapper, ApiError (status, message, 422 issues)
types.ts request/response types mirroring the API's msgspec schemas
appliances.ts useAppliances() — cached for the session
calculate.ts calculateV1 / calculateV2
lib/
schemas.ts zod schemas with the same limits as the API
serverErrors.ts maps a 422 `loc` to a form field path
useCalculation.ts mutation + puts API errors on the matching fields
theme.ts useTheme() — light / dark / system
format.ts, links.ts, model.ts
pages/
LandingPage.tsx, V1Page.tsx, V2Page.tsx
components/
Layout.tsx sticky header, nav, theme toggle, footer
CalculatorLayout.tsx page header, form column, sticky spec-sheet column
Panel.tsx numbered section panel ("01 System")
ItemsTable.tsx appliance rows: cards on phones, table from sm; live totals
SpecSheet.tsx inverter / batteries / solar / controller tiles
Results.tsx spec sheet + daily energy + energy by appliance
Field.tsx input / select with label hint, unit suffix, error wiring
states.tsx empty, loading (elapsed seconds, cold-start note), error
Colours are CSS variables in src/index.css (:root and .dark), exposed to Tailwind as
bg-surface, text-muted, border-line, bg-accent and so on. Components use only these
tokens, so both themes stay in sync. Fonts (Inter, JetBrains Mono for figures) are self-hosted
via @fontsource-variable.
The form checks input against the same limits as the API before sending anything. If the API
still returns a 422, each issue's loc (for example ["body","items","1","id"]) is mapped onto
the field it names. Issues that can't be placed on a field, and non-422 errors, appear in the
results panel.