Overview: Where Development Is Heading
Recent development is centered on hardening and expanding the backend's NFT metadata and chainWatch data processing capabilities, with recent work adding canonical collection name support, normalizing IPFS and inline image URLs to a CDN, and rolling out new chainWatch backfill modes for full historical chain data ingestion. The team is also prioritizing operational resilience through improvements like per-chain and IPFS
Overview: Where Development Is Heading
The frontend repo is currently focused on maturing its collections feature set, with recent work centered on hardening server-side rendering support, standardizing routing paths, adding search and pagination functionality, and fixing metadata injection to improve SEO and consistent performance across direct page loads and client navigation. The team is also prioritizing cross-page design alignment, with recent updates to the contact page to match the broader design system, alongside foundational fixes to hydration, loader behavior, and core rendering to resolve edge case bugs.
Project Direction — Both repos are converging on a stable, production-ready NFT marketplace. The backend is hardening core systems while the frontend improves architecture and user experience.
Backend Commits
e4ccc9b 2026-08-26 02:53:59
Fix ipfs.io rate limiting: serialize requests, detect 504 lockout, cache duplicate CID fetcheseaba5d4 2026-08-26 00:30:07
Add chainWatch backfill mode (-u/-u-dry/-full): rewrite inline base64 + ipfs/http images to CDN, normalize CID URLs, per-chain + ipfs.io rate limits, per-minute stats63692a2 2026-08-25 03:55:20
remove unused routes from server.js and update importsf149a44 2026-08-25 03:54:09
Merge remote-tracking branch 'origin/refactor2026' into refactor2026601a398 2026-08-25 02:04:42 use = instead of LIKE for numeric for_coll_id in nftMetaById
fix:02ce78b 2026-08-25 02:03:42 use = instead of LIKE for numeric for_coll_id in nftMetaById
fix:e2fe3de 2026-08-25 01:24:33
remove unused routes from server.js and update importsfcb4dbe 2026-08-24 01:52:41
Separate blockscout cache by chainId in newmeta and gitignore newmeta0cb9b26 2026-08-24 01:10:51
test(nft): drop unsupported 'order' field from nftMetaById validation testsd198115 2026-08-24 01:10:21
fix(nft): correct slug resolution in nftMetaById6519a0a 2026-08-24 00:59:48
feat(nft): accept canonicalName + chainName (slug) in nftMetaById1776276 2026-08-23 18:51:26
fix(getCollections): apply net filter — number has no .length9fa19e6 2026-08-23 18:15:03
feat(collInfo): accept canonicalName+chainName or contractAddress+chainName5bb7844 2026-08-23 18:14:54 add canonicalName column and backfill helper
feat:f538183 2026-08-23 00:37:26 preserve null query params, store contract names, remove 1000 cap, normalize new input format, pass db/tokenType into ingestContracts, update existing collections rows, fetch metadata fallback, use null-preserving token pagination serializer
fix:61dac6c 2026-08-22 20:25:30
feat(chainWatch): show canonical signature names on stdout NFT lines9364571 2026-08-22 20:13:02
feat(db): add signatures table for chainWatch learned selectorsc2e7e43 2026-08-22 20:12:37
feat(chainWatch): persist learned signatures to MySQL signatures tableb6c58c8 2026-08-22 18:36:17
fix(db): widen collections.totalSupply to BIGINT UNSIGNEDb1148e0 2026-08-22 18:36:08
fix(chainWatch): make DB writes non-fatal; log full SQL + values on failure6f55254 2026-08-22 18:27:28
feat(chainWatch): gate imports on known NFT func selectors + event topics96fd0fb 2026-08-22 18:14:22
fix(chainWatch): snapshot loop index in subscribe goroutine (nil-pointer panic on startup)19f9bfa 2026-08-22 18:05:23
feat(chainWatch): add crash handling + retry totalSupply + ipfs.io gateway78cd2a1 2026-08-22 17:40:52
docs(chainWatch): track clean crash-handling as an open task in AGENTS.md4f49917 2026-08-22 17:39:58
docs(chainWatch): add AGENTS.md capturing current watcher state
Frontend Commits
6ef729084 2026-09-10 03:21:02 keep contact form inputs dark/transparent
fix:0d5bae355 2026-09-10 03:16:11 apply design language to contact page
style:26fa4df98 2026-09-10 02:13:49 collections page SSR search from ?q= parameter
feat:cba3ca732 2026-09-10 01:49:26 update collection detail paths from /collection/ to /collections/ in sitemap and components
fix:75b2fbe63 2026-09-10 00:59:14 open Modal2 when clicking NFT in collection detail grid
fix:a181996b2 2026-09-10 00:26:38 /collections// now renders CollectionContainer (detail view); add layout route with Outlet
fix:fc452a973 2026-09-10 00:06:33 collection paths at /collections//; update resolveCollectionPath; add route
feat:9eed12e6e 2026-09-09 23:54:04 include page in useEffect deps so pagination works client-side
fix:fc073741e 2026-09-09 23:50:23 include pagination in SSR loader data so pagination renders on direct pageload
fix:a6fab8219 2026-09-09 23:35:05 zero client /api/v1/collections on SSR pageload — serialize loader data, return cached on hydration (staleTime Number.MAX_SAFE_INTEGER; Infinity serialized to null)
fix:f148be49e 2026-09-09 21:39:33 base loader and client send sparam='' so /collections gets data; only supply net when slug present
fix:b3cb0437f 2026-09-09 21:32:17 client /api/v1/collections only refetches on searchParam change; zero client calls on SSR pageload
fix:fe6aacb29 2026-09-09 21:29:24 suppress initial client /api/v1/collections fetch; loader no-op when slug absent
fix:a43d53b05 2026-09-09 20:23:05 restore SSR JSON-LD injection for /collections and /collections/ routes; ensure placeholder present and metadata injected
fix:e1fa4534f 2026-09-09 18:01:18 SSR metadata + prefetched data for //collections/
feat:4eaba73bc 2026-09-09 17:27:42 redirect numeric chainId slugs to chainName slug
fix:34bb9f950 2026-09-09 16:53:47 add /collections/ route with network preset
feat:b1827995f 2026-09-09 02:47:29 restore missing placeholder in index.html so SSR meta/JSON-LD injects correctly
fix:c6f4d7221 2026-09-08 22:33:57 inline background styling on body element (SVG pattern)
fix:c006a588f 2026-09-08 22:29:44 remove mock footer from loader; header now inside loader-shell for removal on mount
fix:68f91bc04 2026-09-08 22:28:16 scope navbar hide-on-scroll to its own header (not loader header) via closest(workdir:/home/jp/IdeaProjects/viri-nft-market}
fix:320dc1f90 2026-09-08 22:27:05 header and footer both inside loader-shell with fixed positioning for full-width, removed on app mount
fix:0ca30ddcf 2026-09-08 22:25:22 keep loader footer inside loader-shell but full-viewport via fixed positioning
fix:8bb9287b0 2026-09-08 22:22:56 footer and header fixed-position width 100% for full viewport (loader-headers)
fix:5d9ab7aa8 2026-09-08 22:09:51 replace pre-loader with static style-guide loader page (mock header/footer, card, loading bar)
feat: