A powerful GraphQL-powered platform for querying smartphone and device RF capabilities across different telecom providers. Built with modern technologies including React, TypeScript, Hono, and Bun, this tool enables network engineers, device testers, and telecom professionals to quickly search and analyze device support for bands, carrier aggregation combos, and advanced features.
π The Power of Comprehensive Data: Access detailed information about device capabilities including frequency bands (GSM, HSPA, LTE, 5G NR), carrier aggregation combinations, and network features across multiple Canadian carriers. Whether you're qualifying devices for network deployment, answering customer inquiries, or conducting competitive analysis, this tool provides instant, accurate answers.
Network engineers and telecom professionals face daily challenges:
- Customer Questions: "Does my iPhone support 5G on Telus?"
- Device Testing: Which devices need certification for n77 band support?
- Network Planning: What devices support EN-DC on our network?
- Competitive Analysis: How does device support compare across carriers?
Traditional solutions involve scattered spreadsheets, PDF spec sheets, and manual cross-referencing. Device Capabilities centralizes this data with instant, filterable access.
π± Query by Device
Search for a specific device and instantly see:
- All supported frequency bands (globally or per-provider)
- Carrier aggregation combinations (LTE CA, EN-DC, NR CA)
- Network features (VoLTE, VoWiFi, 5G SA, etc.)
- Software version details and release dates
- Filterable by technology (GSM/HSPA/LTE/5G)
π‘ Query by Capability
Search by a specific capability and find all supporting devices:
- By Band: Find all devices supporting Band 71, n77, etc.
- By Combo: Find devices with specific CA combinations
- By Feature: Find all VoLTE or 5G SA capable devices
- Filter by provider to see certification status
- Export results for reporting and analysis
- Comprehensive Device Database: 15+ devices with detailed capability data
- Provider-Specific Views: Toggle between global capabilities and carrier-specific certifications
- Advanced Filtering: Filter by technology, provider, and specific capabilities
- Real-Time Search: Instant results with debounced search and GraphQL caching
- Flexible Data Display: Choose which fields to show based on your needs
- Quick Answers: Instantly answer customer questions about device compatibility
- Certification Tracking: See which devices are certified for specific bands on your network
- Competitive Analysis: Compare device support across various providers like Telus, Rogers, Bell, and Freedom Mobile
- Software Tracking: Monitor capability changes across OS versions
- GraphQL API: Efficient, type-safe queries with no over-fetching
- Type Safety: End-to-end TypeScript from database to UI
- Performance: DataLoaders prevent N+1 queries, query complexity limits prevent abuse
- Modern UI: Responsive design with Tailwind CSS, accessible components
- Developer Experience: Hot reload, code generation, comprehensive type checking
To get started, ensure you have the following installed on your system:
- Bun:
1.xor newer - Install Bun - PostgreSQL:
16.xor newer - Docker & Docker Compose (for containerized development)
-
Configure Backend Environment Variables:
Navigate to the backend package and copy the example environment file:
cd packages/backend cp .env.example .env -
Edit Backend
.envwith your database credentials:# Database DATABASE_URL=postgresql://user:password@localhost:5432/device_capabilities DB_HOST=localhost DB_PORT=5432 DB_NAME=device_capabilities DB_USER=postgres DB_PASSWORD=postgres # Server PORT=3000 NODE_ENV=development # CORS CORS_ORIGIN=http://localhost:5173 # GraphQL GRAPHQL_MAX_DEPTH=5 GRAPHQL_MAX_COMPLEXITY=1000 GRAPHQL_RATE_LIMIT_PER_MINUTE=100 GRAPHQL_RATE_LIMIT_PER_HOUR=1000
-
Configure Frontend Environment Variables:
Navigate to the frontend package and copy the example environment file:
cd packages/frontend cp .env.example .env -
Edit Frontend
.env:# Backend API VITE_GRAPHQL_ENDPOINT=http://localhost:3000/graphql # App Configuration VITE_APP_NAME=Device Capabilities VITE_APP_VERSION=1.0.0
- Never commit your
.envfiles to version control (they're already in.gitignore) - For production, set environment variables through your hosting platform
- The
.env.examplefiles serve as documentation for required variables
Clone the repository and navigate to the project directory:
git clone https://github.com/devxiongmao/device-query-tool.git
cd device-query-toolInstall all dependencies for both backend and frontend:
# Install backend dependencies
cd packages/backend
bun install
# Install frontend dependencies
cd ../frontend
bun installCreate and seed the database:
cd packages/backend
# Generate migration
bun run db:generate
# Apply migration
bun run db:migrate
# Seed with test data
bun run db:seedGenerate TypeScript types from the GraphQL schema:
cd packages/frontend
bun run codegenTerminal 1 - Backend:
cd packages/backend
bun run devTerminal 2 - Frontend:
cd packages/frontend
bun run devTerminal 3 - GraphQL Codegen Watch (Optional):
cd packages/frontend
bun run codegen:watchVisit the app in your browser:
- Frontend: http://localhost:5173
- GraphQL Playground: http://localhost:3000/graphql
For a containerized development environment with all services orchestrated:
git clone https://github.com/devxiongmao/device-query-tool.git
cd device-query-toolThis will start PostgreSQL, backend, and frontend services:
make docker-upThe docker-compose setup will:
- Start PostgreSQL database on port 5432
- Start backend API on port 3000
- Start frontend dev server on port 5173
- Automatically run migrations and seed data
- Set up volume mounts for hot-reload development
- Frontend: http://localhost:5173
- Backend API: http://localhost:3000
- GraphQL Playground: http://localhost:3000/graphql
When you're done working:
make docker-down| Command | Description |
|---|---|
make docker-up |
Start all services (database, backend, frontend) |
make docker-down |
Stop all running containers |
make docker-logs |
View logs from all containers |
make docker-restart |
Restart all services |
make docker-clean |
Stop containers and remove volumes (fresh start) |
Run the backend test suite:
cd packages/backend
bun run testRun the frontend test suite:
cd packages/frontend
bun run testEnsure your code adheres to style guidelines:
# Backend type checking
cd packages/backend
bun run typecheck
# Frontend type checking
cd packages/frontend
bun run typecheck- Hono: Ultra-fast web framework for Bun/Node.js
- Bun: Lightning-fast JavaScript runtime and package manager
- PostgreSQL: Robust relational database for complex device relationships
- Drizzle ORM: Type-safe SQL query builder with excellent TypeScript support
- GraphQL Yoga: Modern GraphQL server with built-in performance features
- Pothos: Code-first GraphQL schema builder with excellent type inference
- DataLoaders: Automatic batching and caching to prevent N+1 queries
- Query Complexity Analysis: Prevent expensive queries from overloading the server
- Query Depth Limiting: Maximum depth of 5 levels to prevent deeply nested queries
- Rate Limiting: 100 requests/minute, 1000 requests/hour per IP
- Field-Level Permissions: Granular control over data access
- React: Modern UI library with concurrent features
- TypeScript: Full type safety across the entire application
- Vite: Next-generation frontend tooling with instant HMR
- Apollo Client: Powerful GraphQL client with intelligent caching
- Tailwind CSS: Utility-first CSS framework for rapid UI development
- React Router: Client-side routing with nested routes
- GraphQL Code Generator: Automatic TypeScript type generation from schema
- Type-Safe Hooks: Generated React hooks with full IntelliSense support
- Fragment Colocation: Reusable GraphQL fragments for consistent queries
Complex many-to-many relationships modeling:
- Devices β Software Versions β Bands/Combos/Features
- Providers β Certification restrictions on bands/combos
- Software-Specific Capabilities: Track changes across OS versions
- Efficient Indexing: Optimized composite indexes on junction tables
- Hot Module Replacement: Instant updates during development
- GraphiQL: Interactive GraphQL playground for testing queries
- Drizzle Studio: Visual database browser and editor
- Type Checking: Continuous type validation across stack
- Search for a Device: Type vendor or model number (e.g., "Apple", "iPhone", "SM-S928W")
- Select Provider: Choose between "Global" (all capabilities) or specific provider (Telus, Rogers, Bell, Freedom)
- Filter Technologies: Check boxes for GSM, HSPA, LTE, or 5G NR
- Select Fields: Choose which data to display (Software, Bands, Combos, Features)
- View Results: See comprehensive capability breakdown
- Select Capability Type: Choose Band, Combo, or Feature
- Search:
- Band: Filter by technology and band number
- Combo: Filter by technology and combo name
- Feature: Search by feature name
- Filter by Provider: Optional provider-specific filtering
- Display Options: Toggle additional device information
- View Results: Table of all matching devices with support status
"Does iPhone 15 Pro support n77 on Telus?" β Query by Device β Select iPhone 15 Pro β Provider: Telus β Technology: 5G NR β View Bands
"Which devices support VoLTE on Rogers?" β Query by Capability β Feature β Search: VoLTE β Provider: Rogers
"Show me all devices with EN-DC B2-n66 combo" β Query by Capability β Combo β Technology: EN-DC β Search: B2-n66
- DEVICE: Device information (vendor, model, market name, release date)
- SOFTWARE: OS versions linked to devices (platform, build number, PTCRB, SVN)
- BAND: Frequency bands (band number, technology, frequency range, band class)
- COMBO: Carrier aggregation combos (name, technology)
- FEATURE: Device features (VoLTE, VoWiFi, 5G SA, etc.)
- PROVIDER: Telecom providers (name, country, network type)
- DEVICE_SOFTWARE_BAND: Which bands each device/software supports globally
- DEVICE_SOFTWARE_COMBO: Which combos each device/software supports globally
- COMBO_BAND: Which bands make up each combo (with position)
- PROVIDER_DEVICE_SOFTWARE_BAND: Provider-certified band support
- PROVIDER_DEVICE_SOFTWARE_COMBO: Provider-certified combo support
- DEVICE_SOFTWARE_PROVIDER_FEATURE: Feature support per provider
- Software-Level Granularity: Capabilities can change between OS versions
- Provider Restrictions: Global capability vs. provider certification tracking
- Composite Primary Keys: Efficient querying of many-to-many relationships
- Strategic Indexing: 10+ indexes optimized for common query patterns
We welcome contributions to Device Capabilities! To contribute:
- Fork the repository
- Create a new branch (
git checkout -b feature/your-feature) - Make your changes with proper tests
- Ensure all tests pass (
bun test) - Run type checking (
bun run type-check) - Commit your changes (
git commit -m "Add your feature") - Push to the branch (
git push origin feature/your-feature) - Open a pull request
- Additional Carriers: Support for US carriers (Verizon, AT&T, T-Mobile)
- International Support: Carriers from other countries
- Bulk Import: CSV/Excel import for device data
- API Documentation: Comprehensive GraphQL schema documentation
This project is licensed under the MIT License. See the LICENSE file for details.
- The Bun team for creating an incredible runtime
- The GraphQL community for powerful API tooling
- Pothos GraphQL for the best schema-building experience
- Drizzle ORM team for excellent TypeScript-first database tools
- The React and TypeScript communities
- All contributors and early adopters
- Telecom professionals who provided domain expertise
- Issues: GitHub Issues
- Documentation: GitHub Wiki
Ready to streamline your device capability queries?
For Network Engineers: Stop searching through spreadsheets
For Device Testers: Instant certification status lookup
For Support Teams: Answer customer questions in seconds
For Developers: Extend the platform with the GraphQL API
Clone the repo and start querying! π±π¨
git clone https://github.com/your-username/device-capabilities.git
cd device-capabilities
make docker-up
# Visit http://localhost:5173Happy Querying! π―β¨