diff --git a/PLAY_STORE_CHECKLIST.md b/PLAY_STORE_CHECKLIST.md new file mode 100644 index 0000000..94fc532 --- /dev/null +++ b/PLAY_STORE_CHECKLIST.md @@ -0,0 +1,286 @@ +# Google Play Store Pre-Upload Checklist + +Use this checklist before uploading to Google Play Store to ensure everything is ready. + +--- + +## πŸ“‹ Phase 1: Assets & Content + +### Icons +- [x] βœ… PNG icons generated (72, 96, 128, 144, 152, 192, 384, 512) +- [x] βœ… Maskable icon created (512x512 with safe zone) +- [x] βœ… Adaptive icon layers (foreground + background) +- [x] βœ… Icons added to manifest + +**Location:** `pwa/public/icons/` + +### Screenshots +- [ ] ⏳ Captured minimum 2 screenshots (recommended 4-8) +- [ ] ⏳ Screenshots are 1080x2340 (portrait) +- [ ] ⏳ Screenshots show actual app content +- [ ] ⏳ Screenshots saved as PNG +- [ ] ⏳ Screenshots named `screenshot-1.png`, `screenshot-2.png`, etc. + +**Location:** `pwa/public/screenshots/` +**Guide:** See `pwa/public/screenshots/README.md` + +### Feature Graphic +- [x] βœ… Created 1024x500 banner +- [x] βœ… No transparency (solid background) +- [x] βœ… Saved as PNG + +**Location:** `pwa/public/assets/feature-graphic.png` + +### Privacy Policy +- [x] βœ… Privacy policy written +- [x] βœ… Route added to PWA (`/privacy-policy`) +- [x] βœ… Accessible at `https://app.placebo.mk/privacy-policy` +- [x] βœ… Covers data collection (PostHog, cache, etc.) +- [x] βœ… GDPR compliant + +**URL:** https://app.placebo.mk/privacy-policy + +--- + +## πŸ”§ Phase 2: Technical Setup + +### PWA Configuration +- [x] βœ… Manifest updated with PNG icons +- [x] βœ… Categories added (`news`, `entertainment`) +- [x] βœ… Orientation set to `portrait-primary` +- [x] βœ… Theme colors configured +- [x] βœ… Service worker working +- [x] βœ… Offline functionality tested + +**File:** `pwa/vite.config.ts` + +### Digital Asset Links +- [x] βœ… `assetlinks.json` template created +- [ ] ⏳ SHA256 fingerprint updated (after PWABuilder) +- [x] βœ… Nginx configured to serve `.well-known/` +- [ ] ⏳ File accessible at `https://app.placebo.mk/.well-known/assetlinks.json` +- [ ] ⏳ Validated with Google's tool + +**File:** `pwa/public/.well-known/assetlinks.json` +**Validator:** https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://app.placebo.mk + +### Build & Deployment +- [x] βœ… TypeScript check passes +- [x] βœ… ESLint passes +- [x] βœ… Production build successful +- [ ] ⏳ Updated PWA deployed to `https://app.placebo.mk` +- [ ] ⏳ PWA accessible and working + +**Commands:** +```bash +cd pwa +npm run type-check +npm run lint +npm run build +# Deploy to Coolify +``` + +--- + +## πŸ“± Phase 3: Android App Generation + +### PWABuilder Setup +- [ ] ⏳ PWA URL entered: `https://app.placebo.mk` +- [ ] ⏳ PWA score checked (should be high) +- [ ] ⏳ Package configured: + - App name: `Placebo.mk` + - Package ID: `mk.placebo.app` + - Launch URL: `https://app.placebo.mk/` + - Theme color: `#000000` + - Background: `#ffffff` + - Orientation: `portrait` + +### Signing Key +- [ ] ⏳ Signing method chosen (Cloud or Own) +- [ ] ⏳ Signing key generated +- [ ] ⏳ SHA256 fingerprint copied +- [ ] ⏳ Signing details saved securely + +⚠️ **IMPORTANT:** Keep signing key details secure! You'll need them for updates. + +### App Package +- [ ] ⏳ AAB file downloaded +- [ ] ⏳ Test APK downloaded (optional) +- [ ] ⏳ SHA256 fingerprint added to `assetlinks.json` +- [ ] ⏳ Updated PWA redeployed + +--- + +## πŸ§ͺ Phase 4: Testing (Optional but Recommended) + +### Local Testing +- [ ] ⏳ APK installed on device +- [ ] ⏳ App opens without browser UI (TWA verified) +- [ ] ⏳ Navigation works correctly +- [ ] ⏳ Offline mode works +- [ ] ⏳ Analytics (PostHog) fires +- [ ] ⏳ No crashes or errors + +### PWA Testing +- [ ] ⏳ Manifest validates: https://manifest-validator.appspot.com/ +- [ ] ⏳ Service worker registers +- [ ] ⏳ Icons display correctly +- [ ] ⏳ Privacy policy loads +- [ ] ⏳ All routes work + +--- + +## πŸͺ Phase 5: Google Play Console Setup + +### Account & App +- [x] βœ… Google Play Developer account active +- [ ] ⏳ App created in Play Console +- [ ] ⏳ App name set: `Placebo.mk` +- [ ] ⏳ Default language: Macedonian (mk-MK) +- [ ] ⏳ Free app selected + +### Store Listing +- [ ] ⏳ Short description written (max 80 chars) +- [ ] ⏳ Full description written (max 4000 chars) +- [ ] ⏳ Screenshots uploaded (2-8 images) +- [ ] ⏳ Feature graphic uploaded +- [ ] ⏳ App icon uploaded (512x512) +- [ ] ⏳ Category selected: News & Magazines +- [ ] ⏳ Contact email: `privacy@placebo.mk` +- [ ] ⏳ Website: `https://placebo.mk` +- [ ] ⏳ Privacy policy URL: `https://app.placebo.mk/privacy-policy` + +### Content Rating +- [ ] ⏳ Content rating questionnaire completed +- [ ] ⏳ Category: News & Reference +- [ ] ⏳ Questions answered honestly +- [ ] ⏳ Ratings applied + +### Target Audience +- [ ] ⏳ Target age selected (13+ or 18+) +- [ ] ⏳ Ads declaration completed +- [ ] ⏳ Target audience declaration submitted + +### Countries & Pricing +- [ ] ⏳ Countries selected (North Macedonia + others) +- [ ] ⏳ Pricing set to Free +- [ ] ⏳ Distribution settings confirmed + +### App Release +- [ ] ⏳ AAB file uploaded +- [ ] ⏳ Upload processed successfully +- [ ] ⏳ Supported devices shown +- [ ] ⏳ Release notes added (Macedonian + English) +- [ ] ⏳ Release reviewed + +--- + +## βœ… Final Checks Before Submission + +### Critical Items +- [ ] ⏳ All Play Console sections marked complete (green checkmarks) +- [ ] ⏳ No errors or warnings in Play Console +- [ ] ⏳ Privacy policy accessible +- [ ] ⏳ Digital Asset Links verified +- [ ] ⏳ PWA live at `https://app.placebo.mk` +- [ ] ⏳ Screenshots captured and uploaded +- [ ] ⏳ Feature graphic uploaded +- [ ] ⏳ Content rating assigned +- [ ] ⏳ AAB uploaded successfully + +### Nice to Have +- [ ] ⏳ Test APK installed and working +- [ ] ⏳ App preview video (optional) +- [ ] ⏳ Promo graphics (optional) +- [ ] ⏳ Social media announcement prepared +- [ ] ⏳ Website updated with app link + +--- + +## πŸš€ Submission + +When all items above are complete: + +1. [ ] ⏳ Click "Review release" in Play Console +2. [ ] ⏳ Fix any issues highlighted +3. [ ] ⏳ Click "Start rollout to Production" +4. [ ] ⏳ Confirm submission +5. [ ] ⏳ Wait for Google's review (1-7 days) + +--- + +## πŸ“Š Post-Submission + +After submitting: + +- [ ] ⏳ Monitor Play Console for review status +- [ ] ⏳ Check email for Google notifications +- [ ] ⏳ Prepare announcement content +- [ ] ⏳ Set up monitoring for crashes/errors + +When approved: + +- [ ] ⏳ Announce on social media +- [ ] ⏳ Update website with Play Store badge +- [ ] ⏳ Email users about app availability +- [ ] ⏳ Monitor reviews and respond +- [ ] ⏳ Track analytics and downloads + +--- + +## πŸ†˜ If Something Goes Wrong + +### Common Issues: + +**Upload fails:** +- Check AAB file size (max 150MB) +- Verify signing key +- Try uploading again + +**TWA doesn't work:** +- Verify SHA256 fingerprint +- Check assetlinks.json URL +- Wait 5-10 minutes for cache + +**App rejected:** +- Read rejection reason carefully +- Fix issues +- Resubmit + +**Privacy policy error:** +- Ensure URL is accessible +- Check HTTPS is working +- Verify content is complete + +--- + +## πŸ“ Important File Locations + +| Item | Location | +|------|----------| +| Icons | `pwa/public/icons/icon-*.png` | +| Maskable Icon | `pwa/public/icons/icon-512-maskable.png` | +| Screenshots | `pwa/public/screenshots/` | +| Feature Graphic | `pwa/public/assets/feature-graphic.png` | +| Privacy Policy | `pwa/src/components/routes/PrivacyPolicyComponent.tsx` | +| Asset Links | `pwa/public/.well-known/assetlinks.json` | +| Nginx Config | `pwa/nginx.conf` | +| Manifest Config | `pwa/vite.config.ts` | + +--- + +## πŸ“š Resources + +- **Full Guide:** See `PLAY_STORE_GUIDE.md` in project root +- **Screenshots Guide:** See `pwa/public/screenshots/README.md` +- **Asset Links Guide:** See `pwa/public/.well-known/README.md` +- **PWABuilder:** https://www.pwabuilder.com/ +- **Play Console:** https://play.google.com/console + +--- + +**Current Status:** Ready for screenshot capture and PWABuilder packaging + +**Next Action:** Capture screenshots from deployed PWA + +Good luck! πŸŽ‰ diff --git a/PLAY_STORE_GUIDE.md b/PLAY_STORE_GUIDE.md new file mode 100644 index 0000000..7914d5a --- /dev/null +++ b/PLAY_STORE_GUIDE.md @@ -0,0 +1,490 @@ +# Google Play Store Publishing Guide + +Complete step-by-step guide for publishing Placebo.mk PWA to Google Play Store using PWABuilder. + +--- + +## Prerequisites Checklist + +Before starting, ensure you have: + +- [x] βœ… PWA deployed and accessible at `https://app.placebo.mk` +- [x] βœ… Privacy Policy accessible at `https://app.placebo.mk/privacy-policy` +- [x] βœ… PNG icons generated (72px - 512px) +- [x] βœ… Maskable icon (512x512) +- [x] βœ… Feature graphic (1024x500) at `pwa/public/assets/feature-graphic.png` +- [ ] ⏳ Screenshots captured (see `pwa/public/screenshots/README.md`) +- [x] βœ… Google Play Developer account ($25 one-time fee) + +--- + +## Part 1: Capture Screenshots + +**Time estimate:** 15-30 minutes + +### Instructions: + +1. Open Chrome browser +2. Navigate to `https://app.placebo.mk` +3. Press `F12` β†’ Click device toolbar (or `Ctrl+Shift+M`) +4. Select device: **Pixel 5** (1080 x 2340) +5. Capture these screens: + - Homepage (hero article + latest articles) + - Article detail page + - Archive page + - Live blogs page + - Category page (Sport/Art/Science) + - Any other unique feature + +6. Click three dots in device toolbar β†’ "Capture screenshot" +7. Save as `screenshot-1.png`, `screenshot-2.png`, etc. +8. Place in `pwa/public/screenshots/` + +**Requirements:** +- Minimum 2 screenshots +- Recommended 4-8 screenshots +- Format: PNG +- Portrait orientation (1080x2340) + +--- + +## Part 2: Generate Android App with PWABuilder + +**Time estimate:** 20-30 minutes + +### Step 1: Access PWABuilder + +1. Go to https://www.pwabuilder.com/ +2. Enter your PWA URL: `https://app.placebo.mk` +3. Click "Start" + +### Step 2: Review PWA Score + +PWABuilder will analyze your PWA and show a score. You should see: +- βœ… Manifest detected +- βœ… Service Worker registered +- βœ… HTTPS enabled +- βœ… Icons present + +If any checks fail, fix them before proceeding. + +### Step 3: Package for Android + +1. Click "Package For Stores" +2. Select **Android** platform +3. Click "Generate Package" + +### Step 4: Configure Android Settings + +Fill in the following: + +| Field | Value | +|-------|-------| +| **App Name** | `Placebo.mk` | +| **Package ID** | `mk.placebo.app` | +| **Launch URL** | `https://app.placebo.mk/` | +| **Display Mode** | `standalone` | +| **Theme Color** | `#000000` | +| **Background Color** | `#ffffff` | +| **Orientation** | `portrait` | +| **Icon URL** | `https://app.placebo.mk/icons/icon-512.png` | +| **Maskable Icon URL** | `https://app.placebo.mk/icons/icon-512-maskable.png` | +| **Shortcuts** | Leave empty (optional) | +| **Splash Screen** | Auto-generated from icon | + +### Step 5: Signing Options + +Choose **one** of these options: + +#### Option A: Use PWABuilder Cloud Signing (Recommended) + +βœ… **Pros:** Easy, no setup, signing key managed for you +❌ **Cons:** Key stored by PWABuilder (trusted service) + +1. Select "Use new signing key" +2. PWABuilder will generate and store your key +3. Download the signing details (keep secure!) + +#### Option B: Use Your Own Signing Key + +βœ… **Pros:** Full control over signing key +❌ **Cons:** More complex, must manage keystore securely + +1. Generate keystore locally: +```bash +keytool -genkey -v -keystore placebo-release.keystore \ + -alias placebo-key -keyalg RSA -keysize 2048 -validity 10000 +``` + +2. Upload keystore to PWABuilder +3. Enter keystore password and alias + +### Step 6: Generate Package + +1. Click "Generate Package" +2. Wait 2-5 minutes for build to complete +3. Download the generated package (AAB or APK) + +### Step 7: Extract SHA256 Fingerprint + +PWABuilder will show your SHA256 fingerprint. It looks like: +``` +14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E3:6D:3A:AE:4E:9F:5F:E8:E3:91:A0:7E +``` + +**IMPORTANT:** Copy this fingerprint - you'll need it for Digital Asset Links. + +--- + +## Part 3: Update Digital Asset Links + +**Time estimate:** 5-10 minutes + +### Step 1: Update assetlinks.json + +1. Open `pwa/public/.well-known/assetlinks.json` +2. Replace `PLACEHOLDER_SHA256_FINGERPRINT_FROM_PWABUILDER` with your actual fingerprint +3. Save the file + +Example: +```json +{ + "relation": ["delegate_permission/common.handle_all_urls"], + "target": { + "namespace": "android_app", + "package_name": "mk.placebo.app", + "sha256_cert_fingerprints": [ + "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E3:6D:3A:AE:4E:9F:5F:E8:E3:91:A0:7E" + ] + } +} +``` + +### Step 2: Deploy Updated PWA + +Rebuild and deploy your PWA with the updated assetlinks.json: + +```bash +cd pwa +npm run build +# Deploy to Coolify or your hosting platform +``` + +### Step 3: Verify Deployment + +Check that the file is accessible: +```bash +curl https://app.placebo.mk/.well-known/assetlinks.json +``` + +Validate with Google: +```bash +curl "https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://app.placebo.mk" +``` + +You should see your statement without errors. + +--- + +## Part 4: Test Locally (Optional but Recommended) + +**Time estimate:** 15-20 minutes + +### Step 1: Install APK + +PWABuilder provides a test APK. Install it on your Android device: + +```bash +adb install -r placebo-mk.apk +``` + +Or email the APK to yourself and install manually. + +### Step 2: Test Functionality + +Verify: +- βœ… App opens without browser UI (TWA verification) +- βœ… Icons display correctly +- βœ… Offline mode works +- βœ… Navigation works +- βœ… PostHog analytics fires +- βœ… Deep links work (if applicable) + +### Step 3: Debug Issues + +If TWA doesn't work (shows browser UI): +- Check assetlinks.json is accessible +- Verify SHA256 fingerprint matches +- Ensure package name is correct +- Wait 5-10 minutes for DNS/CDN propagation + +--- + +## Part 5: Upload to Google Play Console + +**Time estimate:** 30-60 minutes + +### Step 1: Create App in Play Console + +1. Go to https://play.google.com/console +2. Click "Create app" +3. Fill in details: + - **App name:** Placebo.mk + - **Default language:** Macedonian (mk-MK) + - **App or game:** App + - **Free or paid:** Free +4. Accept declarations +5. Click "Create app" + +### Step 2: Complete Store Listing + +Navigate to **Store presence β†’ Main store listing** + +Fill in: + +**App Details:** +- **App name:** Placebo.mk +- **Short description:** (max 80 chars) + ``` + Π‘Π°Ρ‚ΠΈΡ€ΠΈΡ‡Π½ΠΈ вСсти ΠΎΠ΄ МакСдонија - Π½Π΅ΠΏΡ€ΠΈΡΡ‚ΠΎΡ˜Π½ΠΎ искрСно ΠΈ сСкогаш Π±Π΅Π· Ρ„ΠΈΠ»Ρ‚Π΅Ρ€ + ``` +- **Full description:** (max 4000 chars) + ``` + Placebo.mk Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Π·Π° сатирични вСсти ΠΈ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ Π·Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΈ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ настани Π²ΠΎ МакСдонија. + + 🎯 Π¨Ρ‚ΠΎ Π½ΡƒΠ΄ΠΈΠΌΠ΅: + β€’ Π‘Π²Π΅ΠΆΠΈ сатирични вСсти Π·Π° Ρ‚Π΅ΠΊΠΎΠ²Π½ΠΈ настани + β€’ НСпристоСн ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π΅Π½ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ Π±Π΅Π· Ρ„ΠΈΠ»Ρ‚Π΅Ρ€ + β€’ Live Π±Π»ΠΎΠ³ΠΎΠ²ΠΈ Π·Π° Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‡ΠΊΠΈ вСсти Π²ΠΎ Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅ + β€’ Offline пристап Π΄ΠΎ ситС статии + β€’ ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ: ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°, Π‘ΠΏΠΎΡ€Ρ‚, УмСтност, Наука ΠΈ повСќС + + ⚑ ΠšΠ°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΡΡ‚ΠΈΠΊΠΈ: + β€’ Π‘Ρ€Π·ΠΎ ΠΈ лСсно Ρ‡ΠΈΡ‚Π°ΡšΠ΅ Π½Π° статии + β€’ Π Π°Π±ΠΎΡ‚ΠΈ offline - Ρ‡ΠΈΡ‚Π°Ρ˜Ρ‚Π΅ ΠΈ Π±Π΅Π· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ + β€’ Push ΠΈΠ·Π²Π΅ΡΡ‚ΡƒΠ²Π°ΡšΠ° Π·Π° Π½ΠΎΠ²ΠΈ статии + β€’ Π”Π΅Π»Π΅Ρ‚Π΅ статии Π½Π° ΡΠΎΡ†ΠΈΡ˜Π°Π»Π½ΠΈ ΠΌΠ΅Π΄ΠΈΡƒΠΌΠΈ + β€’ Π’Π΅ΠΌΠ½Π° ΠΈ свСтла Ρ‚Π΅ΠΌΠ° + + Π—Π°Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ понСкогаш вистината Π±ΠΎΠ»ΠΈ повСќС ΠΎΠ΄ Ρ„ΠΈΠΊΡ†ΠΈΡ˜Π°Ρ‚Π°. + + Π‘Π»Π΅Π΄Π΅Ρ‚Π΅ Π½Π΅ Π½Π° web: https://placebo.mk + ``` + +**Graphics:** +- Upload screenshots (2-8 images from `pwa/public/screenshots/`) +- Upload feature graphic (`pwa/public/assets/feature-graphic.png`) +- Upload app icon (512x512 from `pwa/public/icons/icon-512.png`) + +**Categorization:** +- **App category:** News & Magazines +- **Tags:** news, satire, macedonia, politics (optional) + +**Contact Details:** +- **Email:** privacy@placebo.mk (or your support email) +- **Website:** https://placebo.mk +- **Phone:** (optional) + +**Privacy Policy:** +- **Privacy policy URL:** `https://app.placebo.mk/privacy-policy` + +### Step 3: Set Up Content Rating + +Navigate to **Policy β†’ App content β†’ Content rating** + +1. Click "Start questionnaire" +2. Enter email address +3. Select category: **News & Reference** +4. Answer questions honestly: + - Does app contain violence? β†’ (Select based on your content) + - Sexual content? β†’ (Select based on your content) + - Language? β†’ (Select based on your content) + - Drugs/alcohol references? β†’ (Select based on your content) +5. Submit questionnaire +6. Apply ratings + +### Step 4: Configure Target Audience + +Navigate to **Policy β†’ App content β†’ Target audience and content** + +1. **Target age:** 13+ (or 18+ if mature satire) +2. **App includes ads:** No (unless you add ads later) +3. Complete declaration + +### Step 5: Select Countries + +Navigate to **Release β†’ Production β†’ Countries/Regions** + +1. Add countries: + - βœ… North Macedonia (primary) + - βœ… Other countries (optional - consider Albania, Serbia, Bulgaria, Greece for diaspora) +2. Click "Add countries/regions" + +### Step 6: Upload AAB File + +Navigate to **Release β†’ Production β†’ Create new release** + +1. Click "Upload" and select the AAB file from PWABuilder +2. Wait for processing (may take 5-15 minutes) +3. Google Play will show: + - βœ… APK size + - βœ… Supported devices + - βœ… Permissions required +4. Review and confirm + +### Step 7: Add Release Notes + +Add release notes for the first version: + +**Macedonian:** +``` +ΠŸΡ€Π²Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° Placebo.mk Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°! + +β€’ Π§ΠΈΡ‚Π°Ρ˜Ρ‚Π΅ сатирични вСсти ΠΎΠ΄ МакСдонија +β€’ Offline пристап Π΄ΠΎ содрТини +β€’ Live Π±Π»ΠΎΠ³ΠΎΠ²ΠΈ Π·Π° Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‡ΠΊΠΈ настани +β€’ Π‘Ρ€Π· ΠΈ СдноставСн ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ +``` + +**English (optional):** +``` +First version of Placebo.mk app! + +β€’ Read satirical news from Macedonia +β€’ Offline access to content +β€’ Live blogs for breaking news +β€’ Fast and simple interface +``` + +### Step 8: Review and Publish + +1. Click "Review release" +2. Google will check for issues: + - βœ… All required fields complete + - βœ… Content rating assigned + - βœ… Target audience set + - βœ… Privacy policy accessible +3. Fix any warnings +4. Click "Start rollout to Production" + +--- + +## Part 6: Wait for Review + +**Time estimate:** 1-7 days + +### What Happens Next: + +1. **Submitted:** Your app enters Google's review queue +2. **Under Review:** Google reviews your app (usually 1-3 days) +3. **Approved:** App goes live on Play Store πŸŽ‰ +4. **Rejected:** Fix issues and resubmit + +### Common Rejection Reasons: + +- ❌ Privacy policy not accessible +- ❌ Content rating doesn't match app content +- ❌ Misleading app description +- ❌ Copyright/trademark issues +- ❌ Broken functionality + +### Tracking Status: + +- Check Play Console dashboard +- You'll receive email notifications for status changes +- View detailed feedback in "Policy status" + +--- + +## Part 7: Post-Publication + +### After Your App is Live: + +1. **Share the News!** + - Announce on your website + - Share on social media + - Email your users + +2. **Monitor Performance:** + - Track downloads in Play Console + - Monitor crash reports + - Review user feedback/ratings + +3. **Set Up Store Listing Experiments (Optional):** + - Test different screenshots + - A/B test descriptions + - Optimize icon designs + +4. **Plan Updates:** + - Regular feature updates + - Bug fixes + - New content + +5. **Respond to Reviews:** + - Reply to user reviews (especially negative ones) + - Show you care about user feedback + +--- + +## Troubleshooting + +### PWA Score is Low +- Verify manifest.json is valid +- Check service worker is registered +- Ensure HTTPS is enabled +- Add required icons + +### TWA Verification Fails +- Double-check SHA256 fingerprint +- Verify assetlinks.json is at correct URL +- Ensure package name matches exactly +- Wait for CDN cache to clear (5-10 mins) + +### Upload Failed +- Check AAB file size (max 150MB) +- Verify signing key is valid +- Ensure version code is unique +- Try uploading again (sometimes glitches occur) + +### App Rejected +- Read rejection reason carefully +- Fix issues listed +- Update AAB and resubmit +- Contact Google Play support if unclear + +--- + +## Important Files Reference + +| File | Location | Purpose | +|------|----------|---------| +| Icons (PNG) | `pwa/public/icons/icon-*.png` | App icons | +| Maskable Icon | `pwa/public/icons/icon-512-maskable.png` | Adaptive icon | +| Screenshots | `pwa/public/screenshots/` | Play Store listing | +| Feature Graphic | `pwa/public/assets/feature-graphic.png` | Store banner | +| Privacy Policy | `https://app.placebo.mk/privacy-policy` | Required legal doc | +| Asset Links | `pwa/public/.well-known/assetlinks.json` | TWA verification | +| Manifest | `https://app.placebo.mk/manifest.webmanifest` | PWA config | + +--- + +## Support & Resources + +- **PWABuilder Docs:** https://docs.pwabuilder.com/ +- **Google Play Help:** https://support.google.com/googleplay/android-developer/ +- **TWA Guide:** https://developers.google.com/web/android/trusted-web-activity +- **Digital Asset Links:** https://developers.google.com/digital-asset-links/ + +--- + +## Next Steps After This Guide + +1. βœ… Complete all phases +2. βœ… Deploy updated PWA with assetlinks.json +3. βœ… Capture screenshots +4. βœ… Generate Android app with PWABuilder +5. βœ… Upload to Google Play Console +6. ⏳ Wait for approval +7. πŸŽ‰ Celebrate when live! + +Good luck! πŸš€ diff --git a/pwa/nginx.conf b/pwa/nginx.conf index 21cfe59..0da4f0c 100644 --- a/pwa/nginx.conf +++ b/pwa/nginx.conf @@ -48,6 +48,15 @@ http { # Security headers for frontend add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://eu-assets.i.posthog.com; style-src 'self' 'unsafe-inline'; style-src-elem 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: https:; font-src 'self' data: https://fonts.gstatic.com; connect-src 'self' https://api.placebo.mk https://cms.placebo.mk https://app.placebo.mk wss://api.placebo.mk https://eu.i.posthog.com https://eu-assets.i.posthog.com; manifest-src 'self';" always; + # Digital Asset Links for Android TWA + location /.well-known/ { + default_type application/json; + add_header Content-Type application/json; + add_header Access-Control-Allow-Origin *; + expires -1; + add_header Cache-Control "no-cache, no-store, must-revalidate"; + } + # Handle React Router location / { try_files $uri $uri/ /index.html; diff --git a/pwa/public/.well-known/README.md b/pwa/public/.well-known/README.md new file mode 100644 index 0000000..8784d36 --- /dev/null +++ b/pwa/public/.well-known/README.md @@ -0,0 +1,104 @@ +# Digital Asset Links Configuration + +This file enables Trusted Web Activity (TWA) verification for the Placebo.mk Android app. + +## What is this? + +Digital Asset Links allows your Android app to open without browser UI by proving you own both the website (`https://app.placebo.mk`) and the Android app (`mk.placebo.app`). + +## Current Status + +⚠️ **PLACEHOLDER** - The SHA256 fingerprint needs to be updated after PWABuilder generates your signing key. + +## How to Update + +### Step 1: Generate Android App with PWABuilder + +1. Go to https://www.pwabuilder.com/ +2. Enter your PWA URL: `https://app.placebo.mk` +3. Click "Package For Stores" β†’ "Android" +4. Download the package + +### Step 2: Get SHA256 Fingerprint + +PWABuilder will provide the SHA256 fingerprint in the downloaded package. Look for: +- `assetlinks.json` file in the package +- Or in the PWABuilder dashboard under "Android Package Options" + +The fingerprint looks like: +``` +14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E3:6D:3A:AE:4E:9F:5F:E8:E3:91:A0:7E +``` + +### Step 3: Update assetlinks.json + +Replace `PLACEHOLDER_SHA256_FINGERPRINT_FROM_PWABUILDER` in `assetlinks.json` with your actual fingerprint: + +```json +{ + "relation": ["delegate_permission/common.handle_all_urls"], + "target": { + "namespace": "android_app", + "package_name": "mk.placebo.app", + "sha256_cert_fingerprints": [ + "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E3:6D:3A:AE:4E:9F:5F:E8:E3:91:A0:7E" + ] + } +} +``` + +### Step 4: Deploy Updated File + +The file must be accessible at: +``` +https://app.placebo.mk/.well-known/assetlinks.json +``` + +Nginx is already configured to serve this file (see `nginx.conf`). + +### Step 5: Verify + +Use Google's validator tool: +```bash +curl "https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://app.placebo.mk&relation=delegate_permission/common.handle_all_urls" +``` + +Or visit: +https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://app.placebo.mk + +You should see your statement returned with `"debugString": "*** ERRORS parsing assetlinks.json: ..."` until you replace the placeholder. + +## Troubleshooting + +### File not accessible +- Check nginx configuration includes `.well-known` location +- Verify file permissions (should be readable) +- Test with: `curl https://app.placebo.mk/.well-known/assetlinks.json` + +### TWA not opening properly +- Ensure SHA256 fingerprint matches your app's signing certificate +- Verify package name is exactly `mk.placebo.app` +- Check both production and debug fingerprints if testing locally + +### Multiple Fingerprints + +If you have both debug and release keys, add both: +```json +"sha256_cert_fingerprints": [ + "14:6D:E9:... (release key)", + "AA:BB:CC:... (debug key)" +] +``` + +## Important Notes + +- This file must be served with `Content-Type: application/json` +- The file must be accessible via HTTPS (HTTP will fail) +- Changes take effect immediately (no cache) +- Keep your signing key secure - anyone with it can create apps verified for your domain + +## Resources + +- [Digital Asset Links Documentation](https://developers.google.com/digital-asset-links/v1/getting-started) +- [TWA Guide](https://developers.google.com/web/android/trusted-web-activity) +- [PWABuilder Documentation](https://docs.pwabuilder.com/) diff --git a/pwa/public/.well-known/assetlinks.json b/pwa/public/.well-known/assetlinks.json new file mode 100644 index 0000000..931284d --- /dev/null +++ b/pwa/public/.well-known/assetlinks.json @@ -0,0 +1,12 @@ +[ + { + "relation": ["delegate_permission/common.handle_all_urls"], + "target": { + "namespace": "android_app", + "package_name": "mk.placebo.app", + "sha256_cert_fingerprints": [ + "PLACEHOLDER_SHA256_FINGERPRINT_FROM_PWABUILDER" + ] + } + } +] diff --git a/pwa/public/assets/feature-graphic.png b/pwa/public/assets/feature-graphic.png new file mode 100644 index 0000000..b62760e Binary files /dev/null and b/pwa/public/assets/feature-graphic.png differ diff --git a/pwa/public/favicon.png b/pwa/public/favicon.png new file mode 100644 index 0000000..255dfc7 Binary files /dev/null and b/pwa/public/favicon.png differ diff --git a/pwa/public/icons/adaptive-background.png b/pwa/public/icons/adaptive-background.png new file mode 100644 index 0000000..a536b35 Binary files /dev/null and b/pwa/public/icons/adaptive-background.png differ diff --git a/pwa/public/icons/adaptive-foreground.png b/pwa/public/icons/adaptive-foreground.png new file mode 100644 index 0000000..9519680 Binary files /dev/null and b/pwa/public/icons/adaptive-foreground.png differ diff --git a/pwa/public/icons/icon-128.png b/pwa/public/icons/icon-128.png new file mode 100644 index 0000000..e7c9039 Binary files /dev/null and b/pwa/public/icons/icon-128.png differ diff --git a/pwa/public/icons/icon-144.png b/pwa/public/icons/icon-144.png new file mode 100644 index 0000000..281eb07 Binary files /dev/null and b/pwa/public/icons/icon-144.png differ diff --git a/pwa/public/icons/icon-152.png b/pwa/public/icons/icon-152.png new file mode 100644 index 0000000..707937e Binary files /dev/null and b/pwa/public/icons/icon-152.png differ diff --git a/pwa/public/icons/icon-192.png b/pwa/public/icons/icon-192.png new file mode 100644 index 0000000..4f3b4e2 Binary files /dev/null and b/pwa/public/icons/icon-192.png differ diff --git a/pwa/public/icons/icon-384.png b/pwa/public/icons/icon-384.png new file mode 100644 index 0000000..fc78f9a Binary files /dev/null and b/pwa/public/icons/icon-384.png differ diff --git a/pwa/public/icons/icon-512-maskable.png b/pwa/public/icons/icon-512-maskable.png new file mode 100644 index 0000000..1f2e47d Binary files /dev/null and b/pwa/public/icons/icon-512-maskable.png differ diff --git a/pwa/public/icons/icon-512.png b/pwa/public/icons/icon-512.png new file mode 100644 index 0000000..5020cf0 Binary files /dev/null and b/pwa/public/icons/icon-512.png differ diff --git a/pwa/public/icons/icon-72.png b/pwa/public/icons/icon-72.png new file mode 100644 index 0000000..d4ad292 Binary files /dev/null and b/pwa/public/icons/icon-72.png differ diff --git a/pwa/public/icons/icon-96.png b/pwa/public/icons/icon-96.png new file mode 100644 index 0000000..655f6f5 Binary files /dev/null and b/pwa/public/icons/icon-96.png differ diff --git a/pwa/public/screenshots/README.md b/pwa/public/screenshots/README.md new file mode 100644 index 0000000..89eef03 --- /dev/null +++ b/pwa/public/screenshots/README.md @@ -0,0 +1,88 @@ +# Screenshots for Google Play Store + +## Required Screenshots + +You need to capture **2-8 screenshots** from the deployed PWA at https://app.placebo.mk + +### How to Capture Screenshots + +#### Using Chrome DevTools (Recommended) + +1. Open Chrome browser +2. Navigate to https://app.placebo.mk +3. Press `F12` to open DevTools +4. Click the device toolbar icon (or press `Ctrl+Shift+M`) +5. Select device: **Pixel 5** (1080 x 2340) +6. Capture each screen: + - Click the three dots menu in device toolbar + - Select "Capture screenshot" + - Save as PNG in this directory + +#### Recommended Screenshots + +Capture these key screens (in order): + +1. **screenshot-1-home.png** - Homepage with hero article and latest articles +2. **screenshot-2-article.png** - Article detail page showing full article +3. **screenshot-3-archive.png** - Archive page with article grid +4. **screenshot-4-live-blogs.png** - Live blogs listing page +5. **screenshot-5-live-blog-detail.png** - Live blog detail with real-time updates +6. **screenshot-6-categories.png** - Category page (Sport/Art/Science) + +### Google Play Requirements + +- **Format**: PNG or JPEG (PNG recommended) +- **Minimum dimensions**: 320px (shortest edge) +- **Maximum dimensions**: 3840px (longest edge) +- **Aspect ratio**: 16:9 or 9:16 recommended +- **File size**: Under 8MB per screenshot +- **Quantity**: Minimum 2, maximum 8 + +### Current Device Settings + +Using **Pixel 5** emulation: +- Resolution: 1080 x 2340 pixels +- Pixel ratio: 2.75 +- Portrait orientation +- This meets Google Play requirements perfectly + +### After Capturing + +Once you've captured the screenshots: + +1. Name them as: `screenshot-1.png`, `screenshot-2.png`, etc. +2. Place them in this directory (`pwa/public/screenshots/`) +3. Optionally add them to the PWA manifest for better install UX +4. Upload to Google Play Console when creating the app listing + +### Optional: Add to Manifest + +If you want screenshots to appear in the browser install prompt, update `vite.config.ts`: + +```typescript +manifest: { + // ... other config + screenshots: [ + { + src: '/screenshots/screenshot-1.png', + sizes: '1080x2340', + type: 'image/png', + form_factor: 'narrow', + label: 'Homepage with latest articles', + }, + // Add more screenshots here + ], +} +``` + +### Tips for Great Screenshots + +- βœ… Use actual content (not Lorem Ipsum) +- βœ… Show the app in use with real articles +- βœ… Capture different sections to show variety +- βœ… Make sure text is readable +- βœ… Use light mode (default theme) +- βœ… Clear navigation bar and UI elements +- ❌ Don't include device frames (Google Play adds them) +- ❌ Don't add text overlays (save for marketing images) +- ❌ Don't capture error states or empty screens diff --git a/pwa/src/components/routes/PrivacyPolicyComponent.tsx b/pwa/src/components/routes/PrivacyPolicyComponent.tsx new file mode 100644 index 0000000..b5f117d --- /dev/null +++ b/pwa/src/components/routes/PrivacyPolicyComponent.tsx @@ -0,0 +1,185 @@ +export function PrivacyPolicyComponent() { + return ( +
+
+

ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π·Π° приватност

