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' })} +
+ ++ ΠΠΎΠ±ΡΠ΅Π΄ΠΎΡΠ΄ΠΎΠ²ΡΠ΅ Π½Π° Placebo.mk ("Π½ΠΈΠ΅", "Π½Π°Ρ", "Π½Π°Ρ"). ΠΠ° ΠΏΠΎΡΠΈΡΡΠ²Π°ΠΌΠ΅ Π²Π°ΡΠ°ΡΠ° ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΡΡ ΠΈ ΡΠ΅ ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈ Π½Π° Π·Π°ΡΡΠΈΡΠ°ΡΠ° Π½Π° Π²Π°ΡΠΈΡΠ΅ Π»ΠΈΡΠ½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ. + ΠΠ²Π°Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π·Π° ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΡΡ Π²ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΡΠ²Π° ΠΊΠ°ΠΊΠΎ ΡΠΎΠ±ΠΈΡΠ°ΠΌΠ΅, ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅, ΡΡΠ²Π°ΠΌΠ΅ ΠΈ Π·Π°ΡΡΠΈΡΡΠ²Π°ΠΌΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΊΠΎΠ³Π° ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Π½Π°ΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°. +
++ ΠΠΎΠ³Π° ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Π½Π°ΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°, Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ ΡΠΎΠ±ΠΈΡΠ°ΠΌΠ΅ ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° Π²Π°ΡΠΈΠΎΡ ΡΡΠ΅Π΄ ΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ΡΠΎ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°: +
++ ΠΠΎΡΠΈΡΡΠΈΠΌΠ΅ PostHog Π·Π° ΡΠΎΠ±ΠΈΡΠ°ΡΠ΅ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Π° Π°Π½Π°Π»ΠΈΡΠΈΠΊΠ° Π·Π° Π΄Π° Π³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈΠΌΠ΅ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΎΡΠΎ ΠΈΡΠΊΡΡΡΠ²ΠΎ. + PostHog ΡΠΎΠ±ΠΈΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°, Π²ΠΊΠ»ΡΡΡΠ²Π°ΡΡΠΈ: +
++ ΠΠΎΠ²Π΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈΡΠ΅ Π·Π° ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΡΡ Π½Π° PostHog ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΡΠ΄Π΅ΡΠ΅ Π½Π°{' '} + + https://posthog.com/privacy + +
+ ++ ΠΠ° Π΄Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ° offline, Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΠΊΠ΅ΡΠΈΡΠ° ΡΠΎΠ΄ΡΠΆΠΈΠ½ΠΈ (ΡΡΠ°ΡΠΈΠΈ, ΡΠ»ΠΈΠΊΠΈ) Π»ΠΎΠΊΠ°Π»Π½ΠΎ Π½Π° Π²Π°ΡΠΈΠΎΡ ΡΡΠ΅Π΄ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Service Workers ΠΈ browser cache. +
+ ++ ΠΠΎΠΊΠΎΠ»ΠΊΡ ΡΠΎΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΈ Π°ΠΊΠ°ΡΠ½Ρ Π·Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΎΠ±ΠΈΡΠ°ΠΌΠ΅: +
+ΠΠ°ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π³ΠΈ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ Π·Π°:
++ ΠΠ΅ Π³ΠΈ ΠΏΡΠΎΠ΄Π°Π²Π°ΠΌΠ΅, ΠΈΠ·Π½Π°ΡΠΌΡΠ²Π°ΠΌΠ΅ ΠΈΠ»ΠΈ ΡΡΠ³ΠΎΠ²Π°ΠΌΠ΅ ΡΠΎ Π²Π°ΡΠΈΡΠ΅ Π»ΠΈΡΠ½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ. ΠΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ ΡΠΏΠΎΠ΄Π΅Π»ΠΈΠΌΠ΅ ΡΠ°ΠΌΠΎ Π²ΠΎ ΡΠ»Π΅Π΄Π½ΠΈΠ²Π΅ ΡΠ»ΡΡΠ°ΠΈ: +
++ ΠΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π³ΠΈ ΡΡΠ²Π°ΠΌΠ΅ ΠΎΠ½ΠΎΠ»ΠΊΡ Π΄ΠΎΠ»Π³ΠΎ ΠΊΠΎΠ»ΠΊΡ ΡΡΠΎ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ Π·Π° ΡΠ΅Π»ΠΈΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈ Π²ΠΎ ΠΎΠ²Π°Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°. + ΠΠ΅ΡΠΈΡΠ°Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΠ΅ ΡΡΠ²Π°Π°Ρ Π»ΠΎΠΊΠ°Π»Π½ΠΎ Π½Π° Π²Π°ΡΠΈΠΎΡ ΡΡΠ΅Π΄ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ ΠΈΠ·Π±ΡΠΈΡΠ΅ΡΠ΅ ΠΏΡΠ΅ΠΊΡ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈΡΠ΅ Π½Π° ΠΏΡΠ΅Π»ΠΈΡΡΡΠ²Π°ΡΠΎΡ. +
+Π‘ΠΏΠΎΡΠ΅Π΄ GDPR ΡΠ΅Π³ΡΠ»Π°ΡΠΈΠ²Π°ΡΠ°, ΠΈΠΌΠ°ΡΠ΅ ΠΏΡΠ°Π²ΠΎ Π½Π°:
++ ΠΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΡΠ»ΠΈΡΠ½ΠΈ Π½Π° ΠΊΠΎΠ»Π°ΡΠΈΡΠ° (Service Workers, LocalStorage) Π·Π°: +
++ ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅ ΠΏΡΠ΅ΠΊΡ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈΡΠ΅ Π½Π° Π²Π°ΡΠΈΠΎΡ ΠΏΡΠ΅Π»ΠΈΡΡΡΠ²Π°Ρ, Π½ΠΎ ΡΠΎΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π»ΠΈΡΠ°Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΠ°. +
++ ΠΡΠ΅Π²Π·Π΅ΠΌΠ°ΠΌΠ΅ ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠΊΠΈ ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΠΊΠΈ ΠΌΠ΅ΡΠΊΠΈ Π·Π° Π·Π°ΡΡΠΈΡΠ° Π½Π° Π²Π°ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΎΠ΄ Π½Π΅ΠΎΠ²Π»Π°ΡΡΠ΅Π½ ΠΏΡΠΈΡΡΠ°ΠΏ, + ΠΏΡΠΎΠΌΠ΅Π½Π°, ΠΎΡΠΊΡΠΈΠ²Π°ΡΠ΅ ΠΈΠ»ΠΈ ΡΠ½ΠΈΡΡΡΠ²Π°ΡΠ΅. ΠΠ΅ΡΡΡΠΎΠ°, Π½ΠΈΠ΅Π΄Π΅Π½ ΠΌΠ΅ΡΠΎΠ΄ Π½Π° ΠΏΡΠ΅Π½ΠΎΡ ΠΏΡΠ΅ΠΊΡ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π½Π° Π΅Π»Π΅ΠΊΡΡΠΎΠ½ΡΠΊΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ + Π½Π΅ Π΅ 100% Π±Π΅Π·Π±Π΅Π΄Π΅Π½. +
++ ΠΠ°ΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Π½Π΅ΡΠ° Π·Π° Π΄Π΅ΡΠ° ΠΏΠΎΠ΄ 13 Π³ΠΎΠ΄ΠΈΠ½ΠΈ. ΠΠ΅ ΡΠΎΠ±ΠΈΡΠ°ΠΌΠ΅ ΡΠ²Π΅ΡΠ½ΠΎ Π»ΠΈΡΠ½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ΄ Π΄Π΅ΡΠ° ΠΏΠΎΠ΄ 13 Π³ΠΎΠ΄ΠΈΠ½ΠΈ. + ΠΠΎΠΊΠΎΠ»ΠΊΡ ΡΡΠ΅ ΡΠΎΠ΄ΠΈΡΠ΅Π» ΠΈΠ»ΠΈ ΡΡΠ°ΡΠ°ΡΠ΅Π» ΠΈ Π·Π½Π°Π΅ΡΠ΅ Π΄Π΅ΠΊΠ° Π²Π°ΡΠ΅ΡΠΎ Π΄Π΅ΡΠ΅ Π½ΠΈ Π΄Π°Π»ΠΎ Π»ΠΈΡΠ½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, Π²Π΅ ΠΌΠΎΠ»ΠΈΠΌΠ΅ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΈΡΠ°ΡΡΠ΅ Π½Π΅. +
++ ΠΠΎΠΆΠ΅ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎ Π΄Π° ΡΠ° Π°ΠΆΡΡΠΈΡΠ°ΠΌΠ΅ ΠΎΠ²Π°Π° ΠΠΎΠ»ΠΈΡΠΈΠΊΠ° Π·Π° ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΡΡ. ΠΠ΅ Π²Π΅ ΠΈΠ·Π²Π΅ΡΡΠΈΠΌΠ΅ Π·Π° Π·Π½Π°ΡΠ°ΡΠ½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΡΠΎ ΠΎΠ±ΡΠ°Π²ΡΠ²Π°ΡΠ΅ + Π½Π° Π½ΠΎΠ²Π°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π½Π° ΠΎΠ²Π°Π° ΡΡΡΠ°Π½ΠΈΡΠ° ΠΈ Π°ΠΆΡΡΠΈΡΠ°ΡΠ΅ Π½Π° "ΠΠΎΡΠ»Π΅Π΄Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π°" Π΄Π°ΡΡΠΌΠΎΡ. +
++ ΠΠΎΠΊΠΎΠ»ΠΊΡ ΠΈΠΌΠ°ΡΠ΅ ΠΏΡΠ°ΡΠ°ΡΠ° Π·Π° ΠΎΠ²Π°Π° ΠΠΎΠ»ΠΈΡΠΈΠΊΠ° Π·Π° ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΡΡ ΠΈΠ»ΠΈ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° Π³ΠΈ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Π²Π°ΡΠΈΡΠ΅ ΠΏΡΠ°Π²Π°, + ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π΅ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΈΡΠ°ΡΠ΅ Π½Π°: +
+ ++ Π‘ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° Placebo.mk Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°, ΡΠ΅ ΡΠΎΠ³Π»Π°ΡΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΎΠ²Π°Π° ΠΠΎΠ»ΠΈΡΠΈΠΊΠ° Π·Π° ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΡΡ. + ΠΠΎΠΊΠΎΠ»ΠΊΡ Π½Π΅ ΡΠ΅ ΡΠΎΠ³Π»Π°ΡΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ°, Π²Π΅ ΠΌΠΎΠ»ΠΈΠΌΠ΅ Π½Π΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°. +
+