diff --git a/.env.example b/.env.example index 0442e06..e4b7aa2 100644 --- a/.env.example +++ b/.env.example @@ -24,3 +24,13 @@ SMTP_PASS= # Cron job protection — generate with: openssl rand -base64 32 CRON_SECRET= + +# TikTok OAuth / posting (server-side only) +# Source of truth for cron posting: QRMaster server .env +# Production example: https://qrmaster.net/api/tiktok/callback +# Local dev example: http://localhost:3000/api/tiktok/callback +# Tokens are saved in the DB after the OAuth callback; do not store access tokens here. +TIKTOK_CLIENT_KEY=aw2l7czcin3uk426 +TIKTOK_CLIENT_SECRET=LapujWkqpZfj1jgWBeCzFhw2nuhMPMBA +TIKTOK_REDIRECT_URI=https://qrmaster.net/api/tiktok/callback +TIKTOK_ADMIN_KEY=yV0CzlXyw00kFc7hnnJZv_eoH5WaqGsD5l8_GH7Aj2s \ No newline at end of file diff --git a/Userstimo.hermes.env b/Userstimo.hermes.env new file mode 100644 index 0000000..6a36887 --- /dev/null +++ b/Userstimo.hermes.env @@ -0,0 +1,17 @@ +Greenlens TikTOk + + + +TIKTOK_CLIENT_KEY=awoihp5i4k4rraen +TIKTOK_CLIENT_SECRET=TdnxlcQLNRXAy2PW0GsSlQTEqGeHgU7x +TIKTOK_REDIRECT_URI=https://greenlenspro.com/api/tiktok/callback +PLANT_IMPORT_ADMIN_KEY=greenlens-admin-2024 + + + +Qrmaster + +TIKTOK_CLIENT_KEY=aw2l7czcin3uk426 +TIKTOK_CLIENT_SECRET=LapujWkqpZfj1jgWBeCzFhw2nuhMPMBA +TIKTOK_REDIRECT_URI=https://qrmaster.net/api/tiktok/callback +TIKTOK_ADMIN_KEY=yV0CzlXyw00kFc7hnnJZv_eoH5WaqGsD5l8_GH7Aj2s \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 28f0440..921d1ec 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -54,6 +54,10 @@ services: NEXTAUTH_SECRET: ${NEXTAUTH_SECRET} NEXT_PUBLIC_APP_URL: ${NEXT_PUBLIC_APP_URL:-http://localhost:3050} INTERNAL_API_SECRET: ${INTERNAL_API_SECRET} + TIKTOK_CLIENT_KEY: ${TIKTOK_CLIENT_KEY:-} + TIKTOK_CLIENT_SECRET: ${TIKTOK_CLIENT_SECRET:-} + TIKTOK_REDIRECT_URI: ${TIKTOK_REDIRECT_URI:-https://qrmaster.net/api/tiktok/callback} + TIKTOK_ADMIN_KEY: ${TIKTOK_ADMIN_KEY:-} IP_SALT: ${IP_SALT:-your-salt-change-in-production} ENABLE_DEMO: ${ENABLE_DEMO:-false} NEXT_PUBLIC_INDEXABLE: ${NEXT_PUBLIC_INDEXABLE:-true} diff --git a/docs/automations/social-accounts-and-jobs.md b/docs/automations/social-accounts-and-jobs.md new file mode 100644 index 0000000..66380b6 --- /dev/null +++ b/docs/automations/social-accounts-and-jobs.md @@ -0,0 +1,64 @@ +# Social Accounts + +## Account Mapping +| Brand | Facebook Page | Facebook Page ID | Instagram Business Account | Instagram User ID | X/Twitter Account | Target Username | +| --- | --- | --- | --- | --- | --- | --- | +| QRMaster.net | QRMaster.net | 884792004727212 | QRMaster.net | 17841480094799114 | TIMO_QRMASTER | qrmaster | +| GreenLens Pro | GreenLens Pro | 1150261294842586 | GreenLens Pro | 17841422012320229 | greenlensproai | greenlens.pro | + + +## Brand Rules +- QRMaster-Posts dürfen **nur** auf `QRMaster.net`-Accounts posten. +- GreenLens-Posts dürfen **nur** auf `GreenLens Pro`-Accounts posten. +- Kein Crossposting zwischen Brands. +- Token niemals öffentlich teilen; nur Referenz in dieser Datei. + + +## Scripts +| Path | Purpose | +| --- | --- | +| `C:\Users\timo\Documents\meta_token_refresh.py` | Meta Long-Lived + Page Token Refresh | +| `C:\Users\timo\Documents\instagram_r2_carousel_post.py` | Instagram single-image/carousel über R2 | +| `C:\Users\timo\x-api-autopost\x_media_post.py` | X/Twitter for QRMaster | +| `C:\Users\timo\greenlens-x-autopost\` | X/Twitter for GreenLens | + + +## Token Files / Paths +| Path | Contains | +| --- | --- | +| `C:\Users\timo\Documents\meta_instagram_tokens.env` | Meta Facebook + Instagram long-lived/page tokens | +| `C:\Users\timo\Documents\r2_social_media.env` | R2 upload credentials for IG assets | +| `C:\Users\timo\Documents\instagram_r2_carousel_post.py` | uses both env files above | +| `C:\Users\timo\Documents\XApiAutopost\.env` | X/Twitter QRMaster creds | +| `C:\Users\timo\Documents\greenlens-x-autopost\.env` | X/Twitter GreenLens creds | +| `C:\Users\timo\Documents\greenlens\Greenlens\.env` | GreenLens TikTok + plant import admin creds | + +## QRMaster TikTok Cron Credentials +- Source of truth: the server-side `.env` for the QRMaster app. +- Required variables: `TIKTOK_CLIENT_KEY`, `TIKTOK_CLIENT_SECRET`, `TIKTOK_REDIRECT_URI`. +- Optional helper: `TIKTOK_ADMIN_KEY` for guarding the `/api/tiktok/connect` start route. +- OAuth result: access/refresh tokens are stored in the database after `/api/tiktok/connect` and `/api/tiktok/callback`. +- Do not put TikTok access tokens in `.env`; the cron job reads them from the DB through the app flow. +- For cron posting, use the same QRMaster server environment that already contains `CRON_SECRET` / `INTERNAL_API_SECRET` for internal APIs. + +## Refresh Behavior +- Meta user/page tokens werden automatisch refreshed durch `python C:\Users\timo\Documents\meta_token_refresh.py`. +- QRMaster Page-Auswahl erzwingt Page-ID `884792004727212`. +- GreenLens Page-Auswahl erzwingt Page-ID `1150261294842586`. + + +## Cron Jobs +| Job Name | Schedule | Deliver | Notes | +| --- | --- | --- | --- | +| `Weekly Meta Token Refresh` | Montag 09:00 | Telegram + Email | Refreshes Meta tokens | + +> Social-package deliverables only after explicit `Go`. + + +## Publish Checklist +1) Brand wählen → nur passende Accounts zulassen. +2) Media vorbereiten: QRMaster → R2-Prefix `qrmaster/`, GreenLens → `greenlens/`. +3) Facebook: Page-ID + Page-Token verwenden. +4) Instagram: IG User ID + Page-Token über Container + `media_publish`. +5) X: zugehöriges Brand-Skript + zugehöriges `.env` verwenden. +6) Keine Token/Secrets loggen. diff --git a/landing-preview.html b/landing-preview.html new file mode 100644 index 0000000..2271b2e --- /dev/null +++ b/landing-preview.html @@ -0,0 +1,1207 @@ + + + + + +QR Master — Premium Landing Preview + + + + + + + + + + +
+ +
+
+ Free Dynamic QR Code Generator +