+ +
+

+ ПослСдна ΠΏΡ€ΠΎΠΌΠ΅Π½Π°: {new Date().toLocaleDateString('mk-MK', { year: 'numeric', month: 'long', day: 'numeric' })} +

+ +
+

1. Π’ΠΎΠ²Π΅Π΄

+

+ Π”ΠΎΠ±Ρ€Π΅Π΄ΠΎΡ˜Π΄ΠΎΠ²Ρ‚Π΅ Π½Π° Placebo.mk ("Π½ΠΈΠ΅", "наш", "нас"). Ја ΠΏΠΎΡ‡ΠΈΡ‚ΡƒΠ²Π°ΠΌΠ΅ Π²Π°ΡˆΠ°Ρ‚Π° приватност ΠΈ сС посвСтСни Π½Π° Π·Π°ΡˆΡ‚ΠΈΡ‚Π°Ρ‚Π° Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ Π»ΠΈΡ‡Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ. + Оваа ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π·Π° приватност Π²ΠΈ ΠΎΠ±Ρ˜Π°ΡΠ½ΡƒΠ²Π° ΠΊΠ°ΠΊΠΎ собирамС, користимС, Ρ‡ΡƒΠ²Π°ΠΌΠ΅ ΠΈ Π·Π°ΡˆΡ‚ΠΈΡ‚ΡƒΠ²Π°ΠΌΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΊΠΎΠ³Π° ја користитС Π½Π°ΡˆΠ°Ρ‚Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°. +

