کدِ auth داخلِ App.tsx مسیرهای نسبی صدا میزند (`/api/auth/login` و مانندش).
این مسیرها به دامنهی خودِ فرانت میروند، nginx چون آن مسیر را نمیشناسد
index.html برمیگرداند، و نتیجه پاسخِ ۲۰۰ با بدنهی HTML است — یعنی res.ok
درست به نظر میرسد و بعد res.json() با «Unexpected token '<'» میشکند.
همین الان روی math.tadrisino2.ir قابلِ بازتولید است.
در حالتِ توسعه پروکسیِ vite حلش میکند: هر /api به بکاند فرستاده میشود و
کدِ موجود بدونِ هیچ تغییری کار میکند. مقصد با VITE_API_PROXY_TARGET قابلِ
عوض کردن است، پیشفرض بکاندِ مشترک.
برای بیلدِ نهایی apiUrl() اضافه شد: fetch(apiUrl('/auth/login')) بهجای
fetch('/api/auth/login'). یا اگر روی سرور مسیرِ /api به بکاند پروکسی شود،
مسیرهای نسبی همانطور که هستند درست کار میکنند — آن راه حتی بهتر است چون
same-origin میشود و CORS از میان برمیدارد.
App.tsx دست نخورده؛ تصمیمِ اینکه کدام راه را بروند با خودشان است.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
plans() حالا features و badge میدهد؛ بندهای کارتِ اشتراک و برچسبِ بالایش
دیگر لازم نیست در کد بمانند و عوض کردنشان به دیپلویِ تازه نیاز ندارد.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
بعد از merge شدنِ PR اول، صفحههای اپ با API مقایسه شدند و چند چیز کم بود.
همهی تغییراتِ بکاند افزایشیاند، پس کدِ فعلی نمیشکند — این فقط دسترسی به
آنها را اضافه میکند.
grades() حالا lessonCount دارد: فهرستِ پایهها تا دوازدهم میرود ولی محتوا
تا نهم است، و بدونِ این عدد کاربر پایهی خالی را انتخاب میکند و صفحهی
خالی میبیند بیآنکه بفهمد چرا.
home() در هر مبحث icon و color و در هر فصل blurb میدهد، تا رنگها لازم
نباشد در کد هاردکد بمانند.
nodes.lessons(nodeId) تازه است. home() فقط شناسهی درسها را میدهد، ولی
کارتِ نقشهی مهارت عنوان، نوع (آزمون/ویدیو)، زیرنویس («۵ سوال» / «۱۲
دقیقه») و «انجام شد» میخواهد — بدونِ این، برای هر کارت یک درخواستِ intro
جدا لازم بود.
lessons.intro() متن را سهتکه میدهد: introText (توضیح)، example، و steps
(حلِ گامبهگام)؛ بهعلاوه kind و videoUrl و durationMinutes.
profile.update({ age }) هم پذیرفته میشود چون صفحهی ثبتنام سن میپرسد؛
سرور خودش به سالِ تولدِ شمسی تبدیل میکند.
هنوز هیچ فایلِ موجودی دست نخورده و پکیجی اضافه نشده. هر ۲۰ صدا در برابرِ
یک بکاندِ در حالِ اجرا تست شد.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>