From 1a0b6bb0fe6e6f70ea1557a9e36409b10d7d35a5 Mon Sep 17 00:00:00 2001 From: nate Date: Sun, 22 Mar 2026 06:18:23 +0400 Subject: [PATCH] update: remove em dashes, plans --- apps/web/src/views/checkout.ejs | 5 +++-- apps/web/src/views/docs.ejs | 4 ++-- apps/web/src/views/landing.ejs | 16 ++++++++-------- apps/web/src/views/login.ejs | 6 +++--- apps/web/src/views/partials/head.ejs | 2 +- apps/web/src/views/partials/public-head.ejs | 2 +- apps/web/src/views/privacy.ejs | 16 ++++++++-------- apps/web/src/views/settings.ejs | 2 +- apps/web/src/views/tos.ejs | 4 ++-- apps/web/src/views/welcome.ejs | 4 ++-- 10 files changed, 31 insertions(+), 30 deletions(-) diff --git a/apps/web/src/views/checkout.ejs b/apps/web/src/views/checkout.ejs index f5c48fa..15dce4c 100644 --- a/apps/web/src/views/checkout.ejs +++ b/apps/web/src/views/checkout.ejs @@ -56,7 +56,7 @@
Lifetime
<% if (lifetimeDiscount > 0) { %>
$<%= lifetimePrice.toFixed(0) %> $<%= lifetimeBase %>
-
You've paid us $<%= totalSpent.toFixed(0) %> — we've credited $<%= lifetimeDiscount.toFixed(0) %> toward lifetime
+
You've paid us $<%= totalSpent.toFixed(0) %>, so we've credited $<%= lifetimeDiscount.toFixed(0) %> toward lifetime
<% } else { %>
$<%= lifetimeBase %>
<% } %> @@ -188,7 +188,7 @@ <% } else if (inv.status === 'underpaid') { %>
- Underpaid — please send the remaining amount + Underpaid - please send the remaining amount
Expires in <%= mins %>:<%= String(secs).padStart(2, '0') %> @@ -226,6 +226,7 @@ <% } %>
+

You can leave this page. Payments are detected and confirmed automatically.

<% } %> diff --git a/apps/web/src/views/docs.ejs b/apps/web/src/views/docs.ejs index a020918..f1b67fe 100644 --- a/apps/web/src/views/docs.ejs +++ b/apps/web/src/views/docs.ejs @@ -95,7 +95,7 @@

Register

POST/account/register
-

Create a new account. Email is optional — used only for account recovery.

+

Create a new account. Email is optional and used only for account recovery.

json — request body
{ "email": "you@example.com" }  // optional
@@ -267,7 +267,7 @@

$consider

-

By default, matching conditions mean the monitor is up. Set "$consider": "down" to flip this — if the conditions match, the monitor is down.

+

By default, matching conditions mean the monitor is up. Set "$consider": "down" to flip this. If the conditions match, the monitor is down.

json
// down if response time exceeds 2 seconds
diff --git a/apps/web/src/views/landing.ejs b/apps/web/src/views/landing.ejs
index c816b2f..1e4f19c 100644
--- a/apps/web/src/views/landing.ejs
+++ b/apps/web/src/views/landing.ejs
@@ -3,9 +3,9 @@
 
   
   
-  PingQL — Uptime monitoring that thinks like a developer
+  PingQL - Uptime monitoring that thinks like a developer
   
-  
+  
   
   
   
@@ -165,7 +165,7 @@
             Uptime monitoring
that thinks like
a developer

- Go beyond simple pings. Write queries against status codes, JSON bodies, HTML selectors, headers, cert expiry — everything your response contains. + Go beyond simple pings. Write queries against status codes, JSON bodies, HTML selectors, headers, and cert expiry.

MongoDB-style queries

-

Use $and, $or, $lt, $regex — a query language you already know.

+

Use $and, $or, $lt, $regex. A query language you already know.

@@ -295,7 +295,7 @@

