Kwacha Kulture
Constraint-first · full-stack · batteries-included

The framework that remembers the network, the device, the person— so you don’t have to.

Gomani makes applications that work on slow, intermittent networks and low-cost, shared devices the natural output of ordinary development — not the reward for exceptional discipline. Enforced budgets, zero-JavaScript-by-default islands, offline-first data, and mobile-money payments, by default.

0
packages, one backbone
v1.2.0
released version
3G
baseline network
The developer-discipline tax

Doing nothing special should still ship the right thing.

Everything the prevailing paradigm leaves to your memory, Gomani moves into its defaults.

What you carry today

  • Audit every bundle by hand
  • Manually split your code
  • Wire & secure a backend
  • Bolt on a payment processor
  • Engineer offline yourself
  • Remember accessibility & i18n

What Gomani defaults

  • Budgets fail the build
  • Automatic, budgeted route-splitting
  • Integrated server, router & auth
  • A mobile-money engine, built in
  • Offline-first data, by default
  • Accessible, localizable primitives
Why constraint-first

The efficient, inclusive, secure path is the only path.

01

Budgets, enforced

Per-route byte and JavaScript ceilings live in your source. The build fails when a route regresses past its limit — a heavy dependency is caught at merge time, not in production.

02

Zero JavaScript by default

A page is inert HTML plus a stylesheet — the cheapest thing to deliver and run. Interactivity is added surgically as islands, resumed on demand, so unreached code is never downloaded or executed.

03

The network is application state

Responsive design for the network, not the viewport. A defensive, multi-input signal serves text-first layouts and deferred imagery on constrained links — with a user-owned data-saver override.

04

Offline is the baseline

The device is the source of truth, the network opportunistic. Optimistic writes, an offline mutation queue, conflict-free merge, and encryption at rest — the client and server halves in one framework.

05

Mobile money, first-class

The African payment reality is mobile money, not cards. A provider-agnostic, idempotent payment engine survives a dropping connection without double-charging — and holds no funds.

06

Faults isolate, features degrade

Bulkheads, circuit breakers, and degraded-mode contracts as primitives — chase fault isolation, not microservices. One authoring surface, a topology spectrum from single process to split workers.

Zero JavaScript by default

A page is inert HTML plus a stylesheet.

Interactivity is added surgically as islands. Only what you declare interactive ships JavaScript — and it’s resumed just-in-time, on hover, viewport entry, or interaction, so unreached code is never downloaded or executed.

  • The default page runs the cheapest thing to deliver
  • Execution cost is bounded by what the user touches
  • Which also conserves battery on the baseline device
How islands work
app/islands/counter.tsx
import { island } from '@gomani/core';
import { signal } from '@gomani/signals';

// ships ZERO JavaScript until the button is
// actually reached — resumed on interaction.
export default island(function Counter() {
  const count = signal(0);
  return (
    <button onClick={() => count.value++}>
      Tapped {count} times
    </button>
  );
});

Build the lightest thing that meets the requirement.

The budget you carried alone, the stack you assembled alone, the inclusions you were left to remember alone — none of these were ever meant to be yours to carry by discipline.