Wellysa

Plan Systemu Wykrywania Trendów Medycznych

🎯 Automatyczny System Trendów Medycznych

Wykrywanie trendów medycznych → Scraping artykułów → Generowanie contentu AI → Akceptacja → Publikacja

📦 Komponenty Systemu

🔍 Trend Detection

Google Trends, PubMed, News API

🕷️ Web Scraping

Pobieranie artykułów z serwisów medycznych

🤖 AI Generation

Google Gemini - blog posty SEO-optimized

✅ Approval System

Panel recenzji i zatwierdzania contentu

📤 Publishing

Publikacja na blogu, auto-deploy

💾 Database

Cloudflare D1 (SQLite) + R2 Storage

🛠️ Stack Techniczny

Komponent Technologia
Backend Node.js + Cloudflare Workers
Baza Danych Cloudflare D1 (SQLite)
Storage Cloudflare R2
AI Model Google Gemini 1.5 Flash
Frontend Admin React + TailwindCSS
Hosting Cloudflare Pages

📅 Timeline Implementacji

Faza 1-2: Fundament (2 tygodnie)

Setup D1, R2, autentykacja

Faza 3-4: Trend Detection (4 tyg.)

Integracje API, scraping

Faza 5-6: AI & Approval (3 tyg.)

Gemini integration, panel admin

Faza 7-8: Publishing (2 tyg.)

Deploy, testing, launch

⏱️ Łącznie: 7-8 tygodni do pełnej implementacji

💰 Koszt Operacyjny

0 PLN / MIESIĄC

Wszystkie usługi działają w darmowych tierach!

  • ✅ Cloudflare Workers - GRATIS (100k req/dzień)
  • ✅ Cloudflare D1 - GRATIS (5GB bazy)
  • ✅ Cloudflare R2 - GRATIS (10GB storage)
  • ✅ Google Gemini API - GRATIS (1M tokens/dzień)
  • ✅ Cloudflare Pages - GRATIS (hosting)
  • ✅ PubMed API - GRATIS
  • ✅ Reddit API - GRATIS

📊 Skalabilność Systemu

📝 Posty/Miesiąc

1,500+

~50 postów dziennie

👥 Użytkowników/Dzień

3,000+

Workers handle 100k req/dzień

💾 Posty w Bazie

100,000+

D1 supports 5GB storage

🎯 Metryki Sukcesu (KPIs)

Jakość Contentu

  • Plagiarism score < 20%
  • Manual approval rate > 70%
  • Czas do publikacji < 24h od detection trendu

Traffic & Engagement

  • Blog traffic 1,000+ unique visitors/month (3 miesiące)
  • Avg time on page > 2 minuty
  • CTR do app > 5%

Niezawodność

  • System uptime > 99%
  • Trend detection success > 80%
  • Scraping success > 90%
  • AI generation success > 95%

✨ Kluczowe Cechy

⚡ Automatyzacja 24/7

Cron jobs uruchamiają się automatycznie co dzień o stałych porach

🎨 Quality Control

Obowiązkowa recenzja przed publikacją przez admina

� SEO Optimized

Blog posty optymalizowane pod wyszukiwarki Google

📊 Analytics Ready

Tracking views, clicks, shares na każdym poście

🔒 Bezpieczny

Autentykacja, rate limiting, compliance

🚀 Scalable

Od 50 do 1500+ postów/miesiąc bez dodatkowych kosztów

🔄 Daily Automated Workflow

06:00 Trend Detection - Skanowanie Google Trends, PubMed, News API
07:00 Web Scraping - Pobieranie artykułów z serwisów medycznych
08:00 AI Generation - Generowanie blog postów przy użyciu Gemini
~ Admin Review - Ręczna recenzja i zatwierdzenie contentu
10:00 Publishing - Publikacja blog postu na stronie

🚀 Następne Kroki

  1. Setup Cloudflare D1 - Inicjalizacja bazy danych
  2. Gemini API Key - Uzyskanie darmowego dostępu
  3. Integracje API - Google Trends, PubMed, Reddit
  4. Development Workers - Trend detection, scraping, generation
  5. Admin Panel - UI do recenzji i publikacji
  6. Testing & Launch - QA i deployment na produkcję
const markdownContent = `# Plan Systemu Wykrywania Trendów Medycznych i Generowania Contentu ## 1. Przegląd Systemu ### Cel Automatyczny system wykrywający trendy medyczne, generujący content blogowy oraz posty na social media (Facebook/Instagram) z mechanizmem akceptacji i publikacji na stronie głównej Wellysa. ### Komponenty Główne 1. **Trend Detection Module** - wykrywanie trendów medycznych 2. **Web Scraping Module** - scraping artykułów medycznych 3. **AI Content Generation Module** - generowanie blogów i postów 4. **Approval System** - panel akceptacji contentu 5. **Publishing Module** - publikacja na stronie i social media 6. **Database & Storage** - przechowywanie danych --- ## 2. Architektura Techniczna ### 2.1 Stack Technologiczny #### Backend - **Runtime**: Node.js/Python (do wyboru) - **Framework**: - Node.js: Express.js lub Hono (lightweight dla Cloudflare Workers) - Python: FastAPI - **Hosting**: Cloudflare Workers + Cloudflare Pages - **Database**: - Cloudflare D1 (SQLite) - dla danych strukturalnych - Cloudflare R2 - dla przechowywania obrazów i plików - **Queues**: Cloudflare Queues - dla asynchronicznych zadań #### Frontend (Panel Admin) - **Framework**: Vanilla JS lub React/Vue (lightweight) - **Hosting**: Cloudflare Pages - **UI**: TailwindCSS (już używany w projekcie) #### AI & APIs - **AI Model**: Google Gemini API (Gemini 1.5 Pro / Flash) - **Trend Detection**: - Google Trends API - Twitter/X API - Reddit API (r/medicine, r/health) - PubMed API - **Web Scraping**: - Puppeteer/Playwright (dla dynamicznych stron) - Cheerio (dla statycznych stron) - Apify (opcjonalnie, jako managed service) --- ## 3. Szczegółowy Plan Modułów ### 3.1 Moduł Wykrywania Trendów (Trend Detection) #### Funkcjonalność - Codzienne skanowanie źródeł trendów medycznych - Analiza popularności tematów - Filtrowanie relewanatnych trendów dla branży Wellysa (zdrowie kobiet, ciąża, okres, cykle) #### Źródła Danych 1. **Google Trends API** - Słowa kluczowe: "zdrowie kobiet", "ciąża", "menstruacja", "płodność", itp. - Region: Polska - Timeframe: ostatnie 7 dni 2. **PubMed API** - Najnowsze publikacje medyczne - Kategorie: obstetrics, gynecology, reproductive health 3. **Social Media APIs** - Twitter/X: hashtagi #zdrowiekobiet, #ciąża - Reddit: r/BabyBumps, r/TryingForABaby (angielskie) - Instagram Graph API (jeśli dostępne) 4. **News APIs** - Google News API - NewsAPI.org - Polskie serwisy medyczne (scraping) #### Algorytm Wykrywania \`\`\` 1. Zbierz dane ze wszystkich źródeł 2. Agreguj tematy według częstotliwości występowania 3. Score trendów na podstawie: - Wzrost zainteresowania (week over week) - Objętość wyszukiwań - Relevantność dla Wellysa (keyword matching) - Świeżość (nowsze = wyższy score) 4. Filtruj trendy z score > threshold 5. Zapisz do bazy danych \`\`\` #### Struktura Danych \`\`\`sql CREATE TABLE trends ( id INTEGER PRIMARY KEY, keyword TEXT NOT NULL, category TEXT, score REAL, source TEXT, detected_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, status TEXT DEFAULT 'pending' -- pending, approved, rejected, processed ); \`\`\` #### Harmonogram - Cron job: codziennie o 6:00 (Cloudflare Cron Triggers) --- ### 3.2 Moduł Scrapingu Artykułów (Web Scraping) #### Funkcjonalność - Automatyczne wyszukiwanie artykułów dla wykrytych trendów - Scraping treści artykułów - Ekstrakcja kluczowych informacji #### Źródła Artykułów 1. **Polskie serwisy medyczne** - Medexpress.pl - Medonet.pl - Poradnikzdrowie.pl - Pacjent.gov.pl - Healthline.com (tłumaczenie) 2. **Zagraniczne źródła** (do tłumaczenia) - Mayo Clinic - WebMD - Healthline - Medical News Today #### Proces Scrapingu \`\`\` 1. Dla każdego zatwierdzonego trendu: 2. Wygeneruj query search (trend keyword + "artykuł medyczny") 3. Użyj Google Custom Search API lub scraping Google 4. Pobierz top 5-10 wyników 5. Scraping każdego artykułu: - Tytuł - Data publikacji - Autor - Treść główna - Obrazy (opcjonalnie) - Źródło/link 6. Zapisz do bazy \`\`\` #### Struktura Danych \`\`\`sql CREATE TABLE scraped_articles ( id INTEGER PRIMARY KEY, trend_id INTEGER, url TEXT UNIQUE, title TEXT, author TEXT, published_date TEXT, content TEXT, images TEXT, -- JSON array source_name TEXT, scraped_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (trend_id) REFERENCES trends(id) ); \`\`\` #### Rate Limiting & Etyka - Respektowanie robots.txt - User-Agent identifier - Delay między requestami (2-5 sekund) - Cache wyników (nie scrape tego samego URL dwukrotnie) --- ### 3.3 Moduł Generowania Contentu AI (Content Generation) #### Funkcjonalność - Parafrazowanie artykułów na blog posty - Generowanie postów na Facebook/Instagram - Generowanie tytułów SEO-friendly - Generowanie meta descriptions #### AI Prompts ##### Blog Post Generation \`\`\` System Prompt: Jesteś ekspertem medycznym piszącym dla platformy Wellysa - aplikacji wspierającej zdrowie kobiet, śledzenie cyklu, ciąży i płodności. Twoje zadanie: 1. Przeanalizuj poniższy artykuł medyczny 2. Stwórz oryginalny blog post (800-1200 słów) 3. Zachowaj wszystkie fakty medyczne i źródła 4. Użyj przystępnego, ciepłego języka 5. Dodaj praktyczne porady dla użytkowniczek Wellysa 6. Zadbaj o SEO (keywords, nagłówki H2/H3) 7. Zakończ CTA zachęcającym do pobrania aplikacji Wellysa Źródłowy artykuł: {article_content} Keyword: {trend_keyword} \`\`\` ##### Social Media Post Generation \`\`\` System Prompt: Stwórz angażujący post na Facebook/Instagram dla Wellysa. Wymagania: - Długość: 150-300 znaków - Ton: przyjazny, wspierający - Emoji: 2-3 (odpowiednie do tematu) - Hashtagi: 3-5 (#zdrowiekobiet #wellysa) - CTA: zachęta do przeczytania pełnego artykułu - Hook: pierwsze zdanie musi przyciągać uwagę Temat: {blog_title} Główne punkty: {key_points} \`\`\` #### Proces Generacji \`\`\` 1. Pobierz scraped_articles dla danego trendu 2. Dla każdego artykułu: a. Wywołaj AI z promptem blog generation b. Wygeneruj 2-3 warianty (do wyboru w panelu) c. Wywołaj AI z promptem social media d. Wygeneruj Facebook i Instagram posty 3. Zapisz wygenerowany content do bazy 4. Status: 'pending_review' \`\`\` #### Struktura Danych \`\`\`sql CREATE TABLE generated_content ( id INTEGER PRIMARY KEY, trend_id INTEGER, article_id INTEGER, content_type TEXT, -- 'blog', 'facebook', 'instagram' title TEXT, content TEXT, meta_description TEXT, seo_keywords TEXT, -- JSON array variant_number INTEGER DEFAULT 1, generated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, status TEXT DEFAULT 'pending_review', -- pending_review, approved, rejected, published reviewed_by TEXT, reviewed_at TIMESTAMP, published_at TIMESTAMP, FOREIGN KEY (trend_id) REFERENCES trends(id), FOREIGN KEY (article_id) REFERENCES scraped_articles(id) ); \`\`\` #### Quality Checks - Plagiarism detection (porównanie z oryginałem - similarity < 30%) - Fact-checking (opcjonalnie - manual review) - Tone analysis (consistent z brandem Wellysa) - SEO score (Yoast-like scoring) --- ### 3.4 System Akceptacji (Approval System) #### Funkcjonalność - Panel administracyjny do przeglądu contentu - Podgląd blog postów - Podgląd postów social media - Edycja przed publikacją - Akceptacja/odrzucenie - Harmonogram publikacji #### UI/UX Panelu ##### Dashboard \`\`\` ┌─────────────────────────────────────────────────┐ │ Wellysa Content Management System │ ├─────────────────────────────────────────────────┤ │ │ │ 📊 Statistics │ │ ┌──────────┬──────────┬──────────┬──────────┐ │ │ │ Pending │ Approved │ Published│ Rejected │ │ │ │ 12 │ 8 │ 45 │ 3 │ │ │ └──────────┴──────────┴──────────┴──────────┘ │ │ │ │ 📝 Content Queue │ │ ┌─────────────────────────────────────────────┐ │ │ │ [BLOG] Nowe badania o płodności │ │ │ │ Trend: fertility research | Score: 8.5 │ │ │ │ [Preview] [Edit] [Approve] [Reject] │ │ │ ├─────────────────────────────────────────────┤ │ │ │ [FB] Jak dbać o zdrowie w ciąży │ │ │ │ Linked to blog #142 │ │ │ │ [Preview] [Edit] [Approve] [Reject] │ │ │ └─────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────┘ \`\`\` ##### Preview Modal - Side-by-side: Original Article vs Generated Content - Highlight różnic - SEO score - Readability score - Plagiarism percentage ##### Editor - Rich text editor (TinyMCE lub Quill) - Markdown support - Image upload (do R2) - Meta fields (title, description, keywords) - Schedule publication date/time #### Uprawnienia - **Admin**: pełen dostęp - **Editor**: może akceptować/odrzucać, edytować - **Viewer**: tylko podgląd #### API Endpoints \`\`\` GET /api/admin/content?status=pending_review GET /api/admin/content/:id PUT /api/admin/content/:id/approve PUT /api/admin/content/:id/reject PUT /api/admin/content/:id/edit POST /api/admin/content/:id/schedule \`\`\` --- ### 3.5 Moduł Publikacji (Publishing Module) #### Funkcjonalność Blog ##### Nowa strona: Blog (/blog.html, /blog-en.html) \`\`\`html

Wellysa Blog - Zdrowie Kobiet

...

Najnowszy artykuł

...

Czytaj więcej
... Ciąża

Tytuł artykułu

...

15 stycznia 2026 5 min czytania
Czytaj więcej
\`\`\` #### Funkcjonalność Social Media ##### Facebook Publishing - **Opcja 1**: Manual (generowany tekst do skopiowania) - **Opcja 2**: Meta Graph API (automatyczna publikacja) - Wymaga Facebook App - Permissions: pages_manage_posts, pages_read_engagement - Endpoint: \`POST /{page-id}/feed\` ##### Instagram Publishing - **Opcja 1**: Manual (generowany tekst + sugestia obrazu) - **Opcja 2**: Instagram Graph API - Wymaga Instagram Business Account - Proces: Upload image → Create container → Publish #### Proces Publikacji \`\`\` 1. Admin klika "Approve & Publish" w panelu 2. System: a. Zmienia status na 'approved' b. Jeśli scheduled_at: dodaje do queue c. Jeśli publish now: i. Generuje HTML dla /blog/[slug].html ii. Aktualizuje /blog.html (dodaje do listy) iii. Aktualizuje sitemap.xml iv. Wywołuje Cloudflare Pages deploy (webhook) v. Opcjonalnie: publikuje na social media 3. Status → 'published' 4. Wysyła notyfikację do admina (email) \`\`\` --- ## 4. Flow Procesu (End-to-End) \`\`\` ┌──────────────────────────────────────────────────────────────┐ │ AUTOMATED DAILY FLOW │ └──────────────────────────────────────────────────────────────┘ 06:00 │ Cron Trigger: Trend Detection ├─► Scan Google Trends ├─► Scan PubMed ├─► Score & Filter Trends └─► Save to DB (status: pending) 07:00 │ Cron Trigger: Article Scraping ├─► Get approved trends (manual approval required first) ├─► Search for articles ├─► Scrape top articles └─► Save to DB 08:00 │ Cron Trigger: Content Generation ├─► Get scraped articles ├─► Generate blog posts (3 variants) ├─► Generate Facebook posts ├─► Generate Instagram posts ├─► Run quality checks └─► Save to DB (status: pending_review) │ NOTIFICATION: Email to admin └─► "12 new posts ready for review" ─────────────────────────────────────────────────────────────── MANUAL APPROVAL (Admin Panel) │ Admin logs in to panel ├─► Reviews generated content ├─► Selects best variant ├─► Edits if needed ├─► Approves or rejects └─► Schedules publication (or publish now) ─────────────────────────────────────────────────────────────── 10:00 │ Cron Trigger: Publishing ├─► Get approved content scheduled for now ├─► Generate HTML files ├─► Update blog listing ├─► Deploy to Cloudflare Pages (git push or API) ├─► Optionally: Post to social media └─► Update status: published │ NOTIFICATION: Email to admin └─► "3 posts published successfully" \`\`\` --- ## 5. Database Schema (Cloudflare D1) \`\`\`sql -- Tabela: trends CREATE TABLE trends ( id INTEGER PRIMARY KEY AUTOINCREMENT, keyword TEXT NOT NULL, category TEXT, score REAL, source TEXT, metadata TEXT, -- JSON: {search_volume, growth_rate, etc} detected_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, status TEXT DEFAULT 'pending', -- pending, approved, rejected, processed approved_by TEXT, approved_at TIMESTAMP ); -- Tabela: scraped_articles CREATE TABLE scraped_articles ( id INTEGER PRIMARY KEY AUTOINCREMENT, trend_id INTEGER, url TEXT UNIQUE, title TEXT, author TEXT, published_date TEXT, content TEXT, excerpt TEXT, images TEXT, -- JSON array source_name TEXT, metadata TEXT, -- JSON: dodatkowe info scraped_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (trend_id) REFERENCES trends(id) ); -- Tabela: generated_content CREATE TABLE generated_content ( id INTEGER PRIMARY KEY AUTOINCREMENT, trend_id INTEGER, article_id INTEGER, content_type TEXT, -- 'blog', 'facebook', 'instagram' slug TEXT UNIQUE, -- URL-friendly slug dla bloga title TEXT, content TEXT, excerpt TEXT, meta_description TEXT, seo_keywords TEXT, -- JSON array featured_image TEXT, -- URL w R2 category TEXT, read_time INTEGER, -- w minutach variant_number INTEGER DEFAULT 1, quality_score REAL, -- 0-100 plagiarism_score REAL, -- 0-100 (niższe = lepsze) generated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, status TEXT DEFAULT 'pending_review', reviewed_by TEXT, reviewed_at TIMESTAMP, scheduled_at TIMESTAMP, published_at TIMESTAMP, views INTEGER DEFAULT 0, FOREIGN KEY (trend_id) REFERENCES trends(id), FOREIGN KEY (article_id) REFERENCES scraped_articles(id) ); -- Tabela: admin_users CREATE TABLE admin_users ( id INTEGER PRIMARY KEY AUTOINCREMENT, email TEXT UNIQUE NOT NULL, password_hash TEXT NOT NULL, role TEXT DEFAULT 'editor', -- admin, editor, viewer created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_login TIMESTAMP ); -- Tabela: publication_log CREATE TABLE publication_log ( id INTEGER PRIMARY KEY AUTOINCREMENT, content_id INTEGER, platform TEXT, -- 'website', 'facebook', 'instagram' published_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, success BOOLEAN, error_message TEXT, FOREIGN KEY (content_id) REFERENCES generated_content(id) ); -- Tabela: content_analytics CREATE TABLE content_analytics ( id INTEGER PRIMARY KEY AUTOINCREMENT, content_id INTEGER, date DATE, views INTEGER DEFAULT 0, clicks INTEGER DEFAULT 0, shares INTEGER DEFAULT 0, time_on_page INTEGER, -- sekundy FOREIGN KEY (content_id) REFERENCES generated_content(id), UNIQUE(content_id, date) ); -- Indeksy dla wydajności CREATE INDEX idx_trends_status ON trends(status); CREATE INDEX idx_content_status ON generated_content(status); CREATE INDEX idx_content_slug ON generated_content(slug); CREATE INDEX idx_content_published ON generated_content(published_at); \`\`\` --- ## 6. Struktura Repozytoriów - Opcja 3: Hybrid (WYBRANA ✅) ### Architektura Dual-Repo System będzie podzielony na **2 repozytoria**: #### Repo 1: \`wellysa-lp\` (FRONTEND - już istniejące) \`\`\` wellysa-lp/ # Główna strona + blog (Cloudflare Pages) ├── index.html # Landing page ├── index-en.html ├── css/ ├── js/ ├── img/ ├── jak_dziala.html ├── pobierz.html ├── ... # Wszystkie obecne pliki │ ├── blog/ # 🆕 NOWY - Wygenerowane posty blogowe │ ├── index.html # Listing wszystkich postów │ ├── index-en.html # English version │ │ │ ├── nowe-badania-plodnosci-2026/ # Przykładowy post (slug) │ │ ├── index.html # PL version │ │ └── index-en.html # EN version │ │ │ ├── jak-dbac-o-zdrowie-w-ciazy/ │ │ ├── index.html │ │ └── index-en.html │ └── ... │ ├── blog-data/ # 🆕 NOWY - Metadata dla blogów │ └── posts.json # Lista wszystkich postów (dla listingu) │ └── .github/ └── workflows/ └── deploy.yml # Auto-deploy na Cloudflare Pages \`\`\` **Hosting**: Cloudflare Pages (już skonfigurowane) **Deploy**: Automatyczny przy push do \`main\` branch **Zawartość**: Tylko statyczne pliki HTML/CSS/JS + wygenerowane blogi --- #### Repo 2: \`wellysa-content-system\` (BACKEND - nowe repo) \`\`\` wellysa-content-system/ # System contentowy (Workers + Admin) ├── workers/ # Cloudflare Workers │ ├── trend-detector/ │ │ ├── index.js │ │ ├── package.json │ │ └── wrangler.toml │ │ │ ├── scraper/ │ │ ├── index.js │ │ ├── package.json │ │ └── wrangler.toml │ │ │ ├── content-generator/ │ │ ├── index.js # Gemini API integration │ │ ├── package.json │ │ └── wrangler.toml │ │ │ ├── publisher/ │ │ ├── index.js # Publishes to wellysa-lp repo │ │ ├── package.json │ │ └── wrangler.toml │ │ │ └── api/ │ ├── index.js # REST API dla admin panel │ ├── package.json │ └── wrangler.toml │ ├── admin-panel/ # Panel administracyjny │ ├── src/ │ │ ├── index.html │ │ ├── js/ │ │ │ ├── app.js │ │ │ ├── api.js │ │ │ └── components/ │ │ │ ├── ContentList.js │ │ │ ├── PreviewModal.js │ │ │ └── Editor.js │ │ └── css/ │ │ └── styles.css │ └── wrangler.toml │ ├── shared/ # Współdzielony kod │ ├── db/ │ │ ├── schema.sql │ │ └── migrations/ │ ├── utils/ │ │ ├── gemini.js # Gemini API wrapper │ │ ├── rate-limiter.js │ │ ├── validators.js │ │ └── plagiarism-checker.js │ └── constants.js │ ├── scripts/ # Utility scripts │ ├── setup-db.sh # Inicjalizacja D1 database │ ├── deploy-all.sh # Deploy wszystkich workers │ ├── test-workers.sh # Testing │ └── publish-to-lp.sh # 🔥 Kluczowy: Push do wellysa-lp │ ├── docs/ # Dokumentacja │ ├── MEDICAL_TRENDS_CONTENT_SYSTEM_PLAN.md │ ├── FREE_LIBRARIES_STACK.md │ ├── QUICKSTART_FREE_SETUP.md │ └── API.md │ ├── package.json # Root (workspaces) ├── .env.example ├── .gitignore └── README.md \`\`\` **Hosting**: Cloudflare Workers + Pages (admin panel) **Deploy**: Ręczny/CI deploy workers **Zawartość**: Backend logic, AI, scraping, database --- ## 7. Koszty i Limity (CloudFlare Free/Pro Tier) ### Cloudflare Workers - **Free Tier**: 100,000 requests/day - **Wystarczy dla**: ~3,000 unikalnych użytkowników/dzień - **Koszt**: **GRATIS** ✅ ### Cloudflare D1 - **Free Tier**: 5GB storage, 5M rows read/day, 100k writes/day - **Wystarczy dla**: ~100,000 postów w bazie - **Koszt**: **GRATIS** ✅ ### Cloudflare R2 - **Free Tier**: 10GB storage, 1M requests/month - **Wystarczy dla**: ~200 postów z obrazami (50MB/post) - **Koszt**: **GRATIS** ✅ ### Cloudflare Pages - **Free Tier**: Unlimited sites, unlimited requests, 500 builds/month - **Wystarczy dla**: Cały projekt + admin panel - **Koszt**: **GRATIS** ✅ ### Google Gemini API (Content Generation) - **Model**: Gemini 1.5 Flash - **Free Tier**: - 15 requests/min - 1,500 requests/day - 1M tokens/day - **Wystarczy dla**: ~50-100 postów/dzień = **1,500 postów/miesiąc** - **Koszt**: **GRATIS** ✅ ### PubMed API - **Free Tier**: 3 requests/sec (bez klucza), 10 requests/sec (z darmowym kluczem) - **Wystarczy dla**: ~260,000 requests/day - **Koszt**: **GRATIS** ✅ ### NewsAPI - **Free Tier**: 100 requests/day - **Wystarczy dla**: 100 artykułów/dzień - **Koszt**: **GRATIS** ✅ ### Reddit API - **Free Tier**: 60 requests/minute - **Wystarczy dla**: ~86,000 requests/day - **Koszt**: **GRATIS** ✅ ### Google Trends API (unofficial) - **Free Tier**: Unlimited (scraping) - **Koszt**: **GRATIS** ✅ ### Email Notifications (Resend) - **Free Tier**: 100 emails/day, 3,000/month - **Wystarczy dla**: Notyfikacje dla adminów - **Koszt**: **GRATIS** ✅ --- ### 🎉 **ŁĄCZNY KOSZT: 0 PLN / MIESIĄC** 🎉 **Cały system można uruchomić bez wydawania ani złotówki!** Wszystkie komponenty działają w darmowych tierach, które są wystarczające dla: - ✅ 1,500 postów blogowych/miesiąc - ✅ 3,000+ użytkowników/dzień - ✅ 100,000 postów w bazie danych - ✅ Pełna automatyzacja z cron jobs - ✅ Email notifications - ✅ Admin panel - ✅ Social media content generation --- ## 8. Timeline Implementacji ### Faza 1: Fundament (Tydzień 1-2) - [ ] Setup Cloudflare D1 database - [ ] Setup Cloudflare R2 bucket - [ ] Create database schema - [ ] Setup podstawowego Workera API - [ ] Implementacja autentykacji admin ### Faza 2: Trend Detection (Tydzień 2-3) - [ ] Integracja z Google Trends API - [ ] Integracja z PubMed API - [ ] Algorytm scoringu trendów - [ ] Cron job dla daily detection - [ ] Panel admin: podgląd trendów ### Faza 3: Web Scraping (Tydzień 3-4) - [ ] Implementacja scrapera (Puppeteer/Cheerio) - [ ] Integracja z popularnymi serwisami medycznymi - [ ] Rate limiting i error handling - [ ] Cron job dla scraping - [ ] Panel admin: podgląd scraped articles ### Faza 4: AI Content Generation (Tydzień 4-5) - [ ] Integracja z Google Gemini API - [ ] Prompty dla blog generation - [ ] Prompty dla social media - [ ] Quality checks (plagiarism, tone) - [ ] Generowanie wielu wariantów - [ ] Panel admin: podgląd wygenerowanego contentu ### Faza 5: Approval System (Tydzień 5-6) - [ ] Build admin panel UI - [ ] Preview modal - [ ] Rich text editor - [ ] Approve/reject workflow - [ ] Scheduling publikacji - [ ] Notyfikacje email ### Faza 6: Publishing (Tydzień 6-7) - [ ] Generator HTML dla blog postów - [ ] Kreator /blog/index.html (listing) - [ ] Aktualizacja sitemap.xml - [ ] Deploy workflow (git push lub API) - [ ] Integracja social media (opcjonalnie) - [ ] Dodanie linku "Blog" w nawigacji głównej strony ### Faza 7: Testing & Launch (Tydzień 7-8) - [ ] End-to-end testing całego flow - [ ] Performance testing - [ ] SEO audit - [ ] Security audit - [ ] Soft launch (internal testing) - [ ] Public launch ### Faza 8: Monitoring & Optimization (Ongoing) - [ ] Analytics dashboard - [ ] Content performance tracking - [ ] A/B testing tytułów - [ ] Continuous improvement AI prompts --- ## 9. Metryki Sukcesu (KPIs) ### Content Quality - Plagiarism score < 20% - Manual approval rate > 70% - Avg time to publish < 24h od detection trendu ### Traffic - Blog traffic: 1000+ unique visitors/month (cel 3 miesiące) - Avg time on page: > 2 minuty - Bounce rate: < 60% ### Engagement - Social media shares: > 50/post - Comments: > 10/post - CTR do app download: > 5% ### Operational - System uptime: > 99% - Trend detection success rate: > 80% - Scraping success rate: > 90% - AI generation success rate: > 95% --- ## 10. Ryzyka i Mitygacja ### Ryzyko 1: API Rate Limits **Mitygacja**: - Implementacja cache - Rotacja API keys - Graceful degradation ### Ryzyko 2: Jakość AI-generowanego contentu **Mitygacja**: - Obowiązkowa manual review - Quality scoring przed publikacją - Ciągłe doskonalenie promptów ### Ryzyko 3: Copyright/plagiarism **Mitygacja**: - Automated plagiarism detection - Proper source attribution - Paraphrasing z wysoką oryginalnością ### Ryzyko 4: Limity Free Tier (Gemini/Cloudflare) **Mitygacja**: - **Gemini**: 1,500 requests/day = ~50 postów/dzień (1,500/miesiąc to więcej niż potrzeba!) - **Cloudflare**: 100k requests/day = wystarczające dla 3k+ users/day - **Monitoring**: Dashboard Cloudflare + Gemini Analytics - **Cache**: Użycie Cloudflare KV do cache'owania (zmniejsza load) - **Batch processing**: Grupowanie requestów - **Fallback**: Jeśli limit Gemini osiągnięty → queue do następnego dnia - **Alternatywa**: Self-hosted Ollama (Llama 3.3) jako backup (też darmowy!) ### Ryzyko 5: Rate limiting APIs **Mitygacja**: - **NewsAPI**: 100 req/day - rotacja kluczy API (wiele darmowych kont) - **Reddit**: 60 req/min - więcej niż wystarczające - **PubMed**: 3 req/sec - implementacja delay między requestami - **Implementacja**: Rate limiter w kodzie (jak pokazano w sekcji 3.3) ### Ryzyko 6: Brak kosztów = brak ryzyka finansowego! 🎉 **To największa zaleta**: Możesz eksperymentować bez obawy o rachunki! --- ## 11. Przyszłe Rozszerzenia (Future Roadmap) ### V2 Features - [ ] Multi-language support (EN/PL automatic translation) - [ ] Newsletter integration (email digest) - [ ] User comments na blog - [ ] Content recommendation engine - [ ] A/B testing headlines - [ ] Video content generation (shorts dla TikTok/Reels) ### V3 Features - [ ] AI chatbot na blogu (pytania o artykuły) - [ ] Podcast generation (text-to-speech) - [ ] User-generated content (community blog) - [ ] Partnerships z ekspertami medycznymi (guest posts) --- ## 12. Kontakt & Wsparcie ### Team Roles - **Product Owner**: [Twoje imię] - **Backend Developer**: TBD - **Frontend Developer**: TBD - **Content Reviewer**: TBD - **Medical Advisor**: TBD (opcjonalnie, konsultant) ### Documentation - Szczegółowa dokumentacja API: \`/docs/api.md\` - User guide dla admin panel: \`/docs/admin-guide.md\` - Deployment guide: \`/docs/deployment.md\` --- ## Podsumowanie System wykrywania trendów medycznych i generowania contentu to kompleksowe rozwiązanie, które: 1. **Automatyzuje** proces tworzenia wartościowego contentu 2. **Skaluje** produkcję artykułów blogowych i postów social media 3. **Zachowuje** kontrolę jakości poprzez manual approval 4. **Integruje się** z obecną infrastrukturą Cloudflare 5. **Pozostaje** cost-effective (~$10-15/miesiąc) 6. **Dostarcza** SEO-friendly content dla lepszej widoczności **Czas implementacji**: 7-8 tygodni **Koszt operacyjny**: **0 PLN/miesiąc** 🎉 **ROI**: Wzrost traffic + brand awareness + lead generation (bez inwestycji!) ### Zalety 100% Darmowego Stacku: #### Google Gemini API (Free Tier): 1. ✅ **Całkowicie darmowy** - 1M tokens/day = ~50-100 postów/dzień 2. ✅ **Bez karty kredytowej** - nie musisz podawać danych płatniczych 3. ✅ **Natywna integracja z Google** - Trends, Search, News 4. ✅ **Szybkość** - Gemini 1.5 Flash zoptymalizowany 5. ✅ **Multimodal** - gotowość na obrazy (Vision API) #### Cloudflare Free Tier: 1. ✅ **Unlimited** Cloudflare Pages (hosting + deploys) 2. ✅ **100k requests/day** Workers (wystarczające!) 3. ✅ **5GB** bazy danych D1 4. ✅ **10GB** storage R2 5. ✅ **Unlimited** cron triggers #### Dodatkowe API (Free): 1. ✅ **Google Trends** - unlimited scraping 2. ✅ **PubMed** - 260k requests/day 3. ✅ **Reddit** - 86k requests/day 4. ✅ **NewsAPI** - 100 requests/day 5. ✅ **Resend Email** - 3k emails/month ### 🚀 **Zero Risk, Full Automation!** Możesz zbudować pełną platformę content marketingową: - Bez wydawania złotówki - Bez podawania karty kredytowej - Bez ukrytych kosztów - Z możliwością upgrade w przyszłości (jeśli będzie trzeba) **Perfect dla bootstrapped startup!** --- *Dokument stworzony: 2026-01-15* *Wersja: 1.0* *Status: Draft - Do Review*`; // Configure marked.js marked.setOptions({ breaks: true, gfm: true, highlight: function(code, lang) { if (lang && hljs.getLanguage(lang)) { try { return hljs.highlight(code, { language: lang }).value; } catch (err) {} } return hljs.highlightAuto(code).value; } }); // Render markdown function renderMarkdown() { const contentDiv = document.getElementById('content'); const loadingDiv = document.getElementById('loading'); try { const html = marked.parse(markdownContent); contentDiv.innerHTML = html; // Hide loading, show content loadingDiv.classList.add('hidden'); contentDiv.classList.remove('hidden'); // Highlight code blocks document.querySelectorAll('pre code').forEach((block) => { hljs.highlightElement(block); }); } catch (error) { console.error('Error rendering markdown:', error); loadingDiv.innerHTML = '

Błąd podczas ładowania dokumentu.

'; } } // Dark mode toggle let darkMode = false; function toggleDarkMode() { darkMode = !darkMode; document.body.classList.toggle('bg-gray-900', darkMode); document.body.classList.toggle('text-white', darkMode); const content = document.getElementById('content'); if (content) { content.classList.toggle('bg-gray-800', darkMode); content.classList.toggle('text-gray-100', darkMode); } // Update button text const btn = event.target; btn.textContent = darkMode ? '☀️ Tryb jasny' : '🌙 Tryb ciemny'; } // Initialize on page load document.addEventListener('DOMContentLoaded', renderMarkdown);