F

Finza

Next.js fintech superapp — code-verified technical documentation

v1.0.0Next.js 16React 19TypeScriptTailwind v4PWA

1. Introduction

Finza is a modern, scalable fintech superapp built with Next.js 16 App Router, TypeScript, Tailwind CSS 4, and React 19.2.

This documentation is generated from real source inspection: routes, stack versions, storage keys, and PWA behavior are aligned with actual code.

44

Pages

4

Layouts

13

Components

100%

TypeScript

2. Key Features

App Router Architecture

Organized route groups: (auth), (main), (myCard), (profile), (homePaiges), etc.

Authentication Journey

Sign in, account creation, verification, forgot password, and onboarding flows.

Money & Payment Flows

Send money, add contacts, make payments, scan-to-pay, and exchange currency.

Card Management

Add new card, card details, change PIN, set limits.

PWA Runtime

Custom service worker caching, install banner logic, and offline fallback.

Dark Themed UI

Tokenized color system in globals.css with Tailwind v4 @theme variables.

Frontend-Only Data Layer

No centralized API client yet; state handled with localStorage/sessionStorage.

Install Experience

Cross-platform install handling for Android/Desktop and manual iOS instructions.

3. Quick Start

Requirements

  • Node.js 18.17+
  • npm 9+ or pnpm 8+
  • Git

Installation

# 1. Install dependencies

npm install

# 2. Start development server

npm run dev

# 3. Open in browser

http://localhost:3000

Available Scripts

ScriptDescription
npm run devStart the Next.js dev server
npm run buildCreate the production build
npm run startServe the production build
npm run lintRun ESLint checks across the project

4. Folder Structure

Finza-next/
src/app/
src/components/
src/styles/
src/lib/
src/hooks/
src/utils/
src/types/
src/constants/
src/services/
src/context/
src/store/
src/api/
public/
package.json

5. All Pages (44)

Core

RouteDescription
/App entry route
/splashSplash screen
/onbordingOnboarding flow

Utility

RouteDescription
/documentationProject documentation page
/(homePaiges)/confirmationConfirmation page
/terms-conditionTerms & Conditions

Authentication

RouteDescription
/(auth)/signinSign in page
/(auth)/account-createAccount creation
/(auth)/forgot-passwordForgot password
/(auth)/create-new-passwordCreate new password
/(auth)/verification-codeVerification code
/(auth)/citizenshipCitizenship verification
/(auth)/identityIdentity verification
/(auth)/proof-of-identityProof of identity upload

Main

RouteDescription
/(main)/homeMain home page
/(main)/my-cardsMy cards dashboard
/(main)/profileProfile page
/(main)/statisticStatistics page

MyCard

RouteDescription
/(myCard)/add-new-cardAdd new card
/(myCard)/card-detailsCard details
/(myCard)/change-pinChange card PIN
/(myCard)/limitsCard limits

Profile

RouteDescription
/(profile)/change-passwordChange password
/(profile)/help-centerHelp center
/(profile)/languageLanguage settings
/(profile)/notificationsNotifications
/(profile)/personal-dataPersonal data
/(profile)/privacy-policyPrivacy policy
/(profile)/securitySecurity settings

Money

RouteDescription
/(homePaiges)/(sent-money)/add-new-contactAdd new contact
/(homePaiges)/(sent-money)/beneficiary-listBeneficiary list
/(homePaiges)/(sent-money)/invoiceInvoice page
/(homePaiges)/(sent-money)/send-moneySend money
/(homePaiges)/(sent-money)/send-toSend to contact
/(homePaiges)/(sent-money)/transfer-successTransfer success
/(homePaiges)/(sent-money)/verify-codeVerify code for transfer

Payment

RouteDescription
/(homePaiges)/(payment)/apply-for-cardApply for card
/(homePaiges)/(payment)/make-paymentMake payment
/(homePaiges)/(payment)/paymentPayment page
/(homePaiges)/(payment)/scan-pay-successScan pay success
/(homePaiges)/(payment)/scan-to-payScan to pay
/(homePaiges)/(payment)/select-waySelect payment way

Exchange

RouteDescription
/(homePaiges)/(convart)/exchangeCurrency exchange
/(homePaiges)/exchange-successExchange success

6. Project Analysis

Routing

