Advanced PV System Calculator

Production-ready off-grid solar system design with comprehensive validation

Installer Mode

System Configuration

Installer mode shows engineering controls. Client mode keeps sizing on auto-suggest and simplifies outputs.
Classifies the site for better defaults, sample loads, and topology guidance without forcing the phase type.
Defines whether the system is mainly backup, daytime productivity support, or a deeper hybrid/off-grid operating plan.
Sets how severe an outage is for the business so proposal readiness can stay realistic.
Use the real site routine. This drives schedule-fit checks, overnight critical burden, and business-grade daytime shifting guidance.
Describes whether the quote targets the whole board, a selective essential board, a split process board, or a generator-assisted hybrid path.
Use this only when the site already has or will intentionally keep a generator in the operating plan.
Optional. Enter the real or planned generator rating so the assist path can be checked against the modeled board strategy.
Describe whether the array behaves like one field, split roofs, mixed orientation, roof-ground mix, or distributed site canopies.
Controls whether PV strings are grouped as one field or deliberately separated by tracker, field, or orientation.
Keep this honest. It tells the bot whether this is still one captive site, a multi-feeder commercial site, or a heavier plant-style job.
Use this to describe whether the site is really one board, a protected critical bus, radial feeders, or internal plant nodes.
Use this to distinguish islanded sites, behind-the-meter hybrids, internal private distribution, and utility-facing work.
Utility / mini-grid inputs (optional)
Use this only when the job has moved beyond a simple captive-site quote. These inputs help the app carry a cleaner packet, study-input, and commissioning scaffold without silently forcing the project into a heavier lane.
Use this to state whether the job still needs no separate packet, a captive plant handoff pack, a hybrid approval packet, or a formal interconnection packet.
Use this to state whether the feeder and protection basis is still preliminary, already frozen, under review, or now outside the app.
Use this to show whether the handoff only needs internal commissioning, a client witness path, or a formal authority witness lane.
Use this to keep captive, behind-meter, non-export, limited-export, and formal utility-metering stories explicit.
Optional application number, interconnection reference, study revision, or authority-facing tracking note.
Use this to show whether the packet is still planning-only, ready for submission, under review, or already under external case control.
Use this to show whether the handoff is installer-only, client-facing, authority-facing, or genuinely multi-party.
Use this to keep startup proof, staged transfer proof, non-export proof, or authority acceptance evidence explicit.
Use this to show whether the approval case is only being prepared, under authority review, carrying review comments, conditionally cleared, or already closed outside the proposal stage.
Optional owner, reviewer, or desk label responsible for the current authority or utility case.
Use the actual submission or formal review date once the packet leaves internal planning.
Use this to show whether the packet is still internal, installer-led, consultant-led, or already moving through a utility desk or portal.
Use this to show what actually controls the next gate: study/protection, metering/export, witness/energization, or only internal release.
Use this to show whether the next response cycle stays internal, installer-led, consultant-led, or already lives in a portal / redline lane.
Use this to show whether the current study handoff is still one-line basis, breaker/cable review, protection/relay review, or a separate external study pack.
Use this to show who now owns the feeder, protection, relay, or utility-study carry-through.
Use this to preserve the short fault-level, relay, export-limit, or protection-basis note that must stay attached to the study lane.
Use this to preserve the live point-of-connection, feeder, or internal node label the study handoff is actually tracking.
Use this to state whether the active study still only needs breaker/cable carry-through, feeder coordination, relay/export review, or a separate external selectivity study.
Use this to show how the study expects export to be controlled: captive no-export, zero-export control, relay proof, limited export, or utility-metered export.
Use this to preserve the short-circuit, fault-level, or SCC reference the study lane is actually working from.
Use this to show whether the active study still only needs breaker interlock basis, plant protection relay logic, non-export trip proof, utility-interface protection, or an external relay-study pack.
Use this to show whether the current handoff still uses manual changeover, ATS/staged transfer, synchronized transition, utility-controlled energization, or an external switching study.
Use the current response or packet revision label so packet, study, and witness exports stay on the same live revision.
Use this to show who now owns the next response, resubmission, witness prep, or closeout step.
Use the live due date for the next response, witness, or authority handback step.
Use this for bounded engineering handoff notes, not for generic proposal notes.
Use this to make the next live handback explicit across packet, study, and witness exports.
Use this to preserve lifecycle continuity across revisions, review cycles, and witness preparation.
Use this only for active review feedback or formal closeout comments, not for generic project notes.
Use this to show whether the one-line / SLD pack is still draft-only, review-ready, issued, or already controlled outside the app.
Use this to show how far the protection / relay pack has progressed without pretending the study itself is already done here.
Use this to show whether the witness or closeout pack is still being prepared, ready, issued, or already controlled outside the app.
Display only — set by region
Ambient temperature range (optional)
Site temperature window for panel derating. Region defaults apply — override only when site-specific data is available.
Facing equator is optimal. East/West common on urban rooftops
Latitude-matched tilt maximizes annual yield
Engineering overrides (optional)
Design margin, inverter surge headroom, and topology. IEC/NEC defaults applied — open only to override for a specific site or inverter spec sheet.
IEC/NEC standard: 125% for continuous loads
Typical: 2.0x rated capacity
Transformer inverters handle motor surge better due to heavier copper windings

