Development Update — 2026-09-26

by Jamie

Share

Overview: Where Development Is Heading

The backend repo is currently focused on general improvements. Recent commit subjects include: fix(chainwatch): route public-gateway http(s) tokenURIs (e.g. pinata) through local IPFS node + reject non-JSON metadata.; feat(chainwatch): bump popScore on any detected NFT-activity tx (fire-and-forget non-fatal UPDATE); feat(chainwatch): allow webui bind to be overridden via CHAINWATCH_WEBUI_BIND (default 0.0.0.0:54003); docs(chainwatch): add CHAINWATCH_CONTEXT.md — restart-friendly purpose/features/TODO reference; docs(chainwatch): local-IPFS-only gateway; note ipfs.io is dead (service-worker notice). The work is tightening the foundation before more blockchain-facing features ship.

Overview: Where Development Is Heading

The frontend repo is currently focused on bug fixes, new features, performance improvements, maintenance tasks. Several fixes are landing to stabilize the existing flows. New feature work is progressing in parallel. Recent commit subjects include: chore: stop tracking SQLite sidecar files (conversation.db-shm/wal); fix: wallet NFT cards use shimmer placeholder for missing/broken images; fix: wallet NFT image URLs use canonical CDN path with 404-fallback query; fix: restore NFT-detail shimmer placeholder background inside modal; fix: modal placeholder min-width 33vw (was 25vw). The work is converging on a more stable and maintainable user experience.

Project Direction — The frontend is modernizing its architecture so future NFT marketplace features can be delivered faster.

Backend Commits

3797197 2026-09-26 00:10:24
fix(chainwatch): route public-gateway http(s) tokenURIs (e.g. pinata) through local IPFS node + reject non-JSON metadata.

5dbfb36 2026-09-25 23:05:23
feat(chainwatch): bump popScore on any detected NFT-activity tx (fire-and-forget non-fatal UPDATE)

3402dd0 2026-09-25 22:51:23
feat(chainwatch): allow webui bind to be overridden via CHAINWATCH_WEBUI_BIND (default 0.0.0.0:54003)

246c16e 2026-09-25 22:33:37
docs(chainwatch): add CHAINWATCH_CONTEXT.md — restart-friendly purpose/features/TODO reference

1f0920b 2026-09-25 22:14:46
docs(chainwatch): local-IPFS-only gateway; note ipfs.io is dead (service-worker notice)

128fb37 2026-09-25 22:02:58
fix(chainwatch): fetch ALL ipfs content via the local IPFS node, never ipfs.io

d6a6ccc 2026-09-25 22:01:07
feat(chainwatch): refresh a single token's metadata on events for already-complete collections

5ca6e41 2026-09-25 21:16:59
feat(chainwatch): meta backfill resumes from max(tokId)+1 instead of token 1

db0a141 2026-09-25 20:58:32
feat(chainwatch webui): delta-cached jobs/errors, running-first sort, 25/page pagination, 5-column stats

5d3b5e8 2026-09-25 20:50:06
feat(chainwatch): ?since= delta protocol for /api/index-jobs and /api/errors

13bd8e2 2026-09-25 19:28:38
feat(chainwatch): block ERC-721 collections with empty name AND symbol at ingest

50abd7b 2026-09-25 19:17:40
fix(chainwatch): stop meta-job clobbering the backfill's terminal status

3f3cd29 2026-09-25 19:08:32
fix(chainwatch): pace meta-walk fetches by chain ID with 429 backoff

df9467a 2026-09-25 18:48:22
fix(chainwatch): surface per-token backfill failures instead of silent '0 new' done

745c9df 2026-09-25 18:30:29
fix(chainwatch): write metadata content-hash to the real 'hash' column (was 'imghash')

f917d89 2026-09-25 18:17:58
feat(chainwatch): queued metadata-ingestion jobs, one per chain at a time

c12b79e 2026-09-25 18:02:19
feat(chainwatch): clickable block-explorer links from jobs-pane addresses

7c2bd1c 2026-09-25 17:40:02
fix(chainwatch): never index untyped collections; purge ERC721 name/symbol-less + over-large supply rows

9cda7b1 2026-09-25 17:02:45
feat(chainwatch): webui-triggered blocklist purge deletes matched collections + their ipfs_metadata

faf4b7e 2026-09-25 16:45:18
feat(chainwatch): ingest blocklist skips DEX-position NFT collections + stops their token-metadata backfill

60db3d7 2026-09-25 15:08:29
fix(chainwatch): watcher-initiated jobs populate name from collections row (not a pre-import RPC read) — importToken writes the authoritative name to DB; recordWatcherImport now reads it back via collectionsName() after import, so signature/receipt jobs with a stored name no longer show an empty TokenName cell. Contracts without a name() still correctly show blank.

d11b17a 2026-09-25 15:02:11
style(chainwatch): uniform 11px font for all Index jobs cells — new .jcell sizing on id/network/name/source/status/detail; address keeps its existing .rpc 11px

b1c08a1 2026-09-25 14:59:39
fix(chainwatch): watcher-initiated index jobs now capture collection name — recordWatcherImport mirrors runIndexJob's ercCallString(name()) read before importToken, so signature/receipt-sourced jobs show TokenName in the webui (pending jobs had empty name cells)

30fe849 2026-09-25 14:54:20
feat(chainwatch): add 'Recent errors' panel (last 100 failures from all functions)

86ddf6a 2026-09-25 14:41:11
feat(chainwatch): request-index now re-runs per-token ipfs_metadata backfill; jobs panel shows watcher-detected imports

Frontend Commits

94cf64430 2026-09-20 01:53:52
chore:
stop tracking SQLite sidecar files (conversation.db-shm/wal)

156111045 2026-09-20 01:06:07
fix:
wallet NFT cards use shimmer placeholder for missing/broken images

e2bdd7acb 2026-09-20 00:45:34
fix:
wallet NFT image URLs use canonical CDN path with 404-fallback query

31a0692e4 2026-09-20 00:40:13
fix:
restore NFT-detail shimmer placeholder background inside modal

c07da384f 2026-09-20 00:35:07
fix:
modal placeholder min-width 33vw (was 25vw)

9fe5dc7d7 2026-09-20 00:34:25
fix:
modal placeholder at least 25vw and 1:1 aspect

dc4189209 2026-09-20 00:33:46
fix:
NftDetailModal shows shimmer placeholder when image missing/fails

7793c29b2 2026-09-20 00:13:35
feat:
extract reusable NftDetailModal; use for collection + wallet owned-NFT cards

245793808 2026-09-19 23:25:11
feat:
restyle wallet page to web3 style guide + fix collection View link

0b39d9e43 2026-09-19 22:04:00
collection page: render tokens with no metadata yet + 'for sale' banner

2bf8246fb 2026-09-14 10:18:55
chore:
remove preloader shell from index.html

728d644d3 2026-09-14 10:18:07
chore:
regenerate sitemap index timestamps (build artifact)

244c28071 2026-09-14 09:13:39
feat:
SSR prepopulates collection grid img src with CDN cache URL

2ef330778 2026-09-14 09:03:23
feat:
SSR prepopulates collection card img src with CDN cache URL

6d2a502f9 2026-09-13 23:27:30
perf:
reuse grid metadata in item modal to skip backend fetch

7b5ba168a 2026-09-13 23:16:42
fix:
clicking outside the open mobile nav panel collapses it

e029cd8b3 2026-09-13 23:05:54
fix:
collapse mobile nav panel when an item or sub-item is selected

3ea57eee5 2026-09-13 22:59:57
perf:
reuse grid image URL in item modal to avoid duplicate CDN fetch

dec994c51 2026-09-13 22:52:47
feat:
fade+slide transition on mobile nav show/hide

d6882e7e9 2026-09-13 22:50:51
fix:
mobile nav top offset calc(var(--header-height) - 20px)

dafef3132 2026-09-13 22:49:27
fix:
mobile nav panel drops just below burger, right edges aligned

07a5e35b6 2026-09-13 22:44:57
refactor:
remove dead sidenav-toggler li from SecNavItem

c0a8211a3 2026-09-13 22:37:43
fix:
right-align caret on mobile nav items with submenus

ee6cb32e1 2026-09-13 22:37:05
fix:
left-align text in mobile nav dropdown items

dcb9d560b 2026-09-13 22:36:25
fix:
mobile nav items fill full panel width