Fixed the Text field on /advertiser/campaigns/new and /advertiser/campaigns/[id]/edit not rendering on Windows Chrome.
Fixed horizontal page scroll in /advertiser campaign wizard and dashboard panels on Windows.
Changelog
Meaningful product and platform updates for TG.app.
Expanded /advertiser/analytics with KPI cards, date and breakdown tabs, trend chart, campaign table, CSV export, and full AdsGram sync via Sync now.
KPIs, breakdown tabs, and daily trend chart on one page
Added Save draft on every step of the campaign wizard at /advertiser/campaigns/new and /advertiser/campaigns/[id]/edit so you can pause without a creative or full budget.
Workflow guide explains draft saves and submit from /advertiser/campaigns
Redesigned the placement picker on the Setup step of /advertiser/campaigns/new with compact phone previews and a clearer three-column grid.
Mini Apps, Channels, and other placements with inline previews
Improved the campaign wizard step indicator and fixed horizontal scroll and sticky footer layout in /advertiser panels.
Added a Campaign workflow alert on /advertiser/campaigns with a link to /docs/advertiser/campaigns.
Fixed the Text field in the creative step so focus no longer jumps to the bottom or breaks scroll.
The live ad preview on /advertiser/campaigns/new and /advertiser/campaigns/[id]/edit now stays visible while you scroll through each wizard step.
Preview column follows scroll on desktop and stays pinned at the top on mobile
Improved validation on /advertiser/campaigns/new and /advertiser/campaigns/[id]/edit: inline field errors and a summary banner when a step is incomplete.
Clear per-field messages plus a step summary before you continue
Post-style (FULLSCREEN_MEDIA) campaigns now accept JPG, PNG, and GIF uploads instead of video-only media.
Post-style format with image and GIF support in the creative step
Added /advertiser icon, text, and brand name fields in the creative step at /advertiser/campaigns with a live Adsgram-style preview.
Icon, brand row, and body copy reflected in the live preview
Added Duplicate on /advertiser/campaigns to copy an existing campaign as a new draft and open /advertiser/campaigns/[id]/edit.
One-click duplicate creates a draft copy with its own creatives
Collapsible dashboard sidebar in /creator, /advertiser, and /admin: collapse to icons on desktop and your preference is remembered.
Fixed the App of the Day mobile screenshot strip on / so thumbnails scroll side by side like /apps/[slug], without overlapping.
Horizontal scroll with gap spacing, matching public listing pages
Moved /advertiser campaign creation and editing from a modal on /advertiser/campaigns to full-page routes at /advertiser/campaigns/new and /advertiser/campaigns/[id]/edit with a sticky footer action bar.
Dedicated wizard pages with step progress and anchored Cancel / Continue actions
/Advertise CTAs now open /advertiser/campaigns/new directly instead of the old ?new=1 modal shortcut.
TON checkout uses a live USDT/TON rate from TonAPI (refreshes every 5 minutes). The FX tab at /admin/payment-settings shows the live rate instead of a manual field.
Renamed the official group ad product to TG.app channel ad across checkout, admin, and payment notifications.
Added a Strategy step to the /advertiser campaign wizard at /advertiser/campaigns: choose CPM or CPC pricing, set total campaign budget in USDT, optional max reach frequency (1-7), and see estimated impressions before you launch.
Pricing model, total budget, and optional frequency cap with a live strategy summary
Added a Targeting step at /advertiser/campaigns with interface language and country filters (all or specify), VPN audience cards, platform targeting, Telegram Premium toggle, and TON wallet targeting with pro tips.
Audience filters with multi-select tags, VPN cards, and an audience summary
Expanded the campaign wizard to five steps (Setup, Format, Strategy, Targeting, Creative) so first-time /advertisers can configure delivery and audience before uploading creative.
Added full-page campaign create and edit routes at /advertiser/campaigns/new and /advertiser/campaigns/[id]/edit (modal flow on /advertiser/campaigns still works).
Rebuilt the /advertiser campaign wizard at /advertiser/campaigns with a guided 5-step flow, visual format groups (Mini App vs Telegram client), performance hints, and live creative preview.
Choose ad format with visual previews, grouped like Adsgram but with specs and recommendations
Improved the App of the Day hero on / with a horizontal mobile screenshot strip and cleaner layout when listing screenshots are available.
Show verified Telegram subscriber and member counts on catalog cards and /apps/[slug] listing pages for channels and groups only.
Improved Telegram member count resolution and engagement backfill for community listings in the catalog.
Redesigned App of the Day on / with a laurel spotlight badge, tighter hero layout, and action buttons anchored in a footer bar.
Daily spotlight card with clearer hierarchy
Improved listing Details on /apps/[slug]: Trust, TON, and Buzz scores include help popovers linking to /docs/listing-insights; Platforms, Languages, and Links sit in a compact three-column row.
Score explanations and metadata in one panel
Added /docs/listing-insights explaining Trust, TON readiness, and Buzz scores for catalog listings.
Improved listing icon reliability: better Telegram username fallbacks on cards and rejecting expired Bot API file URLs when saving listings.
Fixed listing save on /creator/apps/[id] and /admin/apps/[id]/edit: scraped store links (Google Play, tgBot, etc.) are preserved when editing website and social fields.
Fixed admin edit wiping optional links because the form did not load existing link fields before save.
Fixed Creator Studio social link inputs blocking save when URLs omitted https:// (browser url field validation).
Improved open link normalization for bare t.me/ Mini App paths and clearer API errors when name or description exceeds length limits.
Fixed admin bot /changelog notifications: fallback to ADMIN_TELEGRAM_IDS when no approved groups, error logging, and npm run /changelog:notify to resend.

