92 Commits
Author SHA1 Message Date
AyrisAIandClaude Sonnet 5 d33a38de4e feat: restaurant cover photo upload
restaurants.cover_url existed in the schema and was already read by the
public menu page, but nothing could ever write it — the update endpoint
didn't accept it and there was no picker in the app. Adds coverUrl to
PATCH /restaurants/:id and a cover photo picker in the mobile account
screen, next to the existing logo picker.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-29 01:58:10 +03:00
AyrisAIandClaude Sonnet 5 df250c40e8 feat(web): public menu language pill selector; fix missing cover_url column
Public menu page now shows a TR|EN|... pill selector (styled after the
Menulio design reference) that switches category/item text to the AI
translations added via the mobile app, falling back to Turkish for
anything not yet translated.

Also adds a migration for restaurants.cover_url, which was referenced by
existing code but was missing from the live database — the public menu
page was silently forcing cover photos to null on every restaurant.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-29 01:55:26 +03:00
AyrisAIandClaude Sonnet 5 6ec4631e82 feat(mobile): language management UI in account settings
Restaurant owners can now enable/disable AI-translated menu languages
(EN/DE/AR/RU/FR) from the account screen, calling the new
/restaurants/:id/languages endpoints. Turkish stays as the fixed base
language; adding a language triggers a full AI translation pass, removing
one just hides it (translations are kept for a fast re-enable).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-29 01:53:45 +03:00
AyrisAIandClaude Sonnet 5 00195ae7d7 feat(api): AI-powered multi-language menu translation
Adds enabled_languages on restaurants and translations JSONB on menu
categories/items. New /restaurants/:id/languages endpoints bulk-translate
the full menu via Gemini/GPT-4o-mini (reusing the ai-scanner dual-provider
pattern) when a language is enabled. New categories/items are auto-
translated in the background into any already-enabled languages.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-29 01:46:19 +03:00
AyrisAI 739de7de5c feat(web): add missing qr-3/qr-8/qr-9 stand SVG templates
QR_STAND_PRESETS (packages/shared) references qr-1..qr-9 (skipping
qr-7), but apps/web/public only had qr-1,2,4,5,6.svg — qr-3, qr-8,
and qr-9 404'd wherever the raw preset list renders before/instead of
a DB-driven override. Built to match the existing qr-1.svg structure
(layer-background/layer-icons/qr-placeholder/layer-texts, same 400x650
canvas, QR box at translate(90,215) 220x220 — verified this aligns
with QrStandGeneratorClient's hardcoded 33.08%/55% overlay position),
using each preset's own color palette from qr-stands.ts.
2026-08-29 01:21:05 +03:00
AyrisAI 1f8195ff67 feat: admin auth, web menu template studio, live text editing & Ayris Tech footer backlink 2026-08-23 01:45:00 +03:00
AyrisAI e7ba6c7807 feat(qr): complete QR studio, dynamic google fonts, mouse canvas drag, and template sync 2026-08-22 16:00:30 +03:00
AyrisAI ae2386eacf feat(mobile): integrate Instagram/Canva style interactive QR Canvas Studio with touch drag, rotate, badge boxes, shadows and dynamic layers 2026-08-21 01:24:17 +03:00
AyrisAI d00b45ce72 feat(mobile): integrate QrTemplate9 Vintage Table Menu with 9.jpeg background and live editing 2026-08-21 01:19:04 +03:00
AyrisAI 102a9a744b feat(mobile): integrate QrTemplate8 Emerald & Gold Special with 8.jpeg background and live editing 2026-08-21 01:10:40 +03:00
AyrisAI b0645c0ac3 feat(mobile): replace blocking modal with inline live inspector for instantaneous visual editing feedback 2026-08-21 01:04:03 +03:00
AyrisAI 2c3599839b feat(mobile): add QrTemplate6 Stonehearth Grill, modal text editor and vertical positioning (offsetY) controls 2026-08-21 01:00:29 +03:00
AyrisAI 2530ab4005 feat(mobile): add multiline text with Enter, per-text independent font selection and font size controls 2026-08-21 00:55:44 +03:00
AyrisAI b72846bd91 feat(mobile): integrate QrTemplate5 with 5.png background image and dynamic texts 2026-08-21 00:52:26 +03:00
AyrisAI d2846ed628 feat(mobile): add QrTemplate4 Crimson Petal, support full Turkish characters on all system fonts and templates 2026-08-21 00:41:16 +03:00
AyrisAI 4dbb68a73a feat(mobile): add full text editing, show/hide switches and font family selector for QR stands 2026-08-21 00:36:14 +03:00
AyrisAI 932c174b5f fix(mobile): resolve TSpan text overlapping in QrTemplate3 2026-08-21 00:31:17 +03:00
AyrisAI 34dd24eee2 feat(mobile): register QrTemplate2 Daily Grind and filter UI to active component templates 2026-08-21 00:30:14 +03:00
AyrisAI 8481a34e61 feat(mobile): add QrTemplate3 Pizzeria, fix PDF export for component system 2026-08-21 00:25:44 +03:00
AyrisAI ccd8c90267 fix(mobile): decode XML entities for react-native-svg text rendering 2026-08-21 00:07:43 +03:00
AyrisAI 3629f98855 fix(mobile): proper nested-g depth counting for qr-placeholder replacement 2026-08-21 00:06:03 +03:00
AyrisAI dd282f3987 fix(mobile): strip XML comments before SvgXml parse to fix closing tag error 2026-08-21 00:02:37 +03:00
AyrisAI 4236ddb5ee feat: re-integrate all SVGs from svg ornekleri/ fresh, add qr-6 2026-08-20 23:59:45 +03:00
AyrisAI c7e4832441 fix(mobile): do not mutate SVG attributes, only replace qr-placeholder group 2026-08-20 23:58:21 +03:00
AyrisAI fa50e73198 fix(mobile): inject QR directly into SVG XML for pixel-perfect placement 2026-08-20 23:56:37 +03:00
AyrisAI 808097377d feat(qr-stands): add qr-5 L'Atelier Bistro Fine Dining template 2026-08-20 23:50:30 +03:00
AyrisAI 01c9f5f195 feat(mobile): render exact SVG vector templates in mobile QR stand screen 2026-08-20 23:43:26 +03:00
AyrisAI f768b92873 feat(qr-stands): clean SVG template renderer with exact QR placement and no redundant overlays 2026-08-20 23:39:56 +03:00
AyrisAI eb0b5d1886 feat(qr-stands): add qr-2.svg preset from user code 2026-08-20 23:36:01 +03:00
AyrisAI 38fd0dd030 feat(qr-stands): activate user provided qr-1.svg and qr-4.svg 2026-08-20 23:34:57 +03:00
AyrisAI 18396f3b99 fix(qr-stands): restore exact user-provided qr-1.svg alongside qr-4.svg 2026-08-20 23:31:54 +03:00
AyrisAI edb7af9288 feat(qr-stands): add flat vector qr-1.svg urban preset 2026-08-20 23:30:04 +03:00
AyrisAI a0cb04b2c6 feat(qr-stands): set qr-4 as exclusive vector stand template 2026-08-20 23:25:19 +03:00
AyrisAI 4ce6505a4d feat(qr-stands): add custom-svg-3 preset with user provided SVG stand code 2026-08-20 19:03:18 +03:00
AyrisAI 8efb5a9ff6 fix: render true SVG template vector graphic as stand background 2026-08-20 18:55:21 +03:00
AyrisAI 0a2aae68db feat: add qr-2.svg template preset (Classic Bistro QR Stand 2) 2026-08-20 18:49:43 +03:00
AyrisAI 984a41d0e5 refactor: simplify QR stand presets to single urban qr-1.svg template 2026-08-20 18:44:44 +03:00
AyrisAI 04863c8a78 feat: add qr-1.svg template integration for QR stand generator 2026-08-20 18:43:15 +03:00
AyrisAI e63de8584d style(mobile): render 1:1 pixel-perfect Urban Burger tabletop plaque layout 2026-08-20 18:28:23 +03:00
AyrisAI 3a15dd15b9 feat(mobile): build native in-app QR Stand Generator with theme switcher & A5 PDF / PNG exporter 2026-08-20 18:25:20 +03:00
AyrisAI bf44bf3e9d fix(docker): resolve pnpm v10 ERR_PNPM_IGNORED_BUILDS in Dockerfile 2026-08-20 18:22:36 +03:00
AyrisAI d396cbb221 feat: implement Tabletop QR Stand Generator with high-res PNG and print-ready A5 PDF export 2026-08-20 18:16:49 +03:00
AyrisAI 54a27903c8 chore: remove confidence score step from AI menu scanner flow 2026-08-20 18:03:10 +03:00
AyrisAI 3f326fa407 feat: allow updating custom menu slug with format validation, uniqueness checking and active cache sync 2026-08-20 17:58:42 +03:00
AyrisAI e7d0bcc505 feat: implement DELETE /restaurants/:id endpoint and mobile UI danger zone for restaurant deletion 2026-08-20 17:44:55 +03:00
AyrisAI 5103322fa1 feat: dynamically fetch live Cloudflare SSL TXT verification records in GET /domains endpoint 2026-08-20 17:35:23 +03:00
AyrisAI 8adec100af feat: render CNAME and Cloudflare SSL TXT verification instructions with copy buttons in mobile app domain settings 2026-08-20 17:33:14 +03:00
AyrisAI 5cbd80326f feat: setup Supabase Storage bucket for restaurant assets and add mobile upload helper 2026-08-20 17:30:22 +03:00
AyrisAI 5122ec24fc fix: revert to stable Next.js 15 and add @swc/helpers to dependencies for Docker standalone runtime 2026-08-20 17:24:40 +03:00
AyrisAI b950a31e3b fix: move @import rule to top of globals.css to satisfy PostCSS specification 2026-08-20 17:20:22 +03:00