Project Workspace

Autosave Ready
Full-project autosave keeps the current draft on this device. Save to browser for named reuse, or export a project file for transfer.
Browser projects stay on this device. Exported files let you move a design to another browser or archive it outside local storage.
Premium entitlement runtime (optional)
Offline-first premium testing and license posture lives here. Use it when you need to load a local trial or entitlement JSON directly on the device, even if backend sync is not configured.
Shows the live entitlement source, active plan, capability posture, and whether the app is running on community, trial, or offline grace.
Paste a local entitlement object here when you want to test capability posture or load an offline license without a backend.
Backend entitlement sync (optional)
This is the optional bridge for cross-device license sync. The calculator still works without it, and a static frontend can stay on GitHub Pages or any static host while this API is hosted separately.
Turn this on only when you have a real backend endpoint for trusted premium sync. Leaving it off keeps the app purely offline-first.
Point this to the separately hosted API origin. GitHub Pages can still host the frontend, but it cannot host this server API.
This is the device or license identifier the backend uses to return the right premium entitlement.
Optional desk or device label carried to the backend so license activity and sync records stay understandable.
Use this only as the bootstrap key for secured backend deployments. For production, prefer issuing a short-lived seat session instead of keeping an API key active in the browser.
Shows whether backend sync is disabled, incomplete, or ready, and whether the app is still falling back safely to the local entitlement resolver.
Use the seat access code for the active shared team seat when you want to issue a short-lived session without relying on the backend API key. This stays memory-only in the browser.
Issue uses either the active seat access code or the API bootstrap key. Renew rotates the current live session. Revoke removes it server-side. Clear Local Session only clears this browser copy.
Shows whether a short-lived backend seat session is active, which seat it belongs to, when it expires, and whether the current backend target still matches that session.
Paste the one-time recovery code or a signed recovery link issued by a Workspace Admin. This stays memory-only in the browser and is never written into autosave or project export.
Use a fresh seat access code when redeeming a recovery code. The backend stores only a derived hash and immediately invalidates older sessions for that seat.
Optional public hint for the new seat code. Keep it operational, not secret. The hint can help the desk recognize the right code later.
Redeem uses the one-time recovery code or signed recovery link to set a fresh seat sign-in and issue a short-lived session for that seat. Copy Recovery Link copies the staged hash-fragment link for secure handoff.
Shows the selected target seat, whether a one-time code is waiting in browser memory, and whether redeem is ready to rotate that seat into a fresh short-lived backend session.
Paste the one-time seat invite code or a signed seat-invite link issued for a saved shared seat. This is the onboarding or clean re-enrollment path and stays memory-only in the browser.
Choose the fresh seat sign-in that should become the new shared auth posture when the invite is redeemed.
Optional public hint for the fresh seat sign-in. Keep it operational, not secret.
Seat invite redeem is for onboarding or clean re-enrollment. It uses the one-time code or signed seat-invite link to establish the new seat sign-in and immediately returns a short-lived backend session for that seat. Copy Seat Invite Link copies the staged hash-fragment link for secure handoff.
Shows the selected saved seat for invite issue, whether a one-time invite is staged in this browser session, and whether onboarding redeem is ready.
Pulls the latest shared premium-backend activity for this installation key so team sync, brand sync, and entitlement actions have a visible trace.
Shows whether backend audit is unavailable, unauthenticated, or ready, plus the most recent shared activity pulled from the backend.
Team handback & approval flow (optional)
Use this when one person shapes the draft and another person needs to review, approve, release, or follow up. The preview stays visible in every tier, while the dedicated handback export is reserved for the team-workspace lane.
Records whether the project is still being drafted, under internal review, commercially signed off, engineering-reviewed, client-ready, or already handed off.
Use this to name the person or desk currently controlling the draft.
Name the desk or checkpoint that must review the draft before it can move on.
The next person, desk, or function that should receive the draft when this stage closes.
Use an internal follow-through date so the handback does not disappear into notes or chat history.
The preview remains visible to everyone. The dedicated handback export is the first Studio Team workflow action.
Use this for the small but important release conditions the next desk must see immediately.
Shows the local desk roster saved in this browser. Imported backend roster entries also land here so they can be reused offline later.
Use a short reusable desk name so your team can apply it quickly into current owner or review fields.
Role hints keep desk names consistent and make shared handback language easier to follow across the team.
Optional contact or lead line for this desk, useful when a handback should carry a real person as well as a desk.
Optional installation-level coordinator or admin line for the team workspace. This can be shared across devices when backend sync is configured.
Optional contact path for the installation-level team admin or coordination desk.
Desk roster convenience stays aligned to the team-workspace lane. The live owner and review fields still remain editable directly.
Use this only when backend sync is configured. It publishes the current admin + desk draft or imports the shared team roster for this installation key.
Use the saved team-seat list to pick the named operator or desk representative who should carry shared backend actions on this device.
This is the named person or seat identity that should appear in shared premium/backend actions and audit traces.
The seat role controls which shared backend actions this operator can publish, review, or administer.
Active seats can use their role authority, review-only seats can inspect but not publish, and suspended seats are blocked from shared premium actions.
Optional contact line for the operator or desk owner tied to this seat identity.
Optional public hint that can help the operator recognize the right seat access code without exposing the code itself.
Optional shared-seat sign-in code. When a Workspace Admin publishes a seat with this code, the backend stores only a derived hash and the seat can later issue sessions through sign-in instead of API-key bootstrap.
The active team seat is the named operator this browser uses when a shared premium/backend action needs a real actor instead of a generic device label.
Use this to bootstrap or sync the named team-seat library for the current installation key. The first shared seat should normally be an active Workspace Admin. Issue Seat Invite uses the selected saved seat and creates a one-time onboarding code through the backend.
Shows the active operator seat on this device, its effective shared permissions, and whether the backend is still in bootstrap posture or fully role-guarded.
Choose the shared seat that needs admin recovery, sign-in reset, or controlled session invalidation.
Recovery actions are explicit backend operations. They are audited and use the current active admin seat instead of an anonymous device identity.
Optional audit note for why the recovery action is being run. Keep it operational, not secret.
Optional public hint to publish alongside a rotated sign-in code. This hint is not secret and can help the desk pick the right code.
Memory-only recovery code input. It is sent only when rotating shared sign-in and is cleared after the recovery action completes.
Use this only from an active admin-grade seat. Recovery actions are audited on the backend and can revoke live seat sessions immediately. Issue Recovery Code creates a short-lived one-time code for the selected seat without exposing a long-lived secret.
Shows the selected recovery target, what the chosen action will do, and whether the current active seat has enough authority to run it.
Use this only when the optional backend sync is configured. It lets the current project handback move between desks or browsers without relying on manual copy-paste.
Shows whether the current project handback is local-only or ready to round-trip through the backend for the active installation key.