+
+ +
+

2. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΊΠΎΠΈ Π³ΠΈ собирамС

+ +

2.1 Автоматски собрани ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

+

+ Кога ја користитС Π½Π°ΡˆΠ°Ρ‚Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°, автоматски собирамС ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° Π²Π°ΡˆΠΈΠΎΡ‚ ΡƒΡ€Π΅Π΄ ΠΈ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅Ρ‚ΠΎ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°: +

+
    +
  • Π’ΠΈΠΏ Π½Π° ΡƒΡ€Π΅Π΄ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π΅Π½ систСм
  • +
  • Π’Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° прСлистувач
  • +
  • IP адрСса
  • +
  • Π’Ρ€Π΅ΠΌΠΈΡšΠ° Π½Π° пристап ΠΈ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°
  • +
  • Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†ΠΈ ΠΈ содрТина која ја ΠΏΡ€Π΅Π³Π»Π΅Π΄ΡƒΠ²Π°Ρ‚Π΅
  • +
  • ΠŸΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΈ пСрформанси
  • +
+ +

2.2 Аналитика (PostHog)

+

+ ΠšΠΎΡ€ΠΈΡΡ‚ΠΈΠΌΠ΅ PostHog Π·Π° ΡΠΎΠ±ΠΈΡ€Π°ΡšΠ΅ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Π° Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ° Π·Π° Π΄Π° Π³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈΠΌΠ΅ корисничкото искуство. + PostHog собира ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ ја користитС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°, Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Ρ˜ΡœΠΈ: +

+
    +
  • Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†ΠΈ ΡˆΡ‚ΠΎ Π³ΠΈ посСтуватС
  • +
  • Π’Ρ€Π΅ΠΌΠ΅Ρ‚Ρ€Π°Π΅ΡšΠ΅ Π½Π° посСта
  • +
  • Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ†ΠΈΠΈ со Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°
  • +
  • Π’Π΅Ρ…Π½ΠΈΡ‡ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° Π²Π°ΡˆΠΈΠΎΡ‚ ΡƒΡ€Π΅Π΄
  • +
+

+ ПовСќС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈΡ‚Π΅ Π·Π° приватност Π½Π° PostHog ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°Ρ˜Π΄Π΅Ρ‚Π΅ Π½Π°{' '} + + https://posthog.com/privacy + +

+ +

2.3 ΠšΠ΅ΡˆΠΈΡ€Π°Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ

+

+ Π—Π° Π΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° offline, Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΊΠ΅ΡˆΠΈΡ€Π° содрТини (статии, слики) Π»ΠΎΠΊΠ°Π»Π½ΠΎ Π½Π° Π²Π°ΡˆΠΈΠΎΡ‚ ΡƒΡ€Π΅Π΄ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Service Workers ΠΈ browser cache. +

+ +

2.4 ΠšΠΎΡ€ΠΈΡΠ½ΠΈΡ‡ΠΊΠΈ Π°ΠΊΠ°ΡƒΠ½Ρ‚ΠΈ (Π΄ΠΎΠΊΠΎΠ»ΠΊΡƒ сС ΠΏΡ€ΠΈΠΌΠ΅Π½ΡƒΠ²Π°)