QR codes that stay editable. Analytics that stay yours.

+

Create dynamic QR codes with editable destinations, real-time scan tracking, and custom branding. Static codes are free forever — no signup needed.

+ +
+
+ No credit card + Free forever plan + GDPR-friendly analytics +
+
+
+
+
+2,4k scans today
+
Destination updated
+
48 countries
+
+
+
+ + +
+
+
0
Happy Users
+
0
Active QR Codes
+
0
Total Scans
+
0
Countries
+
+
+ + +
+
+
+
Instant Generator
+

Type a URL. Get a QR code. Done.

+

No account, no watermark, no catch. Static codes work forever.

+
+
+
+

Instant QR Code Generator

+

Live preview updates as you type.

+ + +
+ Foreground color +
+ + + + + +
+
+
+ + Save & Track → +
+
+
+
+ // live preview — scan me +
+
+
+
+ + +
+
+
+
Static vs. Dynamic
+

Stop reprinting. Start editing.

+

Dynamic QR codes let you switch destinations instantly and track every scan — the printed code never changes.

+
+
+
+ Always free +

Static QR Codes

+

Perfect for permanent content that never changes.

+
    +
  • Works forever, offline-proof
  • +
  • No account required
  • +
  • Content cannot be edited
  • +
  • No scan tracking
  • +
