PageSourceSearch

https://elucive.co/blog

html elucive.co collected 2026-10-03 18:19:19 UTC 31,365 bytes, 384 lines download raw bytes

1<!doctype html>
2<html lang="en" data-theme-default>
3<head>
4<meta charset="utf-8">
5<meta name="viewport" content="width=device-width, initial-scale=1">
6
7<title>Notes on Java, integration and fintech | eLucive</title>
8<meta name="description" content="Practical writing on Java, system integration, databases and financial technology, drawn from systems we actually run."><meta name="keywords" content="software development Zambia, Java development Zambia, Spring Boot development Africa, system integration Zambia, village banking software, net pay calculator Zambia, PAYE calculator Zambia, enterprise software Lusaka"><meta name="author" content="eLucive Software">
9<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1">
10<link rel="canonical" href="https://elucive.co/blog"><meta property="og:type" content="website">
11<meta property="og:site_name" content="eLucive Software">
12<meta property="og:title" content="Notes on Java, integration and fintech | eLucive">
13<meta property="og:description" content="Practical writing on Java, system integration, databases and financial technology, drawn from systems we actually run.">
14<meta property="og:url" content="https://elucive.co/blog">
15<meta property="og:image" content="https://elucive.co/assets/img/og/default.png">
16<meta property="og:image:width" content="1200">
17<meta property="og:image:height" content="630">
18<meta property="og:image:alt" content="eLucive Software: Simple solutions for complicated problems">
19<meta property="og:locale" content="en_ZM"><meta name="twitter:card" content="summary_large_image">
20<meta name="twitter:site" content="@elucivezm">
21<meta name="twitter:creator" content="@elucivezm">
22<meta name="twitter:title" content="Notes on Java, integration and fintech | eLucive">
23<meta name="twitter:description" content="Practical writing on Java, system integration, databases and financial technology, drawn from systems we actually run.">
24<meta name="twitter:image" content="https://elucive.co/assets/img/og/default.png"><meta name="geo.region" content="ZM-09">
25<meta name="geo.placename" content="Lusaka">
26<meta name="geo.position" content="-15.3875;28.3228">
27<meta name="ICBM" content="-15.3875, 28.3228"><link rel="icon" href="/favicon.ico" sizes="32x32">
28<link rel="icon" href="/icon.svg" type="image/svg+xml">
29<link rel="apple-touch-icon" href="/apple-touch-icon.png">
30<link rel="manifest" href="/manifest.webmanifest">
31<meta name="theme-color" content="#FAFBFF" media="(prefers-color-scheme: light)">
32<meta name="theme-color" content="#14151A" media="(prefers-color-scheme: dark)">
33<meta name="format-detection" content="telephone=no">
34<link rel="alternate" type="application/rss+xml" title="eLucive Software Blog" href="https://elucive.co/rss.xml"><link rel="stylesheet" href="/assets/css/main.1f3c696548.css">
34<script src="/assets/js/boot.21b76f5c03.js"></script>
34<script type="application/ld+json">{"@context":"https://schema.org","@type":"Blog","@id":"https://elucive.co/blog#blog","name":"eLucive Software Blog","url":"https://elucive.co/blog","description":"Practical writing on Java, system integration, databases and financial technology, drawn from systems we actually run.","inLanguage":"en-ZM","publisher":{"@id":"https://elucive.co/#organization"},"blogPost":[{"@type":"BlogPosting","headline":"Building Web Apps for Low-Bandwidth, Mid-Range-Phone Reality","url":"https://elucive.co/blog/building-for-low-bandwidth-africa","datePublished":"2025-01-15"},{"@type":"BlogPosting","headline":"Building Financial Software for Zambian Businesses","url":"https://elucive.co/blog/financial-software-solutions-zambian-businesses","datePublished":"2025-01-10"},{"@type":"BlogPosting","headline":"System Integration: The Failure Modes Nobody Budgets For","url":"https://elucive.co/blog/system-integration-best-practices","datePublished":"2025-01-05"},{"@type":"BlogPosting","headline":"Choosing a Web Technology Stack You Can Still Run in Five Years","url":"https://elucive.co/blog/choosing-right-web-technology-stack","datePublished":"2025-01-01"},{"@type":"BlogPosting","headline":"Replacing a Spreadsheet-Based Expense Process","url":"https://elucive.co/blog/expense-management-digital-transformation","datePublished":"2024-12-28"},{"@type":"BlogPosting","headline":"Web Security for Zambian Businesses: What Actually Gets Exploited","url":"https://elucive.co/blog/web-security-practices-african-businesses","datePublished":"2024-12-20"}]}</script>
34<script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://elucive.co/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https://elucive.co/blog"}]}</script>
34</head>
35
36<body>
37
38<div class="loader" aria-hidden="true">
39  <svg class="loader__mark elx-loader elx-loader--stream" viewBox="-50 -50 136 100">
40    <path class="elx-mark elx-disc"
41          d="M48.97 10.12A50 50 0 1 1 48.97 -10.12L21.43 -37.65A9.25 9.25 0 0 0 8.35 -24.57L28.68 -4.24A6 6 0 0 1 28.68 4.24L8.35 24.57A9.25 9.25 0 0 0 21.43 37.65Z"/>
42    <g class="elx-bars">
43      <line class="elx-bar elx-bar--1" x1="55.28" y1="-22" x2="74.28" y2="-22"/>
44      <line class="elx-bar elx-bar--2" x1="59.5"  y1="0"   x2="78.5"  y2="0"/>
45      <line class="elx-bar elx-bar--3" x1="55.28" y1="22"  x2="74.28" y2="22"/>
46    </g>
47  </svg>
48
49  <p class="loader__label">eLucive</p>
50</div>
51
52<a class="skip-link" href="#main">Skip to content</a>
53
54<svg xmlns="http://www.w3.org/2000/svg" style="display:none" aria-hidden="true"><symbol id="i-arrow-left" viewBox="0 0 24 24"><path d="M20 12H4.5"/><polyline points="10.5 6 4.5 12 10.5 18"/></symbol><symbol id="i-arrow-right" viewBox="0 0 24 24"><path d="M4 12h15.5"/><polyline points="13.5 6 19.5 12 13.5 18"/></symbol><symbol id="i-bluesky" viewBox="0 0 568 501"><path d="M123.121 33.664C188.241 82.553 258.281 181.681 284 234.873c25.719-53.192 95.759-152.32 160.879-201.209C491.867-1.612 568-28.906 568 57.946c0 17.346-9.945 145.713-15.778 166.555-20.275 72.453-94.155 90.933-159.875 79.748 114.875 19.551 144.097 84.311 80.986 149.071-119.86 122.992-172.272-30.859-185.702-70.281-2.462-7.227-3.614-10.608-3.631-7.733-.017-2.875-1.169.506-3.631 7.733-13.43 39.422-65.842 193.273-185.702 70.281-63.111-64.76-33.889-129.52 80.986-149.071-65.72 11.185-139.6-7.295-159.875-79.748C9.945 203.659 0 75.292 0 57.946 0-28.906 76.133-1.612 123.121 33.664z"/></symbol><symbol id="i-browser" viewBox="0 0 24 24"><rect x="2.75" y="4.25" width="18.5" height="15.5" rx="2.25"/><path d="M2.75 9h18.5"/><path d="M6 6.6h.01"/><path d="M8.5 6.6h.01"/><path d="M11 6.6h.01"/></symbol><symbol id="i-calculator" viewBox="0 0 24 24"><rect x="4.25" y="2.75" width="15.5" height="18.5" rx="2.25"/><rect x="7.5" y="6" width="9" height="3.25" rx="0.75"/><path d="M8.25 13h.01"/><path d="M12 13h.01"/><path d="M15.75 13h.01"/><path d="M8.25 17h.01"/><path d="M12 17h.01"/><path d="M15.75 17h.01"/></symbol><symbol id="i-calendar" viewBox="0 0 24 24"><rect x="3.5" y="5" width="17" height="15.5" rx="1.8"/><path d="M3.5 9.5h17"/><path d="M8 3.5v3M16 3.5v3"/><path d="M7.5 13.5h2M11 13.5h2M14.5 13.5h2M7.5 17h2M11 17h2"/></symbol><symbol id="i-chart" viewBox="0 0 24 24"><path d="M3.5 20.5h17"/><rect x="5" y="12" width="3.5" height="6" rx=".8"/><rect x="10.2" y="7.5" width="3.5" height="10.5" rx=".8"/><rect x="15.4" y="4" width="3.5" height="14" rx=".8"/></symbol><symbol id="i-chat" viewBox="0 0 24 24"><path d="M20.5 6.25v8.5a2 2 0 01-2 2H9.75L4.5 21v-4.25h-1V6.25a2 2 0 012-2h13a2 2 0 012 2z"/></symbol><symbol id="i-check" viewBox="0 0 24 24"><polyline points="4.5 12.5 9.5 17.5 19.5 6.5"/></symbol><symbol id="i-chevron-right" viewBox="0 0 24 24"><polyline points="9.5 5 16.5 12 9.5 19"/></symbol><symbol id="i-clock" viewBox="0 0 24 24"><circle cx="12" cy="12" r="8.5"/><polyline points="12 7 12 12 15.5 14"/></symbol><symbol id="i-code" viewBox="0 0 24 24"><path d="M8.5 7.5L3.75 12l4.75 4.5"/><path d="M15.5 7.5L20.25 12l-4.75 4.5"/><path d="M13.5 4.25l-3 15.5"/></symbol><symbol id="i-coffee" viewBox="0 0 24 24"><path d="M4.25 8.5h12.5v5.75a5 5 0 01-5 5H9.25a5 5 0 01-5-5z"/><path d="M16.75 10h1.5a2.75 2.75 0 010 5.5h-1.5"/><path d="M8.25 2.5v2.25"/><path d="M12.75 2.5v2.25"/></symbol>
54<symbol id="i-coins" viewBox="0 0 24 24"><rect x="2.5" y="6" width="19" height="12" rx="1.8"/><circle cx="12" cy="12" r="2.6"/><path d="M6 9.5v5M18 9.5v5"/></symbol><symbol id="i-database" viewBox="0 0 24 24"><ellipse cx="12" cy="5.75" rx="7.25" ry="3.25"/><path d="M4.75 5.75v12.5c0 1.8 3.25 3.25 7.25 3.25s7.25-1.45 7.25-3.25V5.75"/><path d="M19.25 12c0 1.8-3.25 3.25-7.25 3.25S4.75 13.8 4.75 12"/></symbol><symbol id="i-document" viewBox="0 0 24 24"><path d="M14 2.5H6.5A1.5 1.5 0 0 0 5 4v16a1.5 1.5 0 0 0 1.5 1.5h11A1.5 1.5 0 0 0 19 20V7.5Z"/><polyline points="14 2.5 14 7.5 19 7.5"/></symbol><symbol id="i-external" viewBox="0 0 24 24"><path d="M13 4h7v7"/><path d="M20 4 11 13"/><path d="M18 14.5V19a1.5 1.5 0 0 1-1.5 1.5h-11A1.5 1.5 0 0 1 4 19V8a1.5 1.5 0 0 1 1.5-1.5H10"/></symbol><symbol id="i-handshake" viewBox="0 0 24 24"><circle cx="9" cy="12" r="5.75"/><circle cx="15" cy="12" r="5.75"/></symbol><symbol id="i-instagram" viewBox="0 0 24 24"><rect x="2.75" y="2.75" width="18.5" height="18.5" rx="5.25"/><circle cx="12" cy="12" r="4"/><path d="M17.4 6.6h.01"/></symbol><symbol id="i-integration" viewBox="0 0 24 24"><path d="M10 13.8a4 4 0 0 0 5.7 0l3-3a4 4 0 0 0-5.7-5.7L11.5 6.6"/><path d="M14 10.2a4 4 0 0 0-5.7 0l-3 3a4 4 0 0 0 5.7 5.7l1.5-1.5"/></symbol><symbol id="i-layers" viewBox="0 0 24 24"><path d="M12 2.75l9 4.75-9 4.75-9-4.75z"/><path d="M3 12.5l9 4.75 9-4.75"/><path d="M3 17.25L12 22l9-4.75"/></symbol><symbol id="i-location" viewBox="0 0 24 24"><path d="M19 10.2c0 5.3-7 11.3-7 11.3s-7-6-7-11.3a7 7 0 1114 0z"/><circle cx="12" cy="10" r="2.6"/></symbol><symbol id="i-logo" viewBox="-50 -50 136 100"><g fill="currentColor" stroke="none"><path d="M48.97 10.12A50 50 0 1 1 48.97 -10.12L21.43 -37.65A9.25 9.25 0 0 0 8.35 -24.57L28.68 -4.24A6 6 0 0 1 28.68 4.24L8.35 24.57A9.25 9.25 0 0 0 21.43 37.65Z"/><rect x="47.78" y="-29.5" width="34" height="15" rx="7.5"/><rect x="52" y="-7.5" width="34" height="15" rx="7.5"/><rect x="47.78" y="14.5" width="34" height="15" rx="7.5"/></g></symbol><symbol id="i-mail" viewBox="0 0 24 24"><rect x="3" y="5.5" width="18" height="13" rx="1.8"/><polyline points="3.6 6.6 12 13 20.4 6.6"/></symbol><symbol id="i-moon" viewBox="0 0 24 24"><path d="M20.5 14.6A8.75 8.75 0 019.4 3.5a8.75 8.75 0 1011.1 11.1z"/></symbol><symbol id="i-receipt" viewBox="0 0 24 24"><path d="M5.25 2.75h13.5v18.5l-2.7-1.75-2.25 1.75L12 19.5l-1.8 1.75-2.25-1.75-2.7 1.75z"/><path d="M9 8h6"/><path d="M9 12h6"/></symbol><symbol id="i-rocket" viewBox="0 0 24 24"><path d="M12 2.5c3.4 2.6 5.25 6.5 5.25 10.75L15 16.5H9l-2.25-3.25C6.75 9 8.6 5.1 12 2.5z"/><circle cx="12" cy="9.25" r="2"/><path d="M9 16.5l-2.75 2.4.9 2.6"/><path d="M15 16.5l2.75 2.4-.9 2.6"/></symbol><symbol id="i-rss" viewBox="0 0 24 24"><path d="M4.5 10.5a9 9 0 019 9"/><path d="M4.5 4.5a15 15 0 0115 15"/><circle cx="5.75" cy="18.25" r="1.5" fill="currentColor" stroke="none"/></symbol><symbol id="i-send" viewBox="0 0 24 24"><path d="M21.25 2.75L2.75 9.9l7.6 3.75 3.75 7.6z"/><path d="M21.25 2.75L10.35 13.65"/></symbol><symbol id="i-shield" viewBox="0 0 24 24"><path d="M12 2.75l7.75 2.9v5.6c0 4.9-3.3 8.7-7.75 9.9-4.45-1.2-7.75-5-7.75-9.9v-5.6z"/><path d="M8.75 11.75l2.4 2.4 4.35-4.65"/></symbol><symbol id="i-spark" viewBox="0 0 24 24"><path d="M12 2.75l2.1 6.15 6.15 2.1-6.15 2.1L12 19.25l-2.1-6.15-6.15-2.1 6.15-2.1z"/><path d="M18.75 16.5l.75 2.25 2.25.75-2.25.75-.75 2.25-.75-2.25-2.25-.75 2.25-.75z"/></symbol><symbol id="i-sun" viewBox="0 0 24 24"><circle cx="12" cy="12" r="4"/><path d="M12 2v2.4"/><path d="M12 19.6V22"/><path d="M2 12h2.4"/><path d="M19.6 12H22"/><path d="M4.9 4.9l1.7 1.7"/><path d="M17.4 17.4l1.7 1.7"/><path d="M19.1 4.9l-1.7 1.7"/><path d="M6.6 17.4l-1.7 1.7"/></symbol><symbol id="i-target" viewBox="0 0 24 24"><circle cx="12" cy="12" r="8.75"/><circle cx="12" cy="12" r="4.75"/><circle cx="12" cy="12" r="1"/></symbol><symbol id="i-users" viewBox="0 0 24 24"><circle cx="9" cy="8" r="3.2"/><path d="M3.5 20a5.5 5.5 0 0 1 11 0"/><path d="M16.2 5.3a3.2 3.2 0 0 1 0 5.9"/><path d="M17.6 14.3A5.5 5.5 0 0 1 20.5 19"/></symbol><symbol id="i-whatsapp" viewBox="0 0 24 24">
54<path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347M12.05 21.785h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893A11.821 11.821 0 0020.885 3.488"/></symbol><symbol id="i-x" viewBox="0 0 24 24"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></symbol></svg>
55<header class="header" data-header>
56  <div class="container header__inner">
57
58    <a class="logo" href="/" aria-label="eLucive Software home">
59      <svg class="logo__mark" viewBox="0 0 136 100" aria-hidden="true" focusable="false">
60        <use href="#i-logo"></use>
61      </svg>
62      <span class="logo__text">
63        <span class="logo__name">eLucive</span>
64        <span class="logo__kicker">Software Solutions</span>
65      </span>
66    </a>
67
68    <nav class="nav header__nav-desktop" aria-label="Main">      <a class="nav__link" data-nav-link href="/#about">About</a>      <a class="nav__link" data-nav-link href="/#services">Services</a>      <a class="nav__link" data-nav-link href="/#products">Products</a>      <a class="nav__link" data-nav-link href="/#work">Work</a>      <a class="nav__link" data-nav-link href="/blog" aria-current="page">Blog</a>    </nav>
69
70    <div class="header__actions"><button class="palette-hint" type="button" data-palette-open hidden aria-label="Open the command palette">
71          <kbd>&#8984;</kbd><kbd>K</kbd>
72        </button>
73
74        <button class="theme-toggle" type="button" data-theme-toggle aria-label="Switch theme">
75        <span class="theme-toggle__icon" aria-hidden="true">
76          <svg class="icon theme-toggle__sun"><use href="#i-sun"></use></svg>
77          <svg class="icon theme-toggle__moon"><use href="#i-moon"></use></svg>
78        </span>
79      </button>
80
81      <a class="btn btn--primary header__cta-desktop" href="/#contact">
82        Start a project
83        <svg class="icon icon--sm icon--arrow" aria-hidden="true"><use href="#i-arrow-right"></use></svg>
84      </a>
85
86      <button class="nav-toggle" type="button" data-nav-toggle
87              aria-expanded="false" aria-controls="site-drawer" aria-label="Open menu">
88        <span class="nav-toggle__bars" aria-hidden="true"><span></span><span></span><span></span></span>
89      </button>
90    </div>
91
92  </div>
93</header><div class="drawer" id="site-drawer" data-drawer data-open="false">
94  <div class="drawer__inner">
95    <div class="container">
96      <nav aria-label="Mobile">        <a class="drawer__link" href="/#about">
97          About
98          <svg class="icon icon--sm" aria-hidden="true"><use href="#i-chevron-right"></use></svg>
99        </a>        <a class="drawer__link" href="/#services">
100          Services
101          <svg class="icon icon--sm" aria-hidden="true"><use href="#i-chevron-right"></use></svg>
102        </a>        <a class="drawer__link" href="/#products">
103          Products
104          <svg class="icon icon--sm" aria-hidden="true"><use href="#i-chevron-right"></use></svg>
105        </a>        <a class="drawer__link" href="/#work">
106          Work
107          <svg class="icon icon--sm" aria-hidden="true"><use href="#i-chevron-right"></use></svg>
108        </a>        <a class="drawer__link" href="/blog">
109          Blog
110          <svg class="icon icon--sm" aria-hidden="true"><use href="#i-chevron-right"></use></svg>
111        </a>      </nav>
112      <div class="drawer__foot">
113        <a class="btn btn--primary btn--block" href="/#contact">
114          Start a project
115          <svg class="icon icon--sm icon--arrow" aria-hidden="true"><use href="#i-arrow-right"></use></svg>
116        </a>
117        <a class="btn btn--outline btn--block" href="https://wa.me/260979068878" target="_blank" rel="noopener">
118          <svg class="icon icon--sm icon--solid" aria-hidden="true"><use href="#i-whatsapp"></use></svg>
119          WhatsApp us
120        </a>
121      </div>
122    </div>
123  </div>
124</div>
125
126<div class="page">
127  <main class="page__main" id="main">
128
129<section class="section section--tight article-head">
130  <div class="container">
131    <nav class="breadcrumb" aria-label="Breadcrumb">
132      <a href="/">Home</a>
133      <span class="breadcrumb__sep" aria-hidden="true">/</span>
134      <span aria-current="page">Blog</span>
135    </nav>
136
137    <div class="section__head mt-md mb-0">
138      <p class="eyebrow">Writing</p>
139      <h1 class="section__title">
140        Notes from
141        <strong>the workshop</strong>
142      </h1>
143      <p class="section__intro">Practical writing on Java, system integration, databases and financial technology, drawn from systems we actually run.</p>
144      <p class="mt-sm">
145        <a class="badge" href="/rss.xml">
146          <svg class="icon icon--sm" aria-hidden="true"><use href="#i-rss"></use></svg>
147          Subscribe by RSS
148        </a>
149      </p>
150    </div>
151  </div>
152</section>
153
154<section class="section">
155  <div class="container">    <div class="grid mb-xl" data-reveal-group>      <article class="post-card post-card--featured" data-reveal>
156        <div class="post-meta">
157          <span class="badge badge--accent">Featured</span>
158          <span class="badge">Web Development</span>
159          <span class="post-meta__item">
160            <svg class="icon icon--sm" aria-hidden="true"><use href="#i-calendar"></use></svg>
161            <time datetime="2025-01-15">January 15, 2025</time>
162          </span>
163          <span class="post-meta__item">
164            <svg class="icon icon--sm" aria-hidden="true"><use href="#i-clock"></use></svg>
165            5 min read
166          </span>
167        </div>
168        <h2 class="post-card__title"><a href="/blog/building-for-low-bandwidth-africa">Building Web Apps for Low-Bandwidth, Mid-Range-Phone Reality</a></h2>
169        <p class="post-card__excerpt">Most performance advice is written for fast phones on cheap data. Here is what changes when your users are on mid-range Android handsets paying per megabyte, and why we removed the framework from this site.</p>
170        <div class="cluster mt-2xs">          <span class="badge">Performance</span>          <span class="badge">Progressive Web Apps</span>          <span class="badge">Africa Tech</span>          <span class="badge">Web Development</span>        </div>
171      </article>    </div>
172    <div class="grid grid--3 grid--gap-lg" data-reveal-group>      <article class="post-card" data-reveal>
173        <div class="post-meta">
174          <span class="badge">Financial Technology</span>
175        </div>
176        <h2 class="post-card__title"><a href="/blog/financial-software-solutions-zambian-businesses">Building Financial Software for Zambian Businesses</a></h2>
177        <p class="post-card__excerpt">What actually changes when you write financial software for Zambia: statutory deductions that are not what most payroll engines assume, mobile money as a first-class payment rail, and decimal arithmetic you cannot afford to get wrong.</p>
178        <div class="post-meta push-down">
179          <span class="post-meta__item">
180            <svg class="icon icon--sm" aria-hidden="true"><use href="#i-calendar"></use></svg>
181            <time datetime="2025-01-10">January 10, 2025</time>
182          </span>
183          <span class="post-meta__item">
184            <svg class="icon icon--sm" aria-hidden="true"><use href="#i-clock"></use></svg>
185            6 min read
186          </span>
187        </div>
188      </article>      <article class="post-card" data-reveal>
189        <div class="post-meta">
190          <span class="badge">System Integration</span>
191        </div>
192        <h2 class="post-card__title"><a href="/blog/system-integration-best-practices">System Integration: The Failure Modes Nobody Budgets For</a></h2>
193        <p class="post-card__excerpt">Connecting two systems is easy on the happy path. What costs time is duplicate deliveries, partial failures, and the hour the other end is down. Here is how to design for those from the start.</p>
194        <div class="post-meta push-down">
195          <span class="post-meta__item">
196            <svg class="icon icon--sm" aria-hidden="true"><use href="#i-calendar"></use></svg>
197            <time datetime="2025-01-05">January 5, 2025</time>
198          </span>
199          <span class="post-meta__item">
200            <svg class="icon icon--sm" aria-hidden="true"><use href="#i-clock"></use></svg>
201            5 min read
202          </span>
203        </div>
204      </article>      <article class="post-card" data-reveal>
205        <div class="post-meta">
206          <span class="badge">Tech Insights</span>
207        </div>
208        <h2 class="post-card__title"><a href="/blog/choosing-right-web-technology-stack">Choosing a Web Technology Stack You Can Still Run in Five Years</a></h2>
209        <p class="post-card__excerpt">Why we build back ends on Java and Spring Boot, why this site has no framework at all, and how to tell which of those two situations you are in.</p>
210        <div class="post-meta push-down">
211          <span class="post-meta__item">
212            <svg class="icon icon--sm" aria-hidden="true"><use href="#i-calendar"></use></svg>
213            <time datetime="2025-01-01">January 1, 2025</time>
214          </span>
215          <span class="post-meta__item">
216            <svg class="icon icon--sm" aria-hidden="true"><use href="#i-clock"></use></svg>
217            6 min read
218          </span>
219        </div>
220      </article>      <article class="post-card" data-reveal>
221        <div class="post-meta">
222          <span class="badge">Business Automation</span>
223        </div>
224        <h2 class="post-card__title"><a href="/blog/expense-management-digital-transformation">Replacing a Spreadsheet-Based Expense Process</a></h2>
225        <p class="post-card__excerpt">Why expense claims break down at around thirty people, what an automated system actually has to do to fix it, and the failure modes that make replacements stall.</p>
226        <div class="post-meta push-down">
227          <span class="post-meta__item">
228            <svg class="icon icon--sm" aria-hidden="true"><use href="#i-calendar"></use></svg>
229            <time datetime="2024-12-28">December 28, 2024</time>
230          </span>
231          <span class="post-meta__item">
232            <svg class="icon icon--sm" aria-hidden="true"><use href="#i-clock"></use></svg>
233            5 min read
234          </span>
235        </div>
236      </article>      <article class="post-card" data-reveal>
237        <div class="post-meta">
238          <span class="badge">Web Security</span>
239        </div>
240        <h2 class="post-card__title"><a href="/blog/web-security-practices-african-businesses">Web Security for Zambian Businesses: What Actually Gets Exploited</a></h2>
241        <p class="post-card__excerpt">Not an OWASP recitation. The handful of weaknesses that account for most real compromises of small business systems here, and what fixing each one involves.</p>
242        <div class="post-meta push-down">
243          <span class="post-meta__item">
244            <svg class="icon icon--sm" aria-hidden="true"><use href="#i-calendar"></use></svg>
245            <time datetime="2024-12-20">December 20, 2024</time>
246          </span>
247          <span class="post-meta__item">
248            <svg class="icon icon--sm" aria-hidden="true"><use href="#i-clock"></use></svg>
249            5 min read
250          </span>
251        </div>
252      </article>    </div>
253
254  </div>
255</section>
256
257<section class="section section--tight">
258  <div class="container">
259    <div class="cta" data-reveal="scale">
260      <h2 class="cta__title">Have a problem worth solving?</h2>
261      <p class="cta__text">Tell us what you are trying to fix and we will reply with an honest view of whether we are the right people for it.</p>
262      <div class="cta__actions">
263        <a class="btn btn--primary btn--lg" href="/#contact">
264          Start a project
265          <svg class="icon icon--sm icon--arrow" aria-hidden="true"><use href="#i-arrow-right"></use></svg>
266        </a>
267        <a class="btn btn--outline btn--lg" href="https://wa.me/260979068878" target="_blank" rel="noopener">
268          <svg class="icon icon--sm icon--solid" aria-hidden="true"><use href="#i-whatsapp"></use></svg>
269          WhatsApp us
270        </a>
271      </div>
272      <p class="cta__note">eLucive Software · Lusaka, Zambia</p>
273    </div>
274  </div>
275</section>
276
277  </main>
278
279<footer class="footer">
280  <div class="container">
281
282    <div class="footer__grid">
283
284      <div class="footer__brand">
285        <a class="logo" href="/" aria-label="eLucive Software home">
286          <svg class="logo__mark" viewBox="0 0 136 100" aria-hidden="true" focusable="false">
287            <use href="#i-logo"></use>
288          </svg>
289          <span class="logo__text">
290            <span class="logo__name">eLucive</span>
291            <span class="logo__kicker">Software Solutions</span>
292          </span>
293        </a>
294
295        <p class="footer__text">Simple solutions for complicated problems. We build Java and Spring Boot systems, integrate the software you already run, and ship web applications people enjoy using, from Lusaka, for Zambia and beyond.</p>
296
297        <div class="stack mt-md">
298          <p class="footer__detail">
299            <svg class="icon icon--sm" aria-hidden="true"><use href="#i-location"></use></svg>
300            Lusaka, Zambia
301          </p>
302          <p class="footer__detail">
303            <svg class="icon icon--sm" aria-hidden="true"><use href="#i-clock"></use></svg>
304            Monday – Friday, 08:00 – 17:00 CAT
305          </p>
306          <p class="footer__detail">
307            <svg class="icon icon--sm" aria-hidden="true"><use href="#i-mail"></use></svg>
308            <a href="/cdn-cgi/l/email-protection#573e39313817323b22343e2132793438"><span class="__cf_email__" data-cfemail="e1888f878ea1848d9482889784cf828e">[email&#160;protected]</span></a>
309          </p>
310        </div>
311      </div>
312
313      <nav aria-labelledby="footer-explore">
314        <h2 class="footer__title" id="footer-explore">Explore</h2>
315        <div class="footer__links">
316          <a href="/#about">About</a>
317          <a href="/#services">Services</a>
318          <a href="/#products">Products</a>
319          <a href="/#work">How we work</a>
320          <a href="/blog">Blog</a>
321          <a href="/#contact">Contact</a>
322        </div>
323      </nav>
324
325      <nav aria-labelledby="footer-products">
326        <h2 class="footer__title" id="footer-products">Products</h2>
327        <div class="footer__links">          <a href="https://vib.elucive.co" target="_blank" rel="noopener">
328            Village Banking System
329            <svg class="icon icon--sm" aria-hidden="true"><use href="#i-external"></use></svg>
330          </a>          <a href="https://netpay.elucive.co" target="_blank" rel="noopener">
331            Net Pay Calculator
332            <svg class="icon icon--sm" aria-hidden="true"><use href="#i-external"></use></svg>
333          </a>          <a href="/products/payroll">Payroll &amp; HR</a>          <a href="https://elections.elucive.co" target="_blank" rel="noopener">
334            Zambia Election Tracker
335            <svg class="icon icon--sm" aria-hidden="true"><use href="#i-external"></use></svg>
336          </a>        </div>
337      </nav>
338
339      <div>
340        <h2 class="footer__title">Get in touch</h2>
341        <div class="footer__links">
342          <a href="/cdn-cgi/l/email-protection#127b7c747d52777e67717b64773c717d"><span class="__cf_email__" data-cfemail="1970777f76597c756c7a706f7c377a76">[email&#160;protected]</span></a>
343          <a href="https://wa.me/260979068878" target="_blank" rel="noopener">
344            +260 979 068 878
345            <svg class="icon icon--sm" aria-hidden="true"><use href="#i-external"></use></svg>
346          </a>
347          <a href="/rss.xml">
348            RSS feed
349            <svg class="icon icon--sm" aria-hidden="true"><use href="#i-rss"></use></svg>
350          </a>
351        </div>
352
353        <div class="cluster mt-md">          <a class="social" href="https://wa.me/260979068878" target="_blank" rel="noopener me"
354             aria-label="eLucive Software on WhatsApp (+260 979 068 878)" title="WhatsApp: +260 979 068 878">
355            <svg class="icon icon--sm icon--solid" aria-hidden="true"><use href="#i-whatsapp"></use></svg>
356          </a>          <a class="social" href="https://x.com/elucivezm" target="_blank" rel="noopener me"
357             aria-label="eLucive Software on X (@elucivezm)" title="X: @elucivezm">
358            <svg class="icon icon--sm icon--solid" aria-hidden="true"><use href="#i-x"></use></svg>
359          </a>          <a class="social" href="https://bsky.app/profile/elucivezm" target="_blank" rel="noopener me"
360             aria-label="eLucive Software on Bluesky (@elucivezm)" title="Bluesky: @elucivezm">
361            <svg class="icon icon--sm icon--solid" aria-hidden="true"><use href="#i-bluesky"></use></svg>
362          </a>          <a class="social" href="https://instagram.com/elucivezm" target="_blank" rel="noopener me"
363             aria-label="eLucive Software on Instagram (@elucivezm)" title="Instagram: @elucivezm">
364            <svg class="icon icon--sm" aria-hidden="true"><use href="#i-instagram"></use></svg>
365          </a>        </div>
366      </div>
367
368    </div>
369
370    <div class="footer__bottom">
371      <p>© 2026 eLucive Software. All rights reserved.</p>
372    </div>
373
374  </div>
375</footer>
376</div>
vendor: 108 bytes, line 376
376<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
376<script src="/_vercel/insights/script.js" defer></script>
vendor: 1 bytes, line 376
376
377<script src="/_vercel/speed-insights/script.js" defer></script>
377
378
379<script src="/assets/js/theme.60abae174e.js" defer></script>
vendor: 1 bytes, line 379
379
380<script src="/assets/js/nav.c9e459e6c6.js" defer></script>
vendor: 1 bytes, line 380
380
381<script src="/assets/js/reveal.3cc66a1def.js" defer></script>
381<script src="/assets/js/palette.353cc89133.js" defer></script>
vendor: 1 bytes, line 381
381
382<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"42455e76c526445782085ebeb1712f94","r":1,"spa":2}' crossorigin="anonymous"></script>
382
383</body>
384</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.