The app has 44 page routes, grouped by feature domains and visibility scopes using App Router route groups.

Layouts

There are 4 layout files providing shared wrappers for root, auth, onboarding, and secure sub-sections.

State Persistence

Persistent state is primarily handled with localStorage and limited sessionStorage usage, not centralized context providers.

PWA Strategy

Custom public/sw.js is registered from src/components/pwa/ServiceWorkerRegister.tsx and pairs with /offline for fallback navigation.

This page intentionally avoids assumptions and only lists what is present in the current codebase.

7. User Flows

New User Onboarding

  1. /splash
  2. /onbording
  3. /(auth)/account-create
  4. /(auth)/verification-code
  5. /(main)/home

Forgot Password

  1. /(auth)/signin
  2. /(auth)/forgot-password
  3. /(auth)/verification-code
  4. /(auth)/create-new-password
  5. /(auth)/signin

Send Money

  1. /(main)/home
  2. /(homePaiges)/(sent-money)/add-new-contact
  3. /(homePaiges)/(sent-money)/send-to
  4. /(homePaiges)/(sent-money)/verify-code
  5. /(homePaiges)/(sent-money)/transfer-success

PWA Install

  1. /documentation
  2. beforeinstallprompt
  3. Install banner confirm
  4. Standalone launch

8. Fonts & Typography

Primary

Roboto

Used for body text, headings, and utility classes throughout the app.

var(--font-sans)

Source

Local Font Files

Loaded via src/styles/fonts.css using @font-face declarations.

public/assets/fonts/*.woff2
Font tokens are defined in src/app/globals.css under @theme, and the Roboto faces are declared in src/app/fonts.css.

Font Sizes

UseSize
Page titletext-5xl / 48px
Section headertext-3xl / 32px
Bodytext-sm / 14px
Captiontext-xs / 12px

9. Customisation

Brand Colour

Change the primary brand colour in src/app/globals.css:

/* src/app/globals.css */
@theme {
--color-primary: #7B48FF; /* purple theme */
}

Adding a New Page

  1. Create src/app/your-page/page.tsx.
  2. Wrap content in a page-level container and style as needed.
  3. Add route-level handling in layout and navigation if required.
  4. If API data is required, add a new client in src/api/ first, because the folder is currently empty.
Replace mock data with real API calls by wiring a future API client into page components.

10. Data & State

Storage usage is key-based and page-driven. Prefixing is used mainly for auth, onboarding, and PWA keys.

localStorage

KeyTypePurpose
userJSON stringLogged-in user object
tokenstringJWT or session token
finza-pwa-dismissed"1"PWA install banner dismissed
finza-pwa-installed"1"PWA install completed

sessionStorage

KeyTypePurpose
signupStepstringTracks signup step in onboarding

Cookies / Server Session

No direct cookie write/read logic is currently implemented in client code. Session management is not centralized in this repository yet.

11. PWA Configuration

public/manifest.json

App metadata, icons, theme color, and shortcuts.

public/sw.js

Service worker cache rules for offline support.

src/app/offline/page.tsx

Offline fallback page when network is unavailable.

Service worker registration runs from src/components/pwa/ServiceWorkerRegister.tsx in src/app/layout.tsx, and install UX is handled by PwaBanner.tsx with localStorage keys finza-pwa-dismissed and finza-pwa-installed.

12. Credits & Libraries

Library / ResourceVersionUsed For
Next.js16.2.4App Router, SSR, PWA
React19.2.4UI rendering
React DOM19.2.4DOM hydration
TypeScript^5Type safety
Tailwind CSS^4.2.4Utility-first CSS
@tailwindcss/postcss^4.2.4Tailwind PostCSS integration
Lucide React^1.11.0Icon set
@ducanh2912/next-pwa^10.2.9PWA support
ESLint^9Linting
eslint-config-next16.2.4Next.js lint rules

13. Support

If you have questions beyond this documentation, use the in-app support section.

Before reaching out, please:

  1. Read this documentation thoroughly.
  2. Check the browser console for errors.
  3. Confirm you are running npm run dev, not opening files directly.
  4. Ensure npm install completed without errors.
Tip: Missing NEXT_PUBLIC environment variables are the most common issue when integrating a real backend.

Finza v1.0.0 — © 2026. All rights reserved.