Changelog

Latest updates and improvements to myStudioDesigner.

2.9.2

2026-02-27

⚡ Equipment-Check Performance

  • Lazy-loaded heavy components: TechnikCheckForm, TechnikCheckResultDisplay, and ExitIntentModal now use next/dynamic — reduces initial page load on /equipment-check.

🐛 Auth & Network Resilience

  • Middleware: getUser()getSession(): Middleware now reads auth from cookies only (no network call), preventing edge function timeouts on slow connections.
  • Stripe subscription-status route: Added 10s server-side timeout with graceful NONE fallback, replaced getUser() with getSession(), DRY'd repeated NONE_MEMBERSHIP object.
  • Stripe client fetch: Added 12s AbortSignal.timeout on /api/stripe/subscription-status client fetch to prevent hanging requests.
  • .bookings crash fix: Added optional chaining (bookings?.find, bookings?.some) in app-shell.tsx, service/[bookingId], and service-completed/[bookingId] — fixes Cannot read properties of undefined (reading 'some').
  • Fallback project: Added bookings: [] to fallback project in app/page.tsx to prevent crash for new/error users.
  • Web Lock deadlock fix: Removed double getSession() call in auth-context.tsx timeout recovery — now uses supabaseUserRef instead, avoiding lock contention.

🐛 Sanity Build Resilience

  • CDN enabled: Sanity client uses CDN for read queries (useCdn: true), reducing direct API pressure during builds.
  • resilientFetch helper: New wrapper in client.ts with 10s timeout + 1 retry on network errors — returns null instead of crashing the build.
  • generateStaticParams / generateMetadata protection: 5 marketing pages (setup-type, studio-review, templates, equipment, en/studio-review) wrapped with try/catch.

⚙️ Performance

  • Build speed: Added googleapis (194MB) to serverExternalPackages in next.config.ts — skips bundling the server-only package, reducing compilation time.

---

2.9.1

2026-02-27

⚙️ SEO & AI Discoverability

  • JSON-LD Structured Data: WebApplication + FAQPage Schema auf Equipment-Check und Video-Setup-Review für Google Rich Snippets und AI-Zitierungen.
  • Semantic HTML: sr-only Sektionen mit H1/H2/FAQ-Inhalten in Server Components — crawlbar für AI-Agents auch wenn UI client-gerendert ist.
  • Google Search Console: Verification-Meta-Tag in Root-Layout vorbereitet.

📊 Funnel Tracking

  • Studio Review Events: STUDIO_REVIEW_RESULT_VIEW, STUDIO_REVIEW_SIGNUP_CTA, STUDIO_REVIEW_SHARE_LINK, STUDIO_REVIEW_SHARE_IMAGE in studio-review-tool.tsx und video-setup-review-client.tsx instrumentiert.
  • Signup Conversion Tracking: SIGNUP_START und SIGNUP_COMPLETE Events mit UTM-Daten und Flow-Label (from-review, from-technik-check, tier-*, direct) auf der Signup-Seite.

---

2.9.0

2026-02-26

✨ Equipment-Check — Neues AI-Tool

  • Marketing-Seite (/equipment-check): Frame-Grab + Equipment-Liste hochladen → AI-Analyse mit 5-Dimensionen-Score, Pfad-Empfehlung (OVER_INVESTED / ONE_KEY_PIECE), Email-Gate und Signup-CTA.
  • Technik-Check Komponenten: TechnikCheckForm (Upload + Equipment-Autocomplete), TechnikCheckResultDisplay (Pentagon-Radar, Score, Pfad-Card, kuratierte Produkt-Card).
  • Kuratierte Empfehlungen: Post-Processing ersetzt AI-halluzinierte Produktnamen mit echten Produkten aus master_equipment via Supabase-Query.
  • OG-Image: Dynamisch generiertes OpenGraph-Bild für Equipment-Check und Video-Setup-Review.

🧩 In-App Integration

  • Gearlist Accordion-Layout: Tabs ersetzt durch 4 Sektionen — Investitionsplanung, Technik-Check, Mein Inventar (default offen), Einkaufsempfehlungen (Wunschliste → Expert-Bundles).
  • In-App Technik-Check: Equipment auto-prefill aus Gearlist, Frame-Grab aus letztem Review vorgeladen, "Zur Einkaufsliste"-Button bei ONE_KEY_PIECE.
  • PendingEquipmentManager: Nach Signup werden Equipment-Teile und Frame-Grab aus localStorage via Server Action importiert.
  • App-Shell Navigation: Equipment-Check als eigener Tool-Eintrag in Sidebar und Mobile-Nav.

⚙️ SEO & Marketing

  • Signup-Flow: Kontext-spezifische Texte für ?from=technik-check (Email-Prefill, Equipment-spezifische Steps).
  • Video-Setup-Review Refactor: Page in Server-Component + Client-Component aufgeteilt, OG-Image hinzugefügt.
  • Sitemap & Robots: /equipment-check mit Priorität 0.9, AI-Bot-Regeln für Content-Seiten.
  • Site-Header & Mobile-Nav: Equipment-Check Link im Tools-Dropdown.
  • UTM-Tracking: UTMCapture-Komponente speichert UTM-Parameter aus Marketing-URLs.
  • Analytics Events: Equipment-Check Funnel-Events (Form Submit, Result View, Path, Email Unlock, Share, Signup CTA).
  • llms.txt: Neue Route /llms.txt für AI-Crawler.

---

2.8.0

2026-02-26

✨ Studio Vision — Personalisiertes Zielbild

  • StudioVisionWidget: Eigenständiges Dashboard-Widget zeigt pro Dimension den Business-Impact (z.B. Audio → Audience Retention).
  • VisionImpact Server Action: Gemini generiert personalisierte Analyse basierend auf Review-Scores, Profil, Equipment und Technik-Check.
  • DimensionImpactCard: 5 Karten mit Business-Metrik-Badge, Impact-Beschreibung, Potenzial-Dots und Referenz-Block.
  • Referenz-System: Cross-Source-Kandidaten aus Sanity + Supabase (InspoImages, MasterEquipment) mit Fallback auf Gemini-generierte Hints.

🧩 Persona-System

  • Zentrales Persona-Verzeichnis (src/lib/personas/): 7 Personas als einzelne, editierbare Dateien.
  • Refactoring: Inline-Prompts aus gemini-service, analyze-studio, analyze-equipment und analyze-diorama extrahiert und durch Persona-Imports ersetzt.
  • Neue Persona: vision-strategist — Content-Business-Stratege für Impact-Analysen.

⚙️ Sanity & API

  • Dimensions-Feld zu 4 Sanity-Typen hinzugefügt (equipmentGuide, setupGuide, studioReview, setupType).
  • GROQ Cross-Dimension-Query für Referenz-Kandidaten über alle Content-Typen.
  • studioReviewService erweitert: saveVisionImpact und getLatestVisionImpact für Persistenz.

🐛 Bugfix

  • Gemini JSON-Truncation: VisionImpact nutzt JSON-Sanitierung + Bracket-Repair bei abgeschnittenen Antworten.

---

