Nate
096bd186ea
style: bolder visual refresh — lighter card surfaces, visible borders, blue glow accents
...
Cards now #141418 on #0a0a0a bg for actual contrast. Borders #232329 instead
of near-invisible rgba. Pricing cards have real tier hierarchy with Pro glow
and "Popular" badge. Buttons get blue gradient glow. Status dots glow visibly.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 12:21:43 +04:00
nate
c1392a7dd9
test: improve css
2026-03-19 12:08:06 +04:00
nate
437b493567
fix: can't edit monitors
2026-03-19 11:43:23 +04:00
nate
63cd0c7af5
update: lower pricing
2026-03-19 11:35:11 +04:00
nate
e19e723d49
update: lower pricing to $12
2026-03-19 11:32:34 +04:00
nate
d52026f787
bump max runs
2026-03-19 11:20:45 +04:00
nate
b1dce432a5
test: ssr graphs
2026-03-19 11:17:05 +04:00
nate
d62f776f7b
test: ssr graphs
2026-03-19 11:14:30 +04:00
nate
164b7f65f8
remove js
2026-03-19 10:23:22 +04:00
nate
57bf994926
fix: more nojs
2026-03-19 10:18:31 +04:00
nate
b6fa544d5e
fix: uncentered box
2026-03-19 10:13:34 +04:00
nate
96a58233fd
fix: flashbang
2026-03-19 10:08:20 +04:00
nate
d8d1952304
fix: elysia issues 2
2026-03-19 10:06:14 +04:00
nate
03fe13e707
fix: elysia issues
2026-03-19 10:00:30 +04:00
nate
61560ae521
feat: no-JS support for all core UI — registration, settings, monitor CRUD, logout
2026-03-19 09:55:08 +04:00
nate
632f006988
refactor: simplify payment gateway, single evaluatePayment function, clean landing page pricing
2026-03-19 09:42:03 +04:00
nate
df638c94f1
update: ...........
2026-03-19 01:14:17 +04:00
nate
e62b60e0fd
update: .......
2026-03-19 01:07:49 +04:00
nate
955b26f942
update: ....
2026-03-19 01:02:52 +04:00
nate
1e6739b42a
update: hopefully......
2026-03-19 00:53:20 +04:00
nate
8a24b30b2a
update: hopefully....
2026-03-19 00:49:32 +04:00
nate
7e55b2ad95
fix: hopefully..
2026-03-19 00:43:26 +04:00
nate
2554321183
fix: single raw SSE connection with no query filter, always on from boot
2026-03-19 00:36:43 +04:00
nate
2dbf85652b
fix: backend SSE uses fetch streaming (EventSource not available in Bun), bulk lookup fallback
2026-03-19 00:29:42 +04:00
nate
0854914411
fix: use native EventSource for SSE instead of fetch with manual parsing
2026-03-19 00:24:16 +04:00
nate
c3103f06ce
feat: invoices section on settings page, show paid and active payments
2026-03-19 00:16:33 +04:00
nate
81f1e1585e
fix: use raw SSE with local matching, bulk polling, block-based confirmations, and multi-tx support
2026-03-19 00:04:46 +04:00
M1
d02b27bc16
fix: frontend SSE also uses 'crypto' not 'chain'
2026-03-18 23:50:13 +04:00
M1
b46c3c618e
feat: update URL to /checkout/:id after creation, auto-load existing invoice on load
2026-03-18 23:43:03 +04:00
M1
63c7d7c1d7
fix: SSE filter uses 'crypto' not 'chain' per Freedom.st API docs
2026-03-18 23:41:21 +04:00
M1
36a7d309fa
feat: /dashboard/checkout/:id route so invoices survive refresh
2026-03-18 23:37:20 +04:00
M1
1cbbd65adb
fix: compare floats to floats in checkPending — was comparing sats vs floats, always false
2026-03-18 23:33:47 +04:00
M1
4cdd4b5343
fix: derive LTC as P2WPKH (native segwit ltc1q) not legacy P2PKH
2026-03-18 23:24:17 +04:00
M1
8b2dcf0d56
fix: convert zpub to xpub version bytes — bitcore-lib-ltc only understands standard xpub
2026-03-18 23:22:37 +04:00
M1
2bd6adc090
fix: use static bs58check import, not dynamic await import
2026-03-18 23:19:48 +04:00
M1
91c24b20f7
fix: convert zpub to Ltub before LTC HD derivation
2026-03-18 23:18:49 +04:00
M1
bc0f7715da
fix: pin @sinclair/typebox ^0.34 in pay app to match elysia requirements
2026-03-18 23:16:43 +04:00
nate
7d1a350f86
feat: instant payment detection via Freedom.st SSE on backend and frontend
2026-03-18 23:06:57 +04:00
nate
c9130243e8
feat: crypto payment system with HD wallets, Freedom.st integration, and checkout UI
2026-03-18 23:04:17 +04:00
nate
bead49b870
fix: replace error() with set.status across all API routes (fixes undefined error helper)
2026-03-18 22:46:57 +04:00
nate
c89b63bd97
feat: implement free/pro plan system with monitor and interval limits
2026-03-18 22:40:45 +04:00
nate
11e6c593ad
chore: limit pro plan to 500 monitors on landing page
2026-03-18 22:33:43 +04:00
nate
a829c4507c
update: footer text
2026-03-18 21:23:00 +04:00
nate
3e6e758648
chore: replace footer credit with standard copyright
2026-03-18 21:19:22 +04:00
nate
fad343c85a
fix: default to all regions enabled for new monitors
2026-03-18 21:12:30 +04:00
nate
56114a3852
fix: enable pgcrypto extension for gen_random_bytes in monitor IDs
2026-03-18 21:08:19 +04:00
nate
2075de164d
update: use short 16-char hex IDs for new monitors instead of UUIDs
2026-03-18 21:05:01 +04:00
nate
e4895afe8e
update: default ping interval to 30s, update free tier limit to match
2026-03-18 21:01:41 +04:00
nate
fd821acec2
update: default ping interval to 10s
2026-03-18 20:59:50 +04:00
nate
5295fcfe79
chore: move TOS to /terms, remove from header, remove pricing from footer
2026-03-18 20:59:23 +04:00
nate
3b79e8d589
fix: typo in terms
2026-03-18 20:55:00 +04:00
nate
c74e2d3b58
chore: add more timeout options, default to 10s
2026-03-18 20:50:16 +04:00
nate
0d059a0112
chore: set 2s minimum interval, update marketing and docs to match
2026-03-18 20:47:11 +04:00
nate
86d36a87fc
fix: refresh chart tooltip on live updates while hovering
2026-03-18 20:40:07 +04:00
nate
dae1d5f77a
fix: poll coordinator every 500ms to reduce jitter on 1s intervals
2026-03-18 20:33:36 +04:00
nate
f9826fbbe4
update
2026-03-18 20:29:35 +04:00
nate
13beacbc5a
chore: remove us-east and ap-southeast regions from UI
2026-03-18 20:20:25 +04:00
nate
2d46491dee
chore: remove us-east region from UI, charts, and region selectors
2026-03-18 20:13:11 +04:00
nate
cbb1a26582
fix: trim chart runs in place and reduce to 25 to match SSR density
2026-03-18 20:06:23 +04:00
nate
f2fcf1a0b9
fix: evenly space chart runs at fixed width and trim initial data to match
2026-03-18 20:02:48 +04:00
nate
766d1094ad
fix: evict oldest chart runs as a group instead of individual pings
2026-03-18 20:00:11 +04:00
nate
993e6bb1df
fix: show full run_id instead of truncating to 8 chars
2026-03-18 19:57:41 +04:00
nate
e9ca90324b
fix: align chart points by run_id avg time so regions stack vertically
2026-03-18 19:55:48 +04:00
nate
1706e83a3f
fix: reduce chart spline tension to prevent jittery overshoot
2026-03-18 19:52:46 +04:00
nate
59861651bd
feat: interactive canvas latency chart with hover tooltips and smooth curves
2026-03-18 19:49:44 +04:00
nate
df22029755
fix: no region text
2026-03-18 19:43:28 +04:00
nate
f013890c40
refactor: extract monitor form into shared partial for create and edit
2026-03-18 19:41:31 +04:00
nate
5b7a211c21
fix: show latest latency from fastest region instead of average on home
2026-03-18 19:36:24 +04:00
nate
688245b0c2
fix: match client-side sparkline behavior to SSR region-aware rendering
2026-03-18 19:31:41 +04:00
nate
6beb7f8039
update: tos
2026-03-18 19:27:10 +04:00
nate
5be1f85365
fix: run cert expiry check concurrently to avoid delaying results
2026-03-18 19:04:30 +04:00
nate
42024a9fc3
fix: use monitor-side checked_at timestamp instead of coordinator arrival time
2026-03-18 18:50:16 +04:00
nate
425bfbfc39
perf: optimize monitor runner, fix SSE leak, deduplicate shared utils
2026-03-18 18:44:08 +04:00
M1
980261632e
fix: deserialize scheduled_at_ms as string or number (postgres bigint serializes as string)
2026-03-18 17:17:29 +04:00
M1
c5eb514990
feat: lookahead scheduling — API returns scheduled_at_ms, nodes sleep-until for tight coordination
2026-03-18 17:14:28 +04:00
M1
7b98ae78e5
fix: run_id = hash(monitor_id, interval_bucket) — unique per window, consistent across regions
2026-03-18 17:03:17 +04:00
M1
b6a66ddb21
fix: run_id derived from scheduled_at bucket so all regions share same ID per window
2026-03-18 16:46:30 +04:00
M1
77534a037c
feat: show run_id (first 8 chars) in recent pings table
2026-03-18 16:42:50 +04:00
M1
f7ab3b96b2
feat: per-region due scheduling + run_id to group pings across regions
2026-03-18 16:36:35 +04:00
M1
e057a65535
fix: avgLatency NaN — extract .latency_ms from ping objects
2026-03-18 16:31:08 +04:00
M1
07648672ad
feat: per-region chart lines and lowest-avg sparkline
2026-03-18 16:25:47 +04:00
M1
e1bb39431d
fix: use URL.searchParams to parse region query param in /internal/due
2026-03-18 16:21:24 +04:00
M1
8c39fb45c1
feat: add region selector to monitor edit form
2026-03-18 16:15:19 +04:00
M1
93db31db3b
feat: multi-region monitor support — region selector in UI, region flag on pings
2026-03-18 16:08:39 +04:00
M1
52f7f8102b
feat: update user-agent to Mozilla-compatible string
2026-03-18 14:43:33 +04:00
M1
957674fca4
fix: clear in-flight after post_result to prevent double-pings, revert poll to 50ms
2026-03-18 14:29:37 +04:00
M1
d3ee0ef9d5
fix: revert grace period, increase poll interval to 500ms to prevent doubles without adding jitter
2026-03-18 14:27:38 +04:00
M1
5836c44228
fix: add 200ms grace period to due query to prevent double-pings
2026-03-18 14:21:21 +04:00
M1
6882162d7f
fix: use system CA store for ureq TLS to verify Cloudflare-issued certs
2026-03-18 14:10:28 +04:00
M1
1b8cbc6e23
fix: force ureq to use ring crypto provider to match main.rs init
2026-03-18 14:05:04 +04:00
M1
f17bfbfd4b
fix: switch ureq from native-tls to rustls (bundled roots)
2026-03-18 13:54:39 +04:00
M1
3fa624eff8
fix: replace curl subprocess with ureq blocking client in std::thread
2026-03-18 13:40:28 +04:00
M1
6b8e1fc9d9
cleanup: remove debug warn logs from monitor runner
2026-03-18 13:30:19 +04:00
M1
6e1d642c77
fix: allow null status_code in ingest schema; check HTTP status in post_result
2026-03-18 13:28:42 +04:00
M1
5037222846
fix: add 10s timeout to post_result to prevent hung API calls
2026-03-18 13:24:52 +04:00
M1
3ce89a88bf
debug: log post_result calls
2026-03-18 13:22:35 +04:00
M1
749a06b9d7
debug: log check errors and trace post_result calls
2026-03-18 13:19:35 +04:00
M1
cb8d0f81b1
debug: add warn logs to curl thread, fix temp file uniqueness
2026-03-18 13:17:11 +04:00
M1
556729b881
fix: use std::thread + tokio oneshot for curl — fully decoupled from tokio thread pool
2026-03-18 13:10:04 +04:00
M1
5e76b2212f
fix: use std::process::Command+spawn_blocking+temp file to avoid all pipe/async hang issues
2026-03-18 13:08:08 +04:00
M1
289ec8e038
fix: hard task-level timeout as failsafe so in-flight lock always clears
2026-03-18 13:05:43 +04:00
M1
0edce8c555
fix: use spawn+manual read+wait instead of output() to avoid stdout pipe hang
2026-03-18 13:03:06 +04:00
M1
94200b430f
fix: set kill_on_drop and explicit stdio pipes so curl doesn't inherit parent fds
2026-03-18 12:59:34 +04:00
M1
79bf7d9295
fix: wrap curl output() in tokio timeout in case process hangs on stdout
2026-03-18 12:58:12 +04:00
M1
554d95cfb4
fix: correctly handle curl non-zero exit codes as errors
2026-03-18 12:55:00 +04:00
M1
5730a3cb83
fix: replace reqwest with curl subprocess for reliable hard timeouts
2026-03-18 12:52:17 +04:00
M1
c68700da46
fix: use blocking reqwest in spawn_blocking for reliable OS-level timeout
2026-03-18 12:48:30 +04:00
M1
4035a3b215
fix: switch reqwest to native-tls so connect_timeout covers TLS handshake
2026-03-18 12:45:52 +04:00
M1
5b0bce65c6
fix: pre-flight TCP connect check with hard tokio timeout before reqwest attempt
2026-03-18 12:43:27 +04:00
M1
b8b0a9d5e2
fix: per-check client with connect_timeout to guarantee OS-level TCP timeout
2026-03-18 12:42:09 +04:00
M1
7905a8003b
fix: clean up cert check - only runs after successful response, no more borrow errors
2026-03-18 12:40:03 +04:00
M1
de6e24e973
fix: move cert check to after successful HTTP response, never runs on down/timeout hosts
2026-03-18 12:39:18 +04:00
M1
d49cfa70f5
fix: add connect_timeout to reqwest client to prevent indefinite TCP SYN hangs
2026-03-18 12:37:09 +04:00
M1
68093131fa
fix: spawn cert check as independent task, never blocks main request timeout
2026-03-18 12:35:58 +04:00
M1
dbbc9c00cc
fix: run cert check concurrently with request so a hanging TCP connect can't block the timeout
2026-03-18 12:33:22 +04:00
M1
b41faff2ad
fix: move timeout definition before cert check
2026-03-18 12:27:00 +04:00
M1
81ac8f0c20
fix: apply timeout to cert check — was hanging indefinitely before request even started
2026-03-18 12:26:27 +04:00
M1
05c60db605
fix: wrap full request+body read in timeout to catch slow response bodies
2026-03-18 12:17:55 +04:00
M1
baea9f8e7e
fix: sub-key notice as separate card below account section
2026-03-18 12:05:24 +04:00
M1
6d057d5797
fix: move sub-key notice inside account section
2026-03-18 12:04:40 +04:00
M1
988c43090b
fix: make sub-key notice match page style
2026-03-18 12:03:02 +04:00
M1
a9a1e43146
feat: add sub-key notice banner on settings page
2026-03-18 12:01:35 +04:00
M1
f7d6eff972
fix: block sub-keys from accessing/modifying email, account key, and other sub-keys
2026-03-18 11:51:52 +04:00
M1
eeb0318c4d
fix: hide login key and sub-keys from sub-key sessions
2026-03-18 11:48:51 +04:00
M1
c56af82053
fix: increase key input maxlength to 64 for new key format
2026-03-18 11:45:31 +04:00
M1
1a7bc4dfa5
fix: sameSite=none for cross-origin cookie (pingql.com → api.pingql.com)
2026-03-18 11:41:00 +04:00
nate
5a0cf5033b
fix: harden auth, SSRF, query engine, and cookie security
2026-03-18 11:37:33 +04:00
M1
d278ab0458
fix: use credentials:include for cross-origin API requests
2026-03-18 09:44:50 +04:00
M1
641af86779
fix: separate jsHash for app.js cache busting
2026-03-18 09:43:11 +04:00
M1
fa8ff8b361
fix: explicit OPTIONS handler for CORS preflight
2026-03-18 09:41:25 +04:00
M1
7a9417297f
fix: add preflight CORS options for api.pingql.com
2026-03-18 09:41:09 +04:00
M1
9fb90d9ea8
fix: point dashboard API calls to api.pingql.com
2026-03-18 09:39:07 +04:00
M1
841a852491
feat: split web and api into separate apps
2026-03-18 09:33:46 +04:00
M1
ba437e3c5a
feat: block web UI routes on api.pingql.com, serve JSON root
2026-03-18 09:30:13 +04:00
M1
3a9cd62cdd
fix: increase tos top padding to pt-28
2026-03-18 09:26:18 +04:00
M1
1325512c6d
fix: reduce tos page padding and section spacing
2026-03-18 04:04:47 +04:00
M1
7a6a1fdd10
build: rebuild css with pt-40 and pt-2 for tos page
2026-03-18 04:02:47 +04:00
M1
143868eb21
fix: increase TOS top padding, add spacing above h2s
2026-03-18 03:59:52 +04:00
M1
7db2889960
feat: add Terms of Service page
2026-03-18 03:52:58 +04:00
M1
705073b508
fix: center hero section vertically on pageload
2026-03-18 03:45:14 +04:00
M1
7e3c651db7
fix: define brand color via @theme for tailwind v4 compat
2026-03-18 03:25:34 +04:00
M1
ce4411b13b
feat: add 1-20s interval options, lower API minimum to 1s
2026-03-18 03:20:33 +04:00
M1
3df7f4b702
fix: logout properly expires cookie with matching domain/path attributes
2026-03-18 03:08:00 +04:00
M1
8221b3a33d
fix: remove redundant 'jitter' word from pings table
2026-03-18 03:05:39 +04:00
M1
a246b60cbe
fix: space between time and jitter label
2026-03-17 11:23:01 +04:00
M1
1e3a5ff4d1
perf: reduce monitor poll interval to 50ms for tighter jitter
2026-03-17 10:58:28 +04:00
M1
bd3c33dda4
fix: jitter = actual check start minus ideal scheduled time, not wall clock at dispatch
2026-03-17 10:54:36 +04:00
M1
27be1fa8bf
fix: jitter_ms now measured in Rust at check start, excludes latency and return trip
2026-03-17 10:52:08 +04:00
M1
e7ec457d0e
feat: show jitter_ms in pings table time column
2026-03-17 10:48:24 +04:00
M1
f71388a51a
feat: jitter_ms tracking — scheduled_at stamped at dispatch, jitter computed on ingest
2026-03-17 10:44:35 +04:00