Add Positive Pay, statement guide v1.0, onboarding, and switch every feature on

- Positive Pay on the 12 Oct /pps contract (account number, not account ID):
  OTP enrollment, cheque submit, saved cheques, detail and stop payment.
  Full flow passed on the phone against mobile-banking-backend.lincpay.
- Statement & Mini Statement guide v1.0 (14 Oct): mini statement JSON on
  Home and the Statement screen; dated PDF export with the password rule.
- Onboarding slides and splash screen, Inter font, shared Icon and
  TypewriterText components, nearby branches via OpenStreetMap.
- Every feature switched on; the 14 Oct switch set is kept in
  featureConfig.stage-2026-10-14.ts. Loans run on demo data until the
  backend has /loans routes.
- npm run android wraps run-android for shells spawned from VS Code.
- OpenProject work packages updated to 14-10-2026 status, with screenshots
  of Positive Pay, statement, loans and cards.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Abin Toppo
2026-10-14 18:18:40 +05:30
co-authored by Claude Opus 5.5
parent 5fbd13ba12
commit f960a119e8
510 changed files with 20268 additions and 6483 deletions
+20 -16
View File
@@ -11,10 +11,11 @@
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
761780ED2CA45674006654EE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761780EC2CA45674006654EE /* AppDelegate.swift */; };
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
C0D4AFDA2287401D95FC205E /* Nunito-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 99AFB5F593F649518272F7C1 /* Nunito-Bold.ttf */; };
E59A09A1B92A4DFC837D4F76 /* Nunito-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5BE37E42FB25420B888BD619 /* Nunito-ExtraBold.ttf */; };
8177024BD66049C892AE8BB5 /* Nunito-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0586CD0C88074732AB208771 /* Nunito-Regular.ttf */; };
28C1313D12F44E0B944A0461 /* Nunito-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 94CE8C68F80440B6A8315272 /* Nunito-SemiBold.ttf */; };
451249A8EBAA4D07854CCF7E /* Inter-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 62B6F2151F4B40C3B92D00E7 /* Inter-Bold.ttf */; };
3FAD4FF3BCB44925BF942FD6 /* Inter-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2FEAF9021A4E4F3493AB8783 /* Inter-ExtraBold.ttf */; };
24F52D1E76734460B1518FB8 /* Inter-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 216626BDE1674D0F8BC41F44 /* Inter-Medium.ttf */; };
49AF21495E694D2C9B5E2E41 /* Inter-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3F599B63F8274BDEB3DD4DCD /* Inter-Regular.ttf */; };
6BD1A89DD9CC4BA58B9B9958 /* Inter-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 19A0CB34EF4F45F2B88EE0A5 /* Inter-SemiBold.ttf */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
@@ -28,10 +29,11 @@
761780EC2CA45674006654EE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = BankCBS/AppDelegate.swift; sourceTree = "<group>"; };
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = BankCBS/LaunchScreen.storyboard; sourceTree = "<group>"; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
99AFB5F593F649518272F7C1 /* Nunito-Bold.ttf */ = {isa = PBXFileReference; name = "Nunito-Bold.ttf"; path = "../assets/fonts/Nunito-Bold.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
5BE37E42FB25420B888BD619 /* Nunito-ExtraBold.ttf */ = {isa = PBXFileReference; name = "Nunito-ExtraBold.ttf"; path = "../assets/fonts/Nunito-ExtraBold.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
0586CD0C88074732AB208771 /* Nunito-Regular.ttf */ = {isa = PBXFileReference; name = "Nunito-Regular.ttf"; path = "../assets/fonts/Nunito-Regular.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
94CE8C68F80440B6A8315272 /* Nunito-SemiBold.ttf */ = {isa = PBXFileReference; name = "Nunito-SemiBold.ttf"; path = "../assets/fonts/Nunito-SemiBold.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
62B6F2151F4B40C3B92D00E7 /* Inter-Bold.ttf */ = {isa = PBXFileReference; name = "Inter-Bold.ttf"; path = "../assets/fonts/Inter-Bold.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
2FEAF9021A4E4F3493AB8783 /* Inter-ExtraBold.ttf */ = {isa = PBXFileReference; name = "Inter-ExtraBold.ttf"; path = "../assets/fonts/Inter-ExtraBold.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
216626BDE1674D0F8BC41F44 /* Inter-Medium.ttf */ = {isa = PBXFileReference; name = "Inter-Medium.ttf"; path = "../assets/fonts/Inter-Medium.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
3F599B63F8274BDEB3DD4DCD /* Inter-Regular.ttf */ = {isa = PBXFileReference; name = "Inter-Regular.ttf"; path = "../assets/fonts/Inter-Regular.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
19A0CB34EF4F45F2B88EE0A5 /* Inter-SemiBold.ttf */ = {isa = PBXFileReference; name = "Inter-SemiBold.ttf"; path = "../assets/fonts/Inter-SemiBold.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -109,10 +111,11 @@
EF5146ACD97C4640B8BE11AA /* Resources */ = {
isa = "PBXGroup";
children = (
99AFB5F593F649518272F7C1 /* Nunito-Bold.ttf */,
5BE37E42FB25420B888BD619 /* Nunito-ExtraBold.ttf */,
0586CD0C88074732AB208771 /* Nunito-Regular.ttf */,
94CE8C68F80440B6A8315272 /* Nunito-SemiBold.ttf */,
62B6F2151F4B40C3B92D00E7 /* Inter-Bold.ttf */,
2FEAF9021A4E4F3493AB8783 /* Inter-ExtraBold.ttf */,
216626BDE1674D0F8BC41F44 /* Inter-Medium.ttf */,
3F599B63F8274BDEB3DD4DCD /* Inter-Regular.ttf */,
19A0CB34EF4F45F2B88EE0A5 /* Inter-SemiBold.ttf */,
);
name = Resources;
sourceTree = "<group>";
@@ -180,10 +183,11 @@
files = (
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
C0D4AFDA2287401D95FC205E /* Nunito-Bold.ttf in Resources */,
E59A09A1B92A4DFC837D4F76 /* Nunito-ExtraBold.ttf in Resources */,
8177024BD66049C892AE8BB5 /* Nunito-Regular.ttf in Resources */,
28C1313D12F44E0B944A0461 /* Nunito-SemiBold.ttf in Resources */,
451249A8EBAA4D07854CCF7E /* Inter-Bold.ttf in Resources */,
3FAD4FF3BCB44925BF942FD6 /* Inter-ExtraBold.ttf in Resources */,
24F52D1E76734460B1518FB8 /* Inter-Medium.ttf in Resources */,
49AF21495E694D2C9B5E2E41 /* Inter-Regular.ttf in Resources */,
6BD1A89DD9CC4BA58B9B9958 /* Inter-SemiBold.ttf in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
+13 -13
View File
@@ -32,12 +32,13 @@
<false/>
<key>NSAllowsLocalNetworking</key>
<true/>
<!-- API_ORIGIN in src/config/env.ts is currently the named host below.
NSAllowsLocalNetworking covers bare IP literals (and .local names)
but gives a *named* host nothing: point API_ORIGIN at one with no
entry here and ATS blocks every cleartext call, surfacing as a
generic network error. All of this goes when the backend gets
TLS. -->
<!-- API_ORIGIN in src/config/env.ts currently points at the named
host below. NSAllowsLocalNetworking covers bare IP literals (and
.local names) — so switching back to the LAN IP needs nothing
here — but gives a *named* host nothing: point API_ORIGIN at one
with no entry here and ATS blocks every cleartext call, surfacing
as a generic network error. All of this goes when the backend
gets TLS. -->
<key>NSExceptionDomains</key>
<dict>
<key>mobile-banking-backend.lincpay</key>
@@ -50,7 +51,7 @@
</dict>
</dict>
<key>NSLocationWhenInUseUsageDescription</key>
<string/>
<string>Your location is used to show the bank branches and ATMs nearest to you. It is only used while the locator is open.</string>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIRequiredDeviceCapabilities</key>
@@ -67,12 +68,11 @@
<false/>
<key>UIAppFonts</key>
<array>
<string>IBMPlexSans.ttf</string>
<string>IBMPlexSans-Medm.ttf</string>
<string>IBMPlexSans-SmBld.ttf</string>
<string>IBMPlexSans-Bold.ttf</string>
<string>IBMPlexMono.ttf</string>
<string>IBMPlexMono-SmBld.ttf</string>
<string>Inter-Bold.ttf</string>
<string>Inter-ExtraBold.ttf</string>
<string>Inter-Medium.ttf</string>
<string>Inter-Regular.ttf</string>
<string>Inter-SemiBold.ttf</string>
</array>
</dict>
</plist>
+7
View File
@@ -30,5 +30,12 @@ target 'BankCBS' do
:mac_catalyst_enabled => false,
# :ccache_enabled => true
)
# MapLibre (Branch & ATM locator). @maplibre/maplibre-react-native v10
# delivers the native MapLibre SDK through Swift Package Manager, and this
# hook is what adds that package to its pod target — without it the iOS
# build cannot find the MapLibre framework. Free and keyless: no Google
# Maps SDK, no access token.
$MLRN.post_install(installer)
end
end
+12 -8
View File
@@ -2,20 +2,24 @@
"migIndex": 1,
"data": [
{
"path": "assets/fonts/Nunito-Bold.ttf",
"sha1": "a2d6a8de275b708042cfa663533194d18d2861c4"
"path": "assets/fonts/Inter-Bold.ttf",
"sha1": "9461e7c083137c2abe6d198f784fb0d341a527a1"
},
{
"path": "assets/fonts/Nunito-ExtraBold.ttf",
"sha1": "30b19033e24e4a79ca8a0ac3e780ab8e3d664185"
"path": "assets/fonts/Inter-ExtraBold.ttf",
"sha1": "872bc40675c084c451af1c3eb10e21c13e2008a3"
},
{
"path": "assets/fonts/Nunito-Regular.ttf",
"sha1": "6b19e7ffbd729c36ca7bbd0163a791d2716447a8"
"path": "assets/fonts/Inter-Medium.ttf",
"sha1": "c1d25d8c10adb45a970e71c387bbd6380f10992d"
},
{
"path": "assets/fonts/Nunito-SemiBold.ttf",
"sha1": "12eebee4d162f8f099235a42623369d5e57a6af9"
"path": "assets/fonts/Inter-Regular.ttf",
"sha1": "6e3430f906a4b42b4b63fd8f33e498a43d9f8d84"
},
{
"path": "assets/fonts/Inter-SemiBold.ttf",
"sha1": "b4bdaf6bdd6a479b46c452a7bbae13f5cb2079bf"
}
]
}