Relive the Y2K era of CD burning and sharing with modern technology
π Live Demo: https://recd-fyi.vercel.app/
ReCd is a nostalgic virtual CD burning and sharing platform that recreates the experience of the early 2000s. Create virtual CDs (20 MB each), upload media files with retro burning animations, and share them with friends just like the good old days.
- πΏ Virtual CD Burning - Create CDs with authentic Y2K burning animations
- π€ AI-Powered Metadata - Smart tagging using Google Gemini 2.0 Flash
- π§ Easy Sharing - Share via email or links (30-day expiration)
- π Public Marketplace - Browse and discover CDs from other creators
- π¨ Y2K Aesthetic - Authentic Windows 98/XP retro design
- π Privacy-First - Private by default, public by choice
- β‘ Serverless - Fast, reliable Firebase backend
- Node.js 18+ and npm 9+
- Firebase account (free tier works)
- Google Gemini API key (optional, for AI features)
-
Clone and install
git clone https://github.com/vnmrsharma/ReCDFyi.git cd ReCDFyi npm install -
Set up Firebase
- Create project at console.firebase.google.com
- Enable Authentication (Email/Password)
- Enable Firestore Database
- Enable Cloud Storage
-
Configure environment
cp .env.example .env.local
Edit
.env.localwith your credentials:# Firebase (Required) VITE_FIREBASE_API_KEY=your_firebase_api_key VITE_FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com VITE_FIREBASE_PROJECT_ID=your-project-id VITE_FIREBASE_STORAGE_BUCKET=your-project.firebasestorage.app VITE_FIREBASE_MESSAGING_SENDER_ID=your_sender_id VITE_FIREBASE_APP_ID=your_app_id # EmailJS (Optional - for email sharing) VITE_EMAILJS_SERVICE_ID=your_service_id VITE_EMAILJS_TEMPLATE_ID=your_template_id VITE_EMAILJS_PUBLIC_KEY=your_public_key # Google Gemini AI (Optional - for smart metadata) VITE_GEMINI_API_KEY=your_gemini_api_key
-
Deploy Firebase rules
firebase login firebase deploy --only firestore:rules,storage:rules
-
Start development
npm run dev
ReCd uses Google Gemini 2.0 Flash to automatically generate smart metadata when CDs are made public:
- Upload files with descriptive names (e.g.,
sunset_beach_2024.jpg) - Toggle CD to public
- AI analyzes filenames and generates tags
- Metadata appears in retro Y2K style
- Enhanced search makes your CD discoverable
- Get free API key: https://aistudio.google.com/app/apikey
- Add to
.env.local:VITE_GEMINI_API_KEY=your_key - Restart dev server
Free Tier: 1,500 requests/day (~150 CDs/day)
Cost: ~$0.0001 per CD (if you exceed free tier)
- Frontend: React 19, TypeScript, Vite
- Backend: Firebase (Auth, Firestore, Storage)
- AI: Google Gemini 2.0 Flash
- Email: EmailJS
- Hosting: Vercel
- Testing: Jest, React Testing Library, fast-check
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CLIENT (React + Vite) β
β ββββββββββββββ ββββββββββββββ ββββββββββββββββββββββββββ β
β β Pages β β Components β β Services Layer β β
β β (Routes) ββ β (UI) ββ β (Business Logic) β β
β ββββββββββββββ ββββββββββββββ ββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββ
β
ββββββββββββββΌβββββββββββββ
β β β
βΌ βΌ βΌ
ββββββββββββ ββββββββββββ ββββββββββββ
β Firebase β β Gemini β β EmailJS β
β β β API β β SMTP β
ββββββ¬ββββββ ββββββββββββ ββββββββββββ
β
βββββββββββΌββββββββββ
β β β
βΌ βΌ βΌ
ββββββββββββββββββββββββββββββ
β Auth ββFirestoreββStorage β
β ββDatabase ββ Bucket β
ββββββββββββββββββββββββββββββ
User Action β React Component β Service Layer β Firebase/Gemini
β
User sees result β React State Update β Response βββββ
Toggle CD Public β Update Firestore β Trigger AI Generation
β
Fetch Files Metadata
β
For Each File:
- Build Prompt
- Call Gemini API
- Parse Response
- Save to Firestore
β
Mark CD Complete
β
Display in Y2K UI
recd-platform/
βββ src/
β βββ components/ # React components
β β βββ auth/ # Authentication components
β β β βββ LoginForm.tsx
β β β βββ SignUpForm.tsx
β β β βββ PasswordResetForm.tsx
β β β βββ UsernamePromptModal.tsx
β β β βββ AuthWindow.tsx
β β β βββ AnimatedBackground.tsx
β β β βββ DecorativeElements.tsx
β β βββ cd/ # CD management components
β β β βββ CDCard.tsx
β β β βββ CDCollection.tsx
β β β βββ CDDetailView.tsx
β β β βββ CreateCDModal.tsx
β β β βββ FileList.tsx
β β β βββ PublicToggle.tsx
β β β βββ PublicIndicator.tsx
β β β βββ PublicCDCard.tsx
β β β βββ AIMetadataDisplay.tsx # AI metadata UI
β β β βββ MetadataGenerationModal.tsx # Progress modal
β β β βββ ViewAnalytics.tsx
β β β βββ AnalyticsStats.tsx
β β β βββ ViewerList.tsx
β β β βββ MarketplaceFilters.tsx
β β β βββ MarketplaceEmpty.tsx
β β βββ upload/ # File upload components
β β β βββ FileUploader.tsx
β β β βββ BurningProgress.tsx
β β βββ share/ # Sharing components
β β β βββ ShareModal.tsx
β β β βββ ShareButton.tsx
β β β βββ ShareLinkDisplay.tsx
β β β βββ EmailShareForm.tsx
β β β βββ SharedCDView.tsx
β β β βββ GuestPromptModal.tsx
β β βββ preview/ # Media preview components
β β β βββ FilePreviewModal.tsx
β β β βββ ImageViewer.tsx
β β β βββ AudioPlayer.tsx
β β β βββ VideoPlayer.tsx
β β βββ ui/ # Reusable UI components
β β β βββ RetroButton.tsx
β β β βββ RetroLayout.tsx
β β β βββ LoadingSpinner.tsx
β β β βββ EmptyState.tsx
β β β βββ DiscAnimation.tsx
β β β βββ Toast.tsx
β β β βββ Footer.tsx
β β β βββ PageHeader.tsx
β β β βββ PageTransition.tsx
β β β βββ ErrorBoundary.tsx
β β βββ routing/ # Route protection
β β β βββ ProtectedRoute.tsx
β β β βββ PublicRoute.tsx
β β βββ user/ # User profile components
β β βββ ProfileSettings.tsx
β βββ services/ # Business logic & Firebase
β β βββ authService.ts # Authentication
β β βββ cdService.ts # CD CRUD operations
β β βββ fileService.ts # File upload/download
β β βββ shareService.ts # Share token management
β β βββ emailService.ts # Email sending
β β βββ publicCDService.ts # Public marketplace
β β βββ userService.ts # User profiles
β β βββ analyticsService.ts # View tracking
β β βββ validationService.ts # Input validation
β β βββ aiService.ts # Gemini AI integration
β β βββ cdMetadataService.ts # AI metadata orchestration
β β βββ searchService.ts # Enhanced search
β βββ hooks/ # Custom React hooks
β β βββ useAuth.ts
β β βββ useToast.ts
β β βββ useMediaQuery.ts
β β βββ useReducedMotion.ts
β β βββ useMetadataGeneration.ts # AI metadata hook
β βββ contexts/ # React Context providers
β β βββ AuthContext.tsx
β βββ pages/ # Route components
β β βββ LandingPage.tsx # Public landing page
β β βββ AuthPage.tsx # Login/signup
β β βββ CollectionPage.tsx # User's CDs
β β βββ CDDetailPage.tsx # CD details
β β βββ SharedCDPage.tsx # Guest CD view
β β βββ MarketplacePage.tsx # Public CDs
β β βββ PublicCDViewPage.tsx # Public CD details
β β βββ CreatorProfilePage.tsx # Creator profile
β β βββ SettingsPage.tsx # User settings
β β βββ AboutPage.tsx # About us
β β βββ HelpPage.tsx # Help & FAQ
β β βββ PrivacyPage.tsx # Privacy policy
β β βββ TermsPage.tsx # Terms of service
β β βββ NotFoundPage.tsx # 404 page
β βββ types/ # TypeScript definitions
β β βββ index.ts # All type definitions
β βββ utils/ # Utility functions
β β βββ constants.ts # App constants
β β βββ errorHandling.ts # Error utilities
β β βββ tokenGenerator.ts # Token generation
β β βββ zipGenerator.ts # ZIP file creation
β β βββ linkHelpers.ts # URL helpers
β βββ styles/ # Global styles
β β βββ index.css
β βββ config/ # Configuration
β β βββ firebase.ts # Firebase config
β βββ App.tsx # Root component
β βββ main.tsx # Entry point
βββ docs/ # Documentation
β βββ AI_METADATA_FEATURE.md
β βββ GEMINI_SETUP_GUIDE.md
β βββ AI_METADATA_MIGRATION.md
β βββ AI_METADATA_FLOW_DIAGRAM.md
β βββ AI_METADATA_UI_GUIDE.md
β βββ CORS_FIX_NOTE.md
β βββ implementation-notes/
β βββ AUTH_ACCESSIBILITY_IMPROVEMENTS.md
βββ tests/ # Test files
β βββ unit/ # Unit tests
β βββ property/ # Property-based tests
β βββ integration/ # Integration tests
βββ public/ # Static assets
β βββ vite.svg
βββ .env.example # Environment template
βββ .gitignore # Git ignore rules
βββ firebase.json # Firebase config
βββ firestore.rules # Firestore security
βββ firestore.indexes.json # Firestore indexes
βββ storage.rules # Storage security
βββ vite.config.ts # Vite configuration
βββ tsconfig.json # TypeScript config
βββ tsconfig.app.json # App TypeScript config
βββ tsconfig.node.json # Node TypeScript config
βββ jest.config.js # Jest configuration
βββ eslint.config.js # ESLint configuration
βββ package.json # Dependencies
βββ package-lock.json # Lock file
βββ vercel.json # Vercel deployment
βββ README.md # This file
# Run all tests
npm test
# Run with coverage
npm run test:coverage
# Run security rules tests
npm run test:security- Push code to GitHub
- Import project on vercel.com
- Add environment variables (same as
.env.local) - Deploy
firebase deploy --only firestore:rules,storage:rulesContributions welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
MIT License - see LICENSE file
- Built with Kiro AI
- Powered by Firebase & Google Gemini
- Inspired by the golden age of CD burning
Made with πΏ and nostalgia