Digital Banking2023

Global Junior

Global Junior is a secure, microservices-based child banking app built with gRPC, Node.js, Docker, and Kubernetes, offering parental controls, tasks, savings, and smart spending.

Role
Backend Developer — Swift Technology
Timeline
From October 2023
Team
Swift Technology platform team
System Design

Architecture

ClientsEdgeServicesDataspendlimitsauthorizeChild AppspendsParent Appsets the rulesAPI GatewaygRPC insideParental Controlsenforced server-sideCore Ledgerthe money pathTasks & Savingsown servicesLedger Store

Two people with different permissions over the same money. The child spends, the parent sets the boundary, and the backend referees — neither client is trusted with the rules.

01

Two Users, One Account

A child banking product has an unusual shape: the account holder and the account controller are different people with different permissions over the same money. The child spends; the parent sets the boundaries. Both need their own view, and the backend has to enforce the relationship rather than trust either client.

02

Parental Controls

Controls are enforced server-side, which is the only place they mean anything. A limit that lives in the mobile app is a suggestion — the rule has to hold at the service boundary regardless of what the client sends.

03

Tasks And Savings

Tasks, savings goals, and smart spending turn the account into something closer to a teaching tool than a wallet. Each is a small piece of product logic, and keeping them in their own services meant they could evolve without touching the core ledger path.

In Practice

The API, Live

A spend attempt past the parent's daily limit, denied at the service boundary. This deny is the feature: a limit that lived in the mobile app would be a suggestion.

grpcurl — spend authorization. Request: grpcurl -d '{ "child": "acct_7031", "merchant": "GameZone", "amount": "1,500.00" }' junior.internal:443 \ junior.v1.SpendAuthz/Authorize. Response: { "decision": "DENIED", "rule": "DAILY_LIMIT", "limit": "1,000.00", "spent_today": "850.00", "set_by": "parent", "enforced_at": "service boundary" } 7 PERMISSION_DENIED · the rule held, whatever the client sent

Built With

Node.jsgRPCMicroservicesDockerKubernetes

Next Project

Sani Securities

View →