+
+ +
+
+
+ + +
+
+
+
Platform
+

Everything you need for professional QR codes

+

From a single menu code to thousand-row bulk batches — one clean workflow.

+
+
+
+
+

Advanced Analytics

+

Track scans, locations, devices, and user behavior with detailed, privacy-respecting insights.

+
+
+
+

Full Customization

+

Brand your QR codes with custom colors, corner styles, and your own logo.

+
+
+
+

Unlimited Static Codes

+

Create as many static QR codes as you need. Free forever, no limits, no watermarks.

+
+
+
+

Bulk Operations

+

Create hundreds of QR codes at once with CSV / Excel import and batch processing.

+
+
+
+

Integrations

+

Connect with Zapier, Airtable, Google Sheets, and the tools you already use.

+
+
+
+

Developer API

+

Integrate QR code generation into your own applications with our REST API.

+
+
+
+
+ + +
+
+
+
Pricing
+

Simple plans. No surprises.

+

All plans include unlimited static QR codes and basic customization.

+
+
+
+
Free
+
€0forever
+
    +
  • 3 active dynamic QR codes
  • +
  • Unlimited static QR codes
  • +
  • Basic scan tracking
  • +
  • Download as SVG / PNG
  • +
+ Start Free +
+ +
+
Business
+
€29/ month
+
    +
  • 500 dynamic QR codes
  • +
  • Bulk creation (up to 1,000)
  • +
  • Everything from Pro
  • +
  • Priority email support
  • +
+ Choose Business +
+
+
Enterprise
+
Custom
+
    +
  • Unlimited dynamic QR codes
  • +
  • Everything from Business
  • +
  • Dedicated account manager
  • +
  • SLA & custom contracts
  • +
+ Contact Us +
+
+

Cancel anytime. Your static QR codes keep working — always.

+
+
+ + +
+
+
+
FAQ
+

Frequently asked questions

+
+
+
+ Do I need an account to create QR codes? +

No account is required for static QR codes. Dynamic QR codes with tracking and editing capabilities require a free account.

+
+
+ What's the difference between static and dynamic QR codes? +

Static QR codes contain fixed content that cannot be changed. Dynamic QR codes can be edited anytime and provide detailed analytics.

+
+
+ Will my QR codes work forever? +

Static QR codes work forever as the content is embedded directly. Dynamic QR codes work as long as your account is active.

+
+
+ What file type should I use for printing? +

For print materials, we recommend SVG format for scalability or high-resolution PNG (300+ DPI) for best quality.

+
+
+ How do analytics work? +

We track scans, locations, devices, and referrers while respecting user privacy. IP addresses are hashed, no personal data is stored, and we honor Do Not Track headers.

+
+
+ Can I bulk-create codes with my own data? +

Yes, you can upload CSV or Excel files to create multiple QR codes at once with custom data mapping.

+
+
+
+
+ + +
+
+

Your next print run shouldn't depend on a URL.

+

Create a dynamic QR code in 30 seconds. Edit it forever.

+ +
+
+ + + + +
DESIGN PREVIEW — NOT LIVE
+ + + + + +