B2B Marketplace (In Development)
AnchorShip NL - Marine Engine & Parts Marketplace
- Next.js
- TypeScript
- Tailwind CSS
- Drizzle ORM
- PostgreSQL (Neon)
- Framer Motion
Overview
A Next.js frontend for AnchorShip NL, a B2B marketplace for complete marine diesel engines and spare parts spanning major marine brands - Wartsila, MAN, MaK, Deutz and Caterpillar.
Problem
Marine engine and spare-parts buyers need to search a large, brand-spanning catalog by part number, SKU or OEM number and get accurate matches quickly, while sellers need a straightforward way to manage stock listings.
Solution
A catalog-driven marketplace with dedicated parts and engines browsing routes, part-number search across SKU, title, subtitle and OEM-number fields, and a single-admin CRUD console for creating, editing and deleting stock listings.
Key Features
- Catalog browsing across dedicated engines and spare-parts routes
- Part-number search by SKU, title, subtitle and OEM number, with fuzzy matching in progress
- Admin CRUD console for stock listings
- HMAC-signed session cookies for single-admin authentication
- Image management via Cloudinary
Technology Stack
- Next.js 14
- TypeScript
- Tailwind CSS
- Framer Motion
- Drizzle ORM
- Neon PostgreSQL
- Cloudinary
- GitHub Actions CI
Architecture
Next.js frontend -> Drizzle ORM -> Neon PostgreSQL, with Cloudinary handling product imagery and a single-admin auth layer protecting the CRUD console.
Database
PostgreSQL on Neon, accessed through Drizzle ORM.
API / Backend
Next.js route handlers serve catalog, search and admin CRUD operations directly against the database via Drizzle.
Authentication & Authorization
Single-admin, credential-based login with HMAC-signed session cookies protecting the admin console.
Security
Session auth is HMAC-signed, but the project's own README notes that Row-Level Security and a planned Stack Auth integration are not yet complete - noted here rather than presented as finished.
Challenges
Building fast, typo-tolerant part-number search across SKU, title, subtitle and OEM-number fields for a catalog spanning multiple engine brands.
What I Learned
Not documented yet - see the project source for the current implementation.
Future Improvements
Enabling fuzzy search matching, adding Row-Level Security, and completing the Stack Auth integration - all noted directly in the project's own README as in-progress work.
Live Demo
No public live demo for this project yet.