JSONPath & CSS selectors

-

Drill into JSON responses with $json or scrape any HTML page with $select — no API required.

+

Drill into JSON responses with $json or scrape any HTML page with $select. No API required.

@@ -331,7 +331,7 @@

Sub-keys & API access

-

Create scoped sub-keys for CI pipelines, scripts, or teammates. Full REST API — no dashboard required.

+

Create scoped sub-keys for CI pipelines, scripts, or teammates. Full REST API, no dashboard required.

@@ -340,7 +340,7 @@

Live dashboard

-

Real-time updates via SSE. Latency charts, status history, uptime stats — all live without a page refresh.

+

Real-time updates via SSE. Latency charts, status history, and uptime stats, all live without a page refresh.

@@ -349,7 +349,7 @@

Privacy-first accounts

-

No email required. No passwords. Just an account key. Emails are hashed if provided — we literally can't read them.

+

No email required. No passwords. Just an account key. Emails are hashed if provided, so we literally can't read them.

diff --git a/apps/web/src/views/login.ejs b/apps/web/src/views/login.ejs index 5e7fde9..23b44fd 100644 --- a/apps/web/src/views/login.ejs +++ b/apps/web/src/views/login.ejs @@ -3,7 +3,7 @@ - PingQL — Sign In + PingQL - Sign In @@ -50,7 +50,7 @@

Account created

-

Save your key — it's how you access your account

+

Save your key - it's how you access your account

@@ -65,7 +65,7 @@
- +
diff --git a/apps/web/src/views/partials/head.ejs b/apps/web/src/views/partials/head.ejs index b619111..ee61808 100644 --- a/apps/web/src/views/partials/head.ejs +++ b/apps/web/src/views/partials/head.ejs @@ -3,7 +3,7 @@ - PingQL<%= it.title ? ` — ${it.title}` : '' %> + PingQL<%= it.title ? ` - ${it.title}` : '' %> diff --git a/apps/web/src/views/partials/public-head.ejs b/apps/web/src/views/partials/public-head.ejs index 837dff6..a7725b9 100644 --- a/apps/web/src/views/partials/public-head.ejs +++ b/apps/web/src/views/partials/public-head.ejs @@ -3,7 +3,7 @@ - PingQL<%= it.title ? ` — ${it.title}` : '' %> + PingQL<%= it.title ? ` - ${it.title}` : '' %> <% if (it.description) { %><% } %> diff --git a/apps/web/src/views/privacy.ejs b/apps/web/src/views/privacy.ejs index f48ca28..47fcc45 100644 --- a/apps/web/src/views/privacy.ejs +++ b/apps/web/src/views/privacy.ejs @@ -22,10 +22,10 @@ The rest of the industry

- Most SaaS monitoring tools are free or cheap because you're the product. They're backed by investors who need returns, which means your usage data, your infrastructure details, your URLs, your team — all of it gets fed into ad networks, sold to data brokers, or used to build "anonymized" datasets that aren't actually anonymous. + Most SaaS monitoring tools are free or cheap because you're the product. They're backed by investors who need returns, which means your usage data, your infrastructure details, your URLs, your team. All of it gets fed into ad networks, sold to data brokers, or used to build "anonymized" datasets that aren't actually anonymous.

- They require your email "for alerts" and then spam you, add you to nurture sequences, sell your address, and share it with their parent company's 47 "trusted partners." They embed Segment, Mixpanel, Intercom, Hotjar, Google Analytics, and a dozen other trackers on every page — harvesting your behavior and shipping it to Silicon Valley servers whether you want it or not. + They require your email "for alerts" and then spam you, add you to nurture sequences, sell your address, and share it with their parent company's 47 "trusted partners." They embed Segment, Mixpanel, Intercom, Hotjar, Google Analytics, and a dozen other trackers on every page, harvesting your behavior and shipping it to Silicon Valley servers whether you want it or not.

