docs: define customer portal requirements
This commit is contained in:
@@ -0,0 +1,333 @@
|
||||
# my.voipsimplicity.com — Portal Gap Analysis
|
||||
|
||||
**Status:** Documentation-only analysis
|
||||
**Version:** 2.0.0 (revised for owner requirement areas)
|
||||
**Date:** July 24, 2026
|
||||
**References:** [PORTAL-REQUIREMENTS.md](./PORTAL-REQUIREMENTS.md) — canonical requirements doc; Viirtue/ViiBE seller portal (`voipsimplicity.viibewithus.com`, v2.8.0) and Apollo/NetSapiens manager+user portals (`portal.voipsimplicity.com`, v44.5.1) — 22 screenshots provided by owner Germaine Brown; [Obsidian notes](#sources) from owner.
|
||||
|
||||
> **Purpose:** Map the 7 owner-specified requirement areas (Dashboard, Call History, Marketplace, Billing, My Info, Site Login, Screenshot Groups) against current portal state and identify what needs to be built, wired, or deferred.
|
||||
|
||||
---
|
||||
|
||||
## Table of Contents
|
||||
|
||||
1. [Sources](#sources)
|
||||
2. [Gap Summary by Requirement Area](#gap-summary-by-requirement-area)
|
||||
3. [Area 1: My Dashboard](#area-1-my-dashboard)
|
||||
4. [Area 2: Call History](#area-2-call-history)
|
||||
5. [Area 3: Marketplace](#area-3-marketplace)
|
||||
6. [Area 4: Billing](#area-4-billing)
|
||||
7. [Area 5: My Info](#area-5-my-info)
|
||||
8. [Area 6: Site Login](#area-6-site-login)
|
||||
9. [Area 7: Screenshot-Informed Features](#area-7-screenshot-informed-features)
|
||||
10. [Source of Truth & Data Availability](#source-of-truth--data-availability)
|
||||
11. [Technical Architecture Gaps](#technical-architecture-gaps)
|
||||
12. [Implementation Priority Matrix](#implementation-priority-matrix)
|
||||
|
||||
---
|
||||
|
||||
## Sources
|
||||
|
||||
| Source | Type | Provider | Date |
|
||||
|---|---|---|---|
|
||||
| ViiBE/Viirtue seller portal | Screenshots (Accounts, Quotes, Products, LNP, Number Orders, CNAM, Mobile Connect, Reports) | Owner | July 2026 |
|
||||
| Apollo/NetSapiens customer + manager portals | Screenshots (Home/Statistics, Domains, SIP Trunks, Phone Inventory, E911, Call History, Contacts, Answer Rules, Time Frames, Voicemail/Settings, Music/Messages, Call-Center Queues/Statistics, Auto Attendants) | Owner | July 2026 |
|
||||
| Owner Obsidian notes | Design preferences, feature wishlist, operational constraints | Germaine Brown | July 2026 |
|
||||
| Deployed portal | `/home/myvoip/htdocs/my.voipsimplicity.com/index.html` on app3 | Live system | July 2026 |
|
||||
| `voip-portal-development` skill | 13 reference files covering API, patterns, deployment | Hermes skill repo | Ongoing |
|
||||
|
||||
---
|
||||
|
||||
## Gap Summary by Requirement Area
|
||||
|
||||
| # | Requirement Area | Current State | Gap Severity | Priority |
|
||||
|---|---|---|---|---|
|
||||
| 1 | **My Dashboard** | Stats + basic lists. No topology, MoH, or time frames. | Medium | Phase 1–3 |
|
||||
| 2 | **Call History** | Unified search + export implemented. No recordings, no CDR data. | **High** | Phase 1–3 |
|
||||
| 3 | **Marketplace** | Catalog + add-on request flow exists. No cart, no provisioning, no order tracking. | Medium | Phase 2 |
|
||||
| 4 | **Billing** | Plan card + CC form (sessionStorage). No invoices, no gateway. | **High** | Phase 2 |
|
||||
| 5 | **My Info** | Contact editing + CC form. No authorized users, no RBAC. | Medium | Phase 2 |
|
||||
| 6 | **Site Login** | Split-half page + session restore. No MFA, no password reset, no contact form. | Medium | Phase 1–3 |
|
||||
| 7 | **Screenshot Features** | 12+ feature sections visible in screenshots, 0 implemented. | **High** | Phase 1–4 |
|
||||
|
||||
**Overall gap severity:** High. The portal is a functional skeleton — login, nav, dashboard stats, call history search, and marketplace add-on requests work. Everything beyond these (MFA, billing invoices, authorized users, device lists, answering rules, time frames, contacts, music on hold, quotes/orders, reports) is absent or placeholder. Refer to [PORTAL-REQUIREMENTS.md](./PORTAL-REQUIREMENTS.md) for the complete phased plan.
|
||||
|
||||
---
|
||||
|
||||
## Area 1: My Dashboard
|
||||
|
||||
### Legend
|
||||
|
||||
| Symbol | Meaning |
|
||||
|---|---|
|
||||
| ✅ | Exists in current portal |
|
||||
| 🟡 | Partially exists (skeleton, needs wiring) |
|
||||
| ❌ | Missing entirely |
|
||||
| ⬜ | Deferred (Phase 3+) |
|
||||
|
||||
### Dashboard Feature Gap
|
||||
|
||||
| Feature | Current | Required By | Gap Detail |
|
||||
|---|---|---|---|
|
||||
| Per-customer aggregate stats (extensions, queues, DIDs, attendants) | ✅ | Phase 1 | Wired via RingLogix API. Filter to 100–399 for real extensions. |
|
||||
| Extension list (name, email, voicemail badge) | ✅ | Phase 1 | Implemented. System routes hidden by toggle. |
|
||||
| DID inventory list | 🟡 | Phase 1 | `phonenumber/read` returns ALL DIDs — filter client-side by `dialrule_domain`. |
|
||||
| Call queue list (name, strategy, members) | 🟡 | Phase 1 | `callqueue/read` wired. Members count not yet displayed. |
|
||||
| Auto attendant list (name, schedule, prompt) | ✅ | Phase 1 | `attendant/read` wired. Menu options NOT available via API. |
|
||||
| Subscribed plan display | 🟡 | Phase 1 | Hardcoded in billing card. Needs RingLogix catalog integration. |
|
||||
| Music on Hold display | ❌ | Phase 3 | No confirmed RingLogix endpoint. Apollo screenshots show MoH UI. |
|
||||
| Time Frames list | ❌ | Phase 1 (Apollo ref) | `timeframe/read` endpoint confirmed; not yet wired in portal. Apollo shows Name, Owner, When, Recurrence, Ends On columns. |
|
||||
| Graphical phone-system topology | ❌ | Phase 3 | No current implementation. Requires Canvas/SVG rendering of DID→TF→AA→Queue→Ext routing graph. |
|
||||
|
||||
**Dashboard gap assessment:** Current dashboard covers Phase 1 aggregate stats and basic lists. Missing: time frames (Phase 1 wiring needed), music on hold (blocked on API), topology graph (Phase 3 build), and plan display integration.
|
||||
|
||||
---
|
||||
|
||||
## Area 2: Call History
|
||||
|
||||
### Call History Feature Gap
|
||||
|
||||
| Feature | Current | Required By | Gap Detail |
|
||||
|---|---|---|---|
|
||||
| Unified search (name + phone, single input) | ✅ | Phase 1 | `oninput` handler, real-time filtering, `data-search` attributes. |
|
||||
| Direction indicators (↓ incoming, ↑ outgoing) | ✅ | Phase 1 | Teal/gold color scheme implemented. |
|
||||
| Date/Time, Direction, Name, Phone, Destination, Duration columns | ✅ | Phase 1 | All implemented in call-history-pattern. |
|
||||
| Status badges (Answered/Missed/Voicemail) | ✅ | Phase 1 | Color-coded badges implemented. |
|
||||
| Date range filter (Today/Week/Month/All) | 🟡 | Phase 1 | Time period filter in skill; Apollo shows calendar date picker. Enhance to date-range picker. |
|
||||
| CSV Export (All + Current View) | ✅ | Phase 1 | Both export buttons implemented. Arrow character cleanup. |
|
||||
| Recording playback (inline, conditional on enabled) | 🟡 | Phase 3 | Play button UI exists. Blocked on Wasabi S3 signed-URL generation and per-domain recording-enabled check. |
|
||||
| Voicemail transcript (inline modal) | 🟡 | Phase 3 | Transcript button + modal UI implemented. Blocked on CDR/vmail data availability. |
|
||||
| **CDR data availability** | ❌ | Phase 1 | **CRITICAL BLOCKER.** `cdr`, `call_detail_record`, `callhistory` all return 404 from RingLogix API. All Call History features are placeholder until an alternative data source is found (NetSapiens CDR export, RingLogix reseller-level reporting, or direct PBX collection). |
|
||||
|
||||
**Call History gap assessment:** The strongest area in the current portal — search, export, and rendering are well-implemented. The single critical blocker is CDR data availability. Without it, Call History can only show mock/placeholder data. Secondary gaps: recording playback (Wasabi integration), voicemail transcripts (data source), and date-range picker enhancement.
|
||||
|
||||
---
|
||||
|
||||
## Area 3: Marketplace
|
||||
|
||||
### Marketplace Feature Gap
|
||||
|
||||
| Feature | Current | Required By | Gap Detail |
|
||||
|---|---|---|---|
|
||||
| Plans/features catalog browsing | ✅ | Phase 2 | Cards with name, description, price, perLine flag. 10 hardcoded items. |
|
||||
| Per-extension vs per-account distinction | ✅ | Phase 2 | `perLine: true/false/'did'` flags. Event delegation pattern. |
|
||||
| Extension selector modal (single extension) | ✅ | Phase 2 | Modal with dropdown (100-399). |
|
||||
| **Multiple/all extensions selection** | ❌ | Phase 2 | Only single extension selection implemented. Need checkboxes + "Select All" for multi-extension add-ons. |
|
||||
| Per-DID selector (SMS/Text Messaging) | ✅ | Phase 2 | DID dropdown from `extension_list` filtered by 10+ digit regex. |
|
||||
| Cart metaphor | ❌ | Phase 2 | No cart — items processed one at a time. Need running cart before submission. |
|
||||
| Immediate provisioning vs request-discussion choice | ❌ | Phase 2 | Only "Request Discussion" flow implemented. Immediate provisioning requires RingLogix write API (unconfirmed). |
|
||||
| Audit log entries for all changes | ✅ | Phase 2 | `auditLog.push()` on every add-on request. |
|
||||
| Staff-visible ticket/notification | 🟡 | Phase 2 | Audit entries logged; no separate ticket UI or email notification pipeline. |
|
||||
| Approval boundaries / staff review workflow | ❌ | Phase 2 | No approval workflow. All requests go to manual review. |
|
||||
|
||||
**Marketplace gap assessment:** Add-on request flow is functional. Missing: multiple/all extensions selection, cart metaphor, provisioning choice (blocked on write API), and formal approval/ticket workflow. The catalog is hardcoded — no confirmed RingLogix product catalog API.
|
||||
|
||||
---
|
||||
|
||||
## Area 4: Billing
|
||||
|
||||
### Billing Feature Gap
|
||||
|
||||
| Feature | Current | Required By | Gap Detail |
|
||||
|---|---|---|---|
|
||||
| Plan/price summary card | 🟡 | Phase 2 | Hardcoded domain name + pricing. Needs RingLogix plan integration. |
|
||||
| Included features display | 🟡 | Phase 2 | Not implemented. Teal "Active" badges for plan features. |
|
||||
| Available but unsubscribed options | ❌ | Phase 2 | Not implemented. Gray "Available" badges with Marketplace link. |
|
||||
| Prior invoices list (date, number, amount, status) | ❌ | Phase 2 | **BLOCKED.** No confirmed RingLogix billing API. RingOS billing "coming soon." |
|
||||
| Inline framed invoice viewer (closeable) | ❌ | Phase 2 | **BLOCKED** on invoice data source. |
|
||||
| Download individual/multiple/all invoices | ❌ | Phase 2 | **BLOCKED** on invoice data source. |
|
||||
| Separate secure card update path | 🟡 | Phase 2 | CC form exists in billing view but uses `sessionStorage` — **NOT PCI-compliant.** Needs Stripe Elements or equivalent gateway. |
|
||||
| Card data never in browser storage | ❌ | Phase 2 | Current implementation stores last-4 in sessionStorage. Must migrate to tokenized gateway. |
|
||||
| Payment history | ❌ | Phase 2 | Viirtue shows Payments & Credits, Late Payers. Not in current portal. |
|
||||
| Tax exemption / tax reports | ❌ | Phase 4 | Viirtue shows Tax Exemptions, Tax Liability, Tax Summary. Deferred. |
|
||||
| Auto-pay toggle | ❌ | Phase 3 | Not in current portal. Requires payment gateway integration. |
|
||||
|
||||
**Billing gap assessment:** The billing view is a skeleton. The critical blocker is RingLogix RingOS billing API availability ("coming soon"). Without it, invoices must be manually uploaded or sourced from Stripe. Payment method needs a full PCI-compliant overhaul (Stripe Elements). Viirtue's Revenue/Billing/Compliance reports are the target model.
|
||||
|
||||
---
|
||||
|
||||
## Area 5: My Info
|
||||
|
||||
### My Info Feature Gap
|
||||
|
||||
| Feature | Current | Required By | Gap Detail |
|
||||
|---|---|---|---|
|
||||
| View/update account name | ✅ | Phase 2 | Editable contact form with toggle. |
|
||||
| View/update account email | ✅ | Phase 2 | Editable. |
|
||||
| View/update phone | ✅ | Phase 2 | Editable. |
|
||||
| View/update address | ❌ | Phase 2 | Not in current form. Needs street/city/state/ZIP fields. |
|
||||
| Company name (read-only) | 🟡 | Phase 2 | Displayed in billing but not in My Info view. |
|
||||
| Domain ID (read-only) | ❌ | Phase 2 | Not displayed. |
|
||||
| Separately update payment method | 🟡 | Phase 2 | CC form in same billing view, not isolated. Needs separate secure path. |
|
||||
| Add/manage authorized users | ❌ | Phase 2 | Not implemented. Viirtue shows multiple accounts per seller; Apollo shows multi-user domains. |
|
||||
| RBAC for authorized users | ❌ | Phase 2 | Need roles: Customer Admin, Authorized User, View-Only. |
|
||||
| Invitation flow | ❌ | Phase 2 | No invitation email flow. |
|
||||
| Audit trail for user management | ❌ | Phase 2 | No audit entries for user add/remove/role-change. |
|
||||
| Password change (self-service) | ❌ | Phase 1 | Not implemented. Viirtue and Apollo both imply password management. |
|
||||
| Notification preferences | ❌ | Phase 4 | Apollo shows voicemail email, missed call, mailbox full notifications. |
|
||||
|
||||
**My Info gap assessment:** Basic contact editing exists. Major gaps: authorized user management with RBAC (entirely absent), address fields, payment method isolation, password self-service, and notification preferences. The Viirtue Account Detail page (with tabs: Details, Quotes, Number Orders, Notes, Storage) is the primary model for Phase 2+.
|
||||
|
||||
---
|
||||
|
||||
## Area 6: Site Login
|
||||
|
||||
### Site Login Feature Gap
|
||||
|
||||
| Feature | Current | Required By | Gap Detail |
|
||||
|---|---|---|---|
|
||||
| Split-half login page (login left, help right) | ✅ | Phase 1 | Implemented. Navy gradient left, white right. Mobile stacks vertically. |
|
||||
| Authenticate by domain ID | ✅ | Phase 1 | Domain ID → password. Customer→domain mapping hardcoded for demo. |
|
||||
| Authenticate by account email | ✅ | Phase 1 | Email → password. |
|
||||
| Authenticate by authorized-user email | ❌ | Phase 2 | Requires authorized user table + per-user credentials. |
|
||||
| Staff login (`info@voipsimplicity.com`) | ✅ | Phase 1 | Hardcoded. Staff badge + domain selector on success. |
|
||||
| Session persistence (refresh/back button) | ✅ | Phase 1 | `sessionStorage` — cleared on logout. |
|
||||
| Password reset | ❌ | Phase 1 | Not implemented. Needs email-based token flow with rate limiting. |
|
||||
| MFA / one-time token (email/SMS) | ❌ | Phase 3 | Not implemented. Exploration target: Twilio Verify, email OTP, TOTP apps. |
|
||||
| Rate limiting on login attempts | ❌ | Phase 1 | No rate limiting in current implementation. |
|
||||
| MFA recovery codes | ❌ | Phase 3 | Generated on enrollment, shown once. |
|
||||
| Order-services contact form | ❌ | Phase 3 | Not implemented. Needs Name/Email/Phone/Company/Interest/Message fields on login page. |
|
||||
|
||||
**Site Login gap assessment:** Core authentication (split-half page, domain ID/email login, staff login, session persistence) is solid. Missing: authorized-user email auth, password reset, MFA, rate limiting, and the order-services contact form. MFA is a Phase 3 exploration target due to SMS dependency on Twilio provisioning and A2P 10DLC registration.
|
||||
|
||||
---
|
||||
|
||||
## Area 7: Screenshot-Informed Features
|
||||
|
||||
The owner provided 22+ screenshots from Viirtue/ViiBE (seller-side) and Apollo/NetSapiens (customer + manager). These reveal 12+ feature sections not in the current portal. **Staff-only views are marked.** Provider/API data availability is noted — this document does NOT claim RingLogix supports endpoints that are unverified.
|
||||
|
||||
### 7.1 ViiBE/Viirtue Seller-Side Screenshots (Staff-Only)
|
||||
|
||||
| Screenshot Feature | Current Portal | Required By | API Availability | Gap Detail |
|
||||
|---|---|---|---|---|
|
||||
| **Accounts** (account list, tabs) | 🟡 | Phase 1 | `domain/read` ✅ | Admin Panel shows 14-domain roster. Missing: per-account detail with Details/Quotes/Number Orders/Notes/Storage tabs. |
|
||||
| **Quotes** (Quote Name, Company, Owner, Status; create/edit) | ❌ | Phase 2 | ❌ No RingLogix quoting API | Need portal DB for quotes. Model: Viirtue table + line-item creation from product catalog. |
|
||||
| **Products** (product catalog, per-seat/per-account pricing) | ❌ | Phase 2 | ❌ Unknown | Marketplace has hardcoded catalog. Staff need catalog management UI. |
|
||||
| **LNP** (Port Date, Customer, Port Type, BTN, Status) | ❌ | Phase 4 | ❌ Unknown | Viirtue LNP integration. RingLogix porting API TBD. |
|
||||
| **Number Orders** (Order No., Customer, Date, Description, Status) | ❌ | Phase 4 | ❌ Unknown | Viirtue number ordering. |
|
||||
| **CNAM** (Order No., CNAM Value, Telephone No., Status) | ❌ | Phase 4 | ❌ Unknown | Viirtue CNAM tab. |
|
||||
| **Mobile Connect** | ❌ | Deferred | ❌ Not available | Future: softphone/mobile app pairing. |
|
||||
| **Reports** (Monthly Revenue, Recurring Revenue Growth, Revenue Projection) | ❌ | Phase 4 | ⚠️ Partial (stats available; CDR not) | Staff revenue dashboard. Viirtue Reports landing model. |
|
||||
| **Account Notes** (staff-only timeline per account) | ❌ | Phase 4 | N/A (portal DB) | Staff notes per customer account. |
|
||||
| **Document Storage** (file upload per account: LOAs, agreements) | ❌ | Phase 4 | N/A (portal DB + S3) | File upload/download per account. |
|
||||
|
||||
### 7.2 Apollo/NetSapiens Customer + Manager Views
|
||||
|
||||
| Screenshot Feature | Current | Required By | API Availability | Customer/Staff? |
|
||||
|---|---|---|---|---|
|
||||
| **Home / Statistics** | ✅ | Phase 1 | `subscriber/read`, `callqueue/read`, etc. ✅ | Customer + Staff |
|
||||
| **Domains** | ✅ | Phase 1 | `domain/read` ✅ | Staff (domain selector) |
|
||||
| **SIP Trunks** | ❌ | Phase 4 | ❌ Unknown — no confirmed endpoint | Customer/Staff |
|
||||
| **Phone Inventory / Devices** | ❌ | Phase 4 | ⚠️ `mac/read` may exist — unverified | Customer |
|
||||
| **E911 Inventory** | ❌ | Phase 4 | ❌ Unknown — no confirmed endpoint | Customer/Staff |
|
||||
| **Call History** (date picker, recordings, blocked numbers) | 🟡 | Phase 1 | ❌ CDR endpoints return 404 | Customer |
|
||||
| **Contacts** (Name, Number, Status, Department, Email; add/import/export) | ❌ | Phase 4 | ❌ Not available via RingLogix API | Customer |
|
||||
| **Answer Rules** (Time Frame, Ring targets, Allow/Block, fallback) | ❌ | Phase 4 | ❌ Unknown | Customer |
|
||||
| **Time Frames** (Name, Owner, When, Recurrence, Ends On; drag-to-reorder) | ❌ | Phase 1 | `timeframe/read` ✅ | Customer |
|
||||
| **User Voicemail / Settings** (inbox, greetings, notifications, transcription) | 🟡 | Phase 3 | ⚠️ `vmail/read` may exist — unverified | Customer |
|
||||
| **Music / Messages** (Add Music, Add Introduction, Add Message) | ❌ | Phase 3 | ❌ Unknown | Customer/Staff |
|
||||
| **Call-Center Queues / Statistics** | 🟡 | Phase 1 | `callqueue/read` ✅ (list; real-time stats unknown) | Customer/Staff |
|
||||
| **Auto Attendants** | ✅ | Phase 1 | `attendant/read` ✅ (menu detail NOT available) | Customer/Staff |
|
||||
|
||||
### 7.3 Design & UX Comparison (from Screenshots)
|
||||
|
||||
| Aspect | Current Portal | Reference Portals | Verdict |
|
||||
|---|---|---|---|
|
||||
| Theme | Light/neutral (teal, gold, navy) | Viirtue: dark sidebar, light content; Apollo: light all | Current matches owner intent. No dark mode needed. |
|
||||
| Navigation | Vertical sidebar | Viirtue: sidebar; Apollo: horizontal icon bar | Sidebar is canonical — keep it. |
|
||||
| Card layout | Stat cards, billing cards | Apollo: two-column card layout on Home | Consistent. |
|
||||
| Data tables | Call logs, extensions | Both: tables with sort, search, pagination | Consistent. |
|
||||
| Empty states | ✅ Canonical "No data available." | Viirtue: "Nothing to see here!"; Apollo: "No new messages." | Current canonical state is correct per skill rules. |
|
||||
| Mobile | ✅ Hamburger menu, viewport meta | Reference portals appear desktop-only in screenshots | Current portal is *more* mobile-ready than references. |
|
||||
|
||||
---
|
||||
|
||||
## Source of Truth & Data Availability
|
||||
|
||||
| Data Category | Current Source | Required Source | Status |
|
||||
|---|---|---|---|
|
||||
| Extensions | RingLogix `subscriber/read` | Same | ✅ Wired |
|
||||
| Domains | RingLogix `domain/read` | Same | ✅ Wired |
|
||||
| DIDs | RingLogix `phonenumber/read` | Same (filter client-side) | ✅ Wired |
|
||||
| Call Queues | RingLogix `callqueue/read` | Same | ✅ Wired |
|
||||
| Auto Attendants | RingLogix `attendant/read` | Same | ✅ Wired |
|
||||
| Time Frames | RingLogix `timeframe/read` | Same | ❌ Not yet wired |
|
||||
| Call History (CDRs) | RingLogix | RingLogix / NetSapiens / alternative | ❌ **BLOCKED** — `cdr`, `call_detail_record`, `callhistory` all return 404 |
|
||||
| Call Recordings | Wasabi S3 (RingLogix writes to it) | Wasabi S3 signed URLs | 🟡 Storage confirmed; signed-URL generation TBD |
|
||||
| Voicemail | Not wired | RingLogix `vmail/read` (unverified) | ❌ Need API verification |
|
||||
| Device Registration | Not wired | RingLogix `mac/read` (unverified) | ❌ Need API verification |
|
||||
| Billing / Invoices | Not applicable | RingLogix RingOS (future) or Stripe | ❌ **BLOCKED** — RingOS billing "coming soon" |
|
||||
| Payment Methods | `sessionStorage` only | Stripe Elements or equivalent | ❌ Need gateway integration |
|
||||
| Quotes / Orders | Not applicable | Portal DB (new) or Viirtue API | ❌ Need backend DB |
|
||||
| Notes / Documents | Not applicable | Portal DB + S3/disk | ❌ Need backend storage |
|
||||
| Products Catalog | Hardcoded in portal JS | Portal DB or RingLogix catalog API | 🟡 Hardcoded works for MVP; need management UI |
|
||||
| Customer Profiles | `sessionStorage` only | Portal DB | ❌ Need persistent storage |
|
||||
| SIP Trunks | Not applicable | RingLogix (unverified) | ❌ Unknown endpoint |
|
||||
| E911 | Not applicable | RingLogix (unverified) | ❌ Unknown endpoint |
|
||||
| Answer Rules | Not applicable | RingLogix (unverified) | ❌ Unknown endpoint |
|
||||
| CNAM | Not applicable | Viirtue (unverified) | ❌ Unknown endpoint |
|
||||
|
||||
---
|
||||
|
||||
## Technical Architecture Gaps
|
||||
|
||||
| Aspect | Current | Needed | Gap |
|
||||
|---|---|---|---|
|
||||
| **Architecture** | Single-file HTML SPA (no backend) | Backend for portal DB, payment gateway, file storage, API proxying | ❌ Major gap |
|
||||
| **Data persistence** | `sessionStorage` only (volatile) | Server-side DB for quotes, orders, notes, products, customer profiles, authorized users | ❌ Need database |
|
||||
| **API key protection** | Unknown — may be client-side | Server-side proxy to protect RingLogix credentials | 🟡 Needs audit |
|
||||
| **File upload** | Not supported | Document storage (LOAs, agreements, MoH audio) | ❌ Need upload + storage |
|
||||
| **Payment processing** | Not integrated | Tokenized payment gateway (Stripe Elements) | ❌ Need gateway |
|
||||
| **Multi-user per domain** | Not supported | Authorized user management per customer account | ❌ Need user management |
|
||||
| **PDF generation** | Not supported | Invoice PDF download | ❌ Need PDF gen or stored PDFs |
|
||||
| **File size** | ~1,500 lines (July 2026) | Could grow to 5,000+ with full feature set | 🟡 Monitor; consider module splitting |
|
||||
| **Build step** | None (single file) | May need build step if file grows too large | 🟡 Monitor |
|
||||
|
||||
---
|
||||
|
||||
## Implementation Priority Matrix
|
||||
|
||||
| Priority | What | Effort | Depends On |
|
||||
|---|---|---|---|
|
||||
| **P0 — Immediate (blocks everything)** | | | |
|
||||
| P0 | CDR data source for Call History | Investigation | RingLogix support / NetSapiens CDR / alternative |
|
||||
| P0 | Data isolation enforcement for all views | Low | RBAC infrastructure (exists) |
|
||||
| **P1 — Phase 1: Foundation** | | | |
|
||||
| P1 | Time Frames wiring (`timeframe/read` → portal) | Low | RingLogix API |
|
||||
| P1 | Password reset flow | Medium | Email infrastructure |
|
||||
| P1 | Call History date range filter (calendar picker) | Low | CDR data |
|
||||
| P1 | Dashboard plan display integration | Low | RingLogix catalog or hardcoded |
|
||||
| **P2 — Phase 2: Self-Service** | | | |
|
||||
| P2 | Contact info (address fields, read-only domain ID) | Low | None |
|
||||
| P2 | Authorized user management (add/remove/RBAC/invitation) | High | Backend DB + email |
|
||||
| P2 | Marketplace: multi-extension selection + cart | Medium | None (frontend only) |
|
||||
| P2 | Marketplace: provisioning choice UI | Low | Write API (for immediate; request-discussion needs no API) |
|
||||
| P2 | Billing: invoice list + viewer (placeholder until API available) | Medium | Backend DB or manual invoice storage |
|
||||
| P2 | Payment method: Stripe Elements integration | High | Stripe account + backend |
|
||||
| P2 | Login: rate limiting | Medium | Backend auth |
|
||||
| P2 | Login: authorized-user email authentication | Medium | Authorized user DB |
|
||||
| **P3 — Phase 3: Advanced** | | | |
|
||||
| P3 | Phone-system topology graph | High | All system objects wired |
|
||||
| P3 | MFA / one-time token (email/SMS) | High | Backend auth + email/SMS infrastructure |
|
||||
| P3 | Call recording playback (Wasabi S3) | Medium | Signed URL generation |
|
||||
| P3 | Voicemail settings/inbox | Medium | `vmail/read` API verification |
|
||||
| P3 | Music on Hold display | Medium | File upload + storage |
|
||||
| P3 | Order-services contact form | Low | Email infrastructure |
|
||||
| P3 | Auto-pay toggle | Medium | Payment gateway |
|
||||
| **P4 — Phase 4: Feature Parity** | | | |
|
||||
| P4 | Phones/Devices list | Medium | `mac/read` API verification |
|
||||
| P4 | Contacts (CRUD + import/export) | High | Backend DB |
|
||||
| P4 | Answering Rules | High | Backend DB or unverified API |
|
||||
| P4 | E911 inventory | Medium | Unknown API |
|
||||
| P4 | SIP trunk status | Medium | Unknown API |
|
||||
| P4 | Quotes + Orders pipeline | High | Backend DB |
|
||||
| P4 | Staff Reports | High | All data sources |
|
||||
| P4 | CNAM management | Medium | Unknown API |
|
||||
| P4 | LNP / Number Orders | High | Backend DB |
|
||||
| P4 | Account Notes (staff) | Low | Backend DB |
|
||||
| P4 | Document Storage | Medium | File storage |
|
||||
| P4 | Notification preferences | Medium | Backend DB + email |
|
||||
|
||||
---
|
||||
|
||||
*Gap analysis maintained in `/root/projects/voipsimplicity/PORTAL-GAP-ANALYSIS.md`. Companion requirements at [PORTAL-REQUIREMENTS.md](./PORTAL-REQUIREMENTS.md).*
|
||||
Reference in New Issue
Block a user