Bygga
Type the product name from the box. Bygga shows every assembly step in 3D, with the parts, screws and tools for each one, and reads it out loud.
翻译准备中
Kira panel solar terbaik di Malaysia untuk mengira berapa banyak panel solar yang diperlukan untuk rumah anda. Dapatkan anggaran kos, penjimatan bil elektrik TNB, dan ROI sistem solar dengan mudah. Se
翻译准备中
生活方式TypeScript · CSSGitHub @azuanalias92在线运营者未确认
试用过了吗? 点一下就好,无需登录。
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Automatically generate a calculation for DIY Home Solar System
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗A solar calculator and electricity tracking toolkit for Malaysian households — live at kirasolar.my.
This repo is the Next.js frontend. It talks to a separate Cloudflare Workers API (Hono + D1).
Requires Node 22 (see .nvmrc).
npm install
npm run dev
Open http://localhost:3000.
Create .env.local in the project root:
NEXT_PUBLIC_API_BASE_URL=http://localhost:8787
NEXT_PUBLIC_GOOGLE_CLIENT_ID=YOUR_GOOGLE_CLIENT_ID
GOOGLE_SITE_VERIFICATION= # optional
Restart npm run dev after changing env vars.
Sign-in uses Google's redirect flow, so it works in every browser without popups. In Google Cloud Console, the OAuth client must list each origin under Authorized JavaScript origins and its /api/auth/google URL under Authorized redirect URIs, for example:
https://kirasolar.my and https://kirasolar.my/api/auth/googlehttp://localhost:3000 and http://localhost:3000/api/auth/google| Command | Description |
|---|---|
npm run dev | Start the dev server |
npm run lint | Run ESLint |
npm run build | Production build (includes type-checking) |
npm run start | Serve the production build |
All routes are locale-prefixed (/ms/... or /en/...). Visiting / redirects based on your saved preference or browser language.
| Route | Page |
|---|---|
/{locale} | Dashboard |
/{locale}/solar-calculator | Solar calculator |
/{locale}/ev-calculator | EV charging cost calculator |
/{locale}/settings | Tariff settings and rates |
Legacy routes (/bill-ev, /ev, /usage, /rates) redirect to their current equivalents.
The frontend expects the API to expose:
POST /auth/google — exchange a Google ID token for a session tokenGET/PUT /calculator/state — store the calculator stateGET/PUT /ev-usage and GET /ev-usage/years — EV usage by yearGET /tariff-rates — rate previewGET /docs — Swagger UIsrc/
├── app/
│ ├── layout.tsx # Root layout, metadata, service worker
│ └── [locale]/ # Internationalized routes
│ ├── page.tsx # Dashboard
│ ├── solar-calculator/
│ ├── ev-calculator/
│ ├── settings/
│ └── items/ # Appliance form
├── components/
│ ├── ui/ # shadcn/ui components
│ ├── dashboard/ # Dashboard sections
│ └── ... # Header, nav, footer, auth button, etc.
├── lib/
│ ├── auth.ts # Client auth storage helpers
│ ├── pdfExport.ts # PDF generation
│ ├── useTranslation.ts # Translation hook
│ └── utils.ts
├── locales/ # en.json, ms.json
└── proxy.ts # Locale routing
public/ # PWA manifest, service worker, sitemaps, OG images
Translations live in src/locales/en.json and src/locales/ms.json. Add new keys to both files and use them via t("section.key") from useTranslation. Missing keys fall back to English.
Deployed on Vercel. Security headers (including CSP) are configured in next.config.mjs — update the CSP when adding new external origins.
Contributions are welcome! Please open a Pull Request. AI coding agents should read AGENTS.md.
This project is licensed under the Apache License 2.0 — see the LICENSE file for details.