Changelog

Every update to Adswish, with timestamps. Download the full history as a PDF for your records.

Download PDF
  1. v5.1.0

    Business wallet replaced with Stripe pre-authorization — no custodial risk

    • Business wallet removed: no more top-ups, cash-outs, or balance tracking. Fixed-fee campaigns now reserve funds directly on the business's saved card via Stripe pre-authorization (capture_method: manual), so Adswish never holds business money.
    • Money stays on the business's card until a deliverable is approved — capture happens at approval time, and the 90/10 split (creator 90% / platform 10%) is recorded as a pending hold exactly as before.
    • If a deliverable is rejected or the campaign never completes, the authorization is voided and the funds are released back to the business automatically.
    • 7-day maximum hold (Stripe's hard limit) is enforced by a new daily expiry job that voids stale authorizations and notifies both sides.
    • Business payments page redesigned: shows reserved-on-card holds and pre-auth history instead of a wallet balance.
    • Affiliate and hybrid flows are unchanged (charged on conversion with the same 90/10 split).
    • Verified end-to-end against a live test environment: fixed (Visa + Mastercard pre-auth → capture), affiliate, hybrid, messaging, pixel heartbeat, click logging, uptime mapping, and tracking-status checks all pass — 40/40 checks green.
    • Fixed race where an accepted fixed-fee creator could be paid without funds being committed (previously the wallet debit only happened at acceptance and the approval path never recorded creator earnings).
  2. v5.0.0

    Full landing page redesign — new hero, navigation, guides, perks, and legal pages

    • New hero section: sky-gradient scene with inflated translucent SVG lettering ("A NEW WAY TO ADVERTISE PROMOTE AND EARN FROM ADS"), design guide lines, crosshairs, and cloud wisps — replacing the previous oval/collage hero.
    • Navigation completely redesigned: floating glass pill bar with the Adswish wordmark, six nav links (Creators, Businesses, Plans, How it works, Perks, Guides), and Sign in / Sign up buttons right-aligned.
    • Navigation accent color changed from purple to blue; Download button renamed to Sign up.
    • How it works section expanded to 5 steps: added step 05 — "Business gets ads" (Custom-made adverts reach the right viewers).
    • Perks section redesigned as a side-by-side split layout: business benefits on the left, creator benefits on the right, replacing the previous horizontal carousel.
    • Guides section redesigned: four chapter cards (How To Start, How To Build, How To Sell, How To Scale) in a 2×2 grid with pixel-art illustrations, dividers, metadata, and hover lift.
    • Integrations section updated to show only new advertising integrations (Google Ads, Meta Ads, TikTok Ads, YouTube Ads, Instagram Ads, X Ads, LinkedIn Ads, Pinterest Ads, Snapchat Ads) — core services removed from the marketing grid.
    • "See how it works" button now links to the dedicated /how-it-works page instead of an on-page anchor.
    • Starburst lens-flare effect removed from the hero scene.
    • Subprocessors, Privacy Policy, and Terms of Service pages updated with latest content.
  3. v3.8.1

    Homepage Perks section redesigned as a side-by-side business and creator layout

    • Replaced the Perks carousel with a split-page layout: business benefits on the left and creator benefits on the right.
    • Preserved the Perks heading, supporting copy, and icon/badge treatment while making the two audiences visually distinct.
  4. v3.8.0

    Landing page rebranded to Adswish, dark CTA fixed, cookie banner improved

    • Landing page hero rebranded from 'tildei' to Adswish: logo, headline ("Business & Creator Ads Marketplace"), navigation (Creators, Businesses, How it works, Perks, Guides), and CTA ("Get Started Free").
    • Dark CTA section ("Ready to begin?") background fixed: was being overridden by the dot-grid CSS rule; now uses a deep navy (#0c0e16) with blue radial glow and is properly excluded from the dot-grid overlay.
    • Cookie consent banner improved: solid white background with shadow for better contrast, buttons ("Essential only" and "Accept all") now visually distinct and reliably pressable with explicit pointer-events and hover states.
    • Fixed dot-grid CSS rule applying to the dark CTA and footer sections — added :not(.dark-cta-section):not(footer) exclusions.
    • Fixed cookie banner buttons being hard to press — added solid white background, shadow, and explicit hover/focus styles.
  5. v3.7.0

    Landing page redesign, dark mode toggle, team roles, real-time analytics, and Playwright E2E

    • Landing page hero redesigned: new Cofounder-style layout with pixel-art meadow backdrop, floating status pills (Task Completed badges), and refreshed headline/CTA copy — "Adswish lets you run creator campaigns with built-in tracking."
    • Dark mode quick toggle: a sun/moon/monitor cycle button now lives in the dashboard top bar. One click cycles light → dark → system. Appearance settings persist from the existing Settings → Appearance page; the toggle is a convenience shortcut.
    • Team admin/member roles: the business_team_members table already stored admin vs member roles; the API now enforces role-based permissions (admins can manage the team, members have read-only access).
    • Real-time analytics hook: useRealtimeAnalytics() subscribes to Supabase Realtime on daily_conversion_rollups — metrics update live without polling. Reconnects on tab visibility change.
    • Playwright E2E test suite expanded: landing page tests updated for new hero, plus new tests for status page, plans, signup consent checkboxes, /reset-password, /onboarding redirects, legal pages, and 404 handling.
    • Campaign strip now shows with any active campaign count (was gated at 100+). The section uses real data from /api/v1/campaigns/count — never fabricated examples.
    • Fixed /reset-password 404: new page handles Supabase recovery tokens (code exchange, PKCE fallback, implicit grant support) then redirects to /update-password. Password reset emails now work end-to-end.
    • Fixed /onboarding/creator and /onboarding/business 404: new redirect pages read the user's onboarding_step from their profile and route to the correct sub-page.
    • Added consent_logs SELECT policy (migration 065): users can now read their own consent history instead of the table being service-role only.
    • Removed orphaned inline SVG block from landing page that was causing 5 typecheck errors and a lint parse error.
  6. v3.6.0

    GDPR cookie consent, QA audit hardening, and pixel.js removal

    • GDPR cookie consent banner: a new CookieConsentBanner component appears on first visit, stores the user's choice in localStorage, and logs it to the consent_logs table via /api/internal/consent — essential-only and accept-all options, with a link to the Privacy Policy.
    • Info tooltips (ℹ️) added to every profile section that needs explanation: Settings page cards (Notifications, Tracking, Payouts, Data Export, Session Timeout, Security), Appearance and Connected Accounts sections, and the creator Media Kit stats grid (Total Followers, Campaigns Completed, Conversion Rate, Total Driven Sales). Public profiles already had SectionLabel tooltips on every section.
    • pixel.js route removed: the legacy /pixel.js endpoint now returns 404. The Chrome extension and desktop tracker are the only supported tracking methods; the /api/v1/pixel/ping heartbeat endpoint remains for backward compatibility.
    • Full 7-phase QA audit completed: 294 Vitest tests passing, typecheck clean, lint 0 errors, build successful. All API endpoints verified (health, tracking redirect, pixel ping, conversion webhook, domain verification, tracking status). CSP headers, rate limiting, SSRF protection, and Stripe safety all confirmed.
    • Fixed the missing CookieConsentBanner component that was imported on the landing page but never created — the GDPR consent banner now renders correctly.
    • Cleaned up pixel.js references in tracking status, pixel ping, and conversion webhook route comments.
  7. v3.5.0

    SocialVerify — independent social-account verification

    • SocialVerify campaign flow: select any combination of YouTube, TikTok, Instagram, and Twitter/X, and the campaign stays locked until every selected platform is verified.
    • Cryptographic verification tokens: each platform gets an HMAC-signed token with a 7-day expiry, a countdown, and auto-rotation — post it to your bio to prove ownership.
    • No-API authenticity scoring on a 100-point scale (engagement rate, comment quality, posting consistency, growth velocity, cross-platform, plus a challenge bonus) from public post data or signed self-reported metrics — no privileged platform API keys required.
    • Seven-proof identity binding to stop impersonation: domain ownership, bi-directional links, time-delayed token persistence, video proof, a two-way handshake, historical content, and social-graph analysis, combined into a confidence score.
    • Signed domain manifest at /.well-known/social-verification.json — a cryptographically signed, public record of your verified accounts that anyone can audit independently.
    • Full audit with weighted scoring (signature, token match, authenticity, cross-platform) and an immutable audit log.
    • A five-step business dashboard (Select Platforms → Tokens → Identity → Audit → Authenticity) with a lock banner, monospace token cards, proof-of-identity cards, and a circular score ring.
    • Creator tiers now follow a clean 10× ladder — Small 10K, Moderate 100K, Big 1M — applied consistently across onboarding, eligibility, the marketplace, and SocialVerify platform minimums.
    • Creator onboarding Step 2 is now a dedicated four-step wizard (Platform → Details → Verify → Review) with a progress bar — pick a platform, enter your handle and followers to see your tier live, copy your per-account proof code into your bio, and upload a screenshot for admin review, all before advancing. The Instagram/TikTok OAuth dead-ends were removed so manual verification is the one clear path.
    • Public SocialVerify report for businesses: every campaign is now shareable at /audit/business/:id (plus a no-auth JSON API at /api/v1/audit/business/:id) showing the company, per-platform verification, overall authenticity score, and identity confidence — mirroring the creator audit page.
    • The creator dashboard's Connect Instagram/TikTok buttons were removed — YouTube self-serve ownership proof and manual token-in-bio + screenshot verification are now the only connect paths, so no creator hits an unconfigured-OAuth dead end.
  8. v3.4.0

    Platform hardening, account deletion, and campaign assets

    • Self-service account deletion from Settings → Danger zone: creators are blocked while they have pending-hold earnings, businesses while a pre-paid balance remains, and completed deletions GDPR-anonymise reviews (identity redacted, rating + date retained) before removing the account.
    • Campaign asset upload: businesses can now attach a preview image or video to a campaign (JPEG/PNG/WebP/GIF/MP4/WebM, max 25MB) via a new campaign-assets storage bucket.
    • Cursor (keyset) pagination for the creator campaign feed — stable ordering with no skips or duplicates as new campaigns are posted, with a next_cursor for loading more.
    • Monthly partition maintenance replaced the stub cron: a dynamic SQL function now creates the next 3 months of partitions for clicks_log and daily_conversion_rollups on the 25th, safely and idempotently.
    • Monitor-only UptimeRobot verification is now available: map one monitor ID in Tracking settings and the third tick checks it with a server-side monitor-scoped key — no all-account access or automatic monitor provisioning.
    • Follower re-check worker: a monthly cron re-fetches each connected social account's live follower count, recomputes the creator's tier, and refreshes badges — gracefully skipping any platform whose API keys aren't configured yet.
    • Team seats lifecycle: business owners can invite teammates by email (with plan seat-limit enforcement), invitees accept or decline, and owners can remove members — and the owner is notified in-app the moment a teammate accepts or declines.
    • Team invitations now send a branded email with a one-click accept link, and brand-new invitees get a password-set link so they can log in with a password right away.
    • Campaign preview upload button added to the campaign editor — pick a local image or video and it's stored on the new campaign-assets bucket when the campaign is saved.
    • Google sign-in is now admin-controlled: it stays blurred as Coming soon on login and sign-up until a superadmin flips it live from the Superadmin dashboard — to be done only after the Google Cloud OAuth redirect URI is registered.
    • Admin account management: the Superadmin user directory now shows each account's plan and payments state, with actions to cancel plans, pause/resume payments, and terminate accounts (cancel plan + ban + pause payouts) — all audit logged, and payout/charge jobs skip paused accounts.
    • Notifications no longer auto-mark everything read on open — each row has its own Mark read action plus a Mark all read button.
    • Admin cancel-plan and terminate can now also cancel the underlying Stripe subscription (behind a second explicit confirmation so billing only stops when intended), and canceled plans can be resumed — restoring features and, with confirmation, reactivating a period-end-canceled Stripe subscription.
    • Paused-payment accounts now see a banner on every dashboard page (rendered by the shared shell), not just the overview.
    • TikTok Connect entry points were removed in favor of Instagram/YouTube Connect plus manual screenshot verification (admin-approved), so creators can still get verified and tiered without TikTok's domain-verification requirement.
    • YouTube follower counts can now be looked up with a plain API key instead of OAuth: the monthly follower re-check resolves a channel by handle via the YouTube Data API, so YouTube verification works without the Google consent screen.
    • Self-serve YouTube verification now proves ownership before auto-verifying: paste your channel handle and we ask you to add a one-time per-account code to your channel About, then confirm the live description contains it — no OAuth, no screenshot, no admin, and nobody can claim a channel they don't control. Available in the dashboard and during onboarding.
    • Admin follower-screenshot approval now cross-checks a YouTube claim against a live API lookup at approval time, so the verified count is the real subscriber count rather than the self-reported one.
    • The manual verification form now states explicitly that a self-typed follower count is never auto-verified — it always requires a screenshot and admin review (or a YouTube ownership code), closing the impersonation gap.
    • Twitter/X added as a fourth verification platform — token-in-bio + screenshot + admin review with no privileged API, following the existing follower-tier system.
    • Every manual screenshot verification now issues a per-account proof-of-ownership code: creators post it to their bio and show it in the screenshot, and admins see the expected code so they can confirm the account is real rather than a copy.
    • Public verification report: each approval writes an immutable, publicly-readable audit entry — a shareable page at /audit/:creatorId and a no-auth JSON API at /api/v1/audit/creator/:id showing platform, handle, snapshotted follower count, threshold met, and ownership-token match.
    • Fixed password + authenticator login failing with a Bearer-token error: the 2FA challenge now reuses the client that completed the password/OTP step instead of a fresh sessionless client.
  9. v3.3.0

    Integration hub upgrade, branded email, and two-factor authentication

    • Integration hub now shows real brand logos for every app (Stripe, Resend, Supabase, Upstash, Sightengine, Google Ads, Meta, TikTok, YouTube, Instagram, X, LinkedIn, Pinterest, Snapchat).
    • Add / Remove integrations: press the green Add button to reserve a slot (counts toward your plan limit), then the card flips to a green Added state with a red Remove button. Changes are saved to your account, not just your browser.
    • Two-factor authentication (TOTP): enable 2FA from Settings → Security & 2FA with any authenticator app (Google Authenticator, Microsoft Authenticator, Authy, 1Password). Accounts with 2FA enabled must enter a 6-digit code at login.
    • 2FA at sign-up: brand-new accounts are offered authenticator setup right after creating their account — scan the QR code (or enter the secret manually) and verify one code to enable it before onboarding. Optional and skippable; you can always turn it on later from Settings.
    • Creator profiles upgraded: @handle in the header, rating shows the review count, reviews show the business, campaign, and relative time, a public Campaign History section lists completed and active work, and the friend button gains Added / Copy Username / Message actions.
    • Verification badges now match spec: blue = paid plan + at least one verified social account; gold = Premium plan + 1M+ followers on a verified platform.
    • QR-code sign-up and sign-in fallback: if the confirmation or one-time email never arrives, scan a QR code with any authenticator app and create your account (or log in) with the 6-digit code — no email needed.
    • Business profiles upgraded to match creators: Verified/Gold badges, the verified domain in the header, a Connected channels panel, Recent Reviews showing the creator, campaign, and relative time, and a real Campaign History — plus ℹ️ hover tooltips on every profile section explaining what it does.
    • Microsoft (Azure AD) sign-in button added to login and sign-up — it lights up as soon as the admin enables the provider in Supabase Auth.
    • Landing page gained an Integrations section showing every supported platform with its real logo.
    • Single-session enforcement: only one active login per account — if another device or tab signs in, the older session is instantly kicked to a Session Ended screen with the masked email and a Contact Support button. Prevents account sharing and unauthorised access.
    • Custom SMTP configured: verification, reset, and OTP emails now send through Resend from an Adswish-branded address (onboarding@adswish.com) once the domain DNS is verified.
    • Dark mode and custom appearance settings now reset on logout and are only applied on dashboard pages — the landing page, login, and signup always render in the default light theme.
    • Email rate limits raised for launch (confirmation/OTP/reset emails: 2 to 30 per hour per IP).
  10. v3.2.0

    A/B ad assets, Google Partner credits, and email-link fixes

    • A/B thumbnail assets: three frames auto-extracted from approved creator videos (10% / 50% / 90%), pick the winner for your ad creative.
    • Google Partner credits: apply for the £500 first-campaign credit straight from the Google Ads dashboard.
    • Blended ROAS dashboard: organic revenue (via your tracking links) and paid revenue side by side, revenue-by-source breakdown, and a 30-day organic series.
    • Email links fixed: confirmation links opened in a different browser or device now verify your email automatically instead of failing with a PKCE error.
    • Forgot-password flow: reset links land on a new set-a-new-password page.
    • Supabase auth config corrected: site URL pointed at the live domain and the redirect allowlist now covers localhost and the production domain.
  11. v3.1.0

    Google Ads amplification, verification badges, and session security

    • Google Ads integration: OAuth connect flow, campaign drafts and launches, pause/resume/inject controls, and a budget-protection auto-kill switch.
    • Blended Google Ads analytics view with spend, revenue, conversions, ROAS, and per-campaign charts.
    • Creator verification badges: blue badge for paid plans, gold badge for 1M+ followers on a verified platform.
    • Google sign-in now marks new accounts email-verified so OAuth signups skip the confirmation step; the verify-email page gained a resend button.
    • Session security: configurable inactivity timeout and back-button auto-logout with a clear “session has timed out” message.
    • Plan-based payout holds (Free 7 days, Pro 5, Premium 3) applied to conversion escrow.
    • Landing page rebuilt as v3 with How It Works, Guides, and live-campaign gating; Creator Marketplace demo section removed.
    • Terms, Privacy, and Subprocessors updated for Google Ads integration, OAuth data handling, and session policy.
  12. v3.0.0

    Integrations hub, plan alignment, and security hardening

    • New Integrations hub with per-plan connection limits (6 / 10 / 20) and five locked core integrations.
    • Plan campaign limits aligned across the dashboard, plan page, and enforcement layer (Growth 10, Enterprise 25, Creator Premium 25).
    • Public Changelog added under Legal, with a downloadable PDF of every release.
    • Fixed the notification-settings navigation bug caused by an over-aggressive leave-site prompt.
    • Signed-in header now shows your plan tier and role (Business or Creator).
    • Removed the native beforeunload dialog that interrupted internal dashboard navigation.
  13. v2.2.0

    Blueprint audit, currency alignment, and data controls

    • Closed the safest blueprint gaps: creator eligibility checks, active-plan limit enforcement, and real daily analytics rollup.
    • GDPR data export added to Settings.
    • Payout invoices made private, with creator-scoped signed PDF downloads.
    • Failed weekly payouts remain retryable instead of being incorrectly marked paid.
    • Admin SLA actions and manual-strike controls added, all audit-logged.
    • Live-facing currency displays and new database defaults aligned to GBP.
  14. v2.1.0

    Admin controls, manual verification, and deploy health

    • Admin account suspension, banning, and manual follower-screenshot verification.
    • Fixed the admin MFA redirect loop so the authenticator code screen loads.
    • Deploy health check and production regression sweep tooling.
    • Directory pages now show friendly empty states instead of blank grids.
  15. v2.0.0

    Creator marketplace, plans, balances, and analytics

    • Creator marketplace with tier badges, verified channels, and niche filters.
    • Subscription plans for businesses (Free / Growth / Enterprise) and creators (Free / Pro / Premium).
    • Business balance system with top-up and 90/10 cash-out.
    • Connections (friends), campaign invites, and real-time campaign chat.
    • Analytics dashboards, appearance themes, and Google/TikTok/Instagram social connections.