Artomate is a comprehensive SaaS application designed for artists (musicians, authors, content creators) to automate their social media marketing. Users upload their primary content, and AI generates a complete marketing campaign package including social media posts, video clips, and email newsletters.
- AI-Powered Content Generation: Uses Google's Gemini AI to create engaging marketing content
- Multi-Format Support: Handles music, video, and text content
- Complete Marketing Package: Generates Instagram posts, video reels, and email campaigns
- User Authentication: Firebase Authentication with email/password and Google sign-in
- Subscription Management: Free tier with pay-per-campaign and pro subscription options
- Payment Processing: Stripe integration for monetization
- Modern UI/UX: Dark theme with Tailwind CSS and smooth animations
- Frontend: React 18 with TypeScript
- Styling: Tailwind CSS (CDN)
- Authentication: Firebase Authentication
- Database: Cloud Firestore
- AI Services: Google Gemini AI, Imagen AI
- Payments: Stripe
- Deployment: Single HTML file with CDN dependencies
Artomate/
โโโ index.html # Main HTML file with CDN dependencies
โโโ src/
โ โโโ main.jsx # React app entry point
โ โโโ App.jsx # Main app component with auth routing
โ โโโ components/
โ โ โโโ auth/ # Authentication components
โ โ โโโ layout/ # Layout and navigation
โ โ โโโ pages/ # Main page components
โ โ โโโ campaigns/ # Content creation flow
โ โ โโโ ui/ # Reusable UI components
โ โโโ services/ # API services (Gemini, Stripe)
โโโ README.md # This file
git clone <repository-url>
cd Artomate
- Go to Firebase Console
- Create a new project or select existing one
- Enable Authentication and Firestore
- Get your Firebase configuration
- Update
index.html
with your Firebase config:
const firebaseConfig = {
apiKey: "YOUR_API_KEY",
authDomain: "YOUR_AUTH_DOMAIN",
projectId: "YOUR_PROJECT_ID",
storageBucket: "YOUR_STORAGE_BUCKET",
messagingSenderId: "YOUR_MESSAGING_SENDER_ID",
appId: "YOUR_APP_ID"
};
- Go to Google AI Studio
- Create an API key
- Update
src/services/geminiService.js
:
const GEMINI_API_KEY = 'YOUR_GEMINI_API_KEY';
const IMAGEN_API_KEY = 'YOUR_IMAGEN_API_KEY';
- Go to Stripe Dashboard
- Get your publishable and secret keys
- Create price IDs for your products
- Update
src/services/stripeService.js
:
const STRIPE_PUBLISHABLE_KEY = 'pk_test_YOUR_STRIPE_PUBLISHABLE_KEY';
const STRIPE_SECRET_KEY = 'sk_test_YOUR_STRIPE_SECRET_KEY';
const PRICE_IDS = {
PER_CAMPAIGN: 'price_YOUR_PER_CAMPAIGN_PRICE_ID',
PRO_SUBSCRIPTION: 'price_YOUR_PRO_SUBSCRIPTION_PRICE_ID'
};
Since this is a single HTML file application, you can:
-
Local Development: Use a local server
# Using Python python -m http.server 8000 # Using Node.js npx serve . # Using PHP php -S localhost:8000
-
Production: Upload to any web hosting service
-
Open in Browser: Navigate to
http://localhost:8000
- Authentication: Enable Email/Password and Google sign-in methods
- Firestore: Create a database with the following collections:
users
: User profiles and subscription statuscampaigns
: Generated campaigns and content
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Users can only access their own data
match /users/{userId} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
// Users can only access their own campaigns
match /campaigns/{campaignId} {
allow read, write: if request.auth != null &&
request.auth.uid == resource.data.userId;
}
}
}
Configure webhooks for:
checkout.session.completed
: Handle successful paymentscustomer.subscription.updated
: Handle subscription changescustomer.subscription.deleted
: Handle subscription cancellations
Webhook endpoint: https://yourdomain.com/api/stripe/webhook
Update colors in index.html
:
tailwind.config = {
theme: {
extend: {
colors: {
primary: '#8B5CF6', // Your primary color
secondary: '#22D3EE', // Your secondary color
}
}
}
}
Change fonts in index.html
:
<link href="https://fonts.googleapis.com/css2?family=YourFont:wght@300;400;500;600;700&display=swap" rel="stylesheet">
Add new content types in src/components/campaigns/UploadStep.jsx
:
const contentTypes = [
{ id: 'music', label: 'Song/Audio', icon: 'music', extensions: ['.mp3', '.wav'] },
{ id: 'video', label: 'Video', icon: 'video', extensions: ['.mp4', '.mov'] },
{ id: 'book', label: 'Text/Book', icon: 'document-text', extensions: ['.txt', '.pdf'] },
// Add your new content type here
{ id: 'artwork', label: 'Visual Art', icon: 'image', extensions: ['.jpg', '.png'] }
];
- API Keys: Never expose API keys in client-side code in production
- Firebase Rules: Implement proper Firestore security rules
- Stripe: Use webhooks to verify payments server-side
- CORS: Configure proper CORS headers for your domain
- Rate Limiting: Implement rate limiting for AI generation
- Netlify: Drag and drop the
index.html
file - Vercel: Connect your repository
- GitHub Pages: Push to a GitHub repository
- AWS S3: Upload files to S3 bucket with static website hosting
Update redirect URLs in src/services/stripeService.js
:
const SUCCESS_URLS = {
PER_CAMPAIGN: 'https://yourdomain.com/campaign-success',
SUBSCRIPTION: 'https://yourdomain.com/subscription-success'
};
Use the mock implementations in the services:
// In geminiService.js
export const generateContentWithAI = async (campaignData) => {
// Use mock implementation for development
return generateMockContent(campaignData);
};
- Test with real API keys
- Verify Stripe webhooks
- Test Firebase authentication
- Validate AI content generation
- Chrome 90+
- Firefox 88+
- Safari 14+
- Edge 90+
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
For support and questions:
- Check the Firebase documentation
- Review Stripe integration guides
- Check Gemini AI documentation
- Open an issue in the repository
- Advanced analytics dashboard
- Social media scheduling
- Team collaboration features
- Custom AI model training
- Multi-language support
- Mobile app development
- Advanced video editing
- A/B testing for campaigns
- Lazy loading for components
- Image optimization
- Code splitting
- Service worker for offline support
- CDN optimization
Built with โค๏ธ for artists and creators everywhere