ReplayIQ is a developer-centric SaaS platform designed to capture, replay, and compare API transactions. It allows QA and engineering teams to record HTTP payloads, trigger instant transaction replays against sandbox/staging services, and execute side-by-side JSON schema diff comparisons to catch regression bugs instantly.
Live Demo Website โข Swagger API Documentation โข Backend API Service
- ๐ฅ๏ธ Production Client: https://replay-iq.vercel.app
- โ๏ธ Production REST API: https://replayiq-mzsm.onrender.com
- ๐ Interactive Swagger UI: https://replayiq-mzsm.onrender.com/docs
- ๐ GitHub Repository: https://github.com/HarshEvolves/ReplayIQ
Click to expand interface screenshots
- ๐ Secure JWT Session Management: Email registration, login, and bearer authorization token injection.
- ๐ Workspace Projects CRUD: Keep logs organized into isolated workspaces.
- ๐ Dual Log Recording: Manually upload mock log payloads or inspect automatically captured HTTP client logs.
- ๐ Replay Engine: Powered by async HTTPX requests to execute live API replays with original headers and bodies.
- ๐ Response Comparison Engine: Computes latency margins, HTTP status mismatches, and visual JSON body key diffs.
- ๐ Visual Analytics: Interactive metrics showing HTTP verb distributions, status code ranges, and slowest endpoints.
- ๐ฅ Automatic Traffic Middleware: Background interceptor to capture and associate HTTP transactions instantly.
- ๐ณ Dockerized Scaffolding: Local setups using Docker Compose.
ReplayIQ utilizes a modern, decoupled architecture connecting React to a modular FastAPI backend service:
graph TD
Client[React Frontend - Vercel] <-->|HTTPS / JSON / JWT| API[FastAPI Backend - Render]
API <-->|SQLAlchemy ORM| DB[(PostgreSQL Database - Render)]
subgraph FastAPI Backend Core
API -->|1. Intercept Traffic| Middleware[Traffic Capture Middleware]
API -->|2. Trigger Replays| HTTPX[Async HTTPX Client]
API -->|3. Diff Payload| Diff[Comparison Engine]
API -->|4. Log Analytics| Analytics[Analytics Service]
end
HTTPX <-->|Live API HTTP Calls| Target[Target Sandbox / Staging Services]
The entity relationships are designed around project containment and transaction tracking:
erDiagram
USERS ||--o{ PROJECTS : owns
PROJECTS ||--o{ API_LOGS : contains
API_LOGS ||--o{ REPLAYS : triggers
PROJECTS ||--o{ API_REQUESTS : intercepts
USERS {
uuid id PK
string email UK
string hashed_password
string full_name
boolean is_active
datetime created_at
}
PROJECTS {
uuid id PK
string name
string description
uuid owner_id FK
datetime created_at
}
API_LOGS {
uuid id PK
uuid project_id FK
string method
string url
json request_headers
json request_body
json response_headers
json response_body
integer status_code
integer response_time_ms
datetime created_at
}
REPLAYS {
uuid id PK
uuid api_log_id FK
integer replay_status_code
json replay_response_headers
json replay_response_body
integer replay_response_time_ms
boolean replay_success
string error_message
datetime replayed_at
}
API_REQUESTS {
uuid id PK
uuid project_id FK
string method
string path
json request_headers
json request_body
json response_headers
json response_body
integer response_status
float response_time_ms
datetime created_at
}
ReplayIQ/
โโโ app/ # FastAPI Backend Application
โ โโโ api/ # API Route Handlers (Auth, Projects, Logs, Replay, etc.)
โ โโโ core/ # Config, Security, Exception Handlers, Logging
โ โโโ db/ # DB Connection Session Setup
โ โโโ middleware/ # HTTP Traffic Capture Interceptor
โ โโโ models/ # SQLAlchemy DB Models (User, Project, Replay, etc.)
โ โโโ schemas/ # Pydantic Schemas for Input Validation
โ โโโ services/ # Core Logic (Replays, Comparisons, Analytics)
โโโ frontend/ # React JS Client Application
โ โโโ public/ # Static Assets
โ โโโ src/
โ โ โโโ components/ # Layout, Modals, EmptyStates
โ โ โโโ context/ # AuthContext Session State
โ โ โโโ pages/ # App Pages (Dashboard, Logs, Projects, Settings)
โ โ โโโ services/ # Reusable API Service Layers (authService, Axios)
โ โโโ vercel.json # Vercel SPA Routing Configuration
โโโ tests/ # Pytest Suite (Auth, Replay, Traffic, Hardening)
โโโ alembic/ # DB Migrations Setup
โโโ docker-compose.yml # Local Docker Compose Scaffolding
โโโ Dockerfile # Multi-stage Containerization
- Python 3.13+
- Node.js 18+ & npm
- PostgreSQL (or run via Docker)
- Docker & Docker Compose (Optional)
git clone https://github.com/HarshEvolves/ReplayIQ.git
cd ReplayIQ- Create a Python virtual environment and activate it:
python3 -m venv venv source venv/bin/activate - Install package dependencies:
pip install -r requirements.txt
- Set up environment variables. Copy
.env.exampleto.envand configure credentials:cp .env.example .env
- Run migrations using Alembic:
alembic upgrade head
- Launch the local development server:
The backend API will run on http://localhost:8000.
uvicorn app.main:app --reload
- Navigate to the frontend directory:
cd frontend - Install package dependencies:
npm install
- Copy local environment overrides and launch:
The frontend UI will run on http://localhost:3000 and proxy
npm run dev
/apicalls.
Run the entire stack locally with one command:
docker compose up --buildThis boots:
- PostgreSQL Database running on port
5432 - FastAPI Web Service running on port
8000
| Variable | Default Value | Description |
|---|---|---|
POSTGRES_SERVER |
localhost |
Database host name / domain |
POSTGRES_USER |
postgres |
Database username |
POSTGRES_PASSWORD |
postgres |
Database credentials |
POSTGRES_DB |
replayiq |
PostgreSQL database name |
POSTGRES_PORT |
5432 |
Database port number |
SECRET_KEY |
(Generate Random) | Secret key for signing JWT tokens |
ALGORITHM |
HS256 |
Cryptographic algorithm for JWTs |
ACCESS_TOKEN_EXPIRE_MINUTES |
60 |
JWT expiration duration in minutes |
| Variable | Value | Description |
|---|---|---|
VITE_API_URL |
https://replayiq-mzsm.onrender.com |
Deployed production backend base URL |
Major REST API routes exposed on the backend service under /api/v1:
| Category | Method | Path | Description |
|---|---|---|---|
| Auth | POST |
/auth/register |
Register a new user account |
| Auth | POST |
/auth/login |
Authenticate and retrieve JWT token |
| Users | GET |
/users/me |
Fetch active user credentials |
| Projects | GET |
/projects |
Get projects list |
| Projects | POST |
/projects |
Create a new project workspace |
| Logs | GET |
/projects/{pid}/logs |
Fetch paginated mock logs |
| Logs | POST |
/projects/{pid}/logs |
Store a mock request payload |
| Replays | POST |
/projects/{pid}/logs/{lid}/replay |
Trigger async request replay |
| Comparison | GET |
/projects/{pid}/logs/{lid}/replays/{rid}/comparison |
Compare response payloads |
| Analytics | GET |
/projects/{pid}/analytics/summary |
Fetch dashboard metrics summary |
The repository contains an automated Pytest suite covereing route security, validation, error responses, and exception formatting.
Execute tests using this command in the root folder:
pytestNote: Make sure your venv is active and dependencies are loaded.
- Set up a Web Service on Render linked to your repository.
- Select environment Docker.
- Set the following environment variables:
POSTGRES_SERVER,POSTGRES_USER,POSTGRES_PASSWORD,POSTGRES_DB,POSTGRES_PORT(Pointing to your Render Postgres instance)SECRET_KEY,ALGORITHM
- Deploy the service. Port bindings are handled dynamically.
- Import the repository on Vercel.
- Configure Root Directory as
frontend. - Set Build settings:
- Framework Preset:
Vite - Build Command:
npm run build - Output Directory:
dist
- Framework Preset:
- Set Environment Variables:
VITE_API_URL:https://your-backend-render-url.com
- Click Deploy. SPA routing redirections will be loaded from
vercel.jsonautomatically.
- ๐ฅ Team Collaborations: Invite organization members to share workspaces and logs.
- ๐ WebSockets integration: Real-time push updates for running transaction lists.
- ๐ Rate Limiting: Defend endpoints from payload overload.
- ๐ Cron Scheduled Replays: Schedule recurring API regression test cycles.
- ๐ฆ API Collection Imports: Support importing requests from Postman or OpenAPI specifications.
- ๐ Alerting Notifications: Hook failure comparisons to Slack, Discord, or Email notifications.
Contributions are welcome! Please follow these guidelines:
- Fork the repository.
- Create your feature branch (
git checkout -b feature/NewFeature). - Commit your changes (
git commit -m 'Add NewFeature'). - Push to the branch (
git push origin feature/NewFeature). - Open a Pull Request.
Distributed under the MIT License. See LICENSE for more information.