Releases: ibtesaamaslam/FlowForge
v1.0.0 FlowForge
π‘ FlowForge β ISP Town Manager v1.0.0
Initial public release Β· Offline-first ISP management platform β hierarchical area/town structure, subscriber profiles, LIFO billing logic, Excel import/export, bulk billing, and full financial ledger. Zero backend required.
π Live: flowforgeisp.vercel.app
1 Β· Highlights
| Attribute | Value |
|---|---|
| Frontend | React 19 Β· TypeScript 99% Β· Vite Β· Tailwind CSS |
| Data handling | SheetJS (xlsx) β Excel import & export |
| Icons | Lucide React |
| Persistence | localStorage β no backend, no database setup |
| Architecture | SPA Β· ES Modules via importmap |
| Deployment | Vercel |
| Areas | 4 color-coded (A, B, C, D) |
| Payment logic | LIFO β Current Bill cleared before Previous Pending |
| Billing | Bulk monthly bill generation per area |
| Import | Drag-and-drop .xlsx with smart town/member detection |
2 Β· What's New
ποΈ Area & Town Management
- 4 color-coded areas (A, B, C, D) β each area groups its own towns and tracks outstanding balances independently.
- Town CRUD β Create, edit, and delete towns within specific areas. Each town card shows active subscriber count, total outstanding balance, and monthly revenue at a glance.
- Stats at a glance β per-town and per-area summaries update in real time as payments are recorded.
π₯ Subscriber Management
- Detailed profiles β Name, Phone, CNIC, Package (Mbps), Address, and free-text Notes per subscriber.
- Status tracking β
Active,Suspended,Disconnectedwith colour-coded visual badges. - Real-time search & filter β filter subscribers by name, phone number, subscriber ID, or status instantly.
- Pagination β optimised tables handle large subscriber lists without performance degradation.
π° LIFO Billing & Ledger
- Transaction ledger β full Debit/Credit history per subscriber in
MemberLedger.tsx. - Previous Pending vs Current Bill split β dues are displayed as two separate cards showing old debt and the current month's charge independently.
- Payment receipt modal β visual confirmation showing balance before and after every payment recording.
π₯ Excel Import Wizard (ImportWizard.tsx)
- Drag-and-drop
.xlsxfile upload viaexcelParser.ts. - Smart heuristic parsing:
- Town headers detected by pattern:
number + dot + name(e.g.01. My Town) - Member rows parsed by serial number in Col A, name Β± phone in Col B, package in Col C, bill amount in Col D
- Town headers detected by pattern:
- Preview parsed data before committing β confirm or cancel.
π€ Excel / CSV Export (csvService.ts)
- Download full subscriber lists and financial ledger data for any specific town as
.xlsxor.csv. - Formatted output ready for external accounting software or management reporting.
π Executive Dashboard (DashboardView.tsx)
- Revenue tracking, daily order metrics, active subscriber utilization.
- Low-stock and inventory alerts for ISP equipment management.
- Activity logs showing the most recent actions across all areas.
π§Ύ Bulk Monthly Billing (BillingModal.tsx)
- One-click monthly bill generation for all
Activesubscribers in a selected area. - Creates a
Billledger entry per subscriber, increasing theirTotal DueandBalancefor that month.
3 Β· TypeScript Interfaces (types.ts)
interface Member {
id: string;
name: string;
phone: string;
cnic: string;
packageMbps: number;
address: string;
notes?: string;
status: 'active' | 'suspended' | 'disconnected';
totalDue: number; // running total owed
balance: number; // current unpaid balance
}
interface Town {
id: string;
areaId: 'A' | 'B' | 'C' | 'D';
name: string;
members: Member[];
}
interface LedgerEntry {
id: string;
memberId: string;
type: 'debit' | 'credit';
amount: number;
description: string; // e.g. "BILL OF FEB" | "Payment Received"
date: string; // ISO date string
previousBalance: number;
newBalance: number;
}4 Β· LIFO Billing Cycle β Full Walkthrough
LIFO (Last-In, First-Out) payment logic means the most recently generated bill is cleared first:
Step 1: User has 1,200 old debt (Previous Pending)
Step 2: Monthly billing runs β new 500 bill generated for February
User now owes: 1,200 (old) + 500 (Feb) = 1,700 total
Step 3: User pays 500
Step 4: System applies 500 to the CURRENT bill (Feb)
β Feb bill: β
PAID
β Previous Pending: still 1,200 (unchanged)
Step 5: Dashboard reflects 1,200 total outstanding
Why LIFO? Psychologically, subscribers feel they have "cleared this month" even with existing old debt. This reduces immediate billing disputes while keeping overdue balances visible for follow-up.
5 Β· Storage & Data Reset
All data is persisted to localStorage via storageService.ts. The app survives page reloads but data is device-specific β not synced across devices.
To reset all data:
1. Open DevTools (F12)
2. Application tab β Local Storage β your domain
3. Right-click β Clear
4. Refresh the page
This clears all towns, subscribers, and ledger entries. There is no confirmation prompt β once cleared, data cannot be recovered.
Running locally:
git clone https://github.com/ibtesaamaslam/FlowForge.git
cd FlowForge
# Python
python3 -m http.server 8000
# OR Node
npx http-server .
# Open: http://localhost:80006 Β· Known Limitations
| Limitation | Explanation |
|---|---|
| localStorage only | Data resets if browser storage is cleared; not synced across devices or users |
| No real-time multi-user | Two operators editing simultaneously will overwrite each other's changes on refresh |
| No authentication | Role selection (Admin/Operator) is not protected by a password in this release |
| No payment gateway | Payment recording is manual β no Easypaisa / JazzCash API integration yet |
| No SMS notifications | Subscriber reminder toggle records preference but sends no actual SMS |
| Single-device only | No cloud backup; if the device's storage is cleared, all data is lost |
7 Β· License
Distributed under the MIT License β free to use, modify, and distribute.
8 Β· Author
Ibtesaam Aslam Β· @ibtesaamaslam
β If FlowForge helped streamline your ISP operations, please consider giving it a star!
π [flowforgeisp.vercel.app] Β· Built with β€οΈ by Ibtesaam Aslam