Overview: Where Development Is Heading
Recent backend development is centered on expanding and stabilizing NFT metadata and chain data ingestion capabilities, with work to add canonical name and chain slug support for collection and NFT queries, resolve edge cases in numeric filtering and slug resolution, and extend the chainWatch backfill tool to rewrite legacy inline media URLs to a CDN and persist learned contract selectors. The team is also prioritizing infrastructure resilience and maintainability through targeted improvements including IPFS.io rate limiting with 504 lockout detection and CID fetch caching, chain-separated Blockscout caching, cleanup of unused server routes, and fixes for multipart upload validation gaps.
Overview: Where Development Is Heading
The frontend repo is currently focused on bug fixes, new features, style cleanup, maintenance tasks. Several fixes are landing to stabilize the existing flows. New feature work is progressing in parallel. Recent commit subjects include: chore: update generated sitemaps (540 URLs); fix: avatar upload to use /api/v1/binupload (uploadFile); fix: initialize upload metadata fields up front; fix: use configured API base for profile uploads; fix: revert upload to JSON for /api/v1/upload contract. The work is converging on a more stable and maintainable user experience.
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
5ddf977 2026-09-11 07:59:31
fix binUploadab23cec 2026-09-11 06:49:59 skip Joi validation on /binupload multipart route
fix: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 gateway
Frontend Commits
81d66c9fd 2026-09-11 07:55:18 update generated sitemaps (540 URLs)
chore:2843a4fd4 2026-09-11 07:52:08 avatar upload to use /api/v1/binupload (uploadFile)
fix:978738d7a 2026-09-11 06:36:24 initialize upload metadata fields up front
fix:f74d48c41 2026-09-11 06:29:47 use configured API base for profile uploads
fix:eee6621ab 2026-09-11 06:09:46 revert upload to JSON for /api/v1/upload contract
fix:6397e8659 2026-09-11 05:30:47 upload payload empty — send FormData directly and defer queue processing
fix:1e821c98a 2026-09-11 05:09:46 avoid parsing already parsed session token
fix:31549c017 2026-09-11 04:56:41 banner upload now branches on itype; guard hdrRef null; build passes
fix:d8fcf6e73 2026-09-11 03:19:12 profile loop - guard navbar onError, profile useEffect, SecAvatar undefined-id
fix:f99a202e8 2026-09-11 02:48:39 profile image endless load loop
fix:afe8856f1 2026-09-11 02:33:30 profile LiveStream t is not defined
fix:92c1719e9 2026-09-11 02:33:16 redesign collection page layout (hero, tabs, 2-column, collapsed filters)
feat: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: