Inspiration

What it does# Requirements Document

1. Application Overview

1.1 Application Name

SignalSpot

1.2 Application Description

SignalSpot is a mobile-first Progressive Web App that helps users discover the best mobile network coverage areas nearby through crowd-sourced signal reports. Users can test their current signal quality, view color-coded signal markers on an interactive map, filter by carrier, and access their test history—all within a clean, fast, and offline-friendly interface.

2. Users and Usage Scenarios

2.1 Target Users

  • Students in colleges and hostels
  • PG residents
  • Office workers
  • Commuters
  • Travelers
  • Gamers who care about ping
  • People living in weak network zones

2.2 Core Usage Scenarios

  • Finding the best spot for mobile signal in a new area
  • Comparing carrier performance at a specific location
  • Checking signal quality before making important calls or video meetings
  • Identifying weak signal zones to avoid
  • Contributing signal data to help others in the community

3. Page Structure and Functionality

3.1 Page Structure Overview

SignalSpot App
├── Onboarding Screen
├── Main App Shell
│   ├── Map Screen (Tab 1)
│   ├── Test Screen (Tab 2)
│   ├── History Screen (Tab 3)
│   └── Profile Screen (Tab 4)
├── Result Screen
├── Empty State Views
└── Error State Views

3.2 Onboarding Screen

Purpose: Introduce the app and request location permission

Functionality:

  • Display brief introduction explaining app purpose
  • Show 2-3 simple slides highlighting key features
  • Request browser geolocation permission with clear explanation
  • Provide skip option to proceed to main app
  • Store onboarding completion status in localStorage

3.3 Map Screen (Tab 1)

Purpose: Display interactive map with signal quality markers

Functionality:

  • Display full-screen Leaflet map centered on user location
  • Show color-coded signal markers:
    • Green markers for strong signal
    • Yellow markers for medium signal
    • Red markers for weak signal
  • Display carrier filter chips: Jio, Airtel, Vi, BSNL, All
  • Show floating action button labeled Test Signal
  • Display small info card showing:
    • Best carrier nearby based on saved reports
    • Last update timestamp
  • Show marker legend explaining color coding
  • Display current location indicator
  • Handle marker tap to show report details in popup
  • Show empty state message when no reports exist
  • Support map pan and zoom gestures
  • Load and display reports from localStorage

3.4 Test Screen (Tab 2)

Purpose: Conduct signal quality test

Functionality:

  • Display large Start Test button
  • Show current location and carrier selection
  • Provide indoor/outdoor toggle option
  • Display loading state with progress indicator during test
  • Simulate realistic network measurements:
    • Download speed (Mbps)
    • Upload speed (Mbps)
    • Ping/latency (ms)
    • Signal score (0-100)
  • Generate believable values with slight variation on repeated tests
  • Show Cancel button during test
  • Navigate to Result Screen upon completion
  • Handle location permission denied state
  • Handle no internet connection state

3.5 Result Screen

Purpose: Display test results and allow report submission

Functionality:

  • Display test results in clean card format:
    • Carrier name
    • Download speed with unit
    • Upload speed with unit
    • Ping with unit
    • Signal score with visual indicator
    • Quality label: Excellent / Good / Fair / Poor / Dead zone
    • Location coordinates or address label
    • Timestamp
    • Indoor/outdoor tag
  • Provide Submit Report button
  • Provide Retry Test button
  • Save report to localStorage on submission
  • Show confirmation message after successful submission
  • Navigate back to Map Screen after submission
  • Add submitted report marker to map

3.6 History Screen (Tab 3)

Purpose: Display user's previous signal tests

Functionality:

  • List all saved tests in reverse chronological order
  • Display for each test:
    • Carrier name with icon
    • Signal score and quality label
    • Timestamp in readable format
    • Location summary
  • Provide delete button for individual items
  • Provide Clear All History button
  • Show empty state when no history exists
  • Support pull-to-refresh gesture
  • Load history data from localStorage

3.7 Profile Screen (Tab 4)

Purpose: Display user information and app settings

Functionality:

  • Show anonymous user card or simple profile
  • Display contribution count (total tests submitted)
  • Show privacy policy text explaining data usage
  • Provide Delete Local Data button with confirmation dialog
  • Display app version information
  • Show settings section with:
    • Dark mode toggle
    • Default carrier selection
    • Notification preferences (if applicable)
  • Provide About section with app description

3.8 Empty State Views

Purpose: Guide users when no data is available

Functionality:

  • Map empty state: Display message No signal data here yet. Be the first to test.
  • History empty state: Display message No tests recorded yet. Start testing to build your history.
  • Include relevant call-to-action button
  • Use friendly, encouraging tone

3.9 Error State Views

Purpose: Handle and communicate errors gracefully

Functionality:

  • Location permission denied: Show message explaining why location is needed with retry option
  • No internet connection: Display offline message with cached data access
  • GPS unavailable: Show fallback message with manual location option
  • Test failed: Provide retry button with error explanation
  • Use clear, non-technical language

4. Business Rules and Logic

4.1 Signal Score Calculation

  • Calculate signal score (0-100) based on:
    • Download speed (weighted 40%)
    • Upload speed (weighted 30%)
    • Ping/latency (weighted 30%)
  • Convert score to quality labels:
    • 80-100: Excellent
    • 60-79: Good
    • 40-59: Fair
    • 20-39: Poor
    • 0-19: Dead zone

4.2 Test Data Generation

  • Generate realistic simulated values for first version:
    • Download speed: 1-100 Mbps range
    • Upload speed: 0.5-50 Mbps range
    • Ping: 10-200 ms range
  • Add slight random variation (±10%) for repeated tests at same location
  • Ensure values remain consistent with carrier and location context
  • Label clearly as simulated network test

4.3 Report Clustering and Display

  • Group nearby reports within 100-meter radius
  • Display aggregated marker showing average signal quality
  • Weight newer reports more heavily in aggregation
  • Show individual reports when zoomed in closely
  • Display report count in cluster marker

4.4 Carrier Filtering

  • Filter map markers by selected carrier
  • Show All option to display all carriers
  • Persist selected filter in localStorage
  • Update best carrier card based on active filter

4.5 Data Persistence

  • Save all reports to localStorage with unique ID
  • Store user preferences and settings
  • Maintain test history with 100-item limit
  • Implement data cleanup for reports older than 30 days

4.6 Geolocation Handling

  • Request high-accuracy location when available
  • Fall back to default city view if permission denied
  • Use last known location if current location unavailable
  • Display location accuracy indicator

4.7 Offline Behavior

  • Cache app shell and core assets for offline access
  • Allow viewing of previously saved reports without internet
  • Queue new reports for submission when connection restored
  • Display clear offline indicator in UI

5. Exception and Boundary Conditions

Scenario Handling
Location permission denied Show explanation message, offer manual location entry, display demo map view
No internet connection Display offline banner, allow access to cached data, queue pending submissions
GPS unavailable or inaccurate Show accuracy warning, allow test with reduced confidence, suggest retry
localStorage full Implement automatic cleanup of oldest reports, show storage warning
Repeated test at same location Allow test but show slight variation in results, prevent spam submissions within 1 minute
No reports in current map view Display empty state with call-to-action to test signal
Invalid or corrupted localStorage data Clear corrupted data, show error message, reinitialize with empty state
Browser does not support geolocation Show unsupported browser message, offer manual location entry
Map fails to load Display error message, provide retry button, show text-based report list as fallback
Test interrupted or cancelled Discard incomplete test data, return to Test Screen

6. Acceptance Criteria

  • App opens without errors in modern mobile browsers
  • Map loads and displays correctly with user location centered
  • Signal test flow completes successfully and generates realistic data
  • Test results save to localStorage and persist across sessions
  • History screen displays all saved tests accurately
  • Markers appear on map with correct color coding
  • Carrier filters work and update map display
  • Bottom navigation switches between tabs smoothly
  • Empty states display when no data is available
  • Error states handle permission denial and connection issues gracefully
  • UI is responsive and thumb-friendly on mobile devices
  • App works offline with cached data
  • Dark mode toggle functions correctly
  • Delete data functionality clears localStorage completely
  • App feels polished and professional even with simulated data

7. Out of Scope for This Release

  • Real network speed measurement using external APIs
  • User authentication and cloud data sync
  • Social features such as comments or likes
  • Push notifications
  • Advanced analytics dashboard
  • Admin panel or moderation tools
  • Paid subscriptions or premium features
  • Multi-language support
  • Integration with Firebase or backend database
  • Real-time collaborative features
  • Complex gamification or rewards system
  • Native mobile app versions
  • Automated spam detection algorithms
  • Export data functionality
  • Sharing reports to social media

How we built it

Challenges we ran into

Accomplishments that we're proud of

What we learned

What's next for signalspot

Built With

  • medo
Share this project:

Updates

Submission history