Quick Start Templates

Fresh Draft
Applies a structured project draft with curated loads, pricing posture, and proposal scope for common PV jobs.
Templates preserve the current location profile and installer identity, clear client-specific fields, and start a new unsaved draft.

Navigation Guide

Guided

Proposal Identity & Site Survey

Brand profile & release control (optional)
Keep manual identity fields free and editable. Use this block only when you want browser-saved company profiles, client-issue release posture, or a dedicated release brief without introducing backend dependency.
Shows the local company profiles saved in this browser for faster issuer loading.
Use a short label so you can tell profiles apart when one company has multiple desks or issuer variants.
The live company fields stay editable in every tier. The save/load profile library is the first branded-workflow convenience lane.
Use this only when the optional backend sync is configured. It lets a team publish company profiles to a shared backend library and pull them into this browser later.
Shows whether the company-profile library is currently local-only or linked to a shared backend library for the active installation key.
Optional accent color for branded proposal previews and branded PDF export when that workflow lane is entitled.
Optional short line for branded proposal identity. Keep it short enough to fit header use.
Optional branded footer note for proposal control and branded export context.
Optional small PNG or JPEG logo for local branded letterhead and branded PDF export. Keep it lightweight because it stays in browser storage.
Logo import and letterhead polish are part of the branded-exports lane. The live company identity remains visible without them.
This creates a branded proposal-issue pack summary from the live identity, release, and survey controls.
Default release templates stay available for everyone to inspect. Company-scoped save/apply actions are handled locally in the team-workflow lane.
Use a short company-specific label so desks can tell release-note templates apart.
Release-template convenience belongs in the team-workflow lane. The live release state and notes remain directly editable in every tier.
Use this to show whether the proposal is still a working draft, under review, ready for client issue, already issued, or frozen for delivery.
Use this for the short note that explains what must still happen before the proposal can be safely released.
The live release preview stays visible to everyone. The dedicated release brief is staged for the team-workflow lane.
Shown in the readiness summary and report header when set.
Used by the readiness engine to decide whether this is still scoping or proposal-safe.
These notes stay in the project file and support installer handoff.

