SENDIT Markets

Founding Engineer

Jan 2025 — Jan 2026 · 12 months
$300K+
Raised
2,000+
Sellers
$50K+
Transactions
10K+
Active Users
Next.jsTypeScriptGoReact QueryPostgreSQLRedisElasticsearchRabbitMQSolana
TL;DR

Led the end-to-end development of a full-stack marketplace platform serving 2,000+ sellers and processing $50K+ in transactions. Architected the entire Seller Dashboard, built secure server-side payment APIs in Next.js, and designed Go microservices powering the core marketplace engine — all in a pre-seed environment that raised $300K+.

01

The Challenge

SENDIT Markets needed to build a full-stack marketplace from scratch — not just a frontend, but the entire infrastructure to support thousands of sellers listing digital goods, managing orders, and receiving payments. The founding team had a clear product vision but no engineering foundation.

The core challenge was building a system that felt as fast and intuitive as a traditional e-commerce platform while handling complex payment flows and secure server-side processing. Sellers needed to onboard in minutes, not hours. Buyers needed to checkout without friction, with the platform transparently handling all the payment complexity on the backend.

02

Architecture

I designed a layered full-stack architecture with two separate Next.js applications — a buyer-facing marketplace and a seller dashboard — both built in TypeScript. The buyer app relied heavily on React Query for server state management, giving us optimistic updates and automatic cache invalidation. The seller dashboard was highly complex and required robust state handling for a multi-step onboarding wizard that needed to survive page refreshes and cross-device sessions.

CLIENT LAYER
Buyer App
Next.js 14 · React Query · Jotai
Seller Dashboard
Next.js 14 · Complex Analytics
Uploadcare Client
Direct file uploads
Solana Wallet Adapter
Web3 integration
NEXT.JS API ROUTES
/api/sponsor-transaction
Fee payer signing
/api/build-transaction
TX construction
/api/confirm-transaction
Order confirmation
/api/pusher/auth
Pusher WebSocket auth
/api/auth
Privy / OAuth handler
GO MICROSERVICES · ECHO
Order Service
GORM · Transactions
Product Service
CRUD · Variants
Analytics Service
Materialized Views
User Service
Auth · Privy
Chat Service
Gorilla WebSocket · Pusher
Gig Marketplace Service
Gigs · Offers · Escrow
Points & Referral Service
Loyalty leaderboards
INFRASTRUCTURE
PostgreSQL
GORM
Elasticsearch
Search Index
RabbitMQ
Event Queue
Kafka
Stream Processing
Hasura
GraphQL Engine
MinIO
S3 Object Storage
Redis
Cache · Rate Limiting
Pusher
Real-time Messaging
Resend
Transactional Email

The Go backend (Echo framework) ran as a set of independent microservices — Order, Product, Analytics, and User — each backed by PostgreSQL via GORM. Products were indexed into Elasticsearch for fast discovery, with mutations propagated via a RabbitMQ + Kafka hybrid messaging pipeline that kept the search index eventually consistent without blocking write paths.

React Custom Hook — Real-time WebSocket Subscription
// hooks/useChatSubscription.ts
// Bridges Pusher WebSockets with React Query's client cache
export function useChatSubscription(channelId: string) {
  const queryClient = useQueryClient();

  useEffect(() => {
    // 1. Connect to the authenticated Pusher instance
    const pusher = new Pusher(process.env.NEXT_PUBLIC_PUSHER_KEY!, {
      cluster: process.env.NEXT_PUBLIC_PUSHER_CLUSTER!,
      authEndpoint: "/api/pusher/auth",
    });

    // 2. Subscribe to the private chat channel
    const channel = pusher.subscribe(`private-chat-${channelId}`);

    // 3. Listen for new messages and merge them into the cache
    channel.bind("new-message", (newMessage: MessageData) => {
      queryClient.setQueryData(["chat-messages", channelId], (oldCache: any) => {
        if (!oldCache) return [newMessage];
        return [...oldCache, newMessage];
      });
    });

    // 4. Cleanup to prevent memory leaks on unmount
    return () => {
      pusher.unsubscribe(`private-chat-${channelId}`);
      pusher.disconnect();
    };
  }, [channelId, queryClient]);
}
03

Key Decisions

Several architectural decisions defined the shape of this system:

04

The Marketplace

While the backend handled the complex logic, the buyer-facing marketplace needed to be incredibly fast and visually engaging. We focused heavily on performance optimization and smooth interactions to ensure buyers could browse thousands of listings without lag.

I implemented advanced filtering and search backed by Elasticsearch, with URL-state-driven filters so users could share exact query views. The grid layouts were carefully optimized to maintain smooth scrolling even on mobile devices.

05

The Seller Dashboard

The Seller Dashboard was the most complex frontend surface. It needed to support the full lifecycle: onboarding, identity verification, listing creation, order management, and analytics. I built it as a robust multi-step wizard, so sellers could start onboarding on their phone and finish on desktop without losing progress.

The analytics module used Recharts + D3to visualize seller performance metrics — revenue trends, order volume, average fulfillment time — driven by the Go backend's PostgreSQL Materialized Views. Product listings used Tiptap for rich text editing and Uploadcare for media management, keeping the listing creation flow seamless even for non-technical sellers.

06

Results

Over 12 months as the founding engineer, the platform grew from zero to a functioning marketplace with measurable traction:

2,000+
Active Sellers
$50K+
Transaction Volume
$300K+
Capital Raised

Beyond the metrics, the experience shaped how I think about building products from scratch — making pragmatic technical decisions under constraints, collaborating directly with founders on product direction, and shipping quickly without sacrificing the engineering foundation.