+

+ Π”ΠΎΠΊΠΎΠ»ΠΊΡƒ создадСтС кориснички Π°ΠΊΠ°ΡƒΠ½Ρ‚ Π·Π° администраторски Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, собирамС: +

+
    +
  • ΠšΠΎΡ€ΠΈΡΠ½ΠΈΡ‡ΠΊΠΎ ΠΈΠΌΠ΅
  • +
  • Email адрСса
  • +
  • Π₯Π΅ΡˆΠΈΡ€Π°Π½Π° Π»ΠΎΠ·ΠΈΠ½ΠΊΠ°
  • +
  • Π£Π»ΠΎΠ³Π° (администратор/корисник)
  • +
+
+ +
+

3. Како Π³ΠΈ користимС Π²Π°ΡˆΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ

+

Π’Π°ΡˆΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π³ΠΈ користимС Π·Π°:

+
    +
  • Π”Π° Π²ΠΈ ја ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΠΌΠ΅ функционалноста Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°
  • +
  • Π”Π° Π³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈΠΌΠ΅ корисничкото искуство
  • +
  • Π”Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ сС користи Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°
  • +
  • Π”Π° Π³ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ ΠΈ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠΌΠ΅ Ρ‚Π΅Ρ…Π½ΠΈΡ‡ΠΊΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ
  • +
  • Π”Π° ја Π·Π°ΡˆΡ‚ΠΈΡ‚ΠΈΠΌΠ΅ бСзбСдноста Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°
  • +
  • Π”Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΡ†ΠΈΡ€Π°ΠΌΠ΅ со вас Π·Π° Π²Π°ΠΆΠ½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΠΈΠ»ΠΈ Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ°
  • +
