A full-stack art marketplace and community platform for artists, collectors, and event organizers.
Nemesis connects artists with collectors through a modern e-commerce platform, event management system, and internal messaging. Built with the MERN stack (MongoDB, Express, React, Node.js).
Artists manage portfolios, sell artworks and video content, host events, and track analytics. Collectors discover art via advanced search, purchase securely via Stripe, and communicate directly with artists. Admins & SuperAdmins oversee users, moderate content, configure platform settings, and manage themes.
- E-Commerce -- Shopping cart, Stripe checkout, specialized order/ticket confirmations, and pay-per-view video purchases
- Gallery & Search -- N-gram search, category/medium/price filters, pagination with configurable page sizes
- Events -- Calendar view, interactive maps, attendance with email confirmation flow, capacity tracking
- Messaging -- Real-time internal chat (Socket.io) between collectors and artists with offer negotiation
- Video Library & Streaming -- Dedicated video hub, secure streaming, access control, playback tracking (views/plays), and immersive players
- Artist Tools -- Portfolio management, video content upload, sales analytics, revenue tracking, play/view statistics
- Admin Dashboard -- User management, platform statistics, advanced analytics hub (top content), artist application review
- SuperAdmin -- Platform settings, VideoHero customization (assets/text), theme editor, appearance configuration, granular artist analytics
- Security -- JWT (HTTP-only cookies), CSRF protection (double-submit cookie), rate limiting, XSS/NoSQL sanitization, Helmet headers
- UI/UX Refinements -- High-contrast dark mode designs, optimized sticky navigation, and adaptive VideoHero scaling (container-query driven)
- Geolocation -- Leaflet cluster maps, address geocoding, event location display
| Layer | Technologies |
|---|---|
| Frontend | React 19, Vite, Tailwind CSS, Shadcn/UI, Framer Motion |
| Backend | Node.js, Express 5, MongoDB (Mongoose 9) |
| Auth | JWT, HTTP-only cookies, CSRF double-submit cookie |
| Payments | Stripe (Elements, Webhooks) |
| Storage | Cloudflare R2 (S3-compatible), Cloudinary |
| Resend (Handlebars templates) | |
| Real-time | Socket.io |
| Maps | Leaflet, FullCalendar |
| Deploy | Docker, Nginx, docker-compose |
- Node.js v18+
- MongoDB (local or Atlas)
- Cloudflare R2 or S3-compatible storage credentials
git clone https://github.com/MassFuer/tistart.git
cd tistart
# Server
cd server
npm install
# Client
cd ../client
npm install- Copy
server/.env.exampletoserver/.envand fill in values (see Server README) - Create
client/.envwithVITE_API_URL(see Client README)
# Terminal 1 - Backend
cd server
npm run dev
# Terminal 2 - Frontend
cd client
npm run devThe API runs on http://localhost:5005 and the client on http://localhost:5173.
cd server
npm run seeddocker compose up --buildThis starts the client (Nginx on port 80), server (port 5005), and MongoDB (port 27017).
nemesis/
client/ # React frontend (Vite)
server/ # Express API backend
docker-compose.yml # Multi-service orchestration
See Client README and Server README for detailed docs.
MassFuer -- Fullstack Developer
MIT License
