Skip to content
Veloniz

Open source

Our code is public

Hisaab's backend, mobile app and this website live on GitHub. Browse them, read the docs and follow the work.

Open source

Read the real code

Hisaab is built in the open. These excerpts come straight from the repositories; follow the links to see the full files.

Every entry must balance

The only code that writes journal rows refuses any entry whose debits and credits differ. Amounts are whole paise, never floats.

finance-tracker-backend/src/ledger/ledger.service.tsView on GitHub →
export type Side = 'D' | 'C';export interface Line {  accountId: string;  side: Side;  amountMinor: number;} async postEntry(tx: Tx, p: { spaceId: string; lines: Line[] /* ... */ }) {  if (p.lines.length < 2) throw invalid('An entry needs at least two lines');  const debit = p.lines.filter((l) => l.side === 'D').reduce((s, l) => s + l.amountMinor, 0);  const credit = p.lines.filter((l) => l.side === 'C').reduce((s, l) => s + l.amountMinor, 0);  if (debit !== credit)    throw new AppError(HttpStatus.UNPROCESSABLE_ENTITY, 'UNBALANCED', 'Debits and credits differ', { debit, credit });  // ...writes journal_entries + journal_lines, updates account_balances atomically}

Even the logo is code

The Hisaab mark is two rounded bars, drawn as SVG in the app and reused on this site.

finance-tracker-mobile-app/src/shared/components/ui/Logo.tsxView on GitHub →
/** The Hisaab mark: two rounded bars. */export function Logo({ size = 88 }: { size?: number }) {  const { colors } = useTheme();  return (    <Svg width={size} height={size} viewBox="0 0 96 96" accessibilityLabel="Hisaab logo">      <Rect x={8} y={8} width={38} height={80} rx={10} fill={colors.primary} />      <Rect x={50} y={24} width={38} height={64} rx={10} fill="#6BBF8E" />    </Svg>  );}