Add Appliance

Step 1: Choose a machine type (optional)

Pick an archetype for tailoring, bakery, filling station, cold room, workshop, or mini-factory jobs. Apply it to pre-fill realistic defaults, then fine-tune below.

Filtered by the selected business profile, but still keeps the entry form fully editable.
Applying an archetype fills realistic wattage, duty, power-factor, surge, and phase-behavior defaults without locking the appliance fields.

Step 2: Fine-tune details

Start typing — auto-detects common appliances
Running wattage from nameplate. NOT startup watts.
Total hours appliance runs per day
% of time ON when running. Fridge ~40%, Iron ~50%, Pump 100%
Auto-detected from name. Motor = pumps/AC/fans. Electronic = TV/PC/LED
Auto-set by motor type. Inverter compressor: 2x. Surface pump: 3.5x. Deep well: 6x. Resistive: 1x
Motor: 0.6-0.8. Electronic: 0.9-0.95. Resistive: 1.0
% used during sun hours (6am-6pm). Lights: 10%, Office: 80%
Managed-mode load attributes (optional)
Used for managed-mode sizing, outage prioritization, and daytime-only scheduling. Defaults are inferred from machine archetype and load type.
How often is this load used? Affects managed mode sizing.
Can operator delay this load's startup? Fridge/freezer = No (thermostat). Motors = Yes.
Load ONLY runs during daylight? Iron, sewing, workshop tools = Yes.
Classifies whether this is a base, process, refrigeration, peak, or discretionary load.
Use this to tell the bot what must survive outages, what should survive, and what can wait.

Appliance List

No appliances added yet.

Upgrade Simulator

Simulate adding a new load to see if current system can handle it.

Equipment Specifications

Auto-Suggest Manual Input Manual mode validates your equipment against load requirements

Offline Equipment Library

Curated reference presets for common panel, inverter, and battery hardware. They apply clean starting values and still leave the fields editable.

Offline
Select a preset, then apply it to use it as a starting point for the equipment fields below.

No reference presets selected yet. The calculator still works fully in auto-suggest and manual modes.

Select if your panels have different Wp ratings

Solar Panel

Power derating per degree (typical: -0.35 to -0.45)

MPPT / Inverter PV Input Specs

Enter from your inverter/MPPT datasheet. These limits determine safe panel configurations.
Absolute max Voc the input can handle
Max DC current from panels
Total max watts from array
Min voltage to begin tracking
Upper Vmp working range
Max amps to battery from PV
How many independent PV inputs
Leave empty to auto-calculate from load, or enter how many panels you have/want
When enabled, panel count includes power for appliances running during sun hours (recommended). When disabled, panels only charge batteries — heavy daytime use will drain the battery even during sunshine.

Battery

Select a standard size or enter a custom Ah value
Voltage per battery unit (12V most common)
Leave blank to auto-calculate. Enter to override (e.g., 1 for single unit, 2 for two parallel).
Lithium batteries are often rated in kWh. Enter here to auto-calculate Ah based on your selected voltage.
Auto-calculated from kWh ÷ bank voltage
Cable lengths (optional)
Override only when actual run distances are known. Defaults match a typical compact installation.

Cable Lengths

Proposal Pricing