+
+ +
+

4. Π‘ΠΏΠΎΠ΄Π΅Π»ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ

+

+ НС Π³ΠΈ ΠΏΡ€ΠΎΠ΄Π°Π²Π°ΠΌΠ΅, ΠΈΠ·Π½Π°Ρ˜ΠΌΡƒΠ²Π°ΠΌΠ΅ ΠΈΠ»ΠΈ Ρ‚Ρ€Π³ΠΎΠ²Π°ΠΌΠ΅ со Π²Π°ΡˆΠΈΡ‚Π΅ Π»ΠΈΡ‡Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ. ΠŸΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ сподСлимС само Π²ΠΎ слСднивС случаи: +

+
    +
  • БСрвиси ΠΏΡ€ΠΎΠ²Π°Ρ˜Π΄Π΅Ρ€ΠΈ: PostHog Π·Π° Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ° (ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ опишано ΠΏΠΎΠ³ΠΎΡ€Π΅)
  • +
  • Законски Π±Π°Ρ€Π°ΡšΠ°: Кога Π΅ законски ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ ΠΈΠ»ΠΈ Π·Π° Π·Π°ΡˆΡ‚ΠΈΡ‚Π° Π½Π° наши ΠΏΡ€Π°Π²Π°
  • +
  • Π”Π΅Π»ΠΎΠ²Π½ΠΈ трансфСри: Π’ΠΎ ΡΠ»ΡƒΡ‡Π°Ρ˜ Π½Π° ΡΠΏΠΎΡ˜ΡƒΠ²Π°ΡšΠ΅, Π°ΠΊΠ²ΠΈΠ·ΠΈΡ†ΠΈΡ˜Π° ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±Π° Π½Π° срСдства
  • +
