Teacup is a 100% no-code SaaS platform for retail, ecommerce, and service businesses who want a powerful website without technical headaches. Launch a fast, professional site that boosts customer acquisition automatically.
Teacup is designed to be a comprehensive website management platform that enables businesses to:
- Create and Manage Websites - Build professional websites without coding knowledge
- Blog Management - Create, edit, and publish blog posts with a rich text editor
- Customer Communication - Manage multiple contact inboxes to handle customer inquiries
- Analytics Tracking - Monitor website performance with detailed analytics dashboards
- AI-Powered Assistance - Get help with website tasks through the "Hold My Tea" AI assistant
- Multi-User Collaboration - Share website access with team members
- Custom Domains - Connect your own domain to your Teacup-powered website
- Subscription Management - Offer monthly or lifetime subscription plans
- β Landing Page - Professional homepage with hero section and call-to-action
- β Authentication System - Complete user registration and login via Supabase
- β About Page - Company information and mission statement
- β Pricing Page - Display of subscription plans (Monthly $40/month, Lifetime $500)
- β Blog Listing - Public blog posts with category filtering (demo data)
- β Individual Blog Posts - Full blog post view with author info (demo data)
- β Responsive Design - Mobile-friendly interface across all pages
- β Theme Support - Dark/light mode toggle
- β Main Dashboard - Overview of company data, recent messages, and blog posts
- β
Blog Management - Full CRUD operations for blog posts
- Create new blog posts with rich text editor (Quill)
- Edit existing blog posts
- Delete blog posts
- View all user blogs
- β
Inbox Management - Complete inbox system
- Create multiple inboxes for different purposes
- View messages in each inbox
- Delete inboxes and messages
- Latest messages overview on dashboard
- β
Analytics Dashboard - Track website performance
- Page view analytics
- Form submission tracking
- Button click tracking
- Interactive charts with date range filtering
- β Company Management - Manage company information and settings
- β AI Assistant ("Hold My Tea") - AI-powered help for website tasks
- β Settings Page - User preferences and profile management
β οΈ Contact Form - Form UI exists but doesn't submit to backendβ οΈ Checkout Page - Payment form UI exists but no payment processingβ οΈ Order Free Site - Form exists but doesn't process ordersβ οΈ Welcome Page - Onboarding UI exists but limited functionality
- Framework: Next.js 16 (App Router) with TypeScript
- Styling: TailwindCSS v4 with custom components
- State Management: React Query (@tanstack/react-query) for server state
- UI Components:
- Radix UI primitives for accessibility
- Custom shadcn/ui inspired components
- Lucide React icons
- Rich Text Editor: Quill for blog post creation
- Charts: Recharts for analytics visualization
- Forms: React Hook Form with Zod validation
- Notifications: Sonner toast notifications
- Authentication: Supabase Auth (fully integrated)
- API: Custom REST API (configured via BACKEND env var)
- Data Fetching: React Query with automatic caching and revalidation
- Language: TypeScript
- Linting: ESLint
- Package Manager: npm
src/
βββ app/ # Next.js App Router
β βββ page.tsx # Landing page
β βββ layout.tsx # Root layout
β βββ providers.tsx # React Query & Theme providers
β βββ auth/ # Authentication pages
β β βββ login/ # Login page
β β βββ signup/ # Signup page
β βββ dashboard/ # Protected dashboard routes
β β βββ page.tsx # Main dashboard
β β βββ layout.tsx # Dashboard layout with sidebar
β β βββ analytics/ # Analytics dashboard
β β βββ blogs/ # Blog management
β β β βββ new/ # Create new blog
β β β βββ edit/[id]/ # Edit blog
β β βββ inboxes/ # Inbox management
β β β βββ [id]/ # Individual inbox view
β β βββ settings/ # Settings page
β βββ blogs/ # Public blog pages
β β βββ page.tsx # Blog listing
β β βββ [id]/ # Individual blog post
β βββ about/ # About page
β βββ contact/ # Contact page
β βββ pricing/ # Pricing page
β βββ checkout/ # Checkout page
β βββ order-site/ # Free site order page
β βββ welcome/ # Welcome/onboarding page
βββ components/ # Reusable UI components
β βββ ui/ # Base UI components (buttons, cards, etc.)
β βββ app-sidebar.tsx # Dashboard sidebar
β βββ dashboard-content.tsx # Main dashboard content
β βββ data-table.tsx # Reusable data table
β βββ chart-area-interactive.tsx # Interactive charts
βββ Components/ # Legacy components (mixed case)
β βββ Navbar.tsx # Main navigation
β βββ Footer.tsx # Page footer
β βββ HoldMyTea.tsx # AI assistant component
β βββ Modal.tsx # Modal component
β βββ ThemeToggle.tsx # Theme switcher
βββ Dashboard/ # Dashboard-specific components
β βββ Dashboard.tsx # Dashboard wrapper
β βββ Inboxes.tsx # Inbox list component
β βββ Inbox.tsx # Individual inbox component
β βββ Analytics/ # Analytics components
β βββ Analytics.tsx # Analytics wrapper
β βββ AnalyticsClient.tsx # Analytics client component
β βββ Chart.tsx # Chart component
βββ lib/ # Utility libraries
β βββ analytics.ts # Analytics utilities
β βββ blogs.ts # Blog utilities
β βββ utils.ts # General utilities
βββ hooks/ # Custom React hooks
β βββ use-mobile.ts # Mobile detection hook
βββ backendProvider.tsx # API integration layer (React Query)
βββ AuthProvider.tsx # Authentication context
βββ ThemeProvider.tsx # Theme context
βββ supabaseClient.ts # Supabase client configuration
βββ envData.ts # Environment variables
public/
βββ Assets/ # Static assets
β βββ icon.png # App icon
β βββ icon-beside.png # Alternative icon
β βββ favicon.ico # Favicon
βββ _redirects # Netlify redirects
βββ netlify.toml # Netlify configuration
The backendProvider.tsx file contains all API integration hooks using React Query.
- Base URL:
process.env.BACKEND || 'http://localhost:8000' - Authentication: Uses Supabase auth tokens in request headers
- Caching: React Query handles automatic caching and revalidation
useUserBlogs(companyId); // GET /dashboard/blogs/${companyId}
useBlog(companyId, id); // GET /dashboard/blogs/${companyId}/${id}
useCreateBlog(); // POST /dashboard/blogs
useUpdateBlog(); // PUT /dashboard/blogs/${id}
useDeleteBlog(); // DELETE /dashboard/blogs/${id}useUserInboxes(companyId); // GET /dashboard/inbox/${companyId}
useCreateInbox(); // POST /dashboard/inbox
useDeleteInbox(); // DELETE /dashboard/inbox/${id}
useInboxData(id); // GET /dashboard/inbox/data/${id}
useDeleteInboxData(); // DELETE /dashboard/inbox/data/${id}
useLatestMessages(companyId, limit); // Aggregated latest messagesuseCompany(companyId); // GET /dashboard/company/${companyId}
useCreateCompany(); // POST /dashboard/company
useUpdateCompany(); // PUT /dashboard/company/${id}useAnalytics(owner, event); // GET /api/analytics/${owner}?event=${event}
useTrackAnalytics(); // POST /api/analyticsuseHoldMyTea(owner, question); // POST /holdmytea/askexport type blogType = {
id?: number;
title: string;
image: string;
data: string;
owner: string;
};
export type inboxType = {
id?: number;
owner: string;
name: string;
};
export type CompanyType = {
id?: string;
name: string;
owner: string;
domain: string;
activity_data?: ActivityDataType[];
info?: InfoItemType[];
sharing?: SharingMemberType[];
key: string;
};
export type ActivityDataType = {
day: string;
visits: number;
};
export type InfoItemType = {
icon: string;
title: string;
data: string[] | number;
description: string;
};
export type SharingMemberType = {
name: string;
email: string;
status: string;
};- Node.js (Latest LTS version recommended)
- npm or yarn
- Supabase account (for authentication)
- Backend API server (optional for full functionality)
-
Clone the repository:
git clone <repository-url> cd teacupnet
-
Install dependencies:
npm install
-
Environment variables: Create a
.env.localfile in the root directory:# Backend API URL (optional - defaults to localhost:8000) BACKEND=http://localhost:8000 # Supabase Configuration (required for authentication) NEXT_PUBLIC_SUPABASE_URL=your_supabase_project_url NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key
-
Run development server:
npm run dev
The application will be available at
http://localhost:3000 -
Build for production:
npm run build npm start
npm run dev # Start development server
npm run build # Build for production
npm start # Start production server
npm run lint # Run ESLintThe application uses Supabase for authentication with the following features:
- Email/Password Authentication - Traditional login/signup
- Social Authentication - Support for OAuth providers (configurable in Supabase)
- Session Management - Automatic token refresh and session persistence
- Protected Routes - All
/dashboard/*routes require authentication - Auth Context - Global authentication state via
AuthProvider.tsx
- User signs up or logs in via
/auth/loginor/auth/signup - Supabase handles authentication and returns user session
- Session token is stored and used for API requests
- Protected routes check authentication status before rendering
- Unauthenticated users are redirected to login page
The application uses a comprehensive component system:
Button- Various button styles and sizesCard- Content containersInput- Form inputsSelect- Dropdown selectsTable- Data tablesTabs- Tabbed interfacesModal/Dialog- Modal dialogsTooltip- Hover tooltipsAvatar- User avatarsBadge- Status badgesCheckbox- CheckboxesSeparator- Visual dividersSkeleton- Loading skeletons
Navbar- Main navigation headerFooter- Page footerThemeToggle- Dark/light mode switcherHoldMyTea- AI assistant interfaceModal- Custom modal systemSpinner- Loading indicatorsAILoadingSpinner- AI-specific loading animation
app-sidebar- Dashboard sidebar navigationdashboard-content- Main dashboard layoutdata-table- Advanced data table with sorting/filteringchart-area-interactive- Interactive analytics charts
- Rich Text Editor: Quill-based editor with formatting options
- Image Upload: Support for blog post images
- CRUD Operations: Create, read, update, delete blog posts
- Draft System: Save drafts before publishing
- Category Support: Organize blogs by categories
- Public View: Separate public-facing blog pages
- Multiple Inboxes: Create separate inboxes for different purposes
- Message Viewing: View all messages in each inbox
- Message Management: Delete individual messages or entire inboxes
- Dashboard Integration: Latest messages shown on main dashboard
- Real-time Updates: React Query keeps data fresh
- Event Tracking: Track page views, form submissions, button clicks
- Interactive Charts: Recharts-powered visualizations
- Date Range Filtering: View analytics for specific time periods
- Multiple Event Types: Separate tracking for different event types
- Visual Insights: Area charts, bar charts, and trend lines
- Natural Language Interface: Ask questions in plain English
- Website Help: Get assistance with website-related tasks
- Modal Interface: Clean, focused interaction design
- Loading States: Visual feedback during AI processing
- Success Notifications: Confirmation when tasks complete
- Company Profiles: Store company information
- Domain Management: Connect custom domains
- Activity Tracking: Monitor company activity
- Team Collaboration: Share access with team members
- Settings Management: Configure company preferences
The project is pre-configured for Netlify deployment:
- Connect Repository: Link your Git repository to Netlify
- Configure Build Settings:
- Build command:
npm run build - Publish directory:
.next - Node version: 18.x or higher
- Build command:
- Environment Variables: Add all required environment variables in Netlify dashboard
- Deploy: Netlify will automatically build and deploy
Configuration files:
public/_redirects- Handles client-side routingpublic/netlify.toml- Netlify-specific configuration
The application can also be deployed to:
- Vercel - Native Next.js support
- AWS Amplify - Full-stack deployment
- Docker - Containerized deployment
- Traditional Hosting - Build and serve static files
- Payment processing is not implemented (checkout page is UI only)
- Contact form doesn't submit to backend
- Free site order form is not functional
- Some demo data is hardcoded (public blog posts)
- Welcome page has limited functionality
- Functional contact form with email notifications
- Website builder interface
- Template marketplace
- Advanced SEO tools
- Email marketing integration
- Custom form builder
- E-commerce functionality
- Multi-language support
- Advanced analytics (conversion tracking, A/B testing)
The application supports dark and light themes via ThemeProvider.tsx. Theme preference is persisted in localStorage.
Backend API URL is configured via environment variable:
const API_URL = process.env.BACKEND || 'http://localhost:8000';Supabase client is configured in supabaseClient.ts using environment variables.
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow TypeScript best practices
- Use existing component patterns
- Write meaningful commit messages
- Test thoroughly before submitting PR
- Update documentation for new features
[Add your license information here]
For support, please:
- Open an issue on GitHub
- Contact the development team
- Check the documentation
- Built with Next.js and React
- UI components inspired by shadcn/ui
- Icons by Lucide and Tabler Icons
- Authentication by Supabase
- Charts by Recharts
Version: 0.0.0
Last Updated: February 2026
Status: Active Development