Applies only pricing, finance sensitivity, commercial terms, and scope wording. Load and engineering inputs stay unchanged.
Use this as a proposal shortcut, then tune any field manually for the actual job.
Reference label shown in the BOM and proposal totals.
Local currency units per 1 USD. Leave blank to use the region default. Applies to client-facing PDF totals only — supplier rate cards stay in USD.
Adjusts component quality level and quote spread.
Use this to tune the reference BOM for import costs, distributor markup, and local market conditions.
Switch to Local Cost Build-Up to enter actual per-unit procurement prices in your installer currency. The benchmark model uses regional supplier rate cards.
Offline regional benchmark pack used as the base component pricing layer before package posture and market multiplier are applied.
Shows the current benchmark source, active battery chemistry rate, and whether manual overrides are in play.
Tells the proposal whether pricing is still benchmark-only or already tied to live supplier numbers.
Use the most recent supplier reference date that actually supports the current quote.
After this window, the quote should be treated as aging and due for supplier refresh.
Optional vendor quote number, spreadsheet reference, or internal sourcing note.
Shows whether the current commercial story is benchmark-only, fresh, aging, or stale for quote issue.
Request refreshed supplier quote (optional)
Generate a clean supplier refresh brief from the current recommended design, the current quote freshness state, and the active pricing posture. This stays offline and does not change the engineering design or pricing fields.
Use this when the quote is aging or stale, or any time you want to reconfirm live supplier numbers from the current design without retyping the commercial basis.
Import supplier quote (optional)
Paste a simple supplier email, WhatsApp text, or spreadsheet rows here. The assistant will extract recognized unit rates, quote reference, and quote date into the existing supplier quote fields without changing the engineering design.
Works best with one line per component, simple CSV-like rows, or structured JSON quote files. The importer only fills recognized commercial fields.
Review the matched component rates and metadata before writing them into the live pricing fields.
Optional manual override. Leave blank to inherit the selected pack.
Useful when a live inverter quote is known but the rest of the BOM is still benchmarked.
Applies to the currently selected battery chemistry.
Used for standalone MPPT or reduced hybrid PV electronics allowances.
Rails, clamps, brackets, roof hardware, and mechanical BOS.
Breakers, fuses, isolators, SPD, enclosures, and earthing accessories.
Used against the estimated copper mass from the cable engine.
Commissioning, labels, monitoring setup, and handover allowance.
Override only the line items you already have supplier numbers for. Blank fields continue to inherit the selected pack so you can mix live quotes with the offline benchmark safely.
Applies to equipment subtotal.
Transport, permitting, site prep, and consumables.
Installer gross margin before tax.
Applied after margin. Leave at 0% if tax is handled separately.
Sets what the displaced kWh value represents in the ROI and payback summary.
Use the client bill, generator-derived kWh cost, or a blended site energy cost. This is advisory, not a live tariff feed.
Used only when there is meaningful surplus value or feed-in credit. Leave low or zero when export is not monetized.
Set the real weekly operating rhythm for the business value model.
Used for the 5-year and 10-year gross value outlook, not for the simple payback headline.
The ROI layer is a commercial planning aid. Replace the avoided-energy rate with the client’s real tariff or generator-derived kWh cost before presenting the payback as final.
Applied to the modeled quote for lifecycle sensitivity. Use this for routine service, cleaning, and maintenance planning.
Percent of the current inverter line reserved for a mid-life electronics refresh. The lifecycle view assumes this around year 10.
Percent of the current battery line reserved for augmentation or replacement. Timing follows the active battery chemistry.
Advanced finance sensitivity (optional)
Use this only when the client needs an advisory capital-stack view. It is still not a lender-grade finance model.
Optional tax relief, grant-equivalent, or first-year incentive expressed as a percent of the quoted amount.
Percent of the quote assumed to be financed instead of paid up-front as equity.
Annual borrowing rate for sensitivity only. Leave at 0 when the project is modeled as all-equity.
Used to spread debt service in the 5-year and 10-year advisory view.
Optional end-of-horizon salvage or retained asset value applied to the equipment subtotal only.
Upfront payment used in the proposal payment plan.
How long the estimate can be held before supplier prices are refreshed.
Reference site time after materials and access are ready.
One line per included item. These lines appear in the commercial summary and client PDF.
Use this to keep the estimate commercially honest and avoid hidden-scope disputes.
These become the proposal close-out actions shown to the installer and client.
Commercial Model: This uses offline supplier benchmark packs plus optional manual overrides, not a live distributor feed. Lock actual brands and distributor quotes before procurement or contract issue.

Results

Ready to Calculate?

Complete these steps to generate your system design:

Configure System Set location, system type, and business profile
Add at least one load Use Machine Library or enter appliance details manually
Review Equipment Auto-suggest is on by default -- or specify your own equipment
Click Calculate System Design Runs the full 12-phase engineering pipeline
Generating PDF...