1f3d55d89f3b223bcbeb4417defc114474c83306
Forefront Wireless Customer Portal
Status: Scoped & Documented — awaiting build Started: July 25, 2026 Domain: my.forefrontwireless.com Companion project: IntelSight (shared auth — same Super Search/deepseek infra)
Self-service customer portal for Forefront Wireless, a WISP operating in Texas. Replaces or augments the existing Splynx customer portal with a modern, branded experience that directly consumes the Splynx API.
Architecture
┌─────────────────┐ ┌──────────────────┐ ┌────────────────────────┐
│ my.forefront │────▶│ FastAPI backend │────▶│ Splynx API v2.0 │
│ wireless.com │ │ (api subdomain) │ │ portal.forefront... │
│ (React SPA) │ │ Flask or FastAPI │ │ /api/2.0/ │
└─────────────────┘ └──────────────────┘ └────────────────────────┘
│
┌─────────▼──────────┐
│ Splynx self-hosted │
│ v4.2 │
│ Forefront Wireless │
└────────────────────┘
Stack: React SPA → FastAPI → Splynx API v2.0
Auth: Signature-based HMAC-SHA256 (nonce + key, secret-driven)
API Key: 5a8dc490716424f435306f2c18b4fdcb (full permissions)
Hosting: CloudPanel on app3 (same as other ITPP portals)
Splynx API — Proven Endpoints
Authentication
POST /api/2.0/admin/auth/tokens
Body: {"auth_type":"api_key","key":"...","nonce":<timestamp>,"signature":"..."}
→ Returns access_token (30-min expiry) + refresh_token
OR: Direct signature header (preferred for server-to-server)
Authorization: Splynx-EA (key=K&nonce=N&signature=S)
Nonce: round(microtime * 100) — hundredths of a second
Signature: strtoupper(hash_hmac('sha256', nonce . key, secret))
Working Endpoints
| Method | Path | Description | Status |
|---|---|---|---|
| GET | /admin/customers/customer |
List all customers (43 total, 33 active) | ✓ |
| GET | /admin/customers/customer/{id} |
Single customer detail | ✓ |
| GET | /admin/customers/customer-internet-services/{customer_id} |
Services for customer | ✓ |
| POST | /admin/customers/customer-internet-services |
List with filters (needs customer_id in body) |
⚠ 405 on GET |
| GET | /admin/networking/routers |
All routers (5 CCR2004s) | ✓ |
| GET | /admin/tariffs/internet |
Internet plans (9 plans, $59.95–$299.95) | ✓ |
| GET | /admin/finance/invoices |
Invoice list | ✓ |
| GET | /admin/finance/payments |
Payment records | ⚠ untested |
| GET | /admin/finance/transactions |
Transaction history | ⚠ untested |
| GET | /admin/support/tickets |
Support tickets | ⚠ untested |
Inventory Snapshot (July 2026)
| Resource | Count |
|---|---|
| Total customers | 43 |
| Active subscribers | 33 |
| Disabled accounts | 9 |
| Routers | 5 × MikroTik CCR2004 |
| Internet tariffs | 9 plans |
Portal Feature Ladder
V1 — Core Self-Service
- Customer login (email + password, or magic link)
- Dashboard: active services, current bill, data usage
- View & pay invoices (Stripe integration)
- Update contact info, phone, email
- Change WiFi password (via MikroTik API → router)
V2 — Enhanced
- Service upgrade/downgrade with proration
- Support ticket submission & tracking
- Outage notifications (SMS opt-in)
- Referral program
V3 — Operational
- Usage graphs (daily/weekly/monthly bandwidth)
- Auto-pay setup
- Seasonal hold / vacation pause
- Equipment return workflow
- Speed test integration
Splynx Quirks (Lessons Learned)
- Signature auth is required — Basic auth returns 401 unless "Unsecure access" is enabled on the key. Signature uses HMAC-SHA256 with a microtime nonce.
- Services need customer_id in URL —
GET /admin/customers/customer-internet-services/{id}works, butGET /admin/customers/customer-internet-services?customer_id=2returns 405. - Tariff names may need separate resolution — The list endpoint may return tariff IDs only; names require a follow-up call to
/admin/tariffs/internet/{id}. - Data shown is filtered — Only what the API key has permission for. Current key has full permissions.
Related
- Splynx v2 docs: https://api-doc.splynx.com/
- Splynx v4.2 wiki: https://wiki.splynx.com/4_2/
- Admin panel: https://portal.forefrontwireless.com/admin/
- Git: https://git.itpropartner.com/ippadmin/forefront-wireless-portal