Files
voipsimplicity/PORTAL-GAP-ANALYSIS.md

24 KiB
Raw Permalink Blame History

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 — 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 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
  2. Gap Summary by Requirement Area
  3. Area 1: My Dashboard
  4. Area 2: Call History
  5. Area 3: Marketplace
  6. Area 4: Billing
  7. Area 5: My Info
  8. Area 6: Site Login
  9. Area 7: Screenshot-Informed Features
  10. Source of Truth & Data Availability
  11. Technical Architecture Gaps
  12. 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 13
2 Call History Unified search + export implemented. No recordings, no CDR data. High Phase 13
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 13
7 Screenshot Features 12+ feature sections visible in screenshots, 0 implemented. High Phase 14

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 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 100399 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 sessionStorageNOT 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 BLOCKEDcdr, 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.