+
+ +
+

5. Π§ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ

+

+ ΠŸΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π³ΠΈ Ρ‡ΡƒΠ²Π°ΠΌΠ΅ ΠΎΠ½ΠΎΠ»ΠΊΡƒ Π΄ΠΎΠ»Π³ΠΎ ΠΊΠΎΠ»ΠΊΡƒ ΡˆΡ‚ΠΎ Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ Π·Π° Ρ†Π΅Π»ΠΈΡ‚Π΅ опишани Π²ΠΎ ΠΎΠ²Π°Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°. + ΠšΠ΅ΡˆΠΈΡ€Π°Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ сС Ρ‡ΡƒΠ²Π°Π°Ρ‚ Π»ΠΎΠΊΠ°Π»Π½ΠΎ Π½Π° Π²Π°ΡˆΠΈΠΎΡ‚ ΡƒΡ€Π΅Π΄ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ ΠΈΠ·Π±Ρ€ΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅ΠΊΡƒ поставкитС Π½Π° прСлистувачот. +

+
+ +
+

6. Π’Π°ΡˆΠΈΡ‚Π΅ ΠΏΡ€Π°Π²Π° (GDPR)

+

Π‘ΠΏΠΎΡ€Π΅Π΄ GDPR Ρ€Π΅Π³ΡƒΠ»Π°Ρ‚ΠΈΠ²Π°Ρ‚Π°, ΠΈΠΌΠ°Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΎ Π½Π°:

+
    +
  • ΠŸΡ€ΠΈΡΡ‚Π°ΠΏ: Π”Π° ΠΏΠΎΠ±Π°Ρ€Π°Ρ‚Π΅ копија ΠΎΠ΄ Π²Π°ΡˆΠΈΡ‚Π΅ Π»ΠΈΡ‡Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ
  • +
  • ΠšΠΎΡ€Π΅ΠΊΡ†ΠΈΡ˜Π°: Π”Π° ΠΏΠΎΠ±Π°Ρ€Π°Ρ‚Π΅ ΠΊΠΎΡ€Π΅ΠΊΡ†ΠΈΡ˜Π° Π½Π° Π½Π΅Ρ‚ΠΎΡ‡Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ
  • +
  • Π‘Ρ€ΠΈΡˆΠ΅ΡšΠ΅: Π”Π° ΠΏΠΎΠ±Π°Ρ€Π°Ρ‚Π΅ Π±Ρ€ΠΈΡˆΠ΅ΡšΠ΅ Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ("ΠΏΡ€Π°Π²ΠΎ Π½Π° Π·Π°Π±ΠΎΡ€Π°Π²")
  • +
  • ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΡƒΠ²Π°ΡšΠ΅: Π”Π° ΠΏΠΎΠ±Π°Ρ€Π°Ρ‚Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π°
  • +
  • ΠŸΡ€Π΅Π½ΠΎΡ: Π”Π° Π³ΠΈ Π΄ΠΎΠ±ΠΈΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π²ΠΎ структуриран, машински Ρ‡ΠΈΡ‚Π»ΠΈΠ² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚
  • +
  • ΠŸΡ€ΠΈΠ³ΠΎΠ²ΠΎΡ€: Π”Π° сС спротивставитС Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ
  • +
+
+ +
+

7. ΠšΠΎΠ»Π°Ρ‡ΠΈΡšΠ° (Cookies)

+

+ ΠΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° користи Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ слични Π½Π° ΠΊΠΎΠ»Π°Ρ‡ΠΈΡšΠ° (Service Workers, LocalStorage) Π·Π°: +

+
    +
  • ΠžΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π°ΡšΠ΅ Π½Π° offline функционалност
  • +
  • Π—Π°Ρ‡ΡƒΠ²ΡƒΠ²Π°ΡšΠ΅ Π½Π° кориснички ΠΏΡ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈ
  • +
  • Аналитика (ΠΏΡ€Π΅ΠΊΡƒ PostHog)
  • +
+

+ ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΈ исклучитС ΠΏΡ€Π΅ΠΊΡƒ поставкитС Π½Π° Π²Π°ΡˆΠΈΠΎΡ‚ прСлистувач, Π½ΠΎ Ρ‚ΠΎΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° влијаС Π½Π° функционалноста. +

+
+ +
+

8. БСзбСдност

+

