- Schedule up to 5 years - Set any future date for delivery
- localStorage - Never lose what you've written
- Automated delivery - GitHub Actions sends emails daily
- Fully responsive - Beautiful on desktop, tablet, and mobile
User writes letter
↓
Saved to Firestore
↓
GitHub Actions runs daily (9 AM UTC)
↓
Python script checks for scheduled emails
↓
Sends via Gmail SMTP
↓
Marks as sent in database
- Firebase account
- Gmail account with App Password enabled
- GitHub account
git clone https://github.com/shezanusdf/FutureMe.git
cd FutureMe- Create a Firebase project
- Enable Firestore Database (production mode)
- Get your web config:
- Project Settings → Your apps → Web
- Copy the
firebaseConfigobject
- Generate service account key:
- Project Settings → Service Accounts → Generate new private key
- Save the JSON file
Edit script.js and replace the Firebase config:
const firebaseConfig = {
apiKey: "YOUR_API_KEY",
authDomain: "YOUR_PROJECT_ID.firebaseapp.com",
projectId: "YOUR_PROJECT_ID",
storageBucket: "YOUR_PROJECT_ID.appspot.com",
messagingSenderId: "YOUR_MESSAGING_SENDER_ID",
appId: "YOUR_APP_ID"
};- Enable 2-Factor Authentication on your Gmail
- Generate an App Password:
- Google Account → Security → App Passwords
- Create password named "TimeCapsule Email Sender"
- Save the 16-character password
Add these secrets in your repo (Settings → Secrets and variables → Actions):
| Secret Name | Value |
|---|---|
FIREBASE_CREDENTIALS |
Entire contents of Firebase service account JSON |
SENDER_EMAIL |
Your Gmail address |
SENDER_PASSWORD |
Gmail App Password (not your regular password) |
In Firebase Console, add these rules:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /scheduled_emails/{document} {
// Allow anyone to create documents
allow create: if request.resource.data.keys().hasAll(['name', 'email', 'send_date', 'letter', 'created_at', 'sent'])
&& request.resource.data.sent == false;
// Prevent reads, updates, and deletes from frontend
allow read, update, delete: if false;
}
}
}GitHub Pages:
git add .
git commit -m "Initial commit"
git push origin main
# Enable GitHub Pages in repo Settings → PagesOr use Netlify/Vercel:
- Connect your GitHub repo
- Deploy with default settings
TimeCapsule/
├── index.html # Main HTML file
├── style.css # Responsive CSS with rem units
├── script.js # Frontend logic with Firebase
├── send_emails.py # Python email automation script
├── requirements.txt # Python dependencies
├── .gitignore # Git ignore rules
├── firestore.rules # Firestore security rules
├── README.md # This file
└── .github/
└── workflows/
└── send_emails.yml # GitHub Actions workflow
- Add email preview before sending
- Support for multiple recipients
- FAQ Page
- Confirmation email when scheduled
- Rate limiting and captcha to prevent spam
- Inspired by emailyourfutureself.com
- UI inspired by classic Windows 95 aesthetic
- Built with love for people who want to reflect on their journey
⭐ Star this repo if you found it helpful!
Made with <3 and Coffee.