β¨ Artistly.com is a functional, mobile-responsive full-stack demo of a fictional platform that connects Event Planners with Artist Managers.
Originally scoped as a frontend-only test, it now includes a real backend with Next.js server components, Prisma, and MongoDB for user authentication and artist submissions. It also uses TensorFlow.js with COCO-SSD to ensure profile images are appropriate.
-
Event Planners can:
- Browse artist categories and profiles.
- Filter artists by fee, location, and category.
- Request quotes (demo action).
-
Artist Managers can:
- Onboard new artists via a multi-step, validated form.
- Store artist data in a MongoDB database.
- View artist submissions and manage leads through a simple dashboard.
π Note: Some data, like testimonials and analytics, still use static JSON/mock files.
Artistly uses TensorFlow.js with the COCO-SSD model to detect people and possible text-like objects in profile images.
If the image:
- βοΈ Contains at least one person
- β Contains no text-like elements
β¦it will be approved!
Examples:
β Approved:
β Unapproved Examples:
π Click here to watch the full video on YouTube
- Next.js 15 (App Router) β modern app router and react server components
- React functional components & hooks β
useState
,useEffect
,useContext
for state management and side effects - Prisma ORM β for database operations with MongoDB
- React Hook Form + Yup β for robust form handling and validation
- Tailwind CSS β utility-first styling for responsive UI
- Framer Motion β page & component animations
- Zustand β simple state management
- MUI Icons β icon library support
- Suspense β with custom
Loading
fallback for streaming routes
- TensorFlow.js + COCO-SSD β smart profile image validation (person detected, no text)
π¦ artistly/
βββ Actions/ # Server actions (login, register, fetch, onboard artist)
β βββ fetch-artist.js
β βββ login.js
β βββ register.js
β βββ onboard-artist.js
β
βββ Context/ # Global React Context
β βββ theme-context.js # Theme toggling (light/dark)
β
βββ Hooks/ # Custom hooks
β βββ use-fetch-artist.js # useEffect + useState logic
β
βββ Lib/ # Integrations & Prisma client
β βββ cloudinary.js
β βββ cloudinary-upload.js
β βββ prisma/
β β βββ schema.prisma
β β βββ db.js
β
βββ Schemas/ # Yup validation schemas
β βββ login-schema.js
β βββ register-schema.js
β βββ onboarding-schema.js
β
βββ Utils/ # Shared helper functions
β βββ getUserByEmail.js
β
βββ Public/ # Static assets & images
β βββ images/
β βββ screenshots/
β
βββ src/app/ # Next.js App Router structure
β βββ page.js # Homepage
β βββ loading.js # Suspense fallback
β βββ artists/page.js # Artist listing page
β βββ onboard/page.js # Onboard artist form
β βββ dashboard/page.js # Manager dashboard
β βββ state/store.js # Zustand store
β βββ globals.css # Tailwind base styles
β
βββ components/ # Reusable UI components
β βββ navbar/ # Navigation bar
β βββ hero/ # Hero section
β βββ explore-artists/ # ArtistCard, FilterPanel
β βββ onboard-artists/ # Onboarding form sections
β βββ dashboard/ # Dashboard table & charts
β βββ testimonials/ # Testimonials section
β βββ footer/ # Footer with motion
β
βββ data/ # Mock/static data
β βββ artists.js
β βββ dashboard.js
β βββ testimonials.js
β
βββ .env # Environment variables (DB, Cloudinary)
βββ package.json
βββ next.config.js
βββ README.md
β
Homepage:
Hero section, category cards, and smooth Framer Motion animations.
β
Explore Artists:
Artist cards grid with responsive filter panel. Data fetched from MongoDB via custom
useFetchArtists
hook that uses useEffect
for side effects.
β
Onboard Artist:
Multi-section form with file upload and dropdowns. Yup schemas + React Hook Form for real-time validation.
β
Manager Dashboard:
Displays artist submissions stored in the database. Static data used for testimonials and charts.
β
Suspense & Performance:
Root layout wraps pages in <Suspense>
with a custom <Loading />
component to handle server component streaming.
β Dark Mode & Theme Context: Theme toggling implemented globally via React Context.
- Next.js
component: Optimized image loading with priority and loading="lazy" where appropriate.
- Alt text for all images: Images include descriptive alt tags.
- Accessible form fields: Inputs include aria-labels and linked tags.
- Semantic HTML: Proper use of , ,
, , and for better readability and screen reader support. - Dynamic Imports with next/dynamic: Heavy or client-only components β like charts, dashboard widgets, or large UI blocks β are loaded dynamically using next/dynamic for code splitting.
To test the manager dashboard:
Email: artistly@manager.com Password: test123
-
Clone the repo:
git clone https://github.com/Krisha1703/artistly.git cd artistly
-
Install dependencies:
npm install
-
Generate Prisma Client:
npx prisma generate
-
Start the dev server:
npm run dev
Open
http://localhost:3000
to view the app.
Deployed on Vercel: krisha-artistly-app.vercel.app