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.