That's the industry standard. We think it's garbage. @@ -36,10 +36,10 @@

What we collect

    -
  • Account key — a UUID you generate at signup. Stored in plaintext. It's your credential.
  • -
  • Email (optional) — only if you provide one for account recovery. Stored as a one-way SHA-256 hash. We cannot read it, search for it, or recover it. It's purely a verification token.
  • -
  • Monitors — the URLs and configurations you create. Obviously.
  • -
  • Ping results — status codes, latency, up/down, error messages. This is the product.
  • +
  • Account key - a UUID you generate at signup. Stored in plaintext. It's your credential.
  • +
  • Email (optional) - only if you provide one for account recovery. Stored as a one-way SHA-256 hash. We cannot read it, search for it, or recover it.
  • +
  • Monitors - the URLs and configurations you create.
  • +
  • Ping results - status codes, latency, up/down, error messages.

That's it. No device fingerprints, no IP logs, no browser data, no analytics events, no session recordings.

@@ -72,7 +72,7 @@

Payments

- We accept cryptocurrency. No card data, no billing address, no name — payments can be entirely anonymous. We never store or see your payment details. + We accept cryptocurrency. No card data, no billing address, no name. Payments can be entirely anonymous. We never store or see your payment details.

Data retention

@@ -82,7 +82,7 @@

Security

- All data in transit is encrypted via TLS. All data at rest is on encrypted disks. Your account key is the only credential — there's no password database to breach, no hashed passwords to crack, no OAuth tokens to steal. + All data in transit is encrypted via TLS. All data at rest is on encrypted disks. Your account key is the only credential. There's no password database to breach, no hashed passwords to crack, no OAuth tokens to steal.

Contact

diff --git a/apps/web/src/views/settings.ejs b/apps/web/src/views/settings.ejs index f7556dc..4e76e7e 100644 --- a/apps/web/src/views/settings.ejs +++ b/apps/web/src/views/settings.ejs @@ -92,7 +92,7 @@ <% if (!it.isSubKey) { %>

Recovery Email

-

Used for account recovery only. Stored as a one-way hash — we can't read it.

+

Used for account recovery only. Stored as a one-way hash, so we can't read it.

diff --git a/apps/web/src/views/tos.ejs b/apps/web/src/views/tos.ejs index 01d7161..9aab865 100644 --- a/apps/web/src/views/tos.ejs +++ b/apps/web/src/views/tos.ejs @@ -30,13 +30,13 @@

4. Account Responsibility

-

Your account key is your credential. Keep it safe — you're responsible for everything done with it. One account per person or organization. If we detect accounts created solely to abuse free tier limits, we'll terminate them without notice.

+

Your account key is your credential. Keep it safe. You're responsible for everything done with it. One account per person or organization. If we detect accounts created solely to abuse free tier limits, we'll terminate them without notice.

5. Fair Use

Free tier limits exist to make the service sustainable. Using automation, scripts, or any other method to work around them is a violation of these terms and grounds for immediate termination.

6. Termination

-

We may suspend or terminate your account at any time, with or without notice, if we believe you're violating these terms. Given the privacy-first nature of the service, we can't always investigate — abuse that is detectable will result in termination.

+

We may suspend or terminate your account at any time, with or without notice, if we believe you're violating these terms. Given the privacy-first nature of the service, we can't always investigate. Detectable abuse will result in termination.

7. Service Availability

PingQL is provided as-is. We aim for high availability but make no guarantees of uptime, data retention, or uninterrupted service. Don't rely solely on PingQL for mission-critical monitoring.

diff --git a/apps/web/src/views/welcome.ejs b/apps/web/src/views/welcome.ejs index fdb0a4d..e592bf8 100644 --- a/apps/web/src/views/welcome.ejs +++ b/apps/web/src/views/welcome.ejs @@ -11,7 +11,7 @@

Account created

-

Save your key — it's how you access your account

+

Save your key - it's how you access your account

@@ -21,7 +21,7 @@
- +