+ ΠŸΡ€Π΅Π²Π·Π΅ΠΌΠ°ΠΌΠ΅ соодвСтни Ρ‚Π΅Ρ…Π½ΠΈΡ‡ΠΊΠΈ ΠΈ организациски ΠΌΠ΅Ρ€ΠΊΠΈ Π·Π° Π·Π°ΡˆΡ‚ΠΈΡ‚Π° Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ нСовластСн пристап, + ΠΏΡ€ΠΎΠΌΠ΅Π½Π°, ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°ΡšΠ΅ ΠΈΠ»ΠΈ ΡƒΠ½ΠΈΡˆΡ‚ΡƒΠ²Π°ΡšΠ΅. ΠœΠ΅Ρ“ΡƒΡ‚ΠΎΠ°, Π½ΠΈΠ΅Π΄Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° прСнос ΠΏΡ€Π΅ΠΊΡƒ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° СлСктронско ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ + Π½Π΅ Π΅ 100% Π±Π΅Π·Π±Π΅Π΄Π΅Π½. +

+
+ +
+

9. Π”Π΅Ρ†Π°

+

+ ΠΠ°ΡˆΠ°Ρ‚Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Π½Π΅Ρ‚Π° Π·Π° Π΄Π΅Ρ†Π° ΠΏΠΎΠ΄ 13 Π³ΠΎΠ΄ΠΈΠ½ΠΈ. НС собирамС свСсно Π»ΠΈΡ‡Π½ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ΄ Π΄Π΅Ρ†Π° ΠΏΠΎΠ΄ 13 Π³ΠΎΠ΄ΠΈΠ½ΠΈ. + Π”ΠΎΠΊΠΎΠ»ΠΊΡƒ стС Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π» ΠΈΠ»ΠΈ старатСл ΠΈ Π·Π½Π°Π΅Ρ‚Π΅ Π΄Π΅ΠΊΠ° Π²Π°ΡˆΠ΅Ρ‚ΠΎ Π΄Π΅Ρ‚Π΅ Π½ΠΈ Π΄Π°Π»ΠΎ Π»ΠΈΡ‡Π½ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π²Π΅ ΠΌΠΎΠ»ΠΈΠΌΠ΅ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π½Π΅. +

+
+ +
+

10. ΠŸΡ€ΠΎΠΌΠ΅Π½ΠΈ Π½Π° ΠΎΠ²Π°Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°

+

+ МоТС ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ Π΄Π° ја Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ ΠΎΠ²Π°Π° ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π·Π° приватност. ЌС Π²Π΅ извСстимС Π·Π° Π·Π½Π°Ρ‡Π°Ρ˜Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ со ΠΎΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅ + Π½Π° Π½ΠΎΠ²Π°Ρ‚Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π½Π° ΠΎΠ²Π°Π° страница ΠΈ Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ΅ Π½Π° "ПослСдна ΠΏΡ€ΠΎΠΌΠ΅Π½Π°" Π΄Π°Ρ‚ΡƒΠΌΠΎΡ‚. +

+
+ +
+

11. ΠšΠΎΠ½Ρ‚Π°ΠΊΡ‚

+

+ Π”ΠΎΠΊΠΎΠ»ΠΊΡƒ ΠΈΠΌΠ°Ρ‚Π΅ ΠΏΡ€Π°ΡˆΠ°ΡšΠ° Π·Π° ΠΎΠ²Π°Π° ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π·Π° приватност ΠΈΠ»ΠΈ сакатС Π΄Π° Π³ΠΈ користитС Π²Π°ΡˆΠΈΡ‚Π΅ ΠΏΡ€Π°Π²Π°, + ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π΅ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΈΡ€Π°Ρ‚Π΅ Π½Π°: +

+
+

Placebo.mk

+

Email: privacy@placebo.mk

+

Π’Π΅Π±: https://placebo.mk

+
+
+ +
+

+ Π‘ΠΎ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° Placebo.mk Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°, сС согласуватС со ΠΎΠ²Π°Π° ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π·Π° приватност. + Π”ΠΎΠΊΠΎΠ»ΠΊΡƒ Π½Π΅ сС согласуватС со ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π°, Π²Π΅ ΠΌΠΎΠ»ΠΈΠΌΠ΅ Π½Π΅ користСтС ја Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°. +

+
+
+
+
+ ) +} diff --git a/pwa/src/routes.tsx b/pwa/src/routes.tsx index 61e03d3..4943e2d 100644 --- a/pwa/src/routes.tsx +++ b/pwa/src/routes.tsx @@ -11,6 +11,7 @@ import { AuthPage } from './components/routes/AuthPage' import { SportComponent } from './components/routes/SportComponent' import { ArtComponent } from './components/routes/ArtComponent' import { ScienceComponent } from './components/routes/ScienceComponent' +import { PrivacyPolicyComponent } from './components/routes/PrivacyPolicyComponent' import { ProtectedRoute } from './components/auth/ProtectedRoute' import { Header } from './components/layout/Header' import { HeroArticle } from './components/home/HeroArticle' @@ -57,6 +58,7 @@ const rootRoute = createRootRoute({
  • УмСтност
  • Наука
  • Архива
  • +
  • ΠŸΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΡΡ‚
  • @@ -305,6 +307,12 @@ const adminDashboardRoute = createRoute({ ), }) +const privacyPolicyRoute = createRoute({ + getParentRoute: () => rootRoute, + path: '/privacy-policy', + component: PrivacyPolicyComponent, +}) + const routeTree = rootRoute.addChildren([ indexRoute, archiveRoute, @@ -318,6 +326,7 @@ const routeTree = rootRoute.addChildren([ liveBlogAdminRoute, createLiveBlogRoute, adminDashboardRoute, + privacyPolicyRoute, ]) export const router = createRouter({ routeTree }) diff --git a/pwa/vite.config.ts b/pwa/vite.config.ts index 70b1e49..b36f941 100644 --- a/pwa/vite.config.ts +++ b/pwa/vite.config.ts @@ -13,31 +13,64 @@ export default defineConfig({ srcDir: 'src', filename: 'sw.ts', registerType: 'autoUpdate', - includeAssets: ['icons/*.svg'], + includeAssets: ['icons/*.png', 'icons/*.svg'], manifest: { name: 'Placebo.mk', short_name: 'Placebo', description: 'Π‘Π°Ρ‚ΠΈΡ€ΠΈΡ‡Π½ΠΈ вСсти ΠΎΠ΄ МакСдонија', lang: 'mk', start_url: '/', + scope: '/', display: 'standalone', + orientation: 'portrait-primary', background_color: '#ffffff', theme_color: '#000000', + categories: ['news', 'entertainment'], icons: [ { - src: '/icons/icon-192.svg', + src: '/icons/icon-72.png', + sizes: '72x72', + type: 'image/png', + }, + { + src: '/icons/icon-96.png', + sizes: '96x96', + type: 'image/png', + }, + { + src: '/icons/icon-128.png', + sizes: '128x128', + type: 'image/png', + }, + { + src: '/icons/icon-144.png', + sizes: '144x144', + type: 'image/png', + }, + { + src: '/icons/icon-152.png', + sizes: '152x152', + type: 'image/png', + }, + { + src: '/icons/icon-192.png', sizes: '192x192', - type: 'image/svg+xml', + type: 'image/png', }, { - src: '/icons/icon-512.svg', - sizes: '512x512', - type: 'image/svg+xml', + src: '/icons/icon-384.png', + sizes: '384x384', + type: 'image/png', }, { - src: '/icons/icon-512.svg', + src: '/icons/icon-512.png', sizes: '512x512', - type: 'image/svg+xml', + type: 'image/png', + }, + { + src: '/icons/icon-512-maskable.png', + sizes: '512x512', + type: 'image/png', purpose: 'maskable', }, ],