RUSTAM BATTERY
Solar energy commerce for Pakistan's hottest summers.
Production e-commerce + marketing site for one of Lahore's most trusted solar energy companies. Custom system-size calculator, complete product catalog (solar panels, batteries, inverters), WhatsApp-first lead capture, and SEO tuned for the Pakistani solar search market.

From brief to production system.
Pakistani solar buyers research extensively before purchasing — they want brand comparisons (Osaka vs AGS vs Phoenix), real-world bill savings, and direct human contact. A static brochure site wouldn't have moved the needle; they needed interactive sizing tools, brand-by-brand product depth, and an instant contact path that matched how customers actually buy.
Built a Next.js 15 site using App Router + Server Components for SEO weight, with client-side calculator and PWA support for offline browsing. Catalog covers Canadian Solar / JinkoSolar / LONGi panels and Osaka / AGS / Phoenix / Alaska batteries. Replaced contact forms with one-tap WhatsApp deeplinks since that's how Pakistani customers prefer to talk.
Site ranks on page 1 for several 'solar Lahore' queries, generates daily WhatsApp leads, and converts visitors directly into site-visit bookings — replacing the old cold-call funnel.
How it shipped, week by week.
Discovery
Sat with the founder, mapped how solar customers actually shop in Pakistan, audited competitor sites, and wrote the keyword strategy.
Catalog + design
Built the product schema (brands, models, prices), designed the home and product pages, and got the photoshoot done for the team page.
Calculator + WhatsApp
Shipped the solar sizing calculator, integrated WhatsApp deeplinks with prefilled message templates, and wired Google Maps for the showroom.
SEO + performance
Geo meta tags for Punjab/Lahore, JSON-LD LocalBusiness markup, Lighthouse pass for performance and accessibility.
Launch
Submitted to Google Search Console, set up analytics, handed over the admin docs to the client team.
What it does. How it's built.
Features
- Custom solar system size calculator (kW + savings estimate)
- Full product catalog with brand filters and live pricing
- Battery comparison guide (tubular vs lithium)
- One-tap WhatsApp lead capture (no forms)
- Google Maps store location with directions
- Team trust page with founder photo
- PWA installable on mobile home screen
- Aggressive SEO for Pakistani solar keywords
Architecture
- 01Next.js 15 App Router with Turbopack build pipeline
- 02Server Components for the marketing + catalog routes
- 03Client Components only for calculator + interactive UI
- 04Static generation for product pages → fast TTFB
- 05next/image with responsive srcsets for product photos
- 06PWA manifest + service worker for offline support
- 07WhatsApp deeplinks instead of contact form backend
- 08Vercel edge hosting with global CDN
Annotated excerpts.
interface QuoteInput {
monthlyBillPKR: number;
cityIrradiance: number; // kWh/m²/day
loadFactor?: number;
}
export function recommendSystemSize(input: QuoteInput) {
const { monthlyBillPKR, cityIrradiance, loadFactor = 0.85 } = input;
// Approx unit cost in PKR (residential slab average)
const PKR_PER_UNIT = 42;
const monthlyKwh = monthlyBillPKR / PKR_PER_UNIT;
const dailyKwh = monthlyKwh / 30;
// System size in kW to cover daily generation
const systemKw = dailyKwh / (cityIrradiance * loadFactor);
// Payback at ~70% bill offset
const annualSavings = monthlyBillPKR * 12 * 0.7;
const upfrontCost = systemKw * 145000; // PKR per kW installed
const paybackYears = upfrontCost / annualSavings;
return {
systemKw: Math.round(systemKw * 10) / 10,
panelsNeeded: Math.ceil((systemKw * 1000) / 580),
paybackYears: Math.round(paybackYears * 10) / 10,
annualSavingsPKR: Math.round(annualSavings),
};
}const SHOWROOM_NUMBER = "923213770402"; // +92 321 3770402
interface LeadContext {
product?: string;
systemKw?: number;
city?: string;
}
export function whatsappLink(ctx: LeadContext = {}) {
const lines = [
"Hi! I'm interested in solar from your website.",
ctx.product && `Product: ${ctx.product}`,
ctx.systemKw && `Recommended size: ${ctx.systemKw} kW`,
ctx.city && `Location: ${ctx.city}`,
].filter(Boolean);
const text = encodeURIComponent(lines.join("\n"));
return `https://wa.me/${SHOWROOM_NUMBER}?text=${text}`;
}Continue browsing
Have a project like this in mind? Let's talk.
Send me a brief and I'll respond within 24 hours.