A beautiful, modern resale marketplace built with Next.js, Supabase, and a stunning frosted glass UI design.
- π¨ Frosted Glass UI: Beautiful semi-transparent glass morphism design
- π Authentication: Secure user authentication with Supabase Auth
- π Post Creation: Create and manage resale posts with rich metadata
- π·οΈ Tagging System: Organize posts with customizable tags
- π Search & Filter: Advanced search and filtering capabilities
- π Shopping Cart: Add items to basket and manage purchases
- π€ User Management: My Posts page for managing your listings
- π± Responsive Design: Works perfectly on all devices
- β‘ Real-time Updates: Live data synchronization with Supabase
- Frontend: Next.js 15, React 19, TypeScript
- Styling: Tailwind CSS with custom frosted glass components
- Backend: Supabase (Database, Auth, Real-time)
- Icons: Lucide React
- Deployment: Vercel (recommended)
- Node.js 18+
- npm, pnpm or bun
- Supabase account
git clone <your-repo-url>
cd repacked
npm installIMPORTANT: Create a .env file in the root directory and paste the environment variables that were shared in Discord. This file contains your Supabase credentials and should never be committed to version control.
# Create the environment file
Create .env
or
touch .envThen paste the environment variables from the Discord message into this file.
The database schema is already configured. The project includes:
profilestable for user profilespoststable for resale poststagstable for post tagspost_tagsjunction tablestorage.bucketsfor image uploads- Row Level Security policies
- Triggers for user signup
Authentication is already configured, but you may need to update the site URL in your Supabase dashboard:
- Go to Authentication > Settings
- Add your domain to "Site URL" (e.g.,
http://localhost:3000for development) - Add redirect URLs for authentication if needed
npm run devOpen http://localhost:3000 to see your app.
src/
βββ app/ # Next.js app directory
β βββ api/ # API routes
β β βββ upload/ # Image upload endpoints
β βββ my-posts/ # User's posts management page
β βββ post/[id]/ # Individual post page
β βββ search/ # Search page
β βββ globals.css # Global styles with frosted glass theme
β βββ layout.tsx # Root layout
β βββ page.tsx # Home page
βββ components/
β βββ auth/ # Authentication components
β β βββ AuthModal.tsx # Sign in/up modal
β β βββ UserMenu.tsx # User dropdown menu
β βββ basket/ # Shopping cart components
β β βββ BasketModal.tsx # Cart modal
β βββ layout/ # Layout components
β β βββ Header.tsx # Main header
β βββ posts/ # Post-related components
β β βββ CreatePostModal.tsx # Post creation form
β β βββ EditPostModal.tsx # Post editing modal
β β βββ PostCard.tsx # Individual post display
β β βββ PostList.tsx # Posts listing with search/filter
β β βββ SearchPostList.tsx # Search results
β βββ providers/ # Context providers
β βββ ui/ # Reusable UI components
β βββ GlassButton.tsx # Frosted glass button
β βββ GlassCard.tsx # Frosted glass card
β βββ GlassInput.tsx # Frosted glass input
β βββ GlassTextarea.tsx # Frosted glass textarea
β βββ ImageUpload.tsx # Image upload component
β βββ ThemeSelector.tsx # Theme switcher
βββ contexts/ # React contexts
β βββ BasketContext.tsx # Shopping cart state
β βββ SearchContext.tsx # Search state
β βββ ThemeContext.tsx # Theme state
βββ lib/ # Utility libraries
βββ supabase.ts # Supabase client
βββ supabase-client.ts # Browser client
βββ supabase-server.ts # Server client
βββ supabase-storage.ts # Storage utilities
The app uses a custom frosted glass design system with:
- Semi-transparent backgrounds with backdrop blur
- Subtle borders and shadows
- Smooth hover animations
- Consistent color scheme
- Users can sign up with email/password
- Profile is automatically created on signup
- User menu provides access to account features
- Secure session management with Supabase
- Rich post creation with title, description, price, condition, location
- Tagging system with predefined categories
- Image upload and management with Supabase Storage
- Edit and delete posts from "My Posts" page
- Search and filtering capabilities
- Real-time updates
- Shopping cart functionality
The database includes:
- User profiles with username and full name
- Posts with comprehensive metadata (title, description, price, condition, category, location, images)
- Tags with custom colors
- Many-to-many relationship between posts and tags
- Supabase Storage bucket for image uploads
- Row Level Security for data protection
- Shopping cart functionality (client-side state)
Tags are managed in the database. You can add new tags by inserting into the tags table:
INSERT INTO tags (name, color) VALUES ('New Category', '#FF6B6B');The frosted glass effect can be customized in src/app/globals.css:
/* Adjust blur intensity */
backdrop-blur-md /* or backdrop-blur-sm, backdrop-blur-lg */
/* Adjust transparency */
bg-white/10 /* 10% opacity */
bg-white/20 /* 20% opacity */- Update the database schema in Supabase dashboard
- Modify the
CreatePostModal.tsxandEditPostModal.tsxcomponents - Update the
PostCard.tsxdisplay component - Adjust the
PostList.tsxquery - Update TypeScript interfaces
- Push your code to GitHub
- Connect your repository to Vercel
- Add environment variables in Vercel dashboard:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEY
- Deploy!
The app can be deployed to any platform that supports Next.js:
- Netlify
- Railway
- DigitalOcean App Platform
- AWS Amplify
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
MIT License - feel free to use this project for your own marketplace!
If you encounter any issues:
- Check your
.envfile - Make sure you've created it with the environment variables from Discord - Check the Supabase dashboard for database/auth issues
- Verify your environment variables are correct
- Check the browser console for errors
- Open an issue on GitHub
- Clone the repository
- Run
npm install - Create
.envfile with environment variables from Discord - Run
npm run dev - Open
http://localhost:3000 - Sign up for an account
- Create your first post!
Built with β€οΈ using Next.js and Supabase