Changelog
Latest updates and improvements to myStudioDesigner.
2.9.2
2026-02-27⚡ Equipment-Check Performance
- Lazy-loaded heavy components:
TechnikCheckForm,TechnikCheckResultDisplay, andExitIntentModalnow usenext/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
NONEfallback, replacedgetUser()withgetSession(), DRY'd repeatedNONE_MEMBERSHIPobject. - Stripe client fetch: Added 12s
AbortSignal.timeouton/api/stripe/subscription-statusclient fetch to prevent hanging requests. .bookingscrash fix: Added optional chaining (bookings?.find,bookings?.some) inapp-shell.tsx,service/[bookingId], andservice-completed/[bookingId]— fixesCannot read properties of undefined (reading 'some').- Fallback project: Added
bookings: []to fallback project inapp/page.tsxto prevent crash for new/error users. - Web Lock deadlock fix: Removed double
getSession()call inauth-context.tsxtimeout recovery — now usessupabaseUserRefinstead, avoiding lock contention.
🐛 Sanity Build Resilience
- CDN enabled: Sanity client uses CDN for read queries (
useCdn: true), reducing direct API pressure during builds. resilientFetchhelper: New wrapper inclient.tswith 10s timeout + 1 retry on network errors — returnsnullinstead of crashing the build.generateStaticParams/generateMetadataprotection: 5 marketing pages (setup-type,studio-review,templates,equipment,en/studio-review) wrapped with try/catch.
⚙️ Performance
- Build speed: Added
googleapis(194MB) toserverExternalPackagesinnext.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+FAQPageSchema auf Equipment-Check und Video-Setup-Review für Google Rich Snippets und AI-Zitierungen. - Semantic HTML:
sr-onlySektionen 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_IMAGEinstudio-review-tool.tsxundvideo-setup-review-client.tsxinstrumentiert. - Signup Conversion Tracking:
SIGNUP_STARTundSIGNUP_COMPLETEEvents 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_equipmentvia 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-checkmit 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.txtfü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-equipmentundanalyze-dioramaextrahiert 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:
saveVisionImpactundgetLatestVisionImpactfü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-sessionLink →/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_sessionURL-Param zeigt Bestätigungs-Overlay nach Checkout.
⚙️ Backend & Infrastruktur
- Stripe Extension:
createExpertSessionCheckoutSession()instripe.ts, neuer Branch in/api/stripe/create-checkout-session. - Webhook Handler: Neuer
expert_sessionBranch mit Idempotenz-Check, Slot Re-Verification, Auto-Refund, Calendar Event und DB Inserts. - DB Migration:
expert_session_bookingsTabelle,sessions.expert_booking_idFK, XOR Constraint (booking_idoderexpert_booking_id). - Env Var:
STRIPE_EXPERT_SESSION_PRICE_IDfü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_idReferenz. - 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.BookingCalendarRewrite: 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 wiestripeService) für alle Calendar-Operationen.sessionService: Neue API-Service-MethodengetSessionsByBooking()undgetUpcomingSessions().- DB Migration:
designer_calendar_tokens+sessionsTabellen mit RLS, Indexes undsession_statusEnum.
🔔 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/completeEndpoint 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_viaColumn: Neue DB-Spalte aufservice_bookings(MEMBERSHIP|INDIVIDUAL), durchgängig von Stripe Checkout bis Webhook.- Sonner Toaster:
in Providers gemountet — alle bestehendentoast()-Aufrufe sind jetzt sichtbar. - Designer Handoff: System-Kommentare bei Auto-Promotion für maschinenlesbaren Kontext.
🐛 UX Fixes
- Alert-Elimination: Alle
alert()undwindow.confirm()im Service-Workflow durchtoast()(sonner) ersetzt. - Async Support:
onFinishServiceundonFinishProps akzeptieren jetztPromisefü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
DashboardOverviewin 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
dimensionLabelsprop onTransformationSlider. - 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: Newsrc/lib/upload.tswith preset-based compression (display,avatar), file validation, and optional original preservation.uploadPreparedFile(): New helper insupabase.tsthat uploads compressed + optional full-res original in one call.- Original URL: Room photos now store
original_urlfor full-resolution access when compression was applied. - Migration: Replaced old
compressImage()across Studio Review Tool, Visual Uploader, Room Locate, Settings avatar upload, andimportReviewinapi.ts.
✨ Drag & Drop Everywhere
useDropZoneHook: New reusable hook with file type/size validation, drag state management, andopenFilePicker()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.tsxprevents 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).
SelfAssessmentType: New type withSkillSelfRatinglevels (beginner, intermediate, advanced, expert).- Persistence: Stored as
self_assessmentJSONB field inglobal_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 ofsetTimeouthack.
🧩 Components
ReviewComparisonSection: New component wrappingTransformationSliderwith date header and twin-level CTAs.TransformationSliderEnhancement: Added optionaldimensionLabelsprop to override SKILL_DIMENSIONS labels per context.DropZoneUI Component: Presentational drop zone wrapper atsrc/components/ui/drop-zone.tsx.
♻️ Refactoring
- Progress Timeline: Replaced custom before/after modal with
Dialog+TransformationSlidercomponent (~120 lines removed). compressImageDeprecation: Old function inutils.tsreplaced with re-export fromsrc/lib/upload.tsfor 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()inbookingServiceto 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=proinstead 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-subscriptionandcreate-checkout-sessionAPI 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 inMembershipSelectionModalto after successful API call, preventing premature localStorage cleanup on error. - PendingMembershipManager Timing: Added
isInitializingguard to prevent modal from opening before auth context is fully loaded. - Dashboard Crash: Fixed
UpcomingWidgetTypeError onproject.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
MembershipSelectionModalinto shared component atsrc/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_IDand passing tier/cycle explicitly. - Import Path: Fixed
TIER_FEATURESimport from@/lib/tier-featuresinstead 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/designerpage 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/userspage with role dropdown to change user roles. - All Projects View: New
/app/admin/projectspage with filtering and search. - Designer Assignment: Modal for assigning designers to projects.
- Analytics Dashboard: New
/app/admin/analyticspage 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,AdminProjectIteminterfaces.
🌐 i18n
- Added ~50 translation keys for all new Designer and Admin interfaces in German and English.
🧩 Auth Context
- Added
designerProjectsstate andrefreshDesignerProjects()method for Designer/Admin users. - Added
unassignedProjectsstate andclaimProject()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/servicesnow see a modal to select tier (Basic/Pro) and billing cycle before Stripe checkout. - Membership Page Redesign:
/membershippage 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/designerpage 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/userspage with role dropdown to change user roles. - All Projects View: New
/app/admin/projectspage with filtering and search. - Designer Assignment: Modal for assigning designers to projects.
- Analytics Dashboard: New
/app/admin/analyticspage 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,AdminProjectIteminterfaces.
🌐 i18n
- Added ~50 translation keys for all new Designer and Admin interfaces in German and English.
🧩 Auth Context
- Added
designerProjectsstate andrefreshDesignerProjects()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 withcanAccessServiceTier(),getTierFeatures(),getTierDisplayName()helpers.
⚙️ Type Definitions
- Added
MembershipTierenum (BASIC, PRO) andBillingCycleenum (MONTHLY, QUARTERLY, YEARLY). - Extended
Userinterface withmembershipTierandmembershipCyclefields.
✨ 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
tierandcycleparameters.
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/stripeprocesses 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_dueand 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-sessionendpoint 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 checkoutPOST /api/stripe/create-subscription- Membership subscription checkoutGET /api/stripe/subscription-status- Membership statusGET /api/stripe/membership-price- Membership pricingGET /api/stripe/products- Service catalog from StripeGET /api/stripe/payment-methods- Saved payment methodsGET /api/stripe/invoices- Invoice historyPOST /api/stripe/billing-portal- Open Stripe billing portalPOST /api/stripe/cancel-subscription- Cancel at period endPOST /api/stripe/reactivate-subscription- Undo cancellationGET /api/stripe/verify-session- Verify checkout sessionPOST /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
buttonTextprop 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
isCompleteflag.
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_recommendationJSONB 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/admindashboard for DESIGNER and ADMIN roles with stats overview (equipment count, kits count, pending curation). - Master Equipment Manager: Full CRUD interface at
/app/admin/equipmentfor managing the global equipment catalog with search, filter, add/edit modal, and activate/deactivate. - Equipment Kits Manager: Kit management at
/app/admin/kitswith grid view, create/edit view, and drag-to-reorder items. - Manual Entries Curation: New
/app/admin/curationpage for reviewing unlinked user equipment, grouping by name similarity, and linking to master catalog.
🧩 API Services
- masterEquipmentService: Added
getAllMasterEquipment()andreactivateMasterEquipment()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, andmaster_equipmenttables.
🌐 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
setUserstate 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
langdependency 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
expertBannerDismissedAtfield 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_bookingsin the initial project query. - Shopping Items: Shopping item checkboxes now persist to
shopping_items.checkedcolumn viaconceptService. - Checklist Items: Checklist completions now persist to
checklist_items.completedcolumn viaconceptService. - 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_languagein 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-styledCSS class for thin, dark scrollbars matching the design system.
🧩 Components
- ComingSoonOverlay: Added
containedprop 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/inspirationand/app/wishlistroutes (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-reviewinstead 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.pushto 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
MinimalFootercomponent for landing pages. - Focused Layout: Hidden main navigation on signup/login pages for distraction-free experience.
🧩 Components
- Coming Soon Overlay: New reusable
ComingSoonOverlaycomponent 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_assetsbucket) and persisted in theroom_photosdatabase table. - Room Dimensions: Fixed mapping of room dimensions to database columns (
room_length,room_width,room_height) inauth-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-previewfor 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_goalcolumn toglobal_profilestable. - Security: Added RLS policies for
profilesandglobal_profilestables. - Storage: Created
avatarsbucket with upload/read policies. - API: Added
deleteReview()method tostudioReviewService.
🐛 Bug Fixes
- Auth: Fixed token refresh triggering unnecessary data reloads during save operations.
- Auth: Fixed 406 errors on
global_profilesquery by adding.maybeSingle(). - Auth: Added
isInitializingflag to prevent premature onboarding redirects. - Performance: Created
getProjectsLight()for faster initial auth load (no N+1 queries). - API: Fixed
updateGlobalProfileupsert issues, addedcontentGoalmapping. - 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.allSettledinsitemap.tsfor 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.SitemaptoPromise, fixing Netlify deployment errors. - CSS Typo: Fixed
pointing-events-nonetopointer-events-nonein 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@betainstallation 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
SetupTypeCardslug issues where links were rendering as[object Object]. - Interactivity: Made
TemplateCardclickable by wrapping it inLinkcomponents. - Reliability: Implemented frontend fallbacks (empty states) and crash protection for CMS data fetching in
design-system/content/page.tsx.
2.3.0
2026-01-05Design 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
SimpleListCardcomponents with "pill tag" layouts. - Dynamic CMS Categorization:
- CMS Driven: Moved category logic from frontend code to Sanity CMS. Added
categoryfields toEquipment,Glossary, andSetup Guidesschemas. - 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/widgetglobally via aUserbackProvider. 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
SiteLogocomponent 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 CategoriesandContent 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
getProjectsquery 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.tsutility for easy event tracking viadataLayer. - Added comprehensive tracking for: Pageviews, Service Views, Purchase Intent, Tool Usage, and Template Downloads.
- Refactored
layout.tsxto 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
hreflangtags 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 Serverand406 Not Acceptableerrors 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, andsrc/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.