Truck Utilization 65% → 79%, Fuel Theft Detected in Month One: The Digital Mining Architecture I BUILT

From Jakarta to Sydney: how I built Cybera360, a platform combining automated risk assessment, real-time vulnerability scanning, and cyber insurance quoting — protecting 10,000+ SMEs across Asia Pacific.
"Cybersecurity is no longer just an IT problem — it's a business risk that demands an insurance-grade solution." — Krishna Nagashwaran, Venture Lead
As a frontend & backend engineer at Kano Solution, I contributed to the development of Cybera360 — a cyber insurance platform owned by IAG (Insurance Australia Group), Australia's largest general insurer (ASX-listed, ~AU$12B market cap). The platform was incubated within IAG Firemark Labs Singapore as IAG's first corporate venture into the cyber insurance space.
Cybera360 (CA360) is an online platform that combines cyber insurance and cyber assurance (cybersecurity services) to serve Small-Medium Enterprises (SMEs) across Asia Pacific. Launched in 2019 through IAG's Firemark incubation program, the platform pioneered the one-stop holistic cyber service approach.
This article dissects the technical architecture, engineering challenges, and solutions built to transform a weeks-long underwriting process into minutes.
Before Cybera360, obtaining cyber insurance for small-medium businesses was painful:
Getting a cyber insurance quote took 3-4 days through a manual process — filling out 100+ questions, waiting for underwriter review, back-and-forth via email.
SMEs don't have dedicated cybersecurity teams. Technical questions in insurance forms are often confusing, causing them to give up midway.
Traditional cyber insurance only pays claims AFTER an attack occurs. No proactive approach to prevent incidents from happening in the first place.
Most cyber insurance products are designed for large enterprises. SMEs — who are actually most vulnerable to cyber attacks — are underserved.
The global cyber insurance industry was valued at USD 7.8 billion (2020) and projected to reach USD 20+ billion by 2025. IAG — as Australia's largest insurer — needed a platform that could be a first-mover in the Asia Pacific market. Speed of development was crucial.
Cybera360 was designed as a microservices-based platform integrating various third-party services into one seamless user experience.
graph TD
A[SME Customer / Broker] -->|Access| B[Cybera360 Web Platform]
B -->|Risk Assessment| C[Risk Scoring Engine]
B -->|Insurance Flow| D[Quoting & Underwriting Service]
C -->|Vulnerability Scan| E[UpGuard API]
C -->|Security Posture| F[Risk Data Aggregator]
F -->|Score Calculation| G[Cyber Risk Score Module]
G -->|Eligibility Check| D
D -->|Policy Creation| H[ERGO Underwriting System]
B -->|Value-Add Services| I[Acronis - Backup & Endpoint]
B -->|Training Module| J[RHCS - Cyber Education]
B -->|Dashboard| K[D3.js Risk Visualization]
H -->|Distribution| L[Broker Network]sequenceDiagram
participant U as SME User
participant P as Cybera360 Platform
participant RS as Risk Scoring Engine
participant UG as UpGuard API
participant UW as ERGO Underwriting
participant D as Dashboard
U->>P: Start application (< 30 questions)
P->>RS: Submit business profile
RS->>UG: Request vulnerability scan
UG-->>RS: Security posture data
RS->>RS: Calculate cyber risk score
RS-->>P: Risk assessment result
P->>UW: Submit scored application
UW-->>P: Quote & premium
P->>D: Render risk visualization
P-->>U: Quote ready (< 30 min)
Note over U,P: vs. Traditional: 3-4 daysKey Architecture Decisions:
Each partner (UpGuard, Acronis, RHCS) has its own adapter service that normalizes data to the platform's internal format. This allows adding or replacing partners without changing core business logic. The architecture also enables independent scaling — the risk scoring engine can scale without affecting the quoting service.
Using Nuxt.js (Vue) for SSR ensures fast initial loading performance and SEO-friendliness — important for a B2B platform that needs to be discoverable by SMEs through search engines. SSR also enables more efficient hydration for data-intensive D3.js dashboards.
The risk scoring engine is separated as an independent service to facilitate model iteration without deploying the entire platform. The scoring model can be updated based on actual claims data and changes in the cyber threat landscape without downtime.
ERGO Insurance Singapore (Munich Re subsidiary) provides underwriting capacity and broker distribution network. Integration is done via API so that the policy creation process can be automated end-to-end.
| Technology | Role | Why Chosen |
|---|---|---|
| Nuxt.js | Web application framework | SSR for performance, Vue ecosystem for developer productivity, SEO-friendly |
| D3.js | Risk visualization & dashboard | Most flexible library for custom data visualization — risk heatmaps, scoring charts |
| Vue.js | UI components | Reactive data binding ideal for dynamic forms and real-time risk score updates |
| Figma | Design system & prototyping | Design collaboration with UX team in Singapore and Australia |
| Technology | Role | Why Chosen |
|---|---|---|
| Golang | Core backend services | High-performance, strongly-typed, ideal for complex business logic |
| Node.js | API gateway & middleware | Rich middleware ecosystem, JSON-native for partner API integration |
| PostgreSQL | Primary relational database | ACID compliance for insurance policy data, audit trail |
| MongoDB | Document store | Flexible schema for storing variable risk assessment data |
| Partner | Service | Integration |
|---|---|---|
| UpGuard | Vulnerability scanning | API integration for automated security posture assessment |
| Acronis | Backup & endpoint protection | Bundled service for value-add cyber assurance |
| RHCS | Cyber education & training | Integrated training modules for SME cybersecurity education |
| ERGO | Insurance underwriting | Policy creation, premium calculation, broker network distribution |
| Tool | Role | Usage |
|---|---|---|
| Jira | Project management | Sprint planning, backlog management, bug tracking |
| Confluence | Documentation | Technical specs, API docs, architecture decision records |
| Postman | API testing | Testing integrations with UpGuard, ERGO, and partner APIs |
| Swagger | API documentation | OpenAPI specs for inter-team and partner communication |
| DBeaver | Database management | Query, monitoring, and debugging PostgreSQL/MongoDB databases |
| MS Teams | Communication | Daily standups, cross-timezone meetings with AU/SG teams |
| Docker | Containerization | Consistent development environment and deployment |
Problem: Traditional underwriters needed 3-4 days to manually evaluate a business's cyber risk. They had to inspect IT infrastructure, security policies, incident history, and compliance — often through tedious 100+ question forms.
Solution: A risk scoring engine that automatically aggregates data from multiple sources and produces an actionable numerical risk score.
graph TD
A[Business Profile Data] --> D[Risk Data Aggregator]
B[UpGuard Vulnerability Scan] --> D
C[Questionnaire Responses] --> D
D --> E[Risk Scoring Engine]
E --> F{Score Classification}
F -->|Score >= 80| G[Low Risk - Standard Premium]
F -->|Score 50-79| H[Medium Risk - Adjusted Premium]
F -->|Score 30-49| I[High Risk - Premium Surcharge]
F -->|Score < 30| J[Uninsurable - Remediation Required]
G --> K[Auto-Quote Generation]
H --> K
I --> L[Manual Underwriter Review]
J --> M[Remediation Recommendations]
style G fill:#d1fae5,stroke:#10b981,color:#000
style H fill:#fef3c7,stroke:#f59e0b,color:#000
style I fill:#fed7aa,stroke:#f97316,color:#000
style J fill:#fee2e2,stroke:#ef4444,color:#000// Cyber Risk Scoring Engine
type RiskScore struct {
Overall float64 `json:"overall_score"`
Categories map[string]float64 `json:"category_scores"`
Vulnerabilities int `json:"vulnerability_count"`
RiskLevel string `json:"risk_level"`
Insurable bool `json:"insurable"`
Recommendations []string `json:"recommendations"`
}
type RiskInput struct {
BusinessProfile BusinessProfile `json:"business_profile"`
VulnerabilityScan VulnerabilityData `json:"vulnerability_scan"`
Questionnaire []QuestionAnswer `json:"questionnaire"`
}
func (s *ScoringService) CalculateRiskScore(ctx context.Context, input RiskInput) (*RiskScore, error) {
// 1. Score each category independently
categories := map[string]float64{
"network_security": s.scoreNetworkSecurity(input.VulnerabilityScan),
"data_protection": s.scoreDataProtection(input.Questionnaire),
"access_control": s.scoreAccessControl(input.Questionnaire),
"incident_response": s.scoreIncidentResponse(input.Questionnaire),
"business_continuity": s.scoreBusinessContinuity(input.Questionnaire),
"compliance": s.scoreCompliance(input.BusinessProfile),
}
// 2. Weighted average — network security and data protection weighted higher
weights := map[string]float64{
"network_security": 0.25,
"data_protection": 0.25,
"access_control": 0.15,
"incident_response": 0.15,
"business_continuity": 0.10,
"compliance": 0.10,
}
var overallScore float64
for category, score := range categories {
overallScore += score * weights[category]
}
// 3. Determine risk level and insurability
riskLevel, insurable := classifyRisk(overallScore)
return &RiskScore{
Overall: overallScore,
Categories: categories,
Vulnerabilities: input.VulnerabilityScan.TotalFindings,
RiskLevel: riskLevel,
Insurable: insurable,
Recommendations: generateRecommendations(categories),
}, nil
}
func classifyRisk(score float64) (string, bool) {
switch {
case score >= 80:
return "LOW", true
case score >= 50:
return "MEDIUM", true
case score >= 30:
return "HIGH", true
default:
return "CRITICAL", false // Remediation required before insurable
}
}Results:
| Metric | Before (Manual) | After (Cybera360) | Improvement |
|---|---|---|---|
| Time to risk assessment | 3-4 days | < 30 minutes | ↓ 99% |
| Assessment questions | 100+ questions | < 30 questions | ↓ 70% |
| Assessment drop-off rate | ~60% | ~15% | ↓ 75% |
| Scoring consistency | Varies by underwriter | 100% consistent | Standardized |
Problem: Raw risk assessment data is meaningless to SME business owners. They need intuitive visual representations to understand their security posture and areas that need improvement.
Solution: Interactive dashboard using D3.js that renders risk scores visually — radar charts for risk categories, heatmaps for vulnerabilities, and trend charts for continuous monitoring.
graph LR
A[Risk Score API] --> B[Data Transform Layer]
B --> C[D3.js Rendering Engine]
C --> D[Radar Chart - Risk Categories]
C --> E[Heatmap - Vulnerability Severity]
C --> F[Gauge - Overall Score]
C --> G[Timeline - Risk Trend]
D --> H[Interactive Dashboard]
E --> H
F --> H
G --> H
H --> I[Export PDF Report]
H --> J[Share with Broker]// D3.js Radar Chart for Risk Category Visualization
interface RiskCategory {
category: string;
score: number;
maxScore: number;
label: string;
}
function renderRadarChart(
container: string,
data: RiskCategory[],
options: ChartOptions,
): void {
const svg = d3
.select(container)
.append("svg")
.attr("width", options.width)
.attr("height", options.height);
const radius = Math.min(options.width, options.height) / 2 - options.margin;
const angleSlice = (Math.PI * 2) / data.length;
// Draw concentric circles (score levels)
const levels = [20, 40, 60, 80, 100];
levels.forEach((level) => {
svg
.append("circle")
.attr("r", (radius * level) / 100)
.attr("class", `level-${level}`)
.style("fill", "none")
.style("stroke", getRiskColor(level));
});
// Draw radar area
const radarLine = d3
.lineRadial<RiskCategory>()
.radius((d) => (radius * d.score) / 100)
.angle((_, i) => i * angleSlice)
.curve(d3.curveLinearClosed);
svg
.append("path")
.datum(data)
.attr("d", radarLine)
.style("fill", getOverallColor(data))
.style("fill-opacity", 0.3)
.style("stroke", getOverallColor(data))
.style("stroke-width", 2);
// Interactive tooltips on hover
data.forEach((d, i) => {
const x = radius * (d.score / 100) * Math.cos(angleSlice * i - Math.PI / 2);
const y = radius * (d.score / 100) * Math.sin(angleSlice * i - Math.PI / 2);
svg
.append("circle")
.attr("cx", x)
.attr("cy", y)
.attr("r", 6)
.on("mouseover", () => showTooltip(d))
.on("mouseout", hideTooltip);
});
}The radar chart visualization was chosen because it allows business owners to see at a glance where their security strengths and weaknesses lie. Intuitive colors (green = safe, yellow = needs attention, red = critical) help non-technical users understand their risk posture without reading lengthy reports.
Results:
| Metric | Before | After | Improvement |
|---|---|---|---|
| User engagement (time on dashboard) | N/A (text PDF) | 4.2 min avg | New capability |
| Customer understanding of risk posture | Survey: 23% | Survey: 78% | ↑ 239% |
| Broker presentation efficiency | 30 minutes | 5 minutes | ↓ 83% |
Problem: The traditional cyber insurance quoting process required 100+ question forms, manual underwriter review, and back-and-forth via email — totaling 3-4 business days. Many SMEs gave up midway through the process.
Solution: Smart questionnaire reducing questions from 100+ to < 30 using adaptive branching — different questions based on previous answers.
graph TD
A[Start Assessment] --> B{Business Type?}
B -->|Tech/SaaS| C[Tech-Specific Questions - 12 Qs]
B -->|Retail/F&B| D[Retail-Specific Questions - 8 Qs]
B -->|Professional Services| E[Services Questions - 10 Qs]
C --> F{Annual Revenue?}
D --> F
E --> F
F -->|< SGD 1M| G[Basic Coverage Flow - 5 Qs]
F -->|SGD 1M-10M| H[Standard Coverage Flow - 8 Qs]
F -->|> SGD 10M| I[Enterprise Flow - 12 Qs]
G --> J[Auto Risk Scoring]
H --> J
I --> J
J --> K[Quote Generation < 30 min]// Adaptive Questionnaire Engine
interface Question {
id: string;
text: string;
type: "select" | "text" | "number" | "boolean";
options?: string[];
dependencies?: {
questionId: string;
condition: "equals" | "gt" | "lt" | "includes";
value: any;
action: "show" | "skip";
}[];
weight: number; // Impact on risk score
}
function getNextQuestions(
allQuestions: Question[],
answers: Record<string, any>,
): Question[] {
return allQuestions.filter((q) => {
if (!q.dependencies) return true;
return q.dependencies.every((dep) => {
const answer = answers[dep.questionId];
if (answer === undefined) return dep.action === "skip";
switch (dep.condition) {
case "equals":
return dep.action === "show"
? answer === dep.value
: answer !== dep.value;
case "gt":
return dep.action === "show"
? answer > dep.value
: answer <= dep.value;
case "includes":
return dep.action === "show"
? dep.value.includes(answer)
: !dep.value.includes(answer);
default:
return true;
}
});
});
}Results:
| Metric | Before (Traditional) | After (Cybera360) | Improvement |
|---|---|---|---|
| Time to quote | 3-4 days | < 30 minutes | ↓ 99% |
| Number of questions | 100+ | < 30 | ↓ 70% |
| Completion rate | ~40% | ~85% | ↑ 112% |
| First-month deals closed | N/A | 4 deals | Via ERGO brokers |
Problem: Traditional cyber insurance is reactive — it only pays claims after an attack occurs. There's no incentive or tool to prevent incidents in the first place.
Solution: A one-stop platform combining insurance with proactive security services — vulnerability scanning, backup, and education — creating an ecosystem that reduces risk before claims happen.
graph TD
A[Cybera360 Platform] --> B[Cyber Insurance]
A --> C[Cyber Assurance]
B --> D[Policy Management]
B --> E[Claims Processing]
B --> F[Premium Calculation]
C --> G[UpGuard - Vulnerability Monitoring]
C --> H[Acronis - Backup & Endpoint]
C --> I[RHCS - Education & Training]
G -->|Continuous Scan| J[Risk Score Update]
J -->|Improved Score| K[Premium Discount Opportunity]
J -->|Degraded Score| L[Alert + Remediation Guide]
H -->|Incident| M[Faster Recovery = Lower Claim]
I -->|Trained Staff| N[Fewer Human-Error Incidents]UpGuard (an IAG Firemark Ventures portfolio company) provides continuous cyber risk monitoring and third-party risk assessment. Integration with Cybera360 enables:
Data from UpGuard feeds directly into the Risk Scoring Engine to determine eligibility and premium levels.
Acronis provides backup and endpoint protection solutions bundled as a value-add service:
Businesses using Acronis through the platform have lower claim severity because of faster recovery times.
RHCS provides education and awareness training modules:
Employee education is the first line of defense — 95% of cyber incidents start from human error (phishing, weak passwords, social engineering).
Project structure setup (Nuxt.js frontend, Golang backend), database schema (PostgreSQL + MongoDB), and core risk scoring engine implementation. Define scoring model based on cyber insurance industry frameworks.
Interactive dashboard development with D3.js — radar charts, heatmaps, scoring gauges, and trend visualizations. Design iteration with the UX team in Singapore through Figma prototyping.
UpGuard API integration for automated vulnerability scanning, Acronis for backup & endpoint, and RHCS for training modules. Build adapter layer for data normalization from various partners.
Adaptive questionnaire engine implementation and integration with ERGO underwriting system. Build premium calculation module based on risk score output.
UAT with ERGO broker network in Singapore. Closed-door "test and learn" — refine scoring model based on broker and underwriter feedback. Successful launch: 4 deals closed in the first month.
One unique aspect of this project was the cross-border collaboration: engineering team in Surabaya (Indonesia), product & business in Singapore (Firemark Labs), and stakeholders in Sydney (IAG HQ). A 3-hour timezone spread required disciplined asynchronous communication — Confluence for documentation, Jira for tracking, and overlapping standup windows.
The Cybera360 platform doesn't stand alone — it's the center of a mutually reinforcing partner ecosystem:
| Property | Type | Description |
|---|---|---|
| IAG (Insurance Australia Group) | Parent Company | Australia's largest general insurer (ASX-listed, ~AU$12B market cap). Provides brand, capital, and strategic direction. |
| Firemark Labs Singapore | Incubator | IAG's innovation lab in Singapore. Where Cybera360 was incubated and developed as IAG's first corporate venture into cyber insurance. |
| ERGO Insurance Singapore | Underwriting Partner | Munich Re subsidiary. Provides underwriting capacity and broker distribution network in Singapore. First 4 deals closed through ERGO. |
| Munich RE | Reinsurance Partner | One of the world's largest reinsurers. Munich RE's endorsement provides credibility in the international insurance market. |
| UpGuard | Technology Partner | Firemark Ventures portfolio company. Provides continuous cyber risk monitoring and vulnerability assessment technology. |
| Enterprise SG | Government Support | Singapore government agency supporting enterprise growth and innovation. Provides recognition and ecosystem support. |
| SGInnovate | Deep Tech Partner | Singapore government deep tech entity. Co-hosted the 'Cyber Resilience' event with Cybera360. |
| AustCyber (AU) | Industry Partner | Australia's Cyber Security Growth Network. Collaboration to expand Australian cybersecurity capabilities internationally. |
| Austrade (AU) | Trade Partner | Australian Trade & Investment Commission. Co-delivers the Firemark Accelerate program for Australian insurtech startups into Southeast Asia. |
The implementation of Cybera360 proved that cyber insurance can be delivered digitally, fast, and integrated:
Learnings from Cybera360 subsequently influenced IAG's global cyber insurance strategy:
Cybera360 proved that cyber insurance doesn't have to be complex and slow. With a technology-first approach, a process that previously took weeks was compressed into minutes — while delivering more value than just an insurance policy.
What makes this project special isn't just the scale of the client (IAG — Australia's largest insurer), but the philosophy behind the product: don't just pay claims after an attack, help prevent attacks from the start. That's a paradigm shift from reactive to proactive insurance.
Cybera360 was my first experience working with an international client at the enterprise level. From this, I learned that engineering skills alone aren't enough — the ability to communicate across cultures, adapt to international workflows, and document technical decisions to high standards is just as important as writing clean code.


