Overview: Where Development Is Heading
The backend repo is currently focused on general improvements. Recent commit subjects include: feat(chainwatch): purge also un-lists collections with zero ipfs_metadata rows; feat(chainwatch): add meta.log audit trail for metadata ingestion + fix lexicographic watermark MAX; fix(chainwatch): make webui index-jobs pager sticky across the 2s poll; 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). 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
c734a0c 2026-09-26 22:35:12
feat(chainwatch): purge also un-lists collections with zero ipfs_metadata rows06724d3 2026-09-26 21:20:20
feat(chainwatch): add meta.log audit trail for metadata ingestion + fix lexicographic watermark MAX3889f09 2026-09-26 13:10:59
fix(chainwatch): make webui index-jobs pager sticky across the 2s poll3797197 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 reference1f0920b 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.iod6a6ccc 2026-09-25 22:01:07
feat(chainwatch): refresh a single token's metadata on events for already-complete collections5ca6e41 2026-09-25 21:16:59
feat(chainwatch): meta backfill resumes from max(tokId)+1 instead of token 1db0a141 2026-09-25 20:58:32
feat(chainwatch webui): delta-cached jobs/errors, running-first sort, 25/page pagination, 5-column stats5d3b5e8 2026-09-25 20:50:06
feat(chainwatch): ?since= delta protocol for /api/index-jobs and /api/errors13bd8e2 2026-09-25 19:28:38
feat(chainwatch): block ERC-721 collections with empty name AND symbol at ingest50abd7b 2026-09-25 19:17:40
fix(chainwatch): stop meta-job clobbering the backfill's terminal status3f3cd29 2026-09-25 19:08:32
fix(chainwatch): pace meta-walk fetches by chain ID with 429 backoffdf9467a 2026-09-25 18:48:22
fix(chainwatch): surface per-token backfill failures instead of silent '0 new' done745c9df 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 timec12b79e 2026-09-25 18:02:19
feat(chainwatch): clickable block-explorer links from jobs-pane addresses7c2bd1c 2026-09-25 17:40:02
fix(chainwatch): never index untyped collections; purge ERC721 name/symbol-less + over-large supply rows9cda7b1 2026-09-25 17:02:45
feat(chainwatch): webui-triggered blocklist purge deletes matched collections + their ipfs_metadatafaf4b7e 2026-09-25 16:45:18
feat(chainwatch): ingest blocklist skips DEX-position NFT collections + stops their token-metadata backfill60db3d7 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
Frontend Commits
94cf64430 2026-09-20 01:53:52 stop tracking SQLite sidecar files (conversation.db-shm/wal)
chore:156111045 2026-09-20 01:06:07 wallet NFT cards use shimmer placeholder for missing/broken images
fix:e2bdd7acb 2026-09-20 00:45:34 wallet NFT image URLs use canonical CDN path with 404-fallback query
fix:31a0692e4 2026-09-20 00:40:13 restore NFT-detail shimmer placeholder background inside modal
fix:c07da384f 2026-09-20 00:35:07 modal placeholder min-width 33vw (was 25vw)
fix:9fe5dc7d7 2026-09-20 00:34:25 modal placeholder at least 25vw and 1:1 aspect
fix:dc4189209 2026-09-20 00:33:46 NftDetailModal shows shimmer placeholder when image missing/fails
fix:7793c29b2 2026-09-20 00:13:35 extract reusable NftDetailModal; use for collection + wallet owned-NFT cards
feat:245793808 2026-09-19 23:25:11 restyle wallet page to web3 style guide + fix collection View link
feat:0b39d9e43 2026-09-19 22:04:00
collection page: render tokens with no metadata yet + 'for sale' banner2bf8246fb 2026-09-14 10:18:55 remove preloader shell from index.html
chore:728d644d3 2026-09-14 10:18:07 regenerate sitemap index timestamps (build artifact)
chore:244c28071 2026-09-14 09:13:39 SSR prepopulates collection grid img src with CDN cache URL
feat:2ef330778 2026-09-14 09:03:23 SSR prepopulates collection card img src with CDN cache URL
feat:6d2a502f9 2026-09-13 23:27:30 reuse grid metadata in item modal to skip backend fetch
perf:7b5ba168a 2026-09-13 23:16:42 clicking outside the open mobile nav panel collapses it
fix:e029cd8b3 2026-09-13 23:05:54 collapse mobile nav panel when an item or sub-item is selected
fix:3ea57eee5 2026-09-13 22:59:57 reuse grid image URL in item modal to avoid duplicate CDN fetch
perf:dec994c51 2026-09-13 22:52:47 fade+slide transition on mobile nav show/hide
feat:d6882e7e9 2026-09-13 22:50:51 mobile nav top offset calc(var(--header-height) - 20px)
fix:dafef3132 2026-09-13 22:49:27 mobile nav panel drops just below burger, right edges aligned
fix:07a5e35b6 2026-09-13 22:44:57 remove dead sidenav-toggler li from SecNavItem
refactor:c0a8211a3 2026-09-13 22:37:43 right-align caret on mobile nav items with submenus
fix:ee6cb32e1 2026-09-13 22:37:05 left-align text in mobile nav dropdown items
fix:dcb9d560b 2026-09-13 22:36:25 mobile nav items fill full panel width
fix: