A beautiful couples' journal app to share your weekly moments
| Feature | Description |
|---|---|
| π Multiple Entry Types | Diary, photos, quotes, questions, sad/happy moments, notes |
| π Partner View | See your partner's entries on specific days (configurable) |
| π Weekly Archives | Automatically archive weeks as beautiful HTML pages |
| π Dark Mode | Eye-friendly dark theme |
| π± Cross-Platform | Web, iOS, and Android support |
| βοΈ Cloud Sync | Real-time sync across all devices with Supabase |
| π Simple Auth | Access key-based authentication for couples |
| πΌοΈ Image Support | Upload and compress images automatically |
| π CI/CD | Automated builds with GitHub Actions |
- Node.js 18+
- npm or yarn
- Supabase account (free tier works)
git clone https://github.com/yourusername/weekly-journal.git
cd weekly-journal
npm install-
Create a new project at supabase.com
-
Go to SQL Editor and run the migrations:
-- Run contents of: supabase/migrations/20251225_create_journal_entries.sql
-- Run contents of: supabase/migrations/20251226_add_storage_and_archives.sql-
Create Storage Buckets:
journal-images(public)journal-archives(public)
-
Copy your Project URL and Anon Key from Settings β API
cp .env.example .envEdit .env:
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-keyEdit src/components/LoginScreen.tsx:
const ACCESS_KEYS: Record<AuthorType, string> = {
user1: 'your-secret-key-1', // First user
user2: 'your-secret-key-2', // Second user
};npm run devnpm run build
npx cap sync android
npx cap open androidnpm run build
npx cap sync ios
npx cap open iosThis project includes GitHub Actions workflows for automated mobile builds!
-
Fork/Clone this repository
-
Add GitHub Secrets (Settings β Secrets β Actions):
For Android:
Secret Description ANDROID_KEYSTORE_BASE64Base64 encoded keystore file ANDROID_KEYSTORE_PASSWORDKeystore password ANDROID_KEY_ALIASKey alias name ANDROID_KEY_PASSWORDKey password For iOS:
Secret Description IOS_CERTIFICATE_BASE64Base64 encoded .p12 certificate IOS_CERTIFICATE_PASSWORDCertificate password IOS_PROVISION_PROFILE_BASE64Base64 encoded provisioning profile -
Generate Android Keystore:
# Create keystore keytool -genkey -v -keystore release.keystore -alias myapp -keyalg RSA -keysize 2048 -validity 10000 # Convert to base64 base64 release.keystore > keystore.txt # Copy contents of keystore.txt to ANDROID_KEYSTORE_BASE64 secret
-
Trigger Build:
- Push to
mainbranch, or - Go to Actions β Select workflow β Run workflow
- Push to
-
Download Artifacts:
- Go to Actions β Select completed run
- Download APK/IPA from Artifacts section
.github/workflows/
βββ build-android.yml # Android APK build
βββ build-ios.yml # iOS IPA build
By default, partners can view each other's entries on Tuesday and Friday.
Edit src/App.tsx:
const isViewDay = isTuesday(today) || isFriday(today);
// Change to any days you want, e.g.:
// const isViewDay = isSaturday(today) || isSunday(today);const TIMEZONE = "Africa/Algiers"; // Change to your timezoneconst weekStart = startOfWeek(today, { weekStartsOn: 6 }); // 0=Sun, 6=Satβββ .github/workflows/ # GitHub Actions CI/CD
β βββ build-android.yml
β βββ build-ios.yml
βββ src/
β βββ components/
β β βββ LoginScreen.tsx # Access key authentication
β β βββ EntryForm.tsx # Create/edit entries
β β βββ EntryList.tsx # Display entries
β β βββ PartnerView.tsx # View partner's entries
β β βββ ArchiveListNew.tsx # Browse archives
β β βββ PDFPreview.tsx # Preview weekly journal
β βββ supabaseClient.ts # Supabase connection
β βββ supabaseDb.ts # Database operations
β βββ types.ts # TypeScript types
β βββ App.tsx # Main app component
βββ supabase/migrations/ # Database schema
βββ android/ # Android native project
βββ ios/ # iOS native project
- Frontend: React 18, TypeScript, Vite
- Styling: CSS with CSS Variables
- Backend: Supabase (PostgreSQL + Storage)
- Mobile: Capacitor
- Icons: Lucide React
- Date Handling: date-fns
- CI/CD: GitHub Actions
Contributions are welcome! Feel free to:
- 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
If you find this project useful, consider supporting its development:
| Method | Address |
|---|---|
| Binance ID | 587991886 |
| USDT (BEP20/BSC) | 0xd243484573e3bf6b2b0f21947a4b17b29d86e539 |
MIT License - feel free to use this for your own couple's journal!
Made with π for couples who want to share their moments