api-testing is a single-page, standalone HTML utility for API testing and load simulation. It is delivered as one file with embedded CSS and JavaScript that can be opened directly in a browser and used immediately, with no build step, server, or framework.
The product's intent is narrow and instrumental: give one operator a test bench for repeatedly POSTing to a fixed API endpoint on a fixed interval, and show them the machine's answer in real time. The operator presses Start, the utility begins calling navshaktinavratri.in/v1/user/resend-otp via POST every 46 seconds, and the operator watches a live status readout — Running/Stopped, request count, last-request timestamp, and any errors with HTTP status and message — until they press Stop.
The audience is a single active human role: a developer or tester running a load simulation against the endpoint and reading the results. The interface is deliberately minimal and functional — clean layout, readable text, no unnecessary styling — presented as a dark instrument panel with a printed faceplate rather than a marketing page.
api-testing is a client-side-only web utility. All logic runs in the browser; there is no backend, no database, and no server-side component. The utility is a single page named API Tester, which is anonymously reachable — it requires no account, sign-in, or identity of any kind. Opening the HTML file is the entire entry path.
The utility owns one repeating behavior: a Start/Stop-controlled loop that POSTs a fixed JSON payload to a fixed endpoint every 46 seconds, indefinitely, until stopped. Around that loop it owns a live feedback surface: current status, number of requests sent, timestamp of the last request, and any errors encountered with their HTTP status and message. It also owns the request log that records each attempt.
The utility does not own the target endpoint. navshaktinavratri.in/v1/user/resend-otp is an external service; the utility is a client that sends requests to it and reports what comes back. The endpoint's behavior, availability, rate limiting, and CORS policy are outside this product's control. The utility's responsibility is to send the request, observe the response or failure, and report it truthfully.
The utility is a test bench for an endpoint the operator is authorized to exercise. Its accepted behavior — repeatedly POSTing the fixed payload {whatsappNumber: "919773282772"} to navshaktinavratri.in/v1/user/resend-otp every 46 seconds, indefinitely, until Stop is pressed — is a load simulation against a real OTP-resend endpoint carrying a real subscriber number. That behavior is only in scope when the operator has the endpoint owner's authorization to run it.
Authorization precondition. Before starting a cycle, the operator MUST have the endpoint owner's authorization to send repeated requests to navshaktinavratri.in/v1/user/resend-otp. The utility MUST surface this precondition in the interface as a visible, persistent notice on the panel — the operator is responsible for confirming authorization before pressing Start. The utility does not verify authorization itself; it states the precondition and leaves the decision to the operator.
Scope of the fixed payload. The fixed payload {whatsappNumber: "919773282772"} is the operator's own test number, supplied by the operator for this simulation. The utility MUST NOT accept, store, or send any other number, and MUST NOT be repurposed to target numbers the operator does not control. The payload is fixed by the product and is not configurable in the UI.
Interval is a fixed cadence, not a cooldown bypass. The 46-second interval is the specified cadence of the simulation. The utility MUST NOT shorten, randomize, or otherwise tune the interval to evade, defeat, or work around the endpoint's resend cooldown, rate limiting, or abuse protections. If the endpoint rejects a request because of its own cooldown or rate limit, the utility reports that response truthfully and continues on its fixed 46-second cadence; it does not adapt its timing to defeat the protection.
No circumvention of endpoint protections. The utility MUST NOT proxy, tunnel, spoof, or otherwise circumvent the endpoint's CORS policy, authentication, rate limiting, or abuse protections. CORS handling is limited to surfacing a blocked request as a visible error (see FR-11); it is never a means of bypassing the endpoint's policy.
Stop is always available. The operator MUST be able to halt the cycle at any moment by pressing Stop, and the utility MUST stop sending requests immediately when Stop is pressed. No state of the utility prevents the operator from stopping the cycle.
Operator responsibility. The operator is responsible for using the utility only against endpoints they are authorized to test, and for the consequences of the requests they send. The utility's role is to send the request, report the answer, and make the stop control always available.
Delivery. The product is delivered as a single standalone HTML file with embedded CSS and JavaScript. It is opened directly in a browser and is usable immediately — no installation, no server, no network setup beyond the browser's own connectivity to the target endpoint. This is a hard, explicit constraint.
Access ownership. The utility is anonymous and public-ephemeral. There is no application-owned identity, no account, no session continuity, and no protected destination. The operator opens the file and uses it. No sign-in, invitation, provisioning, or bootstrap step exists or is required, because the accepted behavior creates no durable actor-specific state that must be privately owned or resumed across sessions. Request counts, timestamps, and errors are live, in-memory readouts of the current session; they are not persisted and are not bound to an identity.
Current vs. future boundary. Everything described in this document is current. The utility's scope is the Start/Stop loop, the fixed endpoint and payload, the 46-second interval, and the live feedback readout. No future features are specified by the source. The utility is not a general-purpose API client, not a configurable load-testing framework, and not a monitoring or alerting system; those are outside the accepted scope. The utility is also not an OTP-bombing or abuse tool: it is scoped to an authorized test of one endpoint with the operator's own test number, at a fixed cadence, with Stop always available (see 2b).
External ownership. The target endpoint is owned and operated by a third party. The utility does not modify, proxy, or intercept the endpoint's behavior. CORS handling is limited to what the browser and the endpoint's own policy permit; the utility cannot and does not circumvent the endpoint's protections. Repeated requests to the endpoint are sent only under the authorized-use boundary in 2b.
The single page of the utility. It is anonymously reachable and requires no identity. It presents the instrument panel: a faceplate header, the dominant request counter, a ruled label/value data table, the Start/Stop control, the interval progress rule, and the request log.
Information and state
api-testing, flush left in the faceplate header.navshaktinavratri.in/v1/user/resend-otp, flush right in the faceplate header, rendered as monospace machine text.Running or Stopped.Primary actions
Supporting actions
Domain entities
{whatsappNumber: "919773282772"}. Each attempt has a timestamp, an outcome (success or error), and, on error, an HTTP status and message.navshaktinavratri.in/v1/user/resend-otp, called via POST.Component responsibilities
REQUESTS SENT label above it and a 10px status lamp beside it.RUNNING or STOPPED.STATUS, REQUESTS SENT, LAST REQUEST, ERRORS — each a fixed-width uppercase label column against a value column, separated by hairlines.States
0, status reads Stopped, last-request timestamp is empty, errors are empty, the authorized-use notice is visible, and the log shows a single muted line: No requests yet. Press Start.ERRORS row and appended to the log. The cycle continues on its 46-second interval unless the operator presses Stop.ERRORS row and the log until superseded or the session ends. The operator can press Stop at any time to halt the cycle.FR-1 — Standalone single-file delivery As an API Tester / Load Simulator Operator, I should receive the utility as one standalone HTML file with embedded CSS and JavaScript, so that I can open it directly in a browser and use it immediately.
FR-2 — Start button begins the POST cycle
As an API Tester / Load Simulator Operator, I should press a button labeled Start to begin calling navshaktinavratri.in/v1/user/resend-otp via POST, so that the load simulation begins.
FR-3 — Button toggles to Stop and halts the cycle As an API Tester / Load Simulator Operator, I should see the button toggle to Stop once clicked, and clicking it again should stop the API calls, so that I can end the simulation on demand.
FR-4 — 46-second repeating interval, indefinite until stopped As an API Tester / Load Simulator Operator, I should have API calls repeat every 46 seconds indefinitely until I press Stop, so that the simulation runs continuously at the specified cadence.
FR-5 — Fixed payload on every request
As an API Tester / Load Simulator Operator, I should have each POST request send the payload {whatsappNumber: "919773282772"}, so that every request carries the specified body.
{whatsappNumber: "919773282772"}; failure/recovery — not applicable; continuation — the payload is unchanged for every subsequent request.FR-6 — Live status readout As an API Tester / Load Simulator Operator, I should see the current status as Running or Stopped in real time, so that I know whether the cycle is active.
FR-7 — Live request count As an API Tester / Load Simulator Operator, I should see the number of requests sent in real time, so that I can track how many attempts have been made.
FR-8 — Live last-request timestamp As an API Tester / Load Simulator Operator, I should see the timestamp of the last request in real time, so that I can confirm when the most recent attempt was sent.
FR-9 — Error reporting with HTTP status and message As an API Tester / Load Simulator Operator, I should see any errors encountered, with their HTTP status and error message, so that I can diagnose failed requests.
FR-10 — Vanilla JavaScript, no frameworks As an API Tester / Load Simulator Operator, I should have the utility built with vanilla JavaScript and no frameworks, so that it stays lightweight and dependency-free.
FR-11 — CORS handling if issues arise As an API Tester / Load Simulator Operator, I should have CORS issues handled if they arise, so that the utility behaves predictably when the browser blocks a cross-origin request.
FR-12 — Proper error handling for failed requests As an API Tester / Load Simulator Operator, I should have proper error handling for failed requests, so that no failure is swallowed.
FR-13 — Minimal, functional UI As an API Tester / Load Simulator Operator, I should have a minimal and functional UI with a clean layout, readable text, and no unnecessary styling, so that the utility stays focused on the readout.
FR-14 — Authorized-use notice As an API Tester / Load Simulator Operator, I should see a persistent notice stating that I must be authorized to send repeated requests to the endpoint before pressing Start, so that I confirm the authorization precondition before running the cycle.
FR-15 — Stop is always available As an API Tester / Load Simulator Operator, I should be able to halt the cycle at any moment by pressing Stop, so that I can end the simulation immediately regardless of the current state.
FR-16 — No circumvention of endpoint protections As an API Tester / Load Simulator Operator, I should have the utility send requests only at the fixed 46-second cadence and never adapt its timing or routing to defeat the endpoint's cooldown, rate limiting, or CORS policy, so that the simulation stays within the endpoint's own protections.
Product context. The operator is a developer or tester who needs to exercise a single API endpoint under repeated load. They work from a browser, opening a standalone HTML file rather than deploying a service. Their working context is a test bench: one endpoint, one payload, one interval, one readout.
Primary goal. To run a repeating POST cycle against navshaktinavratri.in/v1/user/resend-otp at a 46-second cadence and read the machine's answer — how many requests have gone out, when the last one went, and what came back — until they decide to stop.
Distinct accepted responsibilities.
{whatsappNumber: "919773282772"} on every request.Relevant inputs and decisions. The operator's inputs are the Start and Stop presses. Their decisions are when to begin the cycle and when to end it. They do not configure the endpoint, the payload, or the interval — those are fixed by the product.
Interactions with other participants. The operator is the only active human participant. The target endpoint is an external service that receives the requests and returns responses or errors; it is not a persona and does not act within the utility. The operator's interaction with the endpoint is one-directional from the utility's perspective: the utility sends, the endpoint answers, the operator reads.
Observable success. The operator sees the status read Running, the request count incrementing, the last-request timestamp updating, and any errors reported with their HTTP status and message — and can halt the cycle at any time by pressing Stop.
Constraints. The operator works within a fixed endpoint, a fixed payload, and a fixed 46-second interval. The utility is anonymous and session-scoped; nothing is persisted across page loads. The operator must be authorized to send repeated requests to the endpoint before starting a cycle, and must use only their own test number in the fixed payload.
api-testing flush left and the endpoint path navshaktinavratri.in/v1/user/resend-otp in monospace flush right.0, the status reads Stopped, the last-request timestamp is empty, and the errors row is empty.No requests yet. Press Start.navshaktinavratri.in/v1/user/resend-otp with the payload {whatsappNumber: "919773282772"}.1, and the last-request timestamp updates to the time of the attempt.ERRORS row with its HTTP status and error message.ERRORS row and appended to the log.navshaktinavratri.in/v1/user/resend-otp before pressing Start.919773282772 is their own test number.The visual direction is typographic infrastructure for a repeating signal, after the muse Erik Spiekermann. The register is instrumental and clinical: a test bench, not a product page. Every graphic element is a label, a rule, a lamp, or a numeral.
Mode. Dark.
Color tokens (by role).
| Role | Hex | Use |
|---|---|---|
| Background | #14161A | Warm graphite ground |
| Surface | #1E2126 | Instrument panel housing |
| Text | #F2EFE9 | All readable copy (13.9:1 on the ground) |
| Primary | #E4572E | The one hot accent: Start/Stop button fill, RUNNING lamp, active pulse, errors at full strength |
| Accent | #F2C14E | Secondary signal: request counter, last-request timestamp, interval progress rule, error status code |
| Muted | #8B9099 | Labels, units, the 46s interval note — never body copy |
| Rule | #2C3037 | 1px hairline rules separating field rows |
No blue, indigo, or violet appears anywhere. Errors use the primary orange at full strength plus an amber status code, so the panel never needs a fourth hue.
Typography.
-0.02em tracking and sentence case; Fira Sans SemiBold 600 uppercase at 11px with 0.18em letterspacing for every field label (STATUS, REQUESTS SENT, LAST REQUEST, ERRORS).ui-monospace, 'SFMono-Regular', Menlo, monospace) so the URL reads as machine text, never as prose.0.18em; values 13px/400; counter display clamp(48px, 9vw, 96px) tabular; wordmark clamp(28px, 4.5vw, 44px).Shape language. Ruled and rectilinear. Zero border radius on the panel and the button (a 2px radius at most, on the button only, for honesty of the press). 1px hairline rules in #2C3037 separate every field row. A 3px signal-orange rule caps the panel above the wordmark like a transit-line band. Status lamps are 10px squares, not circles. No shadows, no glow, no glass.
Spacing rhythm. A single 960px-max instrument panel, centred, on the dark ground, with 32px gutters at 375px and 64px at 1280px.
Imagery style. No photography, no illustration, no icons beyond the two 10px status squares. The imagery is the information: the oversized tabular counter, the ruled label/value table, the monospace request log, and the amber interval rule. The empty state is a single muted line of type — No requests yet. Press Start.
The first screen is a single dark instrument panel with a printed faceplate, not a SaaS hero. There is no centred headline, no subtext, no gradient, and no button floating in whitespace.
A 3px signal-orange band caps the panel. Under it, the wordmark api-testing in Fira Sans Light at clamp(28px, 4.5vw, 44px) sits flush left, with the endpoint path navshaktinavratri.in/v1/user/resend-otp in 13px monospace flush right, separated by a hairline rule. The URL is treated as machine text, never as a link in body copy.
Directly beneath, the request counter is the dominant element of the entire viewport — a tabular numeral at clamp(48px, 9vw, 96px) in warm off-white, with the amber label REQUESTS SENT above it at 11px uppercase. To its right, a 10px orange square lamp with the word RUNNING or STOPPED.
The ruled four-row table follows — STATUS, REQUESTS SENT, LAST REQUEST, ERRORS — each a fixed 200px label column against a 13px value, separated by 1px #2C3037 hairlines, reading like a departure board. Then the Start button as a solid #E4572E block with black label text, 56px tall.
The whole composition is left-aligned and rule-bound. A viewer should read it as a piece of lab equipment with a printed faceplate, not as a web page. The largest thing on the page is a number, not a headline.
Interaction Model: Static (direction) Motion Tempo: restrained Hero Dimensionality: flat
Landing Hero Motion Brief
#E4572E and #B8431F, the counter increments with a 180ms tabular-numeral roll, and the amber interval rule fills left-to-right toward the next call → the operator reads a live, mechanical record of the repeating signal, and the motion stops dead the instant Stop is pressed.0 at clamp(48px, 9vw, 96px), the status lamp steady beside STOPPED, the four ruled rows, the solid orange Start button, and the muted line No requests yet. Press Start.prefers-reduced-motion, all of the above becomes instant state change: the lamp holds steady, the counter updates without the roll, and the progress rule becomes a static countdown number.NFR-1 — Standalone single-file delivery. The utility is one HTML file with embedded CSS and JavaScript, openable directly in a browser and usable immediately. Provenance: explicit. Rationale: the source requires a complete, standalone HTML file with no build or server step.
NFR-2 — No frameworks. The utility uses vanilla JavaScript only. Provenance: explicit. Rationale: the source requires vanilla JavaScript with no frameworks.
NFR-3 — Minimal, functional UI. The UI keeps a clean layout, readable text, and no unnecessary styling. Provenance: explicit. Rationale: the source requires a minimal and functional interface.
NFR-4 — Fixed endpoint and method. Requests target navshaktinavratri.in/v1/user/resend-otp via POST. Provenance: explicit. Rationale: the source fixes the endpoint and method.
NFR-5 — Fixed payload. Every request sends {whatsappNumber: "919773282772"}. Provenance: explicit. Rationale: the source fixes the payload.
NFR-6 — Fixed interval. Requests repeat every 46 seconds. Provenance: explicit. Rationale: the source fixes the interval.
NFR-7 — Indefinite until stopped. The cycle continues indefinitely until Stop is pressed. Provenance: explicit. Rationale: the source specifies indefinite repetition until Stop.
NFR-8 — Error handling. Failed requests are handled and reported with HTTP status and message. Provenance: explicit. Rationale: the source requires proper error handling and error display.
NFR-9 — CORS handling. CORS issues are handled if they arise, surfacing as visible errors rather than silent failures. Provenance: explicit. Rationale: the source requires CORS handling if issues arise.
NFR-10 — Readable text and controls stay whole. Headlines, wordmarks, labels, numbers, and controls stay entirely inside the viewport and their container at 375px, 768px, and 1280px, wrapping or scaling to fit, with no element covering any part of them. Provenance: explicit (creative direction). Rationale: the direction requires readable text and controls to remain whole at every viewport.
NFR-11 — No blue/indigo/violet. No blue, indigo, or violet appears anywhere in the palette. Provenance: explicit (creative direction). Rationale: the direction forbids the blue–indigo band.
NFR-12 — Dark ground. The page ground is dark (#14161A), not white or near-white. Provenance: explicit (creative direction). Rationale: the direction specifies a dark instrument housing.
NFR-13 — Authorized-use precondition. The utility surfaces a persistent notice that the operator must be authorized to send repeated requests to the endpoint before pressing Start. Provenance: required_inference (safety guardrail for the accepted behavior). Rationale: the accepted behavior repeatedly triggers OTP delivery to a real number on a third-party endpoint, so the authorization precondition must be visible.
NFR-14 — No circumvention of endpoint protections. The utility sends requests only at the fixed 46-second cadence and never proxies, tunnels, spoofs, or otherwise circumvents the endpoint's CORS policy, cooldown, rate limiting, or abuse protections. Provenance: required_inference (safety guardrail for the accepted behavior). Rationale: the fixed cadence is the specified simulation cadence, not a means of defeating the endpoint's protections.
NFR-15 — Stop is always available. The operator can halt the cycle at any moment by pressing Stop, and no further requests are sent immediately. Provenance: required_inference (safety guardrail for the accepted behavior). Rationale: the operator must always be able to end the simulation.
Assumptions
navshaktinavratri.in/v1/user/resend-otp. [Assumption — not specified by user]navshaktinavratri.in/v1/user/resend-otp, and 919773282772 is the operator's own test number. [Assumption — not specified by user]Constraints
navshaktinavratri.in/v1/user/resend-otp via POST. Provenance: explicit.{whatsappNumber: "919773282772"} on every request. Provenance: explicit.navshaktinavratri.in/v1/user/resend-otp, called via POST.{whatsappNumber: "919773282772"} sent with every POST request.No completed page designs yet.
Completed design pages will appear here when they are ready to preview.
No completed page designs yet.
Completed design pages will appear here when they are ready to preview.
No comments yet. Be the first!