2.7.0

2026-02-20

✨ Room Layout — 3 Wege zum Grundriss

  • Neuer Layout-Tab im Room Capture mit drei Modi: Grundriss zeichnen, Bild hochladen oder Maße manuell eingeben.
  • Grundriss zeichnen: Interaktiver Editor — Eckpunkte setzen, Wände mit echten Maßen versehen, fertig.
  • Grundriss hochladen: Bild per Drag & Drop oder Klick, dazu Länge/Breite angeben.
  • Manuell: Klassische Eingabe von Länge, Breite und Höhe.

✨ StudioTwin Diorama — Smartere Generierung

  • Mit Grundriss: Gemini platziert dein Equipment akkurat anhand des Grundrisses.
  • Ohne Grundriss: Gemini erstellt ein schematisches Diorama im Stil einer Miniatur-Studio-Szene mit generischem Equipment (Kamera, Softbox, Mikrofon) — Farben und Materialien kommen aus deinen Raum-Fotos.
  • Grundriss-Upload lebt jetzt im Room Capture statt im StudioTwin — der StudioTwin zeigt nur noch an, ob ein Grundriss vorhanden ist.

🐛 Bugfix

  • Gemini JSON-Parsing: Extrem lange Dezimalzahlen in der Gemini-Antwort werden jetzt automatisch gekürzt, bevor sie verarbeitet werden.

---

2.6.5

2026-02-20

✨ Expert Session Booking (€47, 50 Min)

  • ExpertSessionModal: Vollständiges Modal mit Preis-Badge, BookingCalendar in select-Modus und Stripe Checkout Redirect.
  • End-to-End Flow: Slot auswählen → Stripe Checkout → Webhook erstellt Google Calendar Event mit Meet-Link → DB Records → Notifications.
  • Automatische Rückerstattung: Bei Slot-Konflikt nach Zahlung (DB + Google FreeBusy Re-Verification) wird automatisch refunded und der User benachrichtigt.
  • Admin-Auflösung: Expert/Designer-ID wird server-side aus der DB aufgelöst (role='ADMIN'), kein Env Var nötig.

🧩 Neue Komponenten & API

  • ExpertSessionModal: Lädt Expert-Info via /api/expert, zeigt BookingCalendar (50 min, select mode), leitet zu Stripe weiter.
  • GET /api/expert: Findet ADMIN-User + Calendar-Status für das Modal.
  • BookingCalendar Enhancement: Neue Props mode='select', onSelectSlot, confirmLabel — rückwärtskompatibel.

🐛 Mock-Alerts ersetzt (7 CTAs)

  • Studio Review Tool (2x): alert("Redirect to Stripe Checkout")onBookExpertSession() Callback.
  • Studio Review Page: Alert → öffnet ExpertSessionModal; Service-Button → router.push('/app/services?highlight=...').
  • Dashboard Banner + Sidebar: Leerer handleClick → öffnet ExpertSessionModal direkt.
  • Guide Sidebar: Kaputter /expert-session Link → /app?open=expert-session (öffnet Modal im Dashboard direkt).
  • Dashboard Deep-Link: URL-Param ?open=expert-session öffnet ExpertSessionModal automatisch beim Dashboard-Load.
  • Success Celebration: ?success=expert_session URL-Param zeigt Bestätigungs-Overlay nach Checkout.

⚙️ Backend & Infrastruktur

  • Stripe Extension: createExpertSessionCheckoutSession() in stripe.ts, neuer Branch in /api/stripe/create-checkout-session.
  • Webhook Handler: Neuer expert_session Branch mit Idempotenz-Check, Slot Re-Verification, Auto-Refund, Calendar Event und DB Inserts.
  • DB Migration: expert_session_bookings Tabelle, sessions.expert_booking_id FK, XOR Constraint (booking_id oder expert_booking_id).
  • Env Var: STRIPE_EXPERT_SESSION_PRICE_ID für den 47€ Stripe Price.

---

2.6.4

2026-02-20

🐛 Dashboard Layout Fixes

  • Raumerfassung von der Sidebar in die Hauptspalte verschoben, oberhalb von Ausrüstungserfassung.
  • "Need help?" CTA: Neues Expert-Session-Panel in der Sidebar unter dem Anstehend-Widget (DE/EN, verlinkt auf /app/services).

---

2.6.3

2026-02-20

✨ Google Calendar Integration (R1.3)

  • OAuth2 Flow: Designer verbinden ihren Google Kalender in den Settings mit CSRF-geschütztem OAuth2 (Connect/Disconnect/Status).
  • Echte Verfügbarkeit: Free/Busy-Abfrage vom Google Kalender + DB-Sessions ergeben reale buchbare Slots (keine Math.random() Fake-Slots mehr).
  • Smart Slot Suggestions: Die ersten 5 verfügbaren Termine werden prominent als Karten angezeigt, darunter ein aufklappbares Wochen-Grid.
  • Google Meet Auto-Creation: Bei jeder Buchung wird automatisch ein Google Calendar Event mit Meet-Link und Reminders (60min + 15min) erstellt.
  • Race Condition Guard: Doppelte Prüfung (DB + Google Free/Busy) vor jeder Buchung verhindert Double-Bookings (409 Conflict bei Kollision).
  • Reschedule-Flow: Umbuchung in einem Request — altes Event canceln + neues erstellen mit rescheduled_from_id Referenz.
  • Cancel-Flow: Session-Absage löscht Google Calendar Event und benachrichtigt die andere Partei.

🧩 Neue Komponenten

  • CalendarConnectionCard: Designer-Settings-Card mit Verbindungsstatus, Google Email und Connect/Disconnect Actions.
  • BookingCalendar Rewrite: Kompletter Neubau mit API-Anbindung, Smart Slots, Wochen-Navigation, Reschedule-Modus und Fallback-States.

⚙️ Backend & Infrastruktur

  • 8 API Routes (/api/calendar/*): connect, callback, disconnect, status, availability, book, cancel, reschedule.
  • encryption.ts: AES-256-GCM Verschlüsselung für OAuth-Tokens (iv:authTag:ciphertext Format).
  • google-calendar.ts: Server-side Wrapper für Token-Management, Free/Busy, Slot-Generierung und Event-CRUD.
  • calendarService: Client-side Service (Pattern wie stripeService) für alle Calendar-Operationen.
  • sessionService: Neue API-Service-Methoden getSessionsByBooking() und getUpcomingSessions().
  • DB Migration: designer_calendar_tokens + sessions Tabellen mit RLS, Indexes und session_status Enum.

🔔 Notifications

  • Termin gebucht → Designer (ACTION) + Client (SUCCESS).
  • Termin abgesagt → andere Partei (INFO).
  • Termin umgebucht → Designer (ACTION) + Client (SUCCESS).
  • Token abgelaufen → Designer (ACTION) mit Reconnect-Hinweis.

---

2.6.2

2026-02-19

✨ FIFO Auto-Activation (R1.1)

  • Server-Side Complete API: Neuer /api/bookings/complete Endpoint mit Auth, Ownership-Verification, Idempotenz und FIFO-Promotion.
  • Membership Validation: Queued Services werden nur aktiviert wenn Membership ACTIVE/GRACE ist; bei Ablauf oder Tier-Mismatch wird ACTION-Notification erstellt.
  • Individual Purchase Bypass: Services mit purchased_via: 'INDIVIDUAL' überspringen alle Membership-Checks.
  • Success Interstitial: Neue /app/service-completed/[bookingId] Seite mit kontextabhängigen Bannern (promoted, expired, tier-mismatch, all done).
  • Queue Timeline Widget: Visuelle Timeline auf dem Dashboard mit COMPLETED/ACTIVE/QUEUED Nodes und Phasen-Info.
  • Queue Warning Banner: Amber-Warnungen bei ablaufender Membership oder BASIC-Tier mit PRO-Services in der Queue.

⚙️ Data Flow

  • purchased_via Column: Neue DB-Spalte auf service_bookings (MEMBERSHIP | INDIVIDUAL), durchgängig von Stripe Checkout bis Webhook.
  • Sonner Toaster: in Providers gemountet — alle bestehenden toast()-Aufrufe sind jetzt sichtbar.
  • Designer Handoff: System-Kommentare bei Auto-Promotion für maschinenlesbaren Kontext.

🐛 UX Fixes

  • Alert-Elimination: Alle alert() und window.confirm() im Service-Workflow durch toast() (sonner) ersetzt.
  • Async Support: onFinishService und onFinish Props akzeptieren jetzt Promise für korrekte Loading-States.

---

2.6.1

2026-02-19

♻️ Notification Popover

  • NotificationsPanel: Von Dashboard-Card zu Bell-Icon mit Popover-Dropdown refactored (Mark all read, Mark as read, Click-outside-close, Escape-close).
  • Hero-Integration: Bell-Icon sitzt rechts im Hero neben dem Score (Desktop: mit Divider, Mobile: neben Greeting-Titel).
  • Dashboard-Layout: Section 5 aufgelöst — SmartRecommendations, UpcomingWidget, DesignerInsightsWidget und RoomCaptureWidget in Section 4 zusammengeführt (ein Grid statt zwei).

---

2.6.0

2026-02-19

✨ Skill Tree Roadmap

  • SkillTreeRoadmap: Pentagon-Radar-Chart mit 5 Dimensionen, interaktiven Dimension-Bars, Grade-Badge und Fullscreen-Modus.
  • DimensionDetailPanel: Score-Aufschlüsselung (Review 60%, Equipment 20%, Service 20%) mit phase-aware CTAs und Critical-Outlier-Warnings.
  • Skill Dimensions: Gewichtetes Scoring mit 5 Leveln (Beginner → Pro), Grade-Badges (A+ bis F) und Impact-Ranking.

✨ Phase Engine

  • 3-Phasen-System: Foundation → Professionalisierung → Skalierung basierend auf Skill-Scores und Self-Assessment.
  • Delta-Profil: Vergleich Self-Assessment vs Expert-Review → over-confident / aligned / under-confident Klassifizierung.
  • Phase-aware CTAs: Tone-Varianten (urgent, encouraging, celebratory, standard) je nach Phase und Dimensions-Status.

✨ Smart Dashboard Components

  • NextStepBanner: 6-stufiger Entscheidungsbaum (kein Review → Profil unvollständig → Needs Call → Stale Review → Twin Changed → Alles gut).
  • SmartTodoList: Priorisierte Aufgaben (critical/high/medium/low) mit Profil-Completion-Ring.
  • ServicesSection: Aktive/Queued Services mit Phasen-Fortschritt und Cancel-Modal.
  • EquipmentInsights: Investment nach Dimension mit Designer-Empfehlungen (Upgrade/Approved/Not Recommended).
  • NotificationsPanel: Benachrichtigungen mit Unread-Badge und typ-basierten Actions.
  • DigitalTwinAlert: Erkennt Equipment-, Foto- und Raumänderungen seit letztem Review.

🧩 Neue Hooks

  • useSkillScores: Skill-Scores aus Reviews, Equipment und Services.
  • useSmartTodos: Priorisierte Aufgaben basierend auf Designer-Input, Phase und Profil.
  • useDigitalTwinChange: Studio-Änderungen seit letztem Review mit 7-Tage-Dismiss.
  • usePhaseEngine: Phase-Berechnung mit Delta-Profil und Outlier-Erkennung.

♻️ Refactoring

  • Dashboard-Architektur: Monolithisches DashboardOverview in 9 isolierte Komponenten zerlegt.
  • Layout: SkillMap volle Breite, darunter 2/3 + 1/3 (Services+Equipment | Notifications+Todos).
  • ExpertUpsellBanner: 7-Tage-Reappear-Zyklus mit Supabase-Persistenz.

---

2.5.5

2026-02-19

✨ Review Comparison Section

  • Auto-surfacing Comparison: Studio Review history now automatically shows a before/after comparison between the current and previous review — zero extra clicks needed.
  • TransformationSlider Integration: Reuses the existing TransformationSlider (image slider, grade transition, dimension bars) with review-native dimension labels.
  • Review-Native Labels: Dimension bars use the review's own labels (Visual Impact, Audio Quality, Backdrop & Brand, Future Proofing, Workflow) instead of Skill Roadmap labels via new dimensionLabels prop on TransformationSlider.
  • Twin-Level CTAs: Comparison section shows "Recommended Fix" (from recommendedServiceId) and "Expert Review" upsell — no Skill Roadmap concepts mixed in.

✨ Central Upload System

  • prepareFile() Module: New src/lib/upload.ts with preset-based compression (display, avatar), file validation, and optional original preservation.
  • uploadPreparedFile(): New helper in supabase.ts that uploads compressed + optional full-res original in one call.
  • Original URL: Room photos now store original_url for full-resolution access when compression was applied.
  • Migration: Replaced old compressImage() across Studio Review Tool, Visual Uploader, Room Locate, Settings avatar upload, and importReview in api.ts.

✨ Drag & Drop Everywhere

  • useDropZone Hook: New reusable hook with file type/size validation, drag state management, and openFilePicker() for click fallback.
  • My Studio: Final Look hero and room photos now accept drag & drop uploads.
  • Settings: Avatar upload supports drag & drop with visual ring indicator.
  • Studio Review Tool: Frame grab and BTS upload zones support drag & drop.
  • Room Locate: Photo upload zone migrated from manual drag events to useDropZone.
  • Visual Uploader: Designer concept visuals migrated to useDropZone + prepareFile.
  • Global Drop Prevention: app-shell.tsx prevents browser from opening files dropped outside a drop zone.

✨ Self-Assessment im Onboarding

  • New Onboarding Step: "Studio Self-Assessment" with 5 per-dimension self-ratings (Audio, Camera & Light, Backdrop, Content, Workflow).
  • SelfAssessment Type: New type with SkillSelfRating levels (beginner, intermediate, advanced, expert).
  • Persistence: Stored as self_assessment JSONB field in global_profiles, mapped through Auth Context and API layer.

✨ BeforeAfterSlider Component

  • New BeforeAfterSlider: Reusable draggable image comparison slider with customizable overlays, labels, and position callback.
  • Conclude View Upgrade: Service completion transformation replaced side-by-side static images with interactive BeforeAfterSlider.
  • Download Fix: Conclude View download now uses slider position, i18n labels, and proper drawCover() instead of setTimeout hack.

🧩 Components

  • ReviewComparisonSection: New component wrapping TransformationSlider with date header and twin-level CTAs.
  • TransformationSlider Enhancement: Added optional dimensionLabels prop to override SKILL_DIMENSIONS labels per context.
  • DropZone UI Component: Presentational drop zone wrapper at src/components/ui/drop-zone.tsx.

♻️ Refactoring

  • Progress Timeline: Replaced custom before/after modal with Dialog + TransformationSlider component (~120 lines removed).
  • compressImage Deprecation: Old function in utils.ts replaced with re-export from src/lib/upload.ts for backward compatibility.

---

2.5.4

2026-02-17

✨ Queue Auto-Promotion on Service Completion

  • Auto-Activate Queued Services: Completing a service now automatically promotes the next QUEUED booking (FIFO) to ACTIVE, matching the existing cancellation behavior.
  • Shared Promotion Helper: Extracted _promoteNextQueued() in bookingService to DRY the queue promotion logic between cancel and complete flows.
  • User Feedback: Alert notifies the user when a queued service has been auto-started after completion.

🐛 Bug Fixes

  • Stuck Queued Services: Fixed queued services staying in QUEUED status forever after the active service was completed.

---

2.5.3

2026-02-17

✨ Tier-Aware Signup Flow

  • End-to-End Flow: /membership/signup?tier=pro → signup → dashboard modal (PRO pre-selected) → Stripe checkout now works seamlessly.
  • Hero CTA Fix: Membership page hero button now links to /signup?tier=pro instead of bare /signup.

🐛 Bug Fixes

  • Membership Status Detection: Fixed membership not recognized after checkout by including all 6 env-var price IDs in getMembershipStatus() (previously only matched prices from a single Stripe product).
  • Post-Checkout Polling: Added pollForMembership() with up to 10 retries (1.5s interval) to handle Stripe subscription propagation delay instead of single fetch.
  • Profile Not Found: Added retry logic with service-role fallback in create-subscription and create-checkout-session API routes for post-signup race condition.
  • Subscription Status Route: Changed profile query to maybeSingle() with graceful NONE fallback instead of 404 error.
  • Modal localStorage Cleanup: Moved onSuccess() callback in MembershipSelectionModal to after successful API call, preventing premature localStorage cleanup on error.
  • PendingMembershipManager Timing: Added isInitializing guard to prevent modal from opening before auth context is fully loaded.
  • Dashboard Crash: Fixed UpcomingWidget TypeError on project.bookings.forEach() for new users without bookings.

---

2.5.2

2026-01-30

✨ Custom 404 Page

  • Context-Aware 404: Single global not-found page that detects /app/* routes and shows appropriate navigation links.
  • Marketing 404: Shows video setup review CTA, studio inspiration, guides, and services links.
  • App 404: Shows dashboard, studio review tool, inspiration tool, gearlist, and settings links.
  • Brand Design: Purple gradient 404 text with ambient glow effect matching the design system.

---

2.5.1

2026-01-30

✨ Membership Selection Modal

  • Reusable Modal Component: Extracted MembershipSelectionModal into shared component at src/components/membership/.
  • Tier/Cycle Selection: Users can now choose Basic/Pro tier and Monthly/Quarterly/Yearly billing cycle before Stripe checkout.
  • Settings Integration: Settings page now opens membership modal instead of direct checkout.
  • Tools Marketplace Integration: Tools service marketplace now uses the membership selection modal.
  • Savings Copy: Added "Spare X%" text and effective monthly price for quarterly/yearly options.

🐛 Bug Fixes

  • Stripe Checkout Error: Fixed "Failed to create subscription checkout" by adding fallback STRIPE_MEMBERSHIP_PRICE_ID and passing tier/cycle explicitly.
  • Import Path: Fixed TIER_FEATURES import from @/lib/tier-features instead of @/lib/constants.
  • Badge Text Wrapping: Fixed "Bester Wert" badge splitting across two lines with whitespace-nowrap.

---

2.5.0

2026-01-30

🚀 Designer & Admin Functionality Parity

Complete role-based feature set for Designer and Admin users, bringing functionality to parity with the Client experience.

#### Designer Dashboard & Project Management

  • Designer Dashboard: New /app/designer page with workload stats (active/pending/completed projects) and project cards.
  • Project Detail View: Tabbed interface at /app/designer/project/[id] showing Brief, Room Data, and Comments.
  • Client Brief Viewer: Read-only display of client questionnaire answers with AI summary support.
  • Room Data Viewer: Photo grid with lightbox, room dimensions, and equipment summary display.
  • Designer Project Cards: Status-aware cards showing client info, service type, phase, and last update.

#### Concept Creation System

  • Concept Editor: Full concept creation interface at /app/designer/project/[id]/edit.
  • Module Builder: Add/edit concept modules with title, description, and images.
  • Shopping Item Form: Add items with name, price, link, reason, and must-have flag.
  • Checklist Builder: Create execution phase checklists for clients.
  • Visual Uploader: Drag & drop upload for concept renderings to Supabase Storage.
  • Publish Flow: Advances client booking to CONFIRM phase on concept publish.

#### Designer-Client Communication

  • Project Comments Panel: Unified comment thread visible to both designer and client.

#### Admin Enhancements

  • User Management: New /app/admin/users page with role dropdown to change user roles.
  • All Projects View: New /app/admin/projects page with filtering and search.
  • Designer Assignment: Modal for assigning designers to projects.
  • Analytics Dashboard: New /app/admin/analytics page with metrics and designer workload table.

🧩 New API Services

  • userService: getAllUsers(), getDesigners(), updateUserRole()
  • analyticsService: getAdminMetrics(), getDesignerWorkload()
  • adminProjectService: getAllProjects(), assignDesigner()
  • designerProjectService: getAssignedProjects(), getProjectWithClient()
  • deliverableService: uploadDeliverable(), getDeliverables(), deleteDeliverable()

⚙️ Database

  • Deliverables Table: New table for storing final PDFs/assets with RLS policies.

🧩 Type Definitions

  • Added Deliverable, WorkloadMetrics, DesignerProject, AdminMetrics, UserListItem, AdminProjectItem interfaces.

🌐 i18n

  • Added ~50 translation keys for all new Designer and Admin interfaces in German and English.

🧩 Auth Context

  • Added designerProjects state and refreshDesignerProjects() method for Designer/Admin users.
  • Added unassignedProjects state and claimProject() method for project claiming.

🐛 Bug Fixes

  • Designer Project Visibility: Designers can now see and claim unassigned client projects.
  • RLS Policies: Fixed Row Level Security to use JWT claims, preventing infinite recursion and database timeouts.
  • Service Bookings RLS: Designers can now view bookings for unassigned projects.
  • Designer Navigation: Removed admin-only menu items from designer sidebar.
  • Infinite Refresh Loop: Fixed designer dashboard constantly re-fetching projects.
  • Inspiration Tool: "Coming Soon" overlay now only shows for clients, not designers/admins.

⚙️ Infrastructure

  • Equipment Routes: Moved equipment tools from /app/admin/* to /app/equipment/* for designer access.
  • API Query Optimization: Simplified project list queries to prevent statement timeouts.
  • JWT Role Claims: User roles now stored in JWT tokens via database trigger for efficient RLS checks.
  • Room Data Viewer: Expanded equipment section to show full details (brand, model, notes, prices, manual entry badges).

2.4.4

2026-01-30

✨ Improvement on Membership site

  • Membership Selection Modal: Non-members clicking "Join Now" in /app/services now see a modal to select tier (Basic/Pro) and billing cycle before Stripe checkout.
  • Membership Page Redesign: /membership page now shows Basic vs Pro tier comparison with feature lists and detailed pricing tables.

---

2.4.3

2026-01-30

🐛 Bug Fixes

  • Middleware: Marketing pages no longer depend on Supabase availability, preventing edge function crashes.
  • Auth Timeout: Added 5-second timeout to middleware auth calls to fail gracefully instead of crashing.

2.4.2

2026-01-30

✨ Multi-Tier Membership System

Complete role-based feature set for Designer and Admin users, bringing functionality to parity with the Client experience.

#### Designer Dashboard & Project Management

  • Designer Dashboard: New /app/designer page with workload stats (active/pending/completed projects) and project cards.
  • Project Detail View: Tabbed interface at /app/designer/project/[id] showing Brief, Room Data, and Comments.
  • Client Brief Viewer: Read-only display of client questionnaire answers with AI summary support.
  • Room Data Viewer: Photo grid with lightbox, room dimensions, and equipment summary display.
  • Designer Project Cards: Status-aware cards showing client info, service type, phase, and last update.

#### Concept Creation System

  • Concept Editor: Full concept creation interface at /app/designer/project/[id]/edit.
  • Module Builder: Add/edit concept modules with title, description, and images.
  • Shopping Item Form: Add items with name, price, link, reason, and must-have flag.
  • Checklist Builder: Create execution phase checklists for clients.
  • Visual Uploader: Drag & drop upload for concept renderings to Supabase Storage.
  • Publish Flow: Advances client booking to CONFIRM phase on concept publish.

#### Designer-Client Communication

  • Project Comments Panel: Unified comment thread visible to both designer and client.

#### Admin Enhancements

  • User Management: New /app/admin/users page with role dropdown to change user roles.
  • All Projects View: New /app/admin/projects page with filtering and search.
  • Designer Assignment: Modal for assigning designers to projects.
  • Analytics Dashboard: New /app/admin/analytics page with metrics and designer workload table.

🧩 New API Services

  • userService: getAllUsers(), getDesigners(), updateUserRole()
  • analyticsService: getAdminMetrics(), getDesignerWorkload()
  • adminProjectService: getAllProjects(), assignDesigner()
  • designerProjectService: getAssignedProjects(), getProjectWithClient()
  • deliverableService: uploadDeliverable(), getDeliverables(), deleteDeliverable()

⚙️ Database

  • Deliverables Table: New table for storing final PDFs/assets with RLS policies.

🧩 Type Definitions

  • Added Deliverable, WorkloadMetrics, DesignerProject, AdminMetrics, UserListItem, AdminProjectItem interfaces.

🌐 i18n

  • Added ~50 translation keys for all new Designer and Admin interfaces in German and English.

🧩 Auth Context

  • Added designerProjects state and refreshDesignerProjects() method for Designer/Admin users.

2.4.2

2026-01-30

✨ Multi-Tier Membership System

Membership system with 2 tiers (Basic, Pro) × 3 billing cycles (Monthly, Quarterly, Yearly) = 6 price combinations.

#### Membership Tiers

  • Basic Membership: Access to all 6 Core Services with Standard service tier only.
  • Pro Membership: Access to all services with both Standard and Pro service tiers, plus video review and priority support.
  • Tier-Based Gating: Basic members see upgrade prompt when attempting to book Pro service tier.

#### Billing Cycles

  • Dynamic Pricing: Monthly, Quarterly, and Yearly options fetched from Stripe.
  • Savings Display: Shows savings percentage and effective monthly cost for longer cycles.

#### Membership Page Redesign

  • Tier Toggle: Interactive Basic/Pro toggle with feature comparison box.
  • Cycle Cards: Selectable cards showing price, period, and savings.

🧩 New API Routes

  • GET /api/stripe/membership-prices - Fetch all 6 membership prices for UI display.

🧩 New Files

  • src/lib/tier-features.ts: Feature gating with canAccessServiceTier(), getTierFeatures(), getTierDisplayName() helpers.

⚙️ Type Definitions

  • Added MembershipTier enum (BASIC, PRO) and BillingCycle enum (MONTHLY, QUARTERLY, YEARLY).
  • Extended User interface with membershipTier and membershipCycle fields.

✨ Improvements

  • Settings Billing Section: Displays current tier and billing cycle with visual badges.
  • Service Marketplace: Pro tier locked for Basic members with "Upgrade to Pro" CTA.
  • Create Subscription API: Now accepts tier and cycle parameters.

2.4.1

2026-01-29

🐛 Bug Fixes

  • Service History: Fixed newly booked services not appearing by refreshing projects on Settings mount.
  • Booking Order: Sorted bookings by creation date (newest first) to ensure recent purchases appear at top.

✨ Improvements

  • Service History Pagination: Added "Show more" button to load additional entries (5 at a time).
  • Invoices Pagination: Added "Show more" button to load additional invoices (5 at a time).

2.4.0

2026-01-29

🚀 Stripe Payment Integration

Complete payment infrastructure replacing mock billing with Stripe payments.

#### Payment Infrastructure

  • Stripe Checkout Sessions: Service purchases and membership subscriptions via Stripe-hosted checkout.
  • Webhook Handler: /api/webhooks/stripe processes payment events and auto-creates bookings on successful payment.
  • Billing Portal: Customer self-service for managing subscriptions, updating payment methods, and viewing invoices.
  • Customer Management: Auto-create and link Stripe customers to user profiles.

#### Membership System

  • Subscription Checkout: Pro membership signup via /api/stripe/create-subscription.
  • Real-time Status Sync: Membership status fetched from Stripe API (/api/stripe/subscription-status).
  • Cancel/Reactivate: Cancel at period end and reactivate before expiry via API.
  • Grace Period Handling: Proper handling of past_due and cancelled-but-active states.

#### Service Purchases

  • One-time Payments: Service bookings via /api/stripe/create-checkout-session.
  • Tier Support: STANDARD/PRO pricing tiers pulled from Stripe price metadata.
  • Product Catalog: Services fetched from Stripe with i18n metadata (title_de, title_en, features).

#### Billing Settings

  • Payment Methods: Display saved card info (brand, last4, expiry) via /api/stripe/payment-methods.
  • Invoice History: List invoices with status badges via /api/stripe/invoices.
  • PDF Downloads: Direct links to Stripe-hosted invoice PDFs.

#### Post-Checkout Experience

  • Session Verification: New /api/stripe/verify-session endpoint validates checkout completion.
  • Celebration Modals: Confetti celebrations after successful service and membership purchases.
  • SessionStorage Persistence: Celebration state survives React component remounts during auth loading.

🧩 New API Routes

  • POST /api/stripe/create-checkout-session - Service purchase checkout
  • POST /api/stripe/create-subscription - Membership subscription checkout
  • GET /api/stripe/subscription-status - Membership status
  • GET /api/stripe/membership-price - Membership pricing
  • GET /api/stripe/products - Service catalog from Stripe
  • GET /api/stripe/payment-methods - Saved payment methods
  • GET /api/stripe/invoices - Invoice history
  • POST /api/stripe/billing-portal - Open Stripe billing portal
  • POST /api/stripe/cancel-subscription - Cancel at period end
  • POST /api/stripe/reactivate-subscription - Undo cancellation
  • GET /api/stripe/verify-session - Verify checkout session
  • POST /api/webhooks/stripe - Stripe webhook handler

⚙️ Database

  • stripe_customer_id: Added to profiles table for Stripe customer linking.
  • Domain Split Migration: Service catalog now owned by Stripe, bookings remain in Supabase.

🧩 Components

  • CelebrationModal: Added buttonText prop for i18n support.

🐛 Bug Fixes

  • Celebration Timing: Fixed race condition where async checkout verification lost connection to remounted component.
  • Multiple Bookings: Fixed issue where only first purchase showed celebration.

2.3.13

2026-01-29

✨ Onboarding System Overhaul

  • Race Condition Fix: Replaced manual UPDATE/INSERT with atomic upsert to prevent data loss during profile save.
  • Draft Persistence: Onboarding progress now auto-saves every second and restores on return.
  • Value Hints: Each onboarding step shows a compact hint explaining why the data is collected.
  • Team & Workflow Step: New optional step collecting team structure, tech expertise, challenges, and production frequency.
  • Celebration Flow: Confetti animation and celebration popup after completion, suggesting Studio Review as next step.
  • Language Switcher: Added DE/EN toggle directly in onboarding flow.
  • Inline Validation: Field-level error highlighting with URL validation for website field.

🧩 API & Context

  • updateUserWithConfirmation: New auth-context method that waits for backend confirmation before updating local state.
  • onboardingDraftService: New service with getDraft, saveDraft, and deleteDraft methods.

⚙️ Database

  • onboarding_drafts Table: New table for storing onboarding progress with RLS policies.
  • global_profiles Unique Constraint: Added unique constraint on user_id for proper upsert support.

🎨 Dashboard

  • Personalized Welcome: Shows brand colors and company name after onboarding completion (dismissible).

🐛 Bug Fixes

  • Onboarding Redirect Fix: Fixed app-shell redirecting users away from onboarding when profile existed but wasn't complete. Now correctly checks isComplete flag.

2.3.12

2026-01-28

✨ My Studio Page Enhancements

  • Studio Health Widget: New widget displaying grade badge, radar chart with 5 dimensions, trend arrow for score changes, and empty state CTA.
  • Smart Recommendations: Designer recommendations prioritized over AI suggestions with intelligent fallback logic.
  • Progress Timeline: Before/after transformation view for users with 2+ reviews, including service completion milestones.
  • Layout Update: Final Look hero image now displays at the top of the page for better visual hierarchy.

✨ Dashboard Enhancements

  • Designer Insights Widget: Shows gap analysis excerpts and equipment notes count when designer input exists.
  • Upcoming Widget: Consolidated calendar showing booked calls, membership renewal reminders, and review nudges.

⚙️ Database

  • Designer Recommendation Field: New designer_recommendation JSONB column on projects table for structured expert input.

2.3.11

2026-01-28

✨ Billing & Subscription

  • Settings Billing Section: New "Abrechnung & Mitgliedschaft" section with Current Plan, Service History, Invoices, and Payment Method.
  • Cancel Membership: End-of-period cancellation with confirmation modal showing what stays (data, free tools, dashboard access).
  • Resubscribe: Direct membership reactivation from Settings with confirmation modal and confetti celebration.
  • Cancelled-but-Active State: UI shows "Aktiv bis [Datum]" for memberships in grace period.
  • Service Marketplace: Warning banner for cancelled members with "Mitgliedschaft behalten" CTA; grace period users still see services as "Enthalten".
  • Queue Cancellation: Confirmation modal for removing individually purchased services with link to expert chat.
  • Celebration Modal: Full-viewport confetti effect on service bookings and membership activation.

2.3.10

2026-01-28

✨ Designer Admin Pages

  • Admin Dashboard: New /app/admin dashboard for DESIGNER and ADMIN roles with stats overview (equipment count, kits count, pending curation).
  • Master Equipment Manager: Full CRUD interface at /app/admin/equipment for managing the global equipment catalog with search, filter, add/edit modal, and activate/deactivate.
  • Equipment Kits Manager: Kit management at /app/admin/kits with grid view, create/edit view, and drag-to-reorder items.
  • Manual Entries Curation: New /app/admin/curation page for reviewing unlinked user equipment, grouping by name similarity, and linking to master catalog.

🧩 API Services

  • masterEquipmentService: Added getAllMasterEquipment() and reactivateMasterEquipment() methods.
  • presetsService: Extended with full CRUD operations for presets and preset items.
  • curationService: New service for managing unlinked equipment and creating master entries from user data.

⚙️ Database

  • RLS Policies: Added migration for DESIGNER/ADMIN management of equipment_presets, equipment_preset_items, and master_equipment tables.

🌐 i18n

  • Admin Translations: Added German and English translations for all admin interface labels.

2.3.9

2026-01-28

🐛 Bug Fixes

  • Language Switcher Flicker: Fixed UI flicker when switching language by removing unnecessary setUser state update and using fire-and-forget DB persistence.
  • Navigation Translations: App navigation now uses TRANSLATIONS[lang] instead of hardcoded English labels.
  • Studio Review Disappearing: Fixed reviews temporarily disappearing when changing language by removing lang dependency from public data loading effect.

✨ Improvements

  • Language Persistence: Language changes now persist silently to database without blocking UI or triggering re-renders.
  • Expert Banner Dismiss: Added expertBannerDismissedAt field to user profile for persistent banner state.

2.3.8

2026-01-28

🐛 Critical Bug Fixes

  • Services Persistence: Fixed critical bug where booked services disappeared after page reload by including service_bookings in the initial project query.
  • Shopping Items: Shopping item checkboxes now persist to shopping_items.checked column via conceptService.
  • Checklist Items: Checklist completions now persist to checklist_items.completed column via conceptService.
  • Brand DNA Sync: MyStudio Brand DNA card now auto-syncs when updated in Settings (useEffect dependency fix).
  • Visual Look Upload: Studio hero image now uploads to Supabase Storage instead of storing as Base64 data URL.

🔒 Security

  • Gemini API Key: Removed insecure localStorage fallback for API key storage - now only uses environment variable.

✨ Language Settings

  • Profile Persistence: Language preference now saves to profiles.preferred_language in Supabase.
  • Browser Detection: New users automatically get their browser language (en/de) as default.
  • Cross-Device Sync: Language setting persists across devices when logged in.

2.3.7

2026-01-27

✨ App Layout

  • Full-Width Layout: Added per-route full-width option for tool pages (Inspiration, Studio Review) removing max-width constraints.
  • Mobile Fix: Fixed full-width layout to account for mobile header height.
  • Styled Scrollbar: New scrollbar-styled CSS class for thin, dark scrollbars matching the design system.

🧩 Components

  • ComingSoonOverlay: Added contained prop for absolute positioning within parent containers instead of fixed viewport positioning.
  • z-index Fix: Lowered z-index for contained overlays so mobile menu appears above.

🧹 Cleanup

  • Removed Duplicates: Deleted duplicate /app/inspiration and /app/wishlist routes (consolidated to /app/tools/*).
  • Navigation Fix: Updated Designer navigation link to use /app/tools/inspiration.

2.3.6

2026-01-27

✨ CTA & Signup Flow

  • Review-First Funnel: Main CTAs now link directly to /video-setup-review instead of /signup, creating a "try before you sign up" experience.
  • Review Persistence: Completed reviews are saved to localStorage and automatically imported after signup.
  • Contextual Signup: Signup page shows tailored headlines for users coming from the review flow.
  • Onboarding Bypass: Users completing a review before signup are redirected directly to their result (skipping onboarding).

🎨 UI Improvements

  • Sticky Save Banner: Added sticky save banner on video-setup-review page that stays visible below the main navigation while scrolling.
  • Exit Intent: Both the sticky banner and exit intent modal can trigger the save/signup flow.

🐛 Bug Fixes

  • React Render Error: Fixed "Cannot update component while rendering" error in StudioReviewContent by moving router.push to useEffect.
  • AppShell Redirect: Fixed onboarding redirect overriding review result deep-links (?view=result).

2.3.5

2026-01-27

✨ Signup Page

  • Conversion Optimization: Redesigned signup page with progress stepper, social proof section, and testimonials.
  • Business Email Validation: Added validation to require business email addresses.
  • Minimal Footer: New reusable MinimalFooter component for landing pages.
  • Focused Layout: Hidden main navigation on signup/login pages for distraction-free experience.

🧩 Components

  • Coming Soon Overlay: New reusable ComingSoonOverlay component with email signup for unreleased features. Supports multiple positions (bottom-third, bottom-half, full, center).

2.3.4

2026-01-26

🐛 Bug Fixes

  • Room Photo Upload: Fixed critical bug where room photos were only stored as Base64 in memory and lost on page refresh. Photos are now properly uploaded to Supabase Storage (room_assets bucket) and persisted in the room_photos database table.
  • Room Dimensions: Fixed mapping of room dimensions to database columns (room_length, room_width, room_height) in auth-context.tsx.

✨ Improvements

  • Upload UX: Added loading state with spinner during photo upload and error messages for failed uploads in the Room Locate workflow phase.

2.3.3

2026-01-26

⚙️ Settings Page

  • Complete Redesign: Rebuilt Settings page with four sections: Profile, Brand Profile, Preferences, and Account.
  • Brand Profile Editing: Users can now edit company info, mission, brand values, colors, audience, and content goal after onboarding.
  • Avatar Upload: Added profile picture upload with Supabase Storage (signed URLs).
  • Language Persistence: Language preference now persists to localStorage.

🎬 Studio Review

  • Delete Reviews: Users can now delete past reviews from the review history with a confirmation dialog.
  • Gemini Upgrade: Upgraded AI model to gemini-3-flash-preview for improved analysis quality.
  • Review Saving: Fixed review persistence using single-step importReview() method.

🧰 Developer Experience

  • Logger Utility: Added centralized createLogger() utility that only logs in development mode (silent in Netlify production).
  • ConfirmDialog Component: New reusable confirmation dialog component with danger/warning/info variants.

🗄️ Database

  • Schema: Added content_goal column to global_profiles table.
  • Security: Added RLS policies for profiles and global_profiles tables.
  • Storage: Created avatars bucket with upload/read policies.
  • API: Added deleteReview() method to studioReviewService.

🐛 Bug Fixes

  • Auth: Fixed token refresh triggering unnecessary data reloads during save operations.
  • Auth: Fixed 406 errors on global_profiles query by adding .maybeSingle().
  • Auth: Added isInitializing flag to prevent premature onboarding redirects.
  • Performance: Created getProjectsLight() for faster initial auth load (no N+1 queries).
  • API: Fixed updateGlobalProfile upsert issues, added contentGoal mapping.
  • Imports: Fixed broken import path in Studio Review page.

2.3.2

2026-01-09

✨ New Features

  • Comprehensive Error Handling: Added robust error handling across the entire codebase including:
  • Try-catch blocks and error logging for database operations in api.ts
  • JSON parsing error handling with validation in analyze-studio.ts
  • Promise.allSettled in sitemap.ts for resilient route fetching
  • Auth error handling and environment variable validation in middleware.ts
  • Parameter validation and error handling for Supabase file operations
  • Error handling for dynamic route pages (services, glossary, guides)
  • Duplicate Management Scripts: Imported duplicate management scripts for issue handling (auto-close-duplicates.ts, backfill-duplicate-comments.ts).

🔒 Security

  • Environment Variable Protection: Removed environment variable logging from debug output to prevent information disclosure. Debug logging now only runs in development environment.

🐛 Bug Fixes

  • Internationalization: Fixed service booking page to use dynamic language from AuthContext instead of hardcoded English (Issue #12).
  • TypeScript Sitemap: Corrected async function return type from MetadataRoute.Sitemap to Promise, fixing Netlify deployment errors.
  • CSS Typo: Fixed pointing-events-none to pointer-events-none in video setup review page, restoring click-through for gradient overlay (Issue #8).
  • Review Confirmation: Added confirmation dialog before discarding review on modal close with German text: "Bist du sicher, dass du das Review verwerfen möchtest?" (Issue #2).
  • CMS Revalidation: Standardized all CMS page revalidation to 3600s (1 hour) for consistent content freshness across guides, equipment, glossary, templates, and setup-type pages (Issue #13).

⚙️ CI/CD

  • Workflow Fix: Disabled oncall-triage workflow schedule due to claude-code-base-action@beta installation issues causing timeouts.

2.3.1

2026-01-05

🧹 Maintenance & Cleanup

  • Legacy Data Removal: Completely removed legacy mock data files (src/lib/services-data.ts, src/lib/data/services.ts) to establish Sanity CMS as the single source for content.
  • Codebase Hygiene: Removed dependencies on legacy static data in service-client.tsx, refactoring it to fetch related services dynamically from Sanity.

⚙️ CMS Configuration

  • Validation: Verified content fetching and rendering for all 7 content types on the Design System showcase page.

🐛 Bug Fixes

  • Broken Links: Fixed SetupTypeCard slug issues where links were rendering as [object Object].
  • Interactivity: Made TemplateCard clickable by wrapping it in Link components.
  • Reliability: Implemented frontend fallbacks (empty states) and crash protection for CMS data fetching in design-system/content/page.tsx.

2.3.0

2026-01-05

Design System: Content Types Showcase

  • New Page: Content Types Showcase: Built a dedicated showcase page at /design-system/content. This page serves as a comprehensive overview of all CMS-managed content, visualizing all available content types in one place.
  • Unified UI & Experience:
  • Horizontal Infinite Scroll: Implemented a performant, client-side infinite scroll gallery with snap-scrolling and "Load More" functionality for all content sections.
  • Hidden Scrollbars: Enforced cross-browser hidden scrollbars (Webkit, Firefox, IE/Edge) for a polished, frictionless aesthetic.
  • Unified List Cards: Standardized the display of high-volume items (Setup Guides, Equipment, Glossary) into uniform SimpleListCard components with "pill tag" layouts.
  • Dynamic CMS Categorization:
  • CMS Driven: Moved category logic from frontend code to Sanity CMS. Added category fields to Equipment, Glossary, and Setup Guides schemas.
  • Auto-Migration: Automatically migrated existing content into these new categories (e.g., "Key Light" → "Lighting").
  • Navigation: Fixed broken links (404s); all tags now properly link to their respective detail pages.

🔌 Integrations

  • Userback Widget: Integrated @userback/widget globally via a UserbackProvider. The feedback widget is now active site-wide.

🧹 Maintenance & Fixes

  • Data Hygiene: Validated content and removed duplicate entries.
  • Pricing Display: Fixed double currency symbols in service cards.
  • Routing: Fixed broken links in Review cards.

2.2.1

2025-12-10

🎨 Visual & Experience Overhaul

  • Mobile Menu ("Perspective Style"): Implemented a fully custom mobile navigation with:
  • Smooth fade and backdrop animations.
  • Seamless "Hamburger" to "Close X" icon morphing transition.
  • Full-screen immersive dark overlay.
  • Sticky Mega Menus: Added high-performance sticky headers with categorized mega menus for "Tools" and "Resources".

📱 Mobile Optimization

  • Responsive Layouts:
  • Hero Section: Updated CTA buttons to handle long text gracefully on smaller screens (auto-wrapping).
  • Footer: Optimized grid layout to 2 columns on mobile for better readability.
  • App Sidebar: Added top offset to mobile menu to prevent content occlusion by the fixed header.
  • Visual Fidelity: Fixed logo alignment and rendering inconsistencies between Header and Mobile Menu.

🛠️ Refactoring

  • Component Architecture: Extracted shared SiteLogo component to ensure brand consistency across the application.

2.2.0

2025-12-09

📝 Content Management System (Sanity Integration)

  • CMS Integration: Fully integrated Sanity CMS for dynamic content management.
  • Content Modeling: Developed schemas for Content Categories and Content Types.
  • Dynamic Pages: Connected frontend components to fetch content directly from Sanity.

✨ Studio Review Enhancements

  • Data Persistence: Fixed issues where Studio Reviews were not correctly saving to user profiles.
  • Stability: Addressed JSON parsing errors and timeout issues during analysis generations.

👤 User Experience & Flow

  • Phase Transition Modal: Implemented a new modal to summarize progress between different service phases, improving user orientation.
  • Authentication: Optimized getProjects query to fix login timeouts and ensure stable session persistence on refresh.

🐛 Bug Fixes & Optimization

  • Performance: Reduced redundant API calls during initial load and project fetching (if applicable).
  • Reliability: Fixed "Data fetch timeout" and "onSaveResult is not a function" errors.

2.1.0

2025-12-08

🌟 Marketing Site Overhaul & Analytics

This release focuses on the public-facing marketing website, implementing a complete funnel structure and robust analytics.

  • Analytics Architecture:
  • Migrated specific GA4 implementation to Google Tag Manager (container GTM-XXXXXXX).
  • Implemented a unified analytics.ts utility for easy event tracking via dataLayer.
  • Added comprehensive tracking for: Pageviews, Service Views, Purchase Intent, Tool Usage, and Template Downloads.
  • Refactored layout.tsx to handle scripts efficiently.
  • New Landing Pages (Dark Mode UI):
  • src/app/start: Interactive "Choose your path" gateway.
  • src/app/services: Overview and detailed sub-pages for all 6 core pillars (Perspective, Audio, etc.).
  • src/app/membership: detailed pricing and benefits page.
  • src/app/enterprise: B2B/Agency solutions page.
  • src/app/templates: Resource download center with "lock" functionality.
  • Technical Improvements:
  • SEO: Implemented hreflang tags and dynamic metadata generation for service pages.
  • Performance: Split Service Detail pages into Server Components (Metadata/Fetching) and Client Components (Interactivity/Tracking).
  • Structure: Centralized static data in src/lib/data/services.ts.

2.0.0

2025-12-08

🚀 Major Migration (Vite → Next.js)

This release marks a complete architectural overhaul of the application, migrating from a client-side Vite application to a server-rendered Next.js framework.

  • Framework: Migrated from Vite to Next.js 16 (App Router).
  • Routing: Implemented file-system based routing (src/app).
  • Performance: Leveraged React Server Components (RSC) for improved initial load times and SEO.
  • Styling: Updated to Tailwind CSS v4.

✨ New Features & Improvements

#### 🤖 AI Studio Review

  • Loop Prevention: Added output token limits to prevent analysis hangs.
  • Image Handling: Implemented client-side image compression (max 1920px, ~300KB) to fix upload crashes with large (4MB+) files.
  • Public Access: Added a public-facing version of the Studio Review tool at /video-setup-review.
  • Social Cards: Improved generation of downloadable "Review Cards" for social sharing.

#### 👤 Onboarding & Authentication

  • Streamlined Flow: Fixed intermittent redirects and loop issues during onboarding.
  • Error Handling: Resolved 500 Internal Server and 406 Not Acceptable errors during profile creation/updates.
  • Auto-Project: Automatically creates a default "Mein Studio" project upon new user registration.
  • Optimized Sync: Reduced redundant API calls during the backend synchronization process.

#### 🛠️ Technical

  • Directory Structure: Reorganized codebase into src/app, src/services, src/components, and src/contexts.
  • Supabase: Refined database schemas and triggers (handle_new_user) for robust user creation.
  • Environment: Standardized environment variables to NEXT_PUBLIC_ prefix.

🐛 Bug Fixes

  • Fixed a critical crash in the Studio Review analysis caused by hallucinated model names (gemini-2.5-flash).
  • Fixed "onSaveResult is not a function" crash on the public review page.
  • Fixed storage API errors when uploading large frame grabs.
  • Fixed authentication state persistence issues on page refresh.

---

1.0.0

Legacy (Vite Version)
  • Initial release built with React + Vite.
  • Basic Studio Review functionality.
  • Client-side only architecture.
  • Basic Supabase integration.

© 2026 StudioDesigner. All rights reserved.

Made with ❤️ in Berlin