Skip to content

feat(ui): clean minimal redesign inspired by ChatGPT/Claude#2

Merged
EfeDurmaz16 merged 86 commits intomainfrom
feat/clean-minimal-ui-redesign
Feb 12, 2026
Merged

feat(ui): clean minimal redesign inspired by ChatGPT/Claude#2
EfeDurmaz16 merged 86 commits intomainfrom
feat/clean-minimal-ui-redesign

Conversation

@EfeDurmaz16
Copy link
Copy Markdown
Owner

Summary

  • Replace navy/terracotta/cream color scheme with neutral white (#FFFFFF) / dark (#0d0d0d) palette
  • Swap Playfair Display + DM Sans fonts for Geist sans-serif throughout
  • Remove glassmorphism, gradient mesh, glow effects, backdrop-blur from all chat components
  • Replace terracotta accent (#D4714A) with subtle blue (#2563eb) for primary/accent/ring
  • Simplify chat layout: two-panel (sidebar + chat), remove memory panel third column
  • Remove ModelPicker from header (model selector lives in input footer)
  • Rebrand sidebar from "Aspendos" to "YULA", add Council and Memory nav links
  • Home page (/) now redirects: authenticated -> /chat, unauthenticated -> /landing
  • Landing page moved to (marketing) route group with SiteDock preserved there

Files Changed (11)

File Change
globals.css Major overhaul - neutral palette, removed ~450 lines of effects
layout.tsx Removed SiteDock, updated viewport colors
page.tsx Auth-aware redirect replacing full landing page
chat/page.tsx Removed gradients, SkyToggle, ShortcutsDock
chat/[id]/page.tsx Two-panel layout, removed glow/blur/memory panel
chat/new/page.tsx Same cleanup as chat/[id]
chat-sidebar.tsx Rebranded YULA, added nav links, removed blur
model-picker.tsx Replaced GlassCard/Framer Motion with simple popover
(marketing)/landing/page.tsx NEW - moved landing page
(marketing)/layout.tsx NEW - marketing layout with SiteDock
landing/page.tsx DELETED - replaced by (marketing) route

Test plan

  • Visit / as authenticated user - should redirect to /chat
  • Visit / as unauthenticated user - should redirect to /landing
  • Visit /landing - original landing page renders
  • Toggle dark/light mode - neutral palette works in both
  • Open model picker from input footer - popover works without GlassCard
  • Send a message - no visual noise (no glow, blur, gradients)
  • Sidebar shows YULA branding with Council and Memory nav links
  • /chat/new page renders clean with no backdrop-blur

🤖 Generated with Claude Code

EfeDurmaz16 and others added 30 commits February 3, 2026 10:43
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Council multi-persona components
- Settings page components
- Memory graph visualization
- PAC timeline components
- Omnibar search
- Onboarding components
- Auth improvements

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Chat, login, signup, pricing, memory, settings layouts
- Analytics API routes
- SEO images (opengraph, twitter)
- Next.js config updates

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Council multi-persona UI components
- Settings page components
- Memory graph visualization
- PAC timeline components
- Omnibar search
- Accessibility components
- Auth client and services
- Test setup and unit tests

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Environment config module
- Chat route updates
- PAC service updates

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace navy (#0A0E27) with charcoal (#2D2926)
- Replace gold (#D4AF37) with terracotta (#D4714A)
- Update all color references throughout landing page
- Warm, sophisticated palette matching Pencil design

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update COLORS object to use correct Pencil design tokens
- Navy (#0A0E27) replaces charcoal (#2D2926)
- Gold (#D4AF37) replaces terracotta (#D4714A)
- Cream (#F8F6F0) for light backgrounds
- Update feature accents: import-blue, pac-amber, council-pink
- Update viewport theme colors in layout.tsx

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Complete page rewrite based on Pencil QtTSw frame screenshots
- Use terracotta (#D4714A) as primary accent (not gold)
- Implement exact section structure from Pencil:
  - Hero with "Your AI, Evolved" headline
  - Problem section with 3 cards
  - Features section (Import/PAC/Council columns)
  - How It Works (4 steps)
  - Pricing (Free/$0, Pro/$20, Ultra/$50)
  - FAQ accordion
  - CTA section
  - Stats banner with YULA branding
  - Footer
- Typography: Playfair Display headlines + DM Sans body
- Update CSS variables from gold to terracotta

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Create /landing route with exact Pencil QtTSw design
- Use hardcoded hex colors for pixel-perfect accuracy
- Navy: #0A0E27, Terracotta: #D4714A, Cream: #F8F6F0
- Exact section structure from Pencil screenshots:
  - Navbar with Y logo
  - Hero: "Your AI, Evolved."
  - Problem section with 3 cards
  - Features: Import/PAC/Council
  - Steps: Four steps. That's it.
  - Pricing: Free/Pro/Ultra
  - FAQ accordion
  - CTA section
  - Stats banner with giant YULA
  - Footer

Test at /landing before replacing main page

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove Convex webhook from auth.ts (ghost infrastructure)
- Add password policy (minPasswordLength: 8) to Better Auth config
- Remove duplicate deps: framer-motion, groq-sdk, openai, styled-components
- Remove CLERK_SECRET_KEY from docker-compose.yml
- Delete duplicate files: route 2.ts, memory.service 2.ts
- Delete legacy Clerk webhook handler
- Add memory leak prevention to in-memory rate limiter

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…rdening

- Create /privacy page with GDPR-compliant privacy policy
- Create /terms page with terms of service
- Implement real account deletion in settings (frontend wiring)
- Add password validation to sign-up form (8+ chars, uppercase, lowercase, number)
- Invert middleware to default-deny for API routes
- Fix CSP (remove unsafe-eval) and Permissions-Policy (allow microphone)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Skip memory search on direct_reply (save embedding call per greeting)
- Batch Qdrant writes in memory import (concurrent instead of sequential)
- Remove mock PAC notifications, fetch from real API
- Remove simulated Council responses, show proper error state
- Create ErrorBoundary component for graceful error handling
- Add ErrorBoundary to root layout

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ncil

- Add FREE tier to tiers.ts with 100 messages/mo
- Unify pricing: Free $0, Starter $20, Pro $49, Ultra $99
- Cap Council sessions per tier (10/50/200, NOT unlimited)
- Fix pricing page to match backend config, remove mock usage data
- Fix landing page pricing section to match
- Add voice minute tracking to Gemini Live hook
- Throttle PAC cron: 2hr window, 25 user batch, skip unchanged users

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…del-tier gating, FREE tier

Phase 1 Red Team Audit fixes (score 35→55):

Security:
- CRON_SECRET: fail-closed when env var unset (was fail-open)
- Billing: atomic decrement with updateMany WHERE gt:0 (race condition)
- CORS: add yula.dev, www.yula.dev, env-based CORS_ORIGINS
- Webhook: runtime validation for POLAR_WEBHOOK_SECRET
- ESM: replace require('crypto') with node:crypto import

Economics:
- Model-tier gating: FREE/STARTER restricted to cheap models only
- FREE tier: added to Prisma enum, default for new users
- Council metering: monthly session limits per tier (0/10/50/200)
- Billing calc: tier-aware chat usage percentage (was hardcoded 300)

Compliance:
- Cookie consent banner in root layout
- ToS checkbox required on sign-up
- Forgot password link fixed (was href="#")

Product:
- Landing page: removed fake stats (300+ models→10+, 50K users→Growing)
- Removed fake testimonials, replaced with honest benefits section
- Council: removed Math.random() confidence scores
- Chat: dynamic greeting instead of hardcoded "Good morning, Efe"
- Webhook: clerkId→userId migration with backward compat
- Deleted duplicate memory.service 2.ts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ansactions

Phase 2 Red Team fixes (score 55→65):

Security:
- Share token: dedicated Chat.shareToken field with unique index (was hijacking description)
- Service worker: exclude auth/billing/stream endpoints from cache
- CSP connect-src: add yula.dev domains

Performance:
- PAC cron: batch dedup check + createMany (was N+1 per notification)
- Chat: batch message save + chat update in $transaction
- Token counting: model-aware chars-per-token ratio (was hardcoded /4)

Stability:
- useStreamingChat: remove setTimeout race condition for new chat creation
- Prisma schema: Chat.shareToken + Chat.sharedAt + index

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…, GDPR deletion

- Replace Math.random() with crypto.randomUUID() in import service
- Sanitize API error logs in commitment-detector (no raw response bodies)
- Add FREE tier to rate limiting with 10 req/min, 100 req/day
- Add GDPR-compliant account deletion endpoint with data export

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…codebase

- Replace predictable Math.random() IDs with crypto.randomUUID() in:
  - yula-store.ts (memory, conversation, message, PAC IDs)
  - import-flow.tsx, import-uploader.tsx, import/page.tsx
  - toast.tsx
- Update import-parsing tests to match new UUID format

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…leak

- Add memory ownership verification (verifyMemoryOwnership) to all
  mutation routes: update, delete, bulk-delete, feedback, reinforce
- Add redirect URL domain allowlist to billing checkout (prevent open redirect)
- Remove userId from SSE connection event and logs (prevent info leak)
- Add voice TTS input validation: text length limit (4096), voice allowlist,
  audio file size limit (25MB)
- Sanitize all voice error responses (remove internal error details)
- Replace fake model lists with real models in chat pages
- Replace Function() code injection with safe recursive descent parser
- Fix pricing page USAGE_UNAVAILABLE flag
- Add notification persistence to markNotificationAsRead
- Fix scheduler /execute fail-closed auth
- Fix Polar webhook fail-closed when secret missing
- Sanitize Sentry headers (filter auth/cookie/secret headers)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…itize errors

- Add FREE tier to UserTier type, ai-providers, and model gating
- FREE tier only gets gpt-4o-mini and gemini-2.0-flash
- Change all tier defaults from STARTER to FREE across chat, index, tools
- Sanitize chat streaming/generation error responses (remove internal details)
- Fix global session middleware to set userId for rate-limit endpoint
- Update tier order to include FREE level (FREE=0, STARTER=1, PRO=2, ULTRA=3)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add hasVoiceMinutes() and recordVoiceUsage() to billing service
- Wire voice quota checks into all voice endpoints (transcribe, synthesize, stream, token)
- Record voice usage after each successful API call with duration estimates
- Change new billing account default from STARTER to FREE
- Add FREE tier to tier comparison endpoint
- Use atomic updateMany with gt:0 guard for voice minute decrement

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ndpoint

- Check hasChatsRemaining and hasTokens before processing messages
- Decrement chat quota via recordChatUsage before AI call
- Record token usage via recordTokenUsage in streaming onFinish callback
- Record token usage after non-streaming generateText call
- Fix token tracking: use promptTokens/completionTokens instead of totalTokens
- Remove internal decision/memoriesUsed from non-streaming response body

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…rades to FREE

- Add token budget check before council synthesis (gpt-4o call)
- Record token usage after synthesis generation
- Fix subscription cancellation: downgrade to FREE instead of STARTER
- Reset chats and voice minutes on cancellation to FREE tier limits

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add token metering after generateReengagementMessage in execute endpoint
- Add token metering after generateReengagementMessage in poll endpoint
- Import recordTokenUsage from billing service
- Ensures all OpenAI API calls are tracked for billing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ncil

- Council streaming: add token budget check + metering for 4 parallel persona LLM calls
- PAC settings: whitelist/validate fields to prevent arbitrary data injection
- Gamification XP: restrict client-callable actions, add 5s cooldown to prevent farming

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Notifications: validate push endpoint (HTTPS URL), keys, device type
- Analytics: cap limit to 90, days to 365, validate interval values
- Prevents expensive unbounded queries and invalid subscription data

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Health endpoint: remove MCP server details from public response
- Import: add 50MB JSON payload limit to prevent OOM attacks
- Import: cap jobs list limit to 50
- Models tier endpoint: include FREE as valid tier parameter

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
EfeDurmaz16 and others added 12 commits February 12, 2026 14:47
- Health check now actually pings Qdrant via searchMemories instead of
  just checking client availability
- Added Idempotency-Key header support on message creation to prevent
  duplicate messages on client retry (10-min TTL cache)
- Rate limiter already documents in-memory limitation with startup warning

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- getCostProjection() estimates end-of-month token usage and USD cost
- maybeCreateSpendingNotification() creates in-app alerts at 80%/95% thresholds
- Deduplicates: max one spending alert notification per user per day
- Wired into chat message flow (fire-and-forget after token recording)
- Added GET /api/billing/projection endpoint
- Includes upgrade recommendations per tier when limits will be exceeded

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- GET /api/audit-log: users can view their own audit trail (GDPR Art. 15)
  Paginated, excludes sensitive fields (IP/metadata) from user view
- GET /api/consent: transparent consent status per processing category
  Shows legal basis (legitimate interest vs consent), withdrawability
- Documents data portability and right to erasure endpoints
- Covers GDPR Articles 7, 15, 17, and 20

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- GET /api/analytics/switching-cost quantifies user's platform investment
- Score 0-100 from: data volume (30), feature investment (30),
  imported data (20), memory depth (20)
- dataGravity levels: low/medium/high/very_high
- moatStrength description explains retention power
- Proves to investors: users build irreplaceable context here

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…reness

- getModelWithFallback() checks circuit breaker before calling provider
- FALLBACK_CHAIN maps each model to tier-equivalent alternatives
- OpenAI -> Anthropic -> Google -> Groq fallback ordering
- Logs warning when fallback is activated
- Throws clear error only when ALL providers are down
- Critical for 100% uptime SLA

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…or classification

- Replace getModel() with getModelWithFallback() in chat streaming/non-streaming paths
- Council service now uses centralized providers with circuit breaker awareness
- Track actualModelId for accurate billing when fallback activates
- Add 32K char input length guard to prevent abuse and runaway costs
- Add structured AI error classification (RATE_LIMITED, CONTEXT_TOO_LONG, PROVIDER_UNAVAILABLE, TIMEOUT)
- Add spending alerts to non-streaming chat path
- Remove duplicate provider instantiation from council.service.ts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- GET /api/analytics/activation: tracks 5 onboarding milestones (first_chat,
  first_memory, first_council, first_import, first_pac) with activation levels
- GET /api/analytics/retention: days since last active, churn risk assessment
  (low/medium/high/critical), stickiness ratio, re-engagement suggestions
- Time-to-first-value metric for measuring onboarding friction
- Milestones-in-first-7-days metric (PMF signal: 3+ milestones = 5x retention)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- POST /api/feedback/nps: submit NPS score (0-10) with comment, rate-limited 1/day
- GET /api/feedback/nps/summary: aggregate NPS score with promoter/detractor distribution
- POST /api/scheduler/reengage: cron-triggered re-engagement for users inactive 7+ days
  - Finds users who were active (30d) but stopped (7d), sends PAC notification
  - Deduplicates: only one re-engagement per week per user
- Audit logs NPS submissions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…aper models

- getSmartModelId() detects greetings, thanks, yes/no (under 50 chars)
- Downgrades: gpt-4o→mini, claude-sonnet→haiku, gemini-pro→flash
- Saves 40-60% API cost on trivial exchanges
- Applied to both streaming and non-streaming chat paths

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Failed Polar webhooks queued for retry (30s, 120s, 480s backoff)
- Max 3 retry attempts before dropping
- Queue capped at 100 to prevent memory leak
- Retry processor runs every 30 seconds

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…throttling

- Track velocity of FREE tier requests (burst detection, new account spam)
- Flag users with 10+ rapid bursts or 50+ requests in first 10 minutes
- Progressive penalty: extra 0.5 token drain per request for flagged users
- X-Abuse-Warning header for transparency
- Auto-cleanup of tracker every 5 minutes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace navy/terracotta/cream color scheme with neutral white/dark palette,
swap Playfair Display serif fonts for Geist sans-serif, remove glassmorphism,
gradient mesh, glow effects, and backdrop-blur throughout chat UI. Home page
now redirects authenticated users to /chat, landing page moved to (marketing)
route group. Sidebar rebranded from Aspendos to YULA with nav links for
Council and Memory.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@EfeDurmaz16 EfeDurmaz16 force-pushed the feat/clean-minimal-ui-redesign branch from 82bcdd2 to d2c59aa Compare February 12, 2026 14:13
EfeDurmaz16 and others added 15 commits February 12, 2026 17:37
…r, and clean subcomponents

- Sidebar: theme toggle (Sun/Moon), settings/billing links, sign out via dropdown menu
- Message styling: user bubbles use rounded-2xl bg-muted, centered max-w-3xl
- Mobile: sidebar overlay with backdrop, auto-close on chat select, responsive padding
- Cleaned 6 chat subcomponents: removed backdrop-blur, glassmorphism, hardcoded zinc colors

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace in-memory rate limiter with Upstash Redis for multi-instance support
- Sliding window (per-minute) + fixed window (daily) per tier
- Graceful fallback to in-memory when Redis env vars not set
- Add structured audit log for GDPR account deletion events

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Circuit breaker pattern for AI provider health with 26 tests
- OpenAPI 3.0 spec with Swagger UI at /api/docs
- Clean error boundaries with Geist font and neutral palette
- Remove old Playfair Display and DM Sans references

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Configurable retention policies per data type (archived chats, logs, sessions, memories)
- POST /api/cron/retention endpoint with secret auth for scheduled cleanup
- GET /api/cron/retention/policies endpoint to view current policies
- Fix async handler for rate-limit status endpoint

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- MODEL_PRICING map with per-1K-token costs for all providers
- calculateCost/trackUsage/getUsageSummary utility functions
- GET /analytics/usage/summary with cost breakdown by model
- Daily/weekly/monthly message counts and token averages

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…port

- Add structured JSON logger with child logger pattern for request correlation
- Add API key CRUD routes with SHA-256 hashing, permission scoping, expiry
- Add GDPR Article 20 data portability endpoint (full user data export)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…checks, error catalog

- Add XSS/injection sanitization middleware with input length limits
- Add content moderation filter (PII, prompt injection, secret detection)
- Add /ready endpoint with DB/Qdrant/Redis deep health checks
- Add API versioning middleware with sunset header support
- Add security.txt for responsible disclosure
- Add centralized error codes catalog with /api/errors endpoint
- Add chat export to Markdown/JSON formats
- Add unit tests for cost-tracker, data-retention, logger, sanitize, content-moderation
- Fix duplicate PrismaClient instances (use shared client)
- Add Prisma connection pool logging config

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…mini/Perplexity import

- Add conversation forking from any message point (unique differentiator)
- Add prompt templates system with variables, categories, and community discovery
- Add shared chat links with expiry and view tracking
- Add Gemini and Perplexity conversation import parsers
- Add feature flags system for gradual tier-based rollouts
- Add product changelog with version history
- Add integration tests for error codes, content moderation, health checks

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…oints, Sentry enhancement

- Add webhook events catalog with 12 documented event types
- Add database performance indexes for common query patterns
- Add ToS and Privacy Policy endpoints (GDPR-compliant)
- Enhance Sentry with custom user/request contexts and performance helpers
- Add unit tests for feature flags, changelog, webhook events, API versioning
- Add conversation fork endpoint in chat routes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…api-version tests

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…b queue

- Add @yula/sdk TypeScript client package with full API coverage
- Add Prometheus-compatible /metrics endpoint with business metrics
- Add response compression (gzip) and cache-control middleware
- Add per-endpoint rate limiting with sliding window
- Add idempotency key support for POST requests
- Add admin routes (user management, system overview, audit log)
- Add unified search endpoint (chat + memory hybrid search)
- Add in-process job queue with retry, backoff, and dead letter queue
- Enhance CI/CD with security scanning, migration checks, caching
- Add load testing script and database backup script
- 604 tests passing across 25 files

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… tests passing

- Distributed tracing middleware (W3C Trace Context, OpenTelemetry export)
- Rate limit analytics dashboard with per-user/endpoint/tier tracking
- Workspace/team collaboration service and routes
- Enhanced circuit breaker with bulkhead pattern, fallback, and stats
- System management routes (circuit breakers, job queue, diagnostics)
- E2E critical flow tests (57 tests covering health, security, docs, models)
- Swagger UI endpoint fixes (static import for OpenAPI spec)
- Test infrastructure: skip env validation, compression, rate limit clearing
- Fixed all test mock patterns (vi.hoisted for proper factory hoisting)
- 823 tests passing across 33 files

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…, GDPR compliance, 1033 tests

- Add AES-256-GCM field-level encryption with key rotation support
- Add HMAC-SHA256 request signing with replay attack prevention
- Add bot detection middleware with UA analysis and pattern scoring
- Add correlation context propagation via AsyncLocalStorage
- Add GDPR compliance endpoints (data export, deletion, anonymization, data summary)
- Add user deletion service with 7-day grace period and cancellation tokens
- Add secrets manager with audit logging, rotation tracking, and format validation
- Add security audit routes (secrets health, access log, posture scoring)
- Add transaction manager with retry logic, optimistic locking, and Saga pattern
- Fix vi.mock hoisting in admin, search, and GDPR tests (inline factory pattern)
- Fix E2E health test to accept 503 when DB unavailable in test environment

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@EfeDurmaz16 EfeDurmaz16 merged commit 3995fb3 into main Feb 12, 2026
5 of 7 checks passed
EfeDurmaz16 added a commit that referenced this pull request Feb 15, 2026
- Replace Vercel deploy stages with SSH-based Hetzner CX23 deployment
- Add Docker Buildx with GHA cache for image builds
- Deploy frontend (CX23 #1) and backend (CX23 #2) in parallel
- Update test env vars to use AI_GATEWAY_API_KEY
- Update web Dockerfile: remove old Clerk/Aspendos ARGs, add Yula URLs
- Fix API/agents healthchecks (bun fetch + urllib instead of curl/httpx)
- Required secrets: FRONTEND_HOST, BACKEND_HOST, DEPLOY_SSH_KEY

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant