Inside the Sprint: A Look at My Recent Dev Work

I am a Web3 Software developer
Over the past few weeks, I have been juggling four very different corners of software engineering: a legal-tech backend in production, an open-source protocol widget review, a personal DeFi protocol on Avalanche, and a cinematic portfolio site for a client. Here’s a rundown of what’s shipped and what’s still cooking.
- Confidios: Hardening the File Analysis Service
At Confidios, most of my time has gone into the file-analysis-service; the Node.js/TypeScript backend (Express + TSOA, DynamoDB, S3, deployed on AWS ECS) that powers document upload, extraction, and fraud-risk assessment (DFRA) for our legal clients. This stretch of work touched close to a dozen CONAPP tickets:
CONAPP-524 — Tracked down a production 500 error on a 760KB PDF upload. Root cause: AES encryption running against an empty user password combined with overly restrictive file permission flags. The file itself turned out to be tied to a suspected “blocked funds” fraud scheme, which got flagged separately.
CONAPP-540 — Standardised every error response across roughly 60 call sites into a canonical { error: { code, message, details? } } envelope, and made sure 5xx errors log at the right severity with full details.
CONAPP-541 — Fixed audit-trail correlation by assigning req.id exactly once per request in the CHAR audit middleware, so events could actually be traced end-to-end.
CONAPP-544 — Gated an integration-test-only auth branch behind an !isOnPremise check so a CredentialsProviderError couldn’t surface as a customer-facing 500.
CONAPP-551 — Updated the UI’s extractMessage utility to parse the new error envelope.
CONAPP-562 — Fixed presigned S3 URLs going stale mid-session by refreshing at half their TTL instead of waiting for full expiry.
CONAPP-563 — Stripped ExifTool:* and internal System:* metadata keys out of customer-facing document detail responses.
CONAPP-568 — The big one: scrubbing internal DFRA methodology vocabulary (examiner, adjudicator, rebuttal, etc.) out of anything customer-facing. This meant introducing sanitised public types, a new mapper (toPublicDfraReport), renaming SSE event names, and — after an OpenTelemetry merge went sideways — clawing back from 56 TypeScript errors to zero.
Become a Medium member CONAPP-538 — Added a plain POST /documents upload endpoint that reuses the existing upload flow but returns a clean DocumentDetailResponse.
CONAPP-549 — Built an automated sandbox onboarding email system (IEmailService, an SES provider, a factory) that sends docs and reveal links via Promise.allSettled, plus the Terraform and CI plumbing to support a dedicated sending subdomain.
2. GoodDollar: Reviewing the Connect-a-Wallet Widget Redesign
On the open-source side, I did a full line-level review of GoodWidget PR #135 https://github.com/GoodDollar/GoodWidget/pull/135; a redesign of the connect-a-wallet widget for the GoodDollar protocol. Rather than relying on GitHub’s PR view (which truncates diffs), I pulled the raw file contents for each commit SHA to review the actual changes.
First pass turned up five issues: a dead component export, duplicate heading copy across two flow states, a hover implementation incompatible with React Native Web, an uncleared setTimeout risking a setState-after-unmount, and an unverified clipboard utility import. After the author pushed fixes, round two confirmed three were resolved cleanly but surfaced a new visual regression: removing the manual hover handlers had also stripped the colour-flip on the Disconnect button’s icon and text, leaving red-on-red on hover. I recommended either Tamagui’s group-hover pattern or a minimal reintroduction of onHoverIn/onHoverOut, with a Storybook check before merge.
3. Snowdrift Protocol: A Dual-Engine Contribution Hub
Snowdrift is my own project; a contribution platform on Avalanche combining milestone-locked freelance escrow with an open-source bounty discovery layer. This round of work was a full-stack push:
Frontend: Rebuilt the Next.js 16 + Tailwind v4 app into two independent dashboards (/task for wallet-connected escrow work, /opensource for GitHub-based bounty discovery), broke apart a monolithic hooks file into purpose-specific hooks (useCreateTask, useSubmission, useTaskStats, etc.), and moved contract addresses out of hardcoded config into environment variables with runtime validation.
Contracts: Wrote three UUPS-upgradeable Foundry contracts; SnowdriftTaskEscrow, SnowdriftReputation, and a MockUSDC replacing an earlier GoodDollar-verification dependency with a Web3Auth-style ECDSA attestation pattern. Migrated the entire deployment pipeline from Hardhat to Foundry, with 12 passing tests covering the full task lifecycle, and then deployed and verified all three proxies on Avalanche Fuji via Snowtrace.
Debugging highlights: a Turbopack workspace-root misdetection from a stray lockfile, a crash from an unguarded GitHub context hook, a hydration mismatch caused by browser extensions, a “why is this gas required for a zero-value pro-bono task” bug (fixed with a pre-flight balance check), and a wagmi optional-dependency issue that broke the Turbopack build entirely.https://snowdrift-aval.vercel.app/
4. A Cinematic Portfolio Build for a Materials Scientist
Outside of blockchain work, I built a full portfolio site for Nosayaba — a materials scientist and systems architect using Next.js 16, React 19, Tailwind v4, and the motion library. The brief evolved from a grainy paper aesthetic (rejected) into something modelled on Analogue Agency’s cinematic style: a full-screen dark hero with a canvas-based green light-burst animation, a 300vh sticky scroll sequence where a headline splits apart as you scroll, a frosted-glass floating navbar, and a custom spring-trailed cursor. Take a look https://byas-portfolio.vercel.app/
The site spans eight routes (home, portfolio, about, thesis, thinking, speaking, advisory, contact) organised around three practice areas. Along the way, I extracted animation timing from a Loom recording frame-by-frame to match real interaction patterns, added structured data for SEO, and swapped next/font/google for a self-hosted font to remove a build-time dependency on Google’s font CDN; which also fixed a large-asset git push timeout once the PNGs were converted to WebP.
Across all four, the throughline has been the same: reproduce the bug or the design intent precisely, fix it at the root rather than patching symptoms, and leave the codebase (or the review) more legible than I found it.
