دور آتیش
یه نقطه برای جمع شدن، حرف زدن، تجربه کردن و ساختن چیزی مشترک.
{texts.events.invitePreviousGuestsDescription}
- -{texts.common.emptyChoice}
- ) : ( - filteredAttendees.map((attendee) => ( -{texts.errors.codes.REVIEW_WINDOW_EXPIRED}
- ) : null} - - {isLoading ?{texts.reviews.loading}
: null} - - {!isLoading && reviews.length === 0 ? ( -{texts.reviews.eventEmptyTitle}
-{texts.reviews.eventEmptyHint}
-{texts.reviews.shareExperienceTitle}
-{texts.errors.codes.HOST_REPLY_WINDOW_EXPIRED}
- ) : null} - -{texts.reviews.organizerEmptyHint}
- )} -{texts.reviews.yourRating}
-{texts.reviews.ratingOnlyHint}
-فقط شکلش عوض شده.
یه روز دور آتیش، امروز دور یه میز، یه بازی، یه کارگاه، یه اجرا یا هر چیزی که ارزش بیرون اومدن و با هم تجربه کردن داشته باشه.
-
-قبیله برای همین جمع ها ساخته شده
آدمها همیشه دنبال آدمهای خودشون بودن؛ آدمهایی که یه چیز مشترک دارن. یه علاقه، یه کنجکاوی، یه مهارت، یه سلیقه یا حتی فقط حالوهوای یه شب.
-یه نقطه برای جمع شدن، حرف زدن، تجربه کردن و ساختن چیزی مشترک.
بهونهها عوض شدن، ولی نیاز به جمع هنوز همونه.
خیلی از تجربهها بین چند صفحه، پیام، لینک پرداخت و گروه پراکنده میشن. خیلیها هم اصلاً نمیفهمن دوروبرشون چه خبره.
قبیله جاییه برای پیدا کردن و تجربه کردن رویدادهای حضوری. میتونی ببینی این دور و برا چه خبره، یه تجربه تازه پیدا کنی، جات رو توی یه جمع نگه داری و اگه چیزی برای ساختن داری، خودت میزبان بشی.
-یه چیزی یاد بگیری و آدمهایی رو ببینی که همون کنجکاوی رو دارن.
یه شب معمولی رو به یه خاطره مشترک تبدیل کنی.
چیزی رو ببینی که شاید توی مسیر معمول روزمره بهش نمیرسیدی.
چیزی که هنوز امتحانش نکردی و شاید بخوای دوباره برگردی سراغش.
گاهی چهارشنبهست و فقط میخوای ببینی آخر هفته چه خبره. گاهی مدتهاست دلت میخواد چیزی رو امتحان کنی ولی کسی رو پیدا نکردی که باهات بیاد.
قبیله کمک میکنه ثبتنامها بین پیامها گم نشن، پرداختها یکجا بمونن و ظرفیت، مهمانها و فهرست انتظار قابل مدیریت باشن.
قبیله روی صفحه شروع میشه، اما چیزی که برای ما مهمه بیرون از صفحه اتفاق میافته.
رشد وقتی ارزش داره که تجربه آدمهایی که وارد این جمع میشن خراب نشه.
گاهی چیزی که از یه رویداد با خودت میبری فقط چیزی نیست که یاد گرفتی یا دیدی؛ آدمهاییه که اونجا پیدا کردی.
باید بدونی کجا میری، برای چی میری، چه چیزی منتظرته و چقدر پرداخت میکنی.
هم مهمان باید بدونه پشت یه رویداد چه کسیه، هم میزبان باید بدونه چه کسانی ثبتنام کردن.
- یه کارگاه، یه بازی، یه اجرا، یه سفر، یه دورهمی یا هر چیزی که فکر میکنی بهتره با چند نفر اتفاق بیفته.
-
- تو تجربه رو بساز. قبیله ثبتنام، پرداخت و مهمانها رو جمعوجور میکنه.
-
- پر شدن ظرفیت همیشه یعنی پر شدن صندلیها نیست. گاهی مهمان چند روز قبل ثبتنام کرده و روز برنامه یادش میره که جایی منتظرشه. -
-قبیله قبل از رویداد یادش میاندازه.
- -رویداد «شب بازی» فردا ساعت ۱۹ شروع میشه. زمان و جزئیات رویدادت رو یه بار دیگه ببین.
- قبیله · همین حالا -قبیله بخشهای تکراری مسیر رو مرتب نگه میداره تا تو روی خود تجربه تمرکز کنی.
- -زمان، مکان، ظرفیت، قیمت و همه چیزهایی که مهمان باید بدونه یکجاست.
-میدونی کی قطعی شده، کی هنوز پرداخت نکرده و وضعیت هر رزرو چیه.
-وقتی ظرفیت دوباره آزاد بشه، نفر بعدی میتونه فرصت ثبتنام پیدا کنه.
-فهرست مهمانها جلوی چشمته و حضور مهمانهای قطعی رو ثبت میکنی.
-میتونی آدرس دقیق رو فقط به کسایی نشون بدی که رزرو قطعی دارن.
-برای رویدادهای پولی کد تخفیف درصدی یا مبلغ ثابت بساز و محدودیتش رو خودت تعیین کن.
-تنظیمات غیر حساس رو میتونی تغییر بدی، تا حد امکان موقع ثبت و تایید نهایی دقت کن.
-برای فهمیدن اینکه چه خبره لازم نیست پنج جا رو باز کنی.
- -ثبتنام، حضور، فهرست انتظار، تخفیف، نظرها و وضعیت مالی، همه کنار همن.
- رویدادم رو میسازم -از فروش موفق رویداد
- -احراز هویتت رو کامل کن تا امکان میزبانی فعال بشه.
موضوع، زمان، مکان، قیمت و ظرفیت رو مشخص کن.
صفحه رویدادت آماده میشه و میتونی لینکش رو هرجا جمعت هست بفرستی.
قبیله ثبتنامها رو مرتب نگه میداره؛ تو تجربه رو بساز.
قبل از انتشار، این چندتا چیز رو روشن کن.
- -- شاید الان فقط یه موضوع توی ذهنت داری؛ یه بازی، یه چیزی که بلدی یا یه تجربه که فکر میکنی چند نفر دیگه هم باید امتحانش کنن. -
- اولین رویدادم رو میسازم -گاهی یک نمایشگاه، یک اجرای زنده یا یک گفتوگوی ساده بهانهای میشود برای بیرون آمدن از روزمرگی، دیدن چیزی تازه و پیدا کردن آدمهایی که همان چیزهایی را دوست دارند که تو دوست داری.
- -رویدادهای هنر و فرهنگ که الان یا بهزودی برگزار میشوند.
-خیلی قبلتر از گالری، سالن اجرا، سینما و کافه هم آدمها دور داستان، موسیقی، تصویر و روایت جمع میشدند. شکل این جمعها عوض شده، اما میل ما به تجربه کردن هنر کنار دیگران هنوز همان است.
-امروز ممکن است این جمع دور یک نمایشگاه عکاسی شکل بگیرد، فردا در یک سالن کوچک تئاتر و هفته بعد در یک کافه برای شنیدن شعر، دیدن فیلم یا حرف زدن درباره یک کتاب.
-گاهی برای دیدن یک نمایشگاه میروی و با هنرمندی آشنا میشوی که تا دیروز اسمش را هم نشنیده بودی. گاهی برای یک اجرای زنده بلیط میگیری و چند ساعت کنار آدمهایی قرار میگیری که سلیقهای نزدیک به تو دارند. بعضی وقتها هم فقط از سر کنجکاوی وارد یک جمع میشوی و با چیزی روبهرو میشوی که تا قبل از آن نمیشناختی.
- -قرار نیست همیشه دلیل بزرگی برای بیرون رفتن داشته باشیم. گاهی فقط میخواهی شب شبیه شبهای قبل نباشد؛ چیزی ببینی که قبلاً ندیدهای، موسیقی متفاوتی بشنوی، درباره موضوعی حرف بزنی که در زندگی روزمره کمتر فرصت حرف زدن دربارهاش پیش میآید یا با آدمهایی روبهرو شوی که همان چیزها برایشان جالب است.
-رویدادهای هنری و فرهنگی میتوانند فرصتی باشند برای کشف تجربههای تازه، آشنا شدن با آثار و آدمهای جدید، فاصله گرفتن از برنامههای تکراری و پیدا کردن علاقههایی که شاید تا امروز فرصتی برای امتحان کردنشان نداشتهای.
- -بعضی وقتها یک شب خوب فقط با این جمله شروع میشه: «بریم ببینیم چه خبره.»- -
نه. برای رفتن به یک نمایشگاه لازم نیست نقاش باشی، برای شرکت در شب شعر لازم نیست شاعر باشی و برای یک نشست سینمایی هم لازم نیست تاریخ سینما را از بر باشی.
-بخش زیادی از رویدادهای هنر و فرهنگ برای آدمهایی ساخته میشوند که فقط علاقهمند یا کنجکاوند. اگر یک رویداد نیاز به دانش، مهارت یا پیشنیاز خاصی داشته باشد، برگزارکننده آن را در توضیحات رویداد مشخص میکند.
- -حتماً لازم نیست برای هر تجربهای از قبل همراه داشته باشی. خیلی از رویدادها محیط طبیعیتری برای آشنا شدن با آدمهای تازه هستند، چون کسانی که آنجا حضور دارند از قبل یک نقطه مشترک دارند: همه برای دیدن، شنیدن یا تجربه کردن یک موضوع مشخص آمدهاند.
-لازم نیست حتماً با کسی دوست شوی یا وارد گفتوگوی طولانی شوی. حتی حضور در یک جمع تازه، بدون هیچ انتظار دیگری، میتواند تجربه متفاوتی باشد.
- -اول از خودت بپرس این بار دنبال چه حالوهوایی هستی. میخواهی چیزی ببینی یا چیزی بسازی؟ دنبال یک اجرای زندهای یا یک جمع کوچک برای گفتوگو؟ دوست داری چند ساعت آرام در یک نمایشگاه بگردی یا در تجربهای مشارکتی حضور داشته باشی؟
-موضوع رویداد، تصاویر، توضیحات برگزارکننده، زمان، محل برگزاری، قیمت و نوع برنامه میتوانند به انتخاب کمک کنند. اما بعضی وقتها هم لازم نیست انتخاب را خیلی پیچیده کنی.
- -بزرگ بودن یک رویداد الزاماً به معنی بهتر بودن آن نیست. گاهی بهترین تجربهها در یک جمع ده یا بیست نفره اتفاق میافتند؛ جایی که میتوانی راحتتر با برگزارکننده یا آدمهای دیگر ارتباط بگیری و حس کنی واقعاً بخشی از آن جمع هستی.
- -برگزارکننده یا همان میزبان، بخش مهمی از تجربه هر رویداد است. او تصمیم گرفته چه آدمهایی را دور چه موضوعی جمع کند، برنامه چطور پیش برود و شرکتکنندگان قرار است چه چیزی را تجربه کنند.
-پیش از انتخاب یک رویداد میتوانی اطلاعات برگزارکننده، توضیحات برنامه و رویدادهایی را که قبلاً برگزار کرده بررسی کنی تا تصویر روشنتری از تجربه پیش رو داشته باشی.
-یک نمایشگاه کوچک، اجرای مستقل، نشست پانزدهنفره یا یک تجربه تازه؛ برای شروع لازم نیست جمع بزرگی داشته باشی. تو چیزی میسازی که ارزش دور هم جمع شدن دارد. قبیله کمک میکند آدمها پیدایش کنند.
-نمایشگاه، گالریگردی، تئاتر، موسیقی و اجرای زنده، شب شعر، رونمایی کتاب، نشست فرهنگی، کارگاه هنری، موزهگردی و تجربههای مستقل و ترکیبی.
-معمولاً نه. اگر یک رویداد پیشنیاز خاصی داشته باشد، برگزارکننده آن را در توضیحات مشخص میکند.
-نه. بعضی رایگاناند و بعضی با تهیه بلیط برگزار میشوند. شرایط هر رویداد در صفحه خودش مشخص است.
-بله. خیلی از آدمها به تنهایی وارد یک رویداد میشوند و یک علاقه مشترک میتواند شروع طبیعیتری برای ارتباط باشد.
-بله. یک نشست کوچک، اجرای مستقل یا دورهمی محدود هم میتواند یک رویداد باشد.
-متن نمونه مقاله برای تست Playwright.
', -} diff --git a/e2e/fixtures/consumerAuth.ts b/e2e/fixtures/consumerAuth.ts deleted file mode 100644 index e027b42..0000000 --- a/e2e/fixtures/consumerAuth.ts +++ /dev/null @@ -1,166 +0,0 @@ -import { expect, type Page, type Route } from '@playwright/test' - -export const CONSUMER_MOBILE = '09123456789' -export const CONSUMER_MOBILE_PERSIAN = '۰۹۱۲۳۴۵۶۷۸۹' -export const CONSUMER_OTP = '1234' -export const DEFAULT_BIRTH_DATE_ISO = '1991-03-21' - -export const jsonOk = (data: unknown) => ({ - status: 200, - contentType: 'application/json', - body: JSON.stringify({ success: true, data }), -}) - -export const installApiCatchAll = async (page: Page) => { - await page.route('**/api/v1/**', (route) => - route.fulfill( - jsonOk({ - items: [], - meta: {}, - response: { page: 1, pageSize: 20, totalItemsCount: 0, totalPages: 1 }, - }) - ) - ) - // Guest home client-refetches these; catch-all object shapes crash render (.map/.filter). - await page.route('**/api/v1/discovery/cities**', (route) => - route.fulfill(jsonOk([{ id: 1, provinceId: 1, name: 'تهران', slug: 'tehran' }])) - ) - await page.route('**/api/v1/discovery/categories**', (route) => route.fulfill(jsonOk([]))) - await page.route('**/api/v1/discovery/home-feed**', (route) => - route.fulfill(jsonOk({ popular: [], categoryPreviews: [], cityPreviews: [] })) - ) -} - -export const createConsumerAccessToken = (status: 'active' | 'pending' = 'active') => { - const payload = Buffer.from( - JSON.stringify({ - sub: 'user-id', - role: 'user', - sessionId: 'session-id', - status, - exp: Math.floor(Date.now() / 1000) + 3600, - }) - ).toString('base64url') - - return `header.${payload}.signature` -} - -export const mockRequestOtp = async (page: Page, purpose: 'login' | 'register', onRequest?: (body: { mobile?: string }) => void) => { - await page.route('**/api/v1/auth/request-otp', async (route) => { - const body = (route.request().postDataJSON() ?? {}) as { mobile?: string } - - onRequest?.(body) - await route.fulfill(jsonOk({ purpose, expiresIn: 120, alreadySent: false })) - }) -} - -export const mockVerifyOtp = async ( - page: Page, - options: { - status: 'active' | 'pending' - onRequest?: (body: Record