A modern, glassmorphism-styled speed test application built with Next.js, featuring real-time network performance testing that runs directly in the browser.
- Real Speed Testing: Actual data transfer measurement for accurate results
- Modern UI: Glass morphism design with dark blue gradient background
- Real-time Updates: Live progress tracking driven by in-browser measurements
- Responsive Design: Works perfectly on desktop and mobile devices
- Educational Content: Built-in explanations of how speed tests work
- Docker Ready: Easy deployment with Docker and Docker Compose
npm install
npm run devVisit http://localhost:3000 to see the application.
docker-compose up -d# Build the image
docker build -t speedtest .
# Run the container
docker run -p 3000:3000 speedtestThe application includes GitHub Actions workflow that automatically builds Docker images for each release tag.
-
Tag your commit:
git tag v1.0.0 git push origin v1.0.0
-
GitHub Actions will automatically:
- Build multi-platform Docker images (amd64, arm64)
- Push to GitHub Container Registry
- Tag with version and
latest
# Pull and run the latest release
docker run -p 3000:3000 ghcr.io/yourusername/speedtest:latestThe speed test performs three phases:
- Ping Test: Issues several latency probes and trims outliers before reporting the final average.
- Download Test: Streams pseudo-random data in 8MB chunks until both time and volume thresholds are met, collecting multiple passes and trimming outliers for a stable reading.
- Upload Test: Posts randomized binary payloads repeatedly until time and byte targets are satisfied, combining several passes into a trimmed average.
All tests use real data transfer for accurate network performance measurements.
NODE_ENV: Set toproductionfor production buildsPORT: Server port (default: 3000)HOSTNAME: Bind address (default: 0.0.0.0)
The application includes a health check endpoint at /api/ping for monitoring container health.
- Node.js 18+
- npm or yarn
- Framework: Next.js 14 with App Router
- Styling: Tailwind CSS with custom glassmorphism components
- TypeScript: Full type safety
- Real-time: Client-side streaming measurements
- Deployment: Docker with multi-stage builds
├── app/
│ ├── api/
│ │ ├── download/ # Download test data endpoint
│ │ ├── upload/ # Upload test endpoint
│ │ └── ping/ # Ping/health check endpoint
│ ├── components/
│ │ └── SpeedTest.tsx # Main UI component
│ ├── globals.css # Tailwind + custom styles
│ ├── layout.tsx # Root layout
│ └── page.tsx # Home page
├── .github/workflows/ # CI/CD pipelines
├── docker-compose.yml # Docker Compose configuration
└── Dockerfile # Multi-stage Docker build
MIT License - feel free to